什么是IMU?
什么是IMU
IMU 一般指6軸傳感器,內部包含了3軸陀螺儀和3軸加速度計,3軸就是表示 XYZ 平面下的3個坐標軸。
3軸陀螺儀測量的是每個軸上面的角速度,精度一般為 °/s ,也就是按照這個趨勢旋轉,每秒鐘能走過的度數。
3軸加速度計測量的是每個軸所受的重力加速度,比如傳感器水平放置水平地面時,理論上只受到z軸負向的重力加速度,大小為9.8 m/s^2
現在的IMU內部基本都是兩個傳感器(陀螺儀 和 加速度計)堆疊在一起組成的,這樣做是為了讓這兩個傳感器的3軸重合。
圖示IMU原理
🚀? 水平放置水平地面時,三軸方位圖:
🚀? 傳感器姿態發生變化時,三軸方位圖:
這里假設整個傳感器經過了一次旋轉,可以看陀螺儀還是在測量每個軸上的角速度,它并不關心當前的姿態,它反饋的是瞬時的物理量,陀螺儀積分出來的角度只是我們人為根據這個物理量的特性推導而來的。
而加速度計卻有點差別,通過第一幅圖可以看到,理論上,重力加速度在z軸的負半軸上,其在xy平面并沒有分量,這時 xy軸 測得的重力加速度就是實際機器人在運動過程中產生的加速度,對它做二次積分,就可以得到理論上真實的位移。
而第二幅圖地球重力加速度仍然垂直向下,但此時3軸姿態已經發生變化(不處在水平姿態),那么重力加速度就會在三軸上投影出長短不一的重力加速度分量,這個分量在二次積分時就會帶來污染。但同時通過這個分量與三軸之間的關系,我們就可以推導出當前傳感器相對于地理坐標系的姿態。
陀螺儀工程上使用
陀螺儀測量的是角速度,單位是 °/s ,若把他當成一個連續的曲線
綠色部分的面積就是連續時域下積分出的角度,這時最理想的情況下。
在實際應用中,我們獲得的只能是離散的信號,想要通過離散信號來還原真實連續時域信號的曲線是不現實的,我們只能在固定的時間間隔下采樣得到當前的角速度,并假設在這一小段△t中是勻速運動。
代碼中的實現,最簡單的辦法就是累加
當前角度 += 當前角速度 * 采樣時間間隔
這樣也能得到基本的陀螺儀積分出來的角度。
陀螺儀零飄采集
通過上面的式子,我們大概能理解,從機器人上電就開始,直到關電后,這段時間都要不停的積分角度,那么如果傳感器數據本身有問題的話,哪怕只是一點點問題,經過長時間的積分得到的累計誤差都是非常驚人的。
陀螺儀上有一個非常常見的誤差項,叫零飄和溫漂
零飄就是機器人靜止狀態下,采集出來的角速度不是0,而是在某個值上下亂跳,去除零飄也很簡單,就是在機器人剛上電后,采集1000幀陀螺儀原始數據,然后看這1000幀數據的方差和標準差,
方差小于閾值,代表在采零飄這段時間內,機器人基本保持靜止。那么此時其標準差就是我們獲取到的零飄。
我們在積分之前,將獲取的原始數據減去零飄,然后再進行積分,那么就能大大減緩積分漂移的現象(仍不可避免)
溫漂原理相同,項目中沒考慮。
加速度計工程上應用
加速度計測量的是三軸線加速度,普通的消費級IMU,往往加速度計的高頻噪聲特別大,單獨使用加速度計一般效果都比較糟糕。
誤差類型:
軸間誤差:上面我們看到,加速度計三軸間理論是嚴格互相垂直的,但實際的傳感器是很難保證嚴格垂直安裝,比如期望是90°,實際是88°,都是很常見的,這種誤差統稱為軸間誤差。
尺度誤差:這個是傳感器內部測量不準,比如機器人朝Y軸以1m/s2的加速度超前走,實際傳感器測量的可能是 0.8m/s2
這兩個誤差都可以通過橢球擬合或6面法標定,掃地機項目中未使用標定算法。
姿態融合
前面說了,陀螺儀可以積分得出姿態角度,加速度計可以通過3軸關系得到姿態角度
陀螺儀獲得姿態角,短時間準確,長時間會漂移
加速度計獲得姿態角,短時間震蕩嚴重,長時間相對準確
那么把這兩個傳感器數據做融合,取長補短,就可以獲得相對準確的姿態角:
目前項目用的是 Mahony 算法(自適應互補濾波器),我也用EKF融合試了下,效果都非常不錯:
總結
- 上一篇: 站长们如何优化自已的新网站
- 下一篇: VO,DTO,DO,PO区别