感測器校正
從零開始做四軸系列離上一篇大概有四個月了,本來是打算在第六部分寫飛行器模型的,不過只敘述模型不加控制器感覺沒甚麼內容,也就是普通的旋轉加直線運動方程式而已,但加控制器的方法又有多到數不清,而且要透過 MATLAB 來驗證又要花上不少時間寫程式,幾乎難產,所以就暫時先插入已經完成的感測器校正部分,之後看飛控板和遙控器更新改板的進度再來調整飛行器模型篇的位子吧。
這裡的感測器校正不探討溫度對於感測器在誤差方面的影響,因為沒有特別用溫度來校正過 IMU 相關感測器,不確定在溫度產生的誤差方面對於校正是否有顯著或是影響大的結果,之後如果有空來測量不同的工作時間長度下,芯片工作溫度的變化後,或許可以評估一下是否有這些必要,但目前就先假設感測器的溫度固定,不會因為外在或內部的溫度而影響噪音的大小。
陀螺儀(Gyroscope or Gyro)校正
對陀螺儀校正的部分主要校正偏差(Bias)的誤差,不對安裝誤差做校正,因為對於安裝物差的校正需要一些"絕對"的測量數據,這些數據通常都需要外部的儀器來輔助校正與測量,舉一個簡單的例子,今天我想要找出下列方程式中的 R_gyro 矩陣,找出這一個矩陣的一個方法就是在不同的角速度下測量,外部的裝置可以產生一個固定的角速度給予感測器,或是透過另一個可靠的感測器來做提供實際的結果(可能有些人會想為什麼不直接用感測器的輸出?因為感測器的輸出是包含誤差的,所以才需要被校正,如果感測器沒有誤差當然沒有問題,可以使用,不過就不需要做校正了...),而感測器將測量到的結果與實際的結果作比較,就可以得出 R_gyro 矩陣,那不用外部的儀器可做嗎?可以,如果有人可以產生一個固定或是準確的角速度,就可以透過這個角速度來校正陀螺儀,不過個人是沒辦法實現這高難度的動作,只能先假設 R_gyro 矩陣是一個單位矩陣或是一個對角矩陣(Diagonal Matrix)。
在假設 R_gyro 是一個對角矩陣後,問題就簡化了許多,在 n_noise 為高斯噪音(Gaussian Noise)下,平均值為 0,靜止下對陀螺儀取樣 w_ideal = 0,所以這時測量到的就是 w_bias,只要在每次測量的結果減掉 w_bias,並乘上一個放大縮小的變數,就可以得出理想的陀螺儀資料了,說的簡單一點就是在靜止下取平均值就可以得出 w_bias。
加速度計(Accelerometer or G-Sensor)校正
首先先放上感測器的模型
對加速度計校正的部分除了 B_bias 矩陣的偏差外,還會找出 S 矩陣來校正比例誤差與焊接、安裝產生的未對準誤差,而三軸間的正交誤差不打算特別做校正,因為使用的感測器是三軸集成於一顆芯片的,所以直接假設三軸互相正交,則 S 的反矩陣(K 矩陣)會是一個對證矩陣,並且表示成無偏差的形式,為的是減少展開的複雜度,所以問題可以化簡成下面式子
把右式展開則可以表示如下,其中 k 表示第 k 次的加速度計資料
再來就是透過在沒有運動加速度的條件下,加速度計三軸輸出平方和會等於重力加速度的關係來做校正,此種方法不需要依預先設定好的角度與位置來校正,校正的自由度較大
將上式表示成誤差函數,並展開與整理,結果如下
定義 E 函數為誤差的平方和,若可以找出 E 函數的極值(最小值)時,就可以得出 K 矩陣與 B 矩陣了
因為 E 函數可以表示成 e'*e 的形式,所以這裡解極值的方法我們採用高斯牛頓法(Gauss-Newton Method),詳細的演算法說明請自行參考 wikipedia: Gauss-Newton Method ,迭代過程如下式,對誤差的 Jocabian 與 Hessian 反矩陣相乘,其中 Hessian 矩陣中省略掉了二次微分項,自己實際用 MATLAB 模擬過,有無省略結果其實差不多,有時好、有時差,但在運算量上差別還頗大的,所以這裡把二次為紛向給忽略掉。
而 X 就是我們想要求得的 K 矩陣與 B 矩陣,透過不斷的迭代而得出來,如果要校正正交誤差就在加入 3 項 k 矩陣的沒有對稱的變數即可,但實際效果如何我倒是沒有試過,有興趣可以自己試看看
MATLAB 的模擬結果
詳細的微分結果與程式都放在 Github 上
C 語言驗證版本 https://github.com/Hom-Wang/C-Language/tree/master/newtonMethod
MATLAB 驗證版本 https://github.com/Hom-Wang/MATLAB/tree/master/gauss-Newton_Methods
↑ 修正量,也就是 Jocabian 與 Hessian 反矩陣的相乘,最後卻趨近 0,表示收斂。
↑ 校正參數,在迭代的過程中不斷的更新,最後卻趨於穩定的一個值。
↑ 誤差平方和。
↑ 最後整裡的一張實際數值與迭代結果得比較表格,誤差大概都在 0.01% 以下。
磁力計(Magnetometer or Compass)校正
磁力計的校正之前是使用橢圓擬合,詳細可以參考Github: 推導_橢圓擬合,不過橢圓擬合僅適用於平面的校正,離開該平面,像是傾斜等情況,容易產生誤差,但理論上電子羅盤也可以用上述的高斯牛頓法來求得校正參數,把 g 改成 1 即可,實現歸一化的作用,因為最後在求航向角時,僅需要知道比例關係,不需要知道實際的磁場強度。
2016/06/29 補充
今天經過實際測試後,發現無法此方法有效校正電子羅盤的資料,之後再補上其他的電子羅盤校正方法
2016/07/30 新增磁力計校正方法 - 四參數校正模型
假設從磁力計中讀出,未經校正軟磁干擾 S 與硬磁干擾 H 的磁場為 h_m,已校正過的磁場為 h_c,地球磁場為 h_r,兩磁場間的轉換關係為 R,則其關係可表示如下:
將以校正過的三軸磁力計任意旋轉而產生出來軌跡,會在的半徑為 的球面上,其數值表示為地球磁場強度,關係如下:
帶入可得到
定義誤差函數
四參數校正模型
假設在無軟磁干擾,僅有硬磁干擾的情況下,原式可改寫如下
並定義誤差函數
將其展開與整理
當殘差為零時
擴展至 N 筆資料
整理後