SLAM+語音機器人DIY系列:(三)感知與大腦——2.帶自校準九軸數據融合IMU慣性傳感器

摘要                                              

在個人想象中機器人首先應該能自由的走來走去,而後應該能流利的與主人對話。朝着這個理想,我準備設計一個能自由行走,而且能夠與人語音對話的機器人。實現的關鍵是讓機器人能經過傳感器感知周圍環境,並經過機器人大腦處理並輸出反饋和執行動做。本章節涉及到的傳感器有激光雷達、IMU、輪式里程計、麥克風、音響、攝像頭,和用於處理信息的嵌入式主板。關於傳感器的ROS驅動程序開發和在機器人上的使用在後面的章節會展開,本章節重點對機器人傳感器和嵌入式主板進行講解,主要內容:html

1.ydlidar-x4激光雷達python

2.帶自校準九軸數據融合IMU慣性傳感器nginx

3.輪式里程計與運動控制算法

4.音響麥克風與攝像頭django

5.機器人大腦嵌入式主板性能對比ubuntu

6.作一個能走路和對話的機器人centos



2.帶自校準九軸數據融合IMU慣性傳感器

IMU是慣性測量單元的簡稱,用於測量物體的三軸姿態角(rollpitchyaw)、三軸加速度(acc_xacc_yacc_z)、三軸角速度(w_xw_yw_z)等。IMU慣性測量單元在製造過程當中,因爲物理因素,致使IMU慣性測量單元實際的座標軸與理想的座標軸之間會有必定的誤差,同時三軸加速度、三軸角速度、三軸磁力計的原始值會與真實值有一個固定的誤差等。這裏提到的自校準就是要經過給的補償值來減少或消除座標軸的誤差及原始值的固定誤差,也就是所謂的IMU內部標定。若是將IMU安裝到機器人或攝像頭上後,須要知道IMU與機器人或攝像頭的相對位置,這個時候進行的標定就是所謂的IMU外部標定。特此說明,這裏提到的自校準指IMU內部標定。這裏提到的九軸數據融合,是指經過三軸加速度、三軸角速度數據融合獲得更加精準的三軸加速度、三軸角速度,同時經過三軸加速度、三軸角速度、三軸磁力計數據融合獲得測量物體的三軸姿態角。選用一款帶自校準九軸數據融合的IMU,能很好的提高機器人的SLAM建圖與導航性能,同時下降機器人上軟件的開發難度。出於這一點,咱們選用了一款基於MPU9250.帶自校準九軸數據融合IMU,如圖6網絡

 

(圖6)帶自校準九軸數據融合IMU慣性傳感器架構

2.1.自校準                  

IMU偏差模型:ide

偏差主要來自三部分:噪聲(bias and noise)、尺度偏差(scale error)、軸誤差(axis misalignment)。經過對這些偏差的補償來實現IMU測量數據的校準,校準的數學表達如圖7

(圖7校準的數學表達

噪聲部分考慮零偏Bias和高斯白噪聲noise。零偏Bias也叫隨機遊走,通常是由傳感器內部構造、溫度變換多方面綜合影響的結果;高斯白噪聲noise,通常是因爲AD轉換引發的一種外部噪聲。

尺度偏差部分,來自於AD轉換中量化過程,好比採樣電壓值1V對應acc(x)軸的1.4g,一樣採樣電壓值1V對應acc(y)軸的1.6g,也就是說不通的軸上AD轉換量化是不一樣的。

軸誤差部分,三軸加速度、三軸角速度、三軸磁力計的座標軸嚴格上都不是正交座標系。可是最後咱們指望的使用值默認是在正交座標系下測量的,因此就須要將在非正交座標系測量的原始值變換到正交座標系中。

加速度校準:

校準過程當中須要判斷傳感器是否處於靜止狀態,其實很簡單,在時間t內(t通常取50s),分別計算acc(x)acc(y)acc(z)三軸數據的方差var[acc(x)]var[acc(y)]var[acc(z)],若是var[acc(x)]+var[acc(y)]+var[acc(z)]小於閾值HH爲經驗值,須要經過實驗法肯定),就判斷傳感器靜止。

在靜止狀態下,加速度計測量值的二範數等於當地重力加速度g。在這一約束條件下,利用最小二乘法進行優化問題求解,因爲加速度採樣值取得是一個小窗口採樣區間的平均值,因此能夠忽略白噪聲Na的影響,即可以求解出待標定參數TaSaBa。在靜止狀態取一串加速度採樣值共M個,構建代價函數如圖8,對代價函數進行最優化求解便可,能夠選用ceresg2o等優化工具來完成具體的優化計算過程。

(圖8)代價函數

角速度校準:

角速度校準分爲兩部分:用Allan方差校準零偏Bias、用最優化方法求解尺度偏差Sw和軸誤差Tw。加速度校準中須要用到加速度校準信息,因此加速度校準好壞影響整個IMU校準。

同加速度校準同樣,也須要在靜止狀態下采集角速度,簡便的作法是在採集加速度的同時也採集角速度。利用角速度採樣值計算Allan方差,Allan方差計算比較繁瑣就不展開,請直接參考wiki百科:https://en.wikipedia.org/wiki/Allan_variance

Allan方差中共有5個噪聲參數:量化噪聲Q、角度隨機遊走N、零偏B、角速度隨機遊走K、角速度斜坡R。經過圖9的步驟即可以求出角速度的零偏Bw,因爲角速度採樣時是一個小窗口採樣區間的平均值,因此能夠忽略白噪聲Nw的影響。

(圖9Allan方差校準零偏Bias

角速度的零偏Bw校準完後,將零偏值Bw帶入,接着校準尺度偏差Sw和軸誤差Tw。挑選加速度校準過程當中兩靜止狀態夾雜的動態片斷,這樣通過校準後的靜態值的平均值可做爲acc_calib向量的起始值acc_calib(k-1)和旋轉完成後的結束值acc_calib(k)

經過圖10的步驟即可以求出角速度的尺度偏差Sw和軸誤差Tw

(圖10求角速度的尺度偏差Sw和軸誤差Tw

磁力計校準:

與加速度校準比較相似,磁力計測量值的二範數等於當地磁場強度m,不一樣的是磁力的測量不須要在靜止狀態。在這一約束條件下,利用最小二乘法進行優化問題求解,因爲磁力採樣值取得是一個小窗口採樣區間的平均值,因此能夠忽略白噪聲Nm的影響,即可以求解出待標定參數TmSmBm。構建代價函數如圖11,對代價函數進行最優化求解便可。

(圖11代價函數

因爲須要用加速度/磁力計進行融合,須要將磁力計測量值變換到加速度座標系。變換矩陣Tm2a求解比較簡單,經過多組關聯的加速度acc_calib和磁力計mag_calib,經過最小二次法優化求解,能夠求出變換矩陣Tm2a。這裏基於一個假設,磁力向量與加速度向量成固定夾角,也就是兩向量的點乘爲一個常數C,利用這個約束能夠構建代價函數如圖12,對代價函數進行最優化求解便可。

(圖12代價函數

IMU校準軟件流程圖:

(圖13代價函數

IMU手動校準與自校準對比:

一般的校準過程是,將IMU接入PC端,手動將IMU置不一樣的狀態,PC端經過採集這些數據,完成校準。另外一種校準過程是,將校準算法內置在IMU模塊上的MCU中,在IMU工做的過程當中實時採集數據,並自動完成校準,不須要人爲的干預。本文介紹的MPU9250模塊就屬於自校準這一方式。手動校準與自校準對好比圖14

(圖14手動校準與自校準對比

2.2.九軸數據融合             

IMU的校準完成後,就能夠利用校準後的九軸數據進行數據融合,獲得IMU的空間姿態了。

MPU9250模塊包括三軸加速度計、三軸陀螺儀和三軸磁力計。由於加速度/磁力計具備高頻噪聲,也就是說它們的瞬時值不夠精確,解算出來的姿態會震盪,但長期來看姿態方向是對的。而陀螺儀具備低頻噪聲,即每一個時刻的獲得的角速度是比較精確的,使用積分就能獲得旋轉角度(姿態),可是積分會累積偏差,所以積分到後面姿態就不對了,也就是漂移現象。 加速度/磁力計和陀螺儀在頻域上的特性互補,能夠融合這三種傳感器的數據,提升精度和系統的動態特性。

因爲歐拉角在求解姿態時存在萬向節鎖,不能用於全姿態解算;故採用四元數Quaternion進行姿態解算。經常使用的九軸數據融合算法包括:高低通互補濾波、擴展卡爾曼濾波EKFMahony濾波。在實際狀況中根據不一樣的用途進行選擇,這裏對這三種濾波方法進行原理性的介紹。

高低通互補濾波:

(圖15)高低通互補濾波的過程

高低通互補濾波的過程如圖15,經過加權係數融合陀螺儀估計姿態和加速度/磁力計融合姿態,達到對陀螺儀低通濾波、對加速度/磁力計高通濾波的效果。

擴展卡爾曼濾波EKF

和高低通互補濾波過程相似,也是分爲估計、校訂。

(圖16EKF濾波的過程

EKF濾波的過程如圖16,想要了解EKF濾波的詳細推導請直接參考wiki百科:https://en.wikipedia.org/wiki/Extended_Kalman_filter。估計過程當中,利用陀螺儀積分推算出估計姿態;在校訂過程當中,計算估計姿態下的加速度/磁力計,再用在實際姿態下測量的加速度/磁力計按照EKF校訂方程進行校訂。

Mahony濾波:

一樣,Mahony濾波也分爲估計、校訂。主要使用了PI控制思想。

(圖17Mahony濾波的過程

Mahony濾波的過程如圖17。在估計過程當中,一樣利用陀螺儀積分推算出估計姿態;在校訂過程當中,計算估計姿態下的加速度/磁力計,測量在實際姿態下的加速度/磁力計,這兩個向量叉乘即可以獲得姿態偏差e,姿態偏差e經過PI控制過程能夠實現對陀螺儀測量角速度的補償,利用補償後的角速度從新估計出來的姿態,就是濾波後的姿態了。

(圖18MPU9250模塊九軸數據融合後的效果

MPU9250模塊九軸數據融合後的效果如圖18,圖中左側顯示的分別是加速度、角速度、磁力計的實時數據,圖中右側顯示的是融合後的姿態實時數據,能夠看出融合後的姿態仍是很是平穩的。

2.3.在機器人中使用IMU                                

19在機器人中使用MPU9250-IMU模塊

MPU9250-IMU模塊經過串口與機器人相鏈接,機器人中經過運行IMUROS驅動,來實現讀取串口的IMU數據和將IMU數據發佈到/imu這個主題,這樣機器人上的其它節點就能夠經過訂閱/imu主題來獲取IMU數據了。關於IMUROS驅動在機器人上的具體使用,將在後面的章節中具體講解。

後記               

------SLAM+語音機器人DIY系列【目錄】快速導覽------

第1章:Linux基礎

1.Linux簡介

2.安裝Linux發行版ubuntu系統

3.Linux命令行基礎操做

第2章:ROS入門

1.ROS是什麼

2.ROS系統總體架構

3.在ubuntu16.04中安裝ROS kinetic

4.如何編寫ROS的第一個程序hello_world

5.編寫簡單的消息發佈器和訂閱器

6.編寫簡單的service和client

7.理解tf的原理

8.理解roslaunch在大型項目中的做用

9.熟練使用rviz

10.在實際機器人上運行ROS高級功能預覽

第3章:感知與大腦

1.ydlidar-x4激光雷達

2.帶自校準九軸數據融合IMU慣性傳感器

3.輪式里程計與運動控制

4.音響麥克風與攝像頭

5.機器人大腦嵌入式主板性能對比

6.作一個能走路和對話的機器人

第4章:差分底盤設計

1.stm32主控硬件設計

2.stm32主控軟件設計

3.底盤通訊協議

4.底盤ROS驅動開發

5.底盤PID控制參數整定

6.底盤裏程計標

第5章:樹莓派3開發環境搭建

1.安裝系統ubuntu_mate_16.04

2.安裝ros-kinetic

3.裝機後一些實用軟件安裝和系統設置

4.PC端與robot端ROS網絡通訊

5.Android手機端與robot端ROS網絡通訊

6.樹莓派USB與tty串口號綁定

7.開機自啓動ROS節點

第6章:SLAM建圖與自主避障導航

1.在機器人上使用傳感器

2.google-cartographer機器人SLAM建圖

3.ros-navigation機器人自主避障導航

4.多目標點導航及任務調度

5.機器人巡航與現場監控

第7章:語音交互與天然語言處理

1.語音交互相關技術

2.機器人語音交互實現

3.天然語言處理雲計算引擎

第8章:高階拓展

1.miiboo機器人安卓手機APP開發

2.centos7下部署Django(nginx+uwsgi+django+python3)

----------------文章將持續更新,敬請關注-----------------

 

若是你們對博文的相關類容感興趣,或有什麼技術疑問,歡迎加入下面的《SLAM+語音機器人DIY》QQ技術交流羣,一塊兒討論學習^_^

關於咱們:

視頻教程:

 

https://www.bilibili.com/video/av61448040

相關文章
相關標籤/搜索