許多嵌入式系統需要跟蹤其所在的地點或位置和航向,設計人員經常將 GNSS(全球導航衛星系統)作為首選(參見“使用 GNSS 模塊快速設計位置跟蹤系統”)。然而,GPS 不能總是專門用于確定位置和航向信息,原因有多方面,首先是功耗。
GPS 系統需要消耗大量電力。許多嵌入式系統,尤其是電池供電的系統,無法負擔 100% 時間都維持 GPS 定位所需的功耗預算。此外,GPS 信號會受到阻擋,更新率較慢,且精度為 1 米 (m),這對某些應用而言可能不夠。
使用慣性測量裝置 (IMU) 對 GNSS 定位數據進行補充,則可以克服這些問題。
前一篇 IMU 文章討論了如何使用基于 MEMS 技術的相對便宜的 IMU 來確定位置和航向,請參閱“在 GPS 不足以提供精準的位置數據時使用 IMU”。但是,僅憑 IMU 傳感器數據還無法提供絕對位置。GNSS 接收器僅提供位置數據,但為了將 IMU 的相對運動數據轉換為絕對位置和航向,則需要大量軟件,其中會用到傳感器濾波、融合和二重積分。
本文討論 IMU 的嵌入式應用、各種 IMU 傳感器所提供數據的誤差來源,以及計算來自 IMU 傳感器的精準定位和航向信息所需的軟件。此外,本文還會討論STMicroelectronicsMotionFX 庫,以及如何使用該軟件將 IMU 傳感器數據轉換為嵌入式系統中的定位和航向。
IMU 如何補充 GNSS 接收器
GNSS 存在四個問題:
GNSS 信號具有很強的指向性,很容易被建筑物遮擋。因此,室內或城市混凝土峽谷深處的 GNSS 操作可能會有問題。
GNSS 接收器有幾十秒甚至更長時間的熱啟動和冷啟動時間。如果 GNSS 接收器不是連續工作(例如為了省電),則每個新位置讀數可能需要好幾秒才能獲得。
GNSS 的位置更新率被限制為每秒一次。對于涉及快速運動的嵌入式應用,該更新率不夠快。這樣的應用有很多,從虛擬現實到材料處理和機器人技術。
GNSS 精度為米級。該分辨率對于許多嵌入式應用而言太過粗糙。
IMU 提供了許多嵌入式應用所需的更精細的定位分辨率和更快的更新率。并且,和 GNSS 接收器提供絕對定位信息相反,IMU 提供距離已知起點的相對位置信息,因此這兩種位置傳感器可互為補充。IMU 的這些特點使其對于增強直接從 GNSS 接收器獲得的定位信息非常有用,請參閱“使用 GNSS 模塊快速設計位置跟蹤系統”。
IMU 在航空航天工業中的應用已有數十年歷史。然而,航空航天用精密 IMU 是基于昂貴的陀螺儀和其他大型傳感器,難以應用于對成本更敏感的系統。
現代電子 IMU 已高度集成化,可包含多種類型的傳感器——加速計、陀螺儀和磁力儀;其基于微機電系統 (MEMS) 技術,因此體積小、重量輕且相對堅固。這些新一代 IMU 可作為板安裝元件提供,經證明非常適合嵌入式應用。
IMU 可提供多種自由度 (DOF),而且與 GNSS 接收器不同,IMU 不依賴無線電信號提供定位數據。IMU 耗電量也極低,來源眾多,并具有廣泛的分辨率和精度規格可供選擇。
借助這些特性,IMU 可用于增強 GNSS 接收器模塊提供的定位信息(參見“使用 GNSS 模塊快速設計位置跟蹤系統”),但還需要大量軟件來過濾 IMU 傳感器數據,融合 IMU 內部多種類型傳感器提供的數據,并利用二重積分根據融合的傳感器數據計算位置。
IMU 誤差源
多個傳感器結合以提高精度是航空航天工業長期以來的常見做法,其中加速計和陀螺儀廣泛用于慣性導航系統。在此類系統中,陀螺儀通過角速度變化檢測方向,但隨著時間推移,陀螺儀往往會漂移,因為它僅檢測變化而沒有固定的參考系。將加速計數據添加到陀螺儀數據中,可以最大限度地減小陀螺儀偏置,從而得到更準確的位置估計。加速計檢測相對于重力的方向變化,該數據可用于給陀螺儀定向。
加速計對于靜態(與動態相反)計算更準確。當系統已處于運動狀態時,利用陀螺儀檢測方向要更好。加速計反應迅速,若只使用該數據,加速計抖動和噪聲會產生累積誤差。此外,由于重力之類的外力,加速計往往會使加速度失真,這也會作為噪聲在系統中累積。
將陀螺儀的長期精度與加速計的短期精度相結合,依靠每種傳感器的優勢來抵消或至少減輕另一種傳感器的弱勢,可以獲得更精確的方向讀數。這兩類傳感器相互補充。
此時需要融合濾波來減少誤差
IMU 軟件使用濾波來最大限度地減小 IMU 數據的定位誤差。有多種濾波方法可融合傳感器數據,每種方法都有不同程度的復雜性。互補濾波是合并多個傳感器所提供數據的簡單方法。互補濾波是一種將高通陀螺儀濾波和低通加速計濾波相結合的線性函數。因此,加速計數據中的高頻噪聲會在短期內被濾除,并且被陀螺儀數據平滑。
雖然互補濾波在計算上很簡單,但為了實現更好的精度,IMU 現在更喜歡使用卡爾曼濾波之類的更復雜技術。卡爾曼濾波是一種非常受歡迎的遞歸傳感器融合算法,不需要大量處理能力就能構建更精確的定位系統。卡爾曼濾波有多種類型,包括標準卡爾曼濾波、擴展卡爾曼濾波 (EKF) 和無跡卡爾曼濾波 (UKF)。
卡爾曼濾波使用若干數學方程來預測值,并基于以下假設:被濾波的數據為高斯分布形式,對其應用線性方程進行濾波。然而,現實世界中的運動并不像卡爾曼濾波的假設那樣中規中矩。實際運動遵循的方程常常涉及非線性的正弦和余弦函數,因此 EKF 采用泰勒級數和高斯分布的單點近似來線性化非線性函數。這些近似可能是重大的誤差源。
UKF 使用確定性采樣方法來解決此誤差問題,生成一組精心選擇的采樣點來代表數據的預期高斯分布,而不是 EKF 所用的單點近似。這些采樣點完全捕獲了預期高斯值的真實均值和協方差,從而實現更精確的濾波。
磁力儀誤差源
典型 IMU 包含三種不同的傳感器:用于測量角速度/速度的陀螺儀、用于測量線性加速度的加速計以及用于測量磁場強度的磁力儀。更具體地說,IMU 的磁力儀測量地球的磁場強度,以確定相對于地磁北極的航向。設計用于導航應用的 IMU 的每類傳感器通常有三個,以對應三個正交運動軸。
然而,磁力儀易受硬鐵和軟鐵失真的影響。外部磁場影響導致的地球磁場失真一般分為硬鐵效應和軟鐵效應兩種。如果不存在失真效應,將磁力儀旋轉 360° 并將結果數據繪制成圖,得到的將是一個以 (0, 0) 為中心的圓(圖 1)。
圖 1:如果附近的鐵質材料未引起局部磁場失真,則將磁力儀旋轉 360° 并將結果數據繪制成圖,得到的將是一個以位置 (0, 0) 為中心的圓。(圖片來源:sensorsmag.com)
硬鐵和/或軟鐵效應的存在可能會影響該圓。硬鐵效應導致其從位置 (0, 0) 發生簡單偏移(圖 2)。
圖 2:硬鐵失真效應導致磁力數據從位置 (0, 0) 發生偏移。(圖片來源:sensorsmag.com)
軟鐵效應使圓變形,產生一個橢圓(圖 3)。
圖 3:軟鐵失真效應會扭曲 360° 磁力數據,將其從圓形變為橢圓形。(圖片來源:sensorsmag.com)
請注意,硬鐵效應和軟鐵效應可能同時出現。
補償軟鐵失真所需的計算量比補償硬鐵失真的計算量要大得多,因此,從 IMU 的磁力儀附近移走軟鐵材料可能是更有效、更經濟的辦法。但在很多情況下,這不是一種選擇,而需要進行補償計算。
積分,然后再次積分
最后,加速計和陀螺儀僅提供關于物體上的加速力(線性和旋轉)的信息,因此必須將該數據積分兩次才能確定位置,因為加速度是物體速度的變化率,而速度是物體位置的變化率。換言之,IMU 陀螺儀和加速計數據提供的是物體絕對位置的二階導數。
二重積分本身就需要相當多的處理,但對于三維定位,還必須消除重力的加速度影響。對于加速計,重力表現為恒定加速度,導致其數據發生偏移。通常,重力的加速度影響必須在 IMU 和包含 IMU 的物體處于靜止狀態時,通過校準從系統中消除。
請注意,由于采樣誤差,這種二重積分會引起誤差。采樣率越慢,誤差越大。
IMU 軟件的設計考慮因素
為實際的 IMU 軟件實現這些算法時,請考慮以下措施和建議:
IMU 傳感器信號有噪聲,需要進行數字濾波。通常,IMU 應用中會使用某種卡爾曼濾波。
即使進行濾波,仍不免存在其他誤差源,例如耦合到 IMU 的機械噪聲,以及上面討論的硬鐵和軟鐵失真。必須濾除這種噪聲,或以其他方式從數據中消除此噪聲。
應用開始時,需要在 IMU 處于靜止狀態時執行校準例程,原因是為了盡可能準確,軟件需要知道當物體不運動時傳感器讀數是多少。運動中物體的實際加速度值等于加速度傳感器的當前采樣值減去校準值。
校準后,傳感器值可以是正數,也可以是負數。因此,保存這些值的變量必須有正負之分。
對傳感器數據的采樣頻率越高,產生的結果越準確,但更多樣本將需要更多存儲器和更嚴格的定時要求,還可能涉及到其他硬件考慮因素。
采樣周期必須始終完全相同。采樣周期不相等會引起數據誤差。
樣本之間的線性數據擬合(插值)可產生更準確的結果,但也需要更多的處理時間。
從上面的討論中可以明顯看出,根據 IMU 數據確定航向、位置和運動所需的計算并不簡單。因此,IMU 供應商常常為其產品提供軟件應用包來執行這些計算。例如,STMicroelectronics 開發了MotionFX 庫,此庫擴展了該公司的可下載 X-CUBE-MEMS1 軟件的功能,以包含 IMU 功能。
該庫中的軟件從加速計、陀螺儀和磁力儀獲取數據,并為 STMicroelectronics 的 MEMS 傳感器(包括 IMU)提供實時運動傳感器數據融合。無論環境條件如何,MotionFX 濾波和預測軟件都使用高級算法智能集成來自多個 MEMS 傳感器的輸出。該庫僅針對 STMicroelectronics 的 MEMS IMU 設計,若使用其他供應商的 IMU,無法保證該軟件的功能和性能。
MotionFX 庫運行在 STMicroelectronics 各種基于 Arm? Cortex?-M0+、Cortex-M3 和 Cortex-M4 處理器內核的微控制器上。當安裝在以下開發板上時,有針對 STMicroelectronicsX-NUCLEO-IKS01A2擴展板(圖 4)的實例實現供參考:
NUCLEO-F401RE開發板,基于STM32F4MCU,內置 Arm Cortex-M4 處理器內核;
NUCLEO-L476RG開發板,基于STM32L4MCU,內置 Arm Cortex-M4 處理器內核;
NUCLEO-L152RE開發板,基于STM32L1MCU,內置 Arm Cortex-M3 處理器內核;
或NUCLEO-L073RZ開發板,基于STM32L0MCU,內置 Arm Cortex-M0+ 處理器內核。
STMicroelectronics 的 MotionFX 庫管理并融合了來自 IMU 的加速計、陀螺儀和磁力儀的數據。該庫提供以下例程:
實時、9 軸、運動傳感器數據融合(加速計、陀螺儀、磁力儀)
實時、6 軸、運動傳感器數據融合(加速計、陀螺儀)
旋轉、四元數、重力和線性加速度數據的計算
陀螺儀偏置校準
磁力儀硬鐵校準
使用 MotionFX 軟件時,STMicroelectronics 建議采用 100 Hz 傳感器數據采樣頻率。
圖 4:STMicroelectronics 針對 IMU 的 MotionFX 軟件支持其 X-NUCLEO-IKS01A2 擴展板。(圖片來源:STMicroelectronics)
MotionFX 庫實現了一種傳感器融合算法來估計空間中的三維方向。它過濾并融合來自多個傳感器的數據,以彌補 IMU 各個傳感器的局限性。
清單 1 提供的演示代碼顯示了啟動和運行 STMicroelectronics IMU 所需的操作。
副本 […]#define VERSION_STR_LENG 35 #define MFX_DELTATIME 10 […]/*** Initialization ***/ char lib_version[VERSION_STR_LENG]; char acc_orientation[3]; MFX_knobs_t iKnobs; /* Sensor Fusion API initialization function */ MotionFX_initialize(); /* Optional: Get version */ MotionFX_GetLibVersion(lib_version); MotionFX_getKnobs(&iKnobs); /* Modify knobs settings */ MotionFX_setKnobs(&iKnobs); /* Enable 9-axis sensor fusion */ MotionFX_enable_9X(MFX_ENGINE_ENABLE); […]/*** Using Sensor Fusion algorithm ***/ Timer_OR_DataRate_Interrupt_Handler() { MFX_input_t data_in; MFX_output_t data_out; /* Get acceleration X/Y/Z in g */ MEMS_Read_AccValue(data_in.acc[0], data_in.acc[1], data_in.acc[2]); /* Get angular rate X/Y/Z in dps */ MEMS_Read_GyroValue(data_in.gyro[0], data_in.gyro[1], data_in.gyro[2]); /* Get magnetic field X/Y/Z in uT/50 */ MEMS_Read_MagValue(data_in.mag[0], data_in.mag[1], &data_in.mag[2]); /* Run Sensor Fusion algorithm */ MotionFX_propagate(&data_out, &data_in, MFX_DELTATIME); MotionFX_update(&data_out, &data_in, MFX_DELTATIME, NULL); }
清單 1:演示代碼顯示了如何使用 MotionFX 庫來從該公司的 X-NUCLEO-IKS01A2 擴展板上的 IMU 元件提取信息。(代碼來源:STMicroelectronics)
該演示軟件的流程圖如下所示(圖 5)。
圖 5:此流程圖說明了清單 1 中的 MotionFX 演示代碼所使用的步驟順序,以便從 STMicroelectronics 的 X-NUCLEO-IKS01A2 擴展板提取數據,并將數據融合成三維空間方向。(圖片來源:STMicroelectronics)
請注意,陀螺儀數據可能會漂移,導致三維空間方向估計的精度降低。MotionFX 軟件可以使用磁力儀數據(提供絕對方向信息)來補償這種降級情況。同時,磁力儀不能以高速率產生航向數據,而且磁力儀會遭受磁干擾,但陀螺儀數據可以彌補磁力儀的這些弱點。
MotionFX 軟件的 9 軸傳感器融合計算使用來自加速計、陀螺儀和磁力儀的數據,提供三維空間中的絕對方向,包括航向(相對于地磁北極)。
MotionFX 軟件的 6 軸傳感器融合計算僅使用加速計和陀螺儀的數據。此操作級別對計算的要求較低,并且不提供關于絕對方向的信息,但該例程比 9 軸例程運行得更快。6 軸傳感器融合適合測量快速運動,例如游戲或固定機器人,另外也可用在不需要絕對方向的場合。
總結
IMU 在嵌入式應用中非常有用,可以自行提供位置和航向信息。IMU 也可用于增強 GNSS 接收器信息,以提高定位精度或更新率。然而,將 IMU 集成到嵌入式系統中需要大量軟件,IMU 供應商常常會提供相關軟件,以幫助實現這些器件的實際應用。
-
GNSS
+關注
關注
9文章
761瀏覽量
47840 -
IMU
+關注
關注
6文章
298瀏覽量
45678
發布評論請先 登錄
相關推薦
評論