簡體   English   中英

傳感器融合使用互補濾波器

[英]Sensor fusion using complementary filter

我正在嘗試學習傳感器融合,為此我通過Android應用程序記錄了加速度計,Gryoscope和磁力計的原始數據。

我遇到了卡爾曼濾波器,但它們太復雜而無法理解,我不想只是接受任何代碼並在沒有正確理解的情況下實現它。

然后我找到了這個補充過濾器的鏈接,看起來非常有前途,因為它很容易理解。 所以我有以下疑問。 (這是我第一次處理所有這些傳感器,所以我會問我所有的問題)

  1. 互補濾波器從傳感器獲取信號,並根據俯仰,滾轉和偏航輸出方向。 這是否意味着它過濾時域信號並提供角度輸出? 在這種情況下,是否有可能獲得濾波后的時域信號?

  2. 我遇到了這個着名的Google Talk視頻,他提到要獲得線性加速,你需要從原始加速度計數據中減去重力。 我如何獲得重力矢量?

  3. 另外,我有點困惑為什么加速度信號必須轉換為地球坐標系。 我看過一些文件,但我仍然感到困惑。 我可以看到它為什么要完成但是如何計算所需的旋轉矩陣。

  4. 最后(但肯定不是最終的),我如何估計航向?

基本上,我有傳感器數據,我想跟蹤設備的方向以及人員前進的方向。 這些問題可能聽起來很基本,但我需要專家對這個主題做一些澄清,所以我可以去研究一些奇特的算法。

如果有人能指出我正確的方向,我真的很感激。

最好的祝福

Chintan

根據我的經驗,沒有AHRS算法可以在精確度方面與擴展的卡爾曼濾波器競爭。 如果要計算用戶加速度,准確性非常重要,因為旋轉矩陣的不准確性會導致用戶加速度的偏差。

問題1:我不明白你對濾波時域信號的確切含義。 測量樣本始終提供時間戳。

回答2和3:

要計算用戶加速度,您需要事先計算姿態(旋轉矩陣)。 因為您需要使用AHRS算法計算的姿態旋轉傳入的ACC數據,以便將其從“電話空間”轉換為“世界空間”。 因此,手機的向上移動(無論哪個方向)將始終導致用戶加速中的Y值增加。 我希望你明白我的意思。 現在我們在世界空間中使用Raw-Accelerometer-Data並減去重力(vector3(0,9.81f,0))。 因此,如果沒有移動,我們的新用戶加速總是顯示(0,0,0)。

這很容易。 我們現在在世界空間中擁有用戶加速。 但我們想要一個位置偏移(路徑)。 您不僅可以將加速度與速度相結合,還可以將速度與路徑/路徑相結合。 (原諒我的英文;-))因為加速度計的測量樣本永遠不夠精確,無法得到2倍的路徑。 您必須編制約束來控制導出的速度,以便在加速度的值和斜率為零時將其設置回零。 否則將始終存在剩余的速度量,導致計算的路徑隨時間的巨大漂移。 我認為對於最好的內向外位置跟蹤,您需要對(世界空間)用戶加速進行一些分析並重建一個干凈的速度圖,以便在沒有加速時始終返回零。 我自己編程,它可以工作但不確切。 一個問題是,識別的運動取決於速度/加速度。 運動越慢,加速度計的值越低,直到它們在傳感器噪聲中丟失。 另一個問題是當運動結束時識別出對結果速度的所有影響。

AHRS算法不需要磁力計傳感器,因為它不夠可靠並且總是會引入錯誤。 磁力計可能會受到環境的影響。 例如,看看谷歌紙板磁力儀開關。 拉動谷歌紙板觸發器時,打開傳感器測試應用程序查看磁力計傳感器。 它將在磁力計上產生巨大的價值,它根本不代表標題。 微波等可能會發生同樣的事情。因此,為了獲得良好的北方航向,您必須經常檢查磁場的方向和大小是否在特定時間后沒有變化並且是合理的值。 然后,您可以使用磁力計數據作為參考來旋轉您從AHRS算法獲得的Orientation-Rotation-Matrix,以將航向更正為北。

回答4:你從旋轉矩陣得到了標題。

vector3 headingDirection = new vector3(rotMat[8], rotMat[9], rotMat[10]);

根據旋轉矩陣(列主要或行主要)的形式,您可能需要調整索引。 請看John Schultz的答案: http//www.gamedev.net/topic/319213-direction-vector-from-rotation-matrix/

應通過將當前旋轉速度(陀螺儀)乘以上次估計旋轉與現在之間的經過時間相乘來估算rotationMatrix。

注解:

我想如果你想玩傳感器融合和用戶加速,最好使用來自cardboard.jar的擴展卡爾曼濾波器作為起點。 您可以將其與算法進行比較。

請看這里: https//github.com/Zomega/Cardboard/blob/master/src/com/google/vrtoolkit/cardboard/sensors/internal/OrientationEKF.java

雖然它有一種使用測角儀(p​​rocessMag)的方法,但這種方法永遠不會在cardboard-api中被調用。

鏈接文件中的方法“getPredictedGLMatrix”顯示了Google如何估算“當前”輪換矩陣。

我希望這能回答你的一些問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM