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

来源:https://www.cnblogs.com/hiram-zhang/archive/2019/02/19/10398959.html
-Advertisement-
Play Games

摘要 在我的想象中機器人首先應該能自由的走來走去,然後應該能流利的與主人對話。朝著這個理想,我準備設計一個能自由行走,並且可以與人語音對話的機器人。實現的關鍵是讓機器人能通過感測器感知周圍環境,並通過機器人大腦處理並輸出反饋和執行動作。本章節涉及到的感測器有激光雷達、IMU、輪式里程計、麥克風、音響 ...


摘要                                              

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

1.ydlidar-x4激光雷達

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

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

4.音響麥克風與攝像頭

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

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



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誤差模型:

誤差主要來自三部分:雜訊(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》QQ技術交流群,一起討論學習^_^


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一.介紹 前一篇,寫的K8S部署環境的文章,下麵正式開始部署ASP.NET Core 項目. 二.正式部署ASP.NET Core項目 GitHub地址: https://github.com/gyw1309631798/Deploy-API. 我創建了一個ASP.NET Core 2.1 WebA ...
  • LaunchFaster 啟動器是本人近期編寫的一款windows平臺上快速啟動應用的開源工具軟體。 LaunchFaster 啟動器是一款類似於 Rolan 和 音速啟動 和 Lily 的圖標形式的快速軟體啟動器,它免費開源,程式主體由C#編寫。 Rolan 是一款非常好用的快速啟動工具,這也是我 ...
  • 我們知道容器是一個打包了應用和相關依賴的盒子,那怎麼去操控這個盒子呢? 這一篇我通過一個簡單的aspnetcore程式來加深對盒子的理解,使用之前先 安裝一下Docker的環境。 一:Docker的安裝 官方下載地址:https://docs.docker.com/install/linux/doc ...
  • 一.部署流程介紹 開發人員通過Git上傳asp.net core 項目到Gilab,並編寫好.gitlab-ci.yml , GitLab-Runner 自動拉取代碼,然後進行Build,編譯,單元測試,生成鏡像,並推送到Harbor倉庫,docker 進行測試部署,最後部署部署到K8S. 二.集群 ...
  • C# get set不提倡將域的保護級別設為 public而使用戶在類外任意操作--那樣太不OO,或者具體點說太不安全!對所有有必要在類外可見的域,C#推薦採用屬性來表達。屬性不表示存儲位置,這是屬性和域的根本性的區別。下麵是一個典型的屬性設計: 屬性提供了只讀(get),只寫(set),讀寫(ge ...
  • 一. 隱藏屬性概述 隱藏屬性也叫影子屬性,該屬性不是在.net實體類中定義的屬性,而是在EFCore模型中為該實體類型定義的屬性。這些屬性的值和狀態完全在變更跟蹤器中維護。它有二個功能:(1)當資料庫中某些欄位不想映射到實體類上公開的屬性時,隱藏屬性非常有用。(2)隱藏屬性通常是用於外鍵屬性,其中兩 ...
  • 上章節我們介紹了有關OU組織單位的日常管理,本章我們將對域用戶的創建進行簡單介紹,常規的操作方法是通過管理控制台圖形化手工創建,具體操作方法如下:1.常規管理控制台 Active Directory 管理中心:2.常規管理控制台 Active Directory用戶和電腦:3.在Active Di... ...
  • 摘要 在我的想象中機器人首先應該能自由的走來走去,然後應該能流利的與主人對話。朝著這個理想,我準備設計一個能自由行走,並且可以與人語音對話的機器人。實現的關鍵是讓機器人能通過感測器感知周圍環境,並通過機器人大腦處理並輸出反饋和執行動作。本章節涉及到的感測器有激光雷達、IMU、輪式里程計、麥克風、音響 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...