加速度計的數據解讀


一:加速度計介紹

加速度計是用來測試線性加速度的一種傳感器,相對於電子陀螺儀,它具有長時間穩定的特點。但因為受到重力的影響,短時間內會有噪聲。關於加速度計的原理和結構,可以參考我CSDN上轉載的一篇文章:http://blog.csdn.net/lovewubo/article/details/9084291

里面的內容很詳細。本文只對從加速度計得到的數據進行解讀。數據是從國外的一個大牛博客那里得到的(那人貌似是叫SOH Madgwick),那篇博文講解了一種融合加速度計和陀螺儀的姿態解算算法,這里不討論。只是把里面的一份加速度計的數據抽取出來,分析一下為什么加速度計的讀數會是那個樣子。

 

首先說明一下,那位大牛的實驗中,把傳感器設備分別圍繞三個軸旋轉正90度,回到起始位置,再反向旋轉90度,回到起始位置。三個軸的方向是這樣定義的:

二:加速度計的輸出分析

我們對加速度計三個軸的輸出進行了描述:

從上到下,依次是X,Y,Z三個軸上的加速度數據。讓我們分析一下,為什么會產生這樣的輸出。首先看這個圖:

我將圖中用三種顏色標識了三個區域,矩形框1-3標識區域1,2-6標識區域2,7標識區域3。ok,現在開始。

其實這三個區域分別代表了三次繞不同軸旋轉的過程。第一個是繞X軸正負旋轉90度,第二個對應Y軸旋轉,第三個對應Z軸旋轉。下面逐一分析,首先看區域1,它的三個矩形分別代表了這樣三個子過程:

1 繞X軸旋轉90度

解釋如下:當繞X軸旋轉90度時,Y軸慢慢向上翹,Z軸慢慢向下靠(我擦,蠻押韻的)。當完全達到90度時,由於Y軸與重力方向剛好相反,所以Y軸的輸出是1g(1g==9.8m/s^2),而Z軸的值從原來的1逐漸減小為0。這個狀態估計保持了1秒鍾吧,對應矩形1和2之間的平坦區域

2 回到初始位置,並反向旋轉90度

解釋如下:接着當回到初始位置時,Y軸數據慢慢減小為0,而Z軸數據慢慢上升為1。然后逆向旋轉90度,Y軸慢慢減小,直至為-1,因為此時Y軸方向與重力方向一致了,而反應出來的加速度值應該是負值。而Z軸慢慢減小為0

3 回到初始位置

解釋如下:然后從逆向90度回到初始位置。此時Y軸和Z軸的數據慢慢恢復到初始值,Y軸為0,而Z軸為1

 

分析完了X軸的旋轉,其實Y軸的旋轉也是類似的,就不說了。現在說說Z軸的,因為繞Z軸旋轉時,相當於左右擺動90度,此時Z軸的輸出始終是1,而X軸和Y軸由於是正交於重力軸的,所以輸出值都是0,當然這都是在相對靜止的條件下的值。如果是將這個設備安裝在車輛上,當車左右轉彎時,X軸和Y軸的讀數可不一定是0,因為這兩個方向會受到車輛速度沖擊力的影響,這就是加速度引起的慣性力,正是借助與這個慣性力,加速度計才能測量加速度。而自然界的重力成為影響傳感器的噪聲來源,而如何消除這些噪聲,就是另外要考慮的濾波算法了。正如那位國外大牛的文章,可以用陀螺儀進行矯正。也可以參考本文最開始的CSDN上的那個鏈接里面講到的融合算法,當然也可以考慮用卡爾曼濾波,以后慢慢研究。

 三:計算傾斜角

先上圖:

我們感興趣的角度是向量R和X,Y,Z軸之間的夾角,那就令這些角度為Axr,Ayr,Azr。觀察由R和Rx組成的直角三角形:
cos(Axr) = Rx / R
cos(Ayr) = Ry / R
cos(Azr) = Rz / R
其中,R = SQRT( Rx^2 + Ry^2 + Rz^2)
通過arccos()函數(cos()的反函數)我們可以計算出所需的角度:
Axr = arccos(Rx/R)
Ayr = arccos(Ry/R)
Azr = arccos(Rz/R)

 

matlab代碼:

function AcceCalDegree
%%加速度計計算角度,這個角度是傳感器三個坐標軸的傾斜角
%%%%%%%%%%%%%%%%%%%%%%%
clc;
clear;

load('ExampleData.mat');

nCount = length(time);
Degree = zeros(nCount,3);
for i=1:nCount
    [Degree(i,1) Degree(i,2) Degree(i,3)] = GetDegreeFromAcce(Accelerometer(i,1), Accelerometer(i,2), Accelerometer(i,3));
end

figure(1);
subplot(3,1,1);plot(time, Degree(:,1));title('x軸的傾斜角度');
subplot(3,1,2);plot(time, Degree(:,2));title('y軸的傾斜角度');
subplot(3,1,3);plot(time, Degree(:,3));title('z軸的傾斜角度');

function [dx dy dz] = GetDegreeFromAcce(ax, ay, az)
%%%ax ay az代表加速度計的三個軸的讀數
%%%dxy dxz dyz分別代表在三個平面內的角度,即旋轉角度

R = sqrt(ax^2 + ay^2 + az^2);
%%計算角度
dx = acos(ax/R) * 180 / pi;
dy = acos(ay/R) * 180 / pi; 
dz = acos(az/R) * 180 / pi; %將弧度轉換為角度

從上圖中,可以直觀的看到,繞不同的軸旋轉是,重力方向與三個軸的角度變化。

四:總結

初學這些東西,如果有不對的,請指正。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM