2021年5月13日 星期四

技術筆記:IMU(inertial measurement unit) MPU9250

IMU,慣性測量單元,形式如上。別看它小小一片,功能卻非常強大,舉凡物體姿態或運動速度,都難不倒它,也因此成為智慧型手機、空拍機及各式VR裝置中重要元件。此外,以動作為主的任天堂遊戲機或Air Drum(空氣鼓棒 連結),也都缺它不可。

最近工作需要,嘗試深究其性能並將其引入產品設計。首先購買MPU9250,別看這這元件小小一片,內部可是集成了三種不同單元,分別是陀螺儀(連結),加速度和地磁偏角。這三種動作各有其理論基礎,實作方式隨著科技日新月異的進步,也不斷的微小化和精準化,讓人嘆為觀止(連結)。

硬體架構及資料讀取

陀螺儀,加速度和地磁偏角,每種單元又各有X Y Z三軸資訊,總計九組數值。連結方式,MPU9250 -> I2C -> VDD(3.3) GND(GND) SCL(21) SDA(20) -> Arduino Mega -> USB -> PC。

程式有兩種方案,Arduino的程式有二種,透過專屬LIB(連結),或直接取得Register(連結)。搭配的PC端程式,分成PYTHON(呼叫專屬LIB,畫面畫出二維圖),或是C程式(由serial介面讀取資料,接著後續繼續計算姿態)。

除讀取數值外,有專章討論calibration(連結,尚未做)。較無關範例LSM9DS1(連結)。另範例(連結)。

立體可視型態

上述九組資料僅是原始資料。理論上若是精度夠高,僅僅通過陀螺儀數值積分就能得到姿態位置,但MPU9250之類MEMS元件會因為體積關係,先天既存的誤差,使得姿態結果快速發散,無法使用。

解決方式是在陀螺儀之外,搭配加速度和磁力,三者共同合作組合成更高的精度,這個過程稱之為航姿參考系統(AHRS),這種明知硬體有先天缺陷,得靠軟體工程人員發揮想像力彌補的方法,在近十幾年已是常態,也多虧了AHRS,不知造就多少博士啊。

AHRS的概念,簡直是天書,(連結內容充實,誠心推薦失眠者閱讀),門外漢如我只能從結果來區分,共有三種方法,互補濾波、梯度下降(madgwick)、EKF姿態融合。後面只專注madgwick。參考範例(連結),madgwick(C語言),讀入數值計算後並用OpenGL顯示,同時有madgwick python版。

推算空間航跡

取得姿態和加速度後,理論上就能計算出X Y Z各方向速度,並進而劃出運動軌跡。應用相當廣泛,例如跌倒偵測、空間中移動位置描繪等等。實務上則是要考時間切片,取樣頻率,剔除邊際值等等。

手邊範例有兩種,matlab範例,python範例。套用後,初步測試結果,動作若很大勉強可接受,動作若很精細效果就很差。

雖然還在實驗階段,但檢視上述過程,不論是AHRS或是空間軌跡,都需要龐大計算量,類似小米手環是如何計算步數呢?

與相機結合的應用

案例一(連結)
案例二(連結 連結)

沒有留言:

張貼留言