加速度校準分析(Pixhawk加速度校準演算法簡析)
1. 加速度計上電校準零偏是否可行?
答案是否,以PX4飛控為例,在NED系下,水平放置時,機體測量加速度的資料應該是[0 0 -g],所以,除非你確定你的飛控校準加速度零偏的時候是絕對的水平,否則只會加大誤差,更別談每次上電自動校準,減零偏了,試想一下,如果我就是要飛機在斜坡上起飛,那飛機飛起來回平就完全不對了,飛機認為的水平已經不是你所見的水平。
2.加速度計校準有哪些方法?
主要有兩種,一種是依賴於高精度的外部裝置,比如轉檯等,進行的精確標定;主要校準安裝誤差,比例係數和零位偏移。方法為靜態六位置法標定法。六位置法一般需要藉助高精度轉檯進行試驗測試,將姿態解算測試系統水平固定在轉檯測試檯面上,安裝過程中保證系統座標系與轉檯測試面座標系重合,對加速度感測器的各敏感軸進行豎直向上和向下測試,通過轉動轉檯的內框-中框-外框對加速度計三個軸共測試六次。利用最小二乘法計算對六位置資料行進最小誤差估計得到 12 個誤差係數。具體方法可以參考一些導航方面的書籍論文。
另外一種則是重力參考標定,飛控會自動執行程式碼或離線資料採集進行引數計算。我們主要講工程上最實用的,明顯第二種比較簡單實用,一般來講,是不會用到轉檯這類裝置進行精確標定的,原因就是裝置太貴,買不起。所以一般採用重力參考標定方式。
3.加速度校準的原理?
靜態放置情況下,無論加速度計計的位置在哪,所測的的加速度模值始終應該是當地重力加速度。
4.校準的目的?
換個說法,就是如果不校準會怎樣?簡單來講,會影響你姿態解算的精度,比如互補濾波,解算的靜態精度與測量的重力加速度有直接關係,所以能提高姿態解算的精度。
5.可不可以不校準?
實際應用也可以不校準加速度計,畢竟,精度再差,也不差那麼一些,當然,如果對飛控的精度要求比較高,還是校準最好。
加速度計一般校準一次即可,不需要每次都上電校準,所以,也可以採集離線資料,校準之後,將引數寫入你的飛控程式碼。
6.如何做?
主要介紹兩種方法,包括pixhawk飛控的演算法解析。
6.1離線資料matlab計算
飛控靜止下,隨便轉幾個面,保持一段時間,記錄飛控的加速度資料。
建立模型:
帶入上式,進行最小二乘擬合,matlab中用lsqcurvefit函式,求出a1-a6引數。
實驗結果如圖所示:
圖中看出,校準後,加速度計資料的輸出更接近重力加速度g,與重力加速度的誤差更小。
得到引數如下:
1.0010 0.1178 1.0059 -0.2940 0.9926 0.1514
6.2 PX4韌體加速度計校準演算法
因為不是外部裝置(轉檯)進行標定,所以校準的原理與前面介紹的一樣,都採用重力加速度作為參考。
建立模型:
accel_corr[3]是參考向量,也就是重力加速度向量
accel_T[3][3]是轉換矩陣,包含旋轉和尺度縮放
accel_raw[3]是實際測量的加速度向量
accel_offs[3]是加速度資料的零點偏移
飛控採用六面校準,即取6個面的資料,則可以得到參考向量。
分別對應頭朝上,朝下,朝左,朝右,反向,水平放置,則實測的資料accel_raw_ref[6][3]。
步驟:
一、先求出每個軸的偏移,方法是利用重力加速度在每個軸上的最大最小資料,求和後除以2得到。
二、下面求accel_T[3][3]矩陣的引數,包含9個未知引數,一個軸有3個數據,每個方向有3個軸資料,所以這時只需取樣3面數據即可。
展開:
即轉換成A * x = b形式。
x = A^-1 * b
接著就是求解線性方程組,求出x矩陣,即accel_T[3][3]。
具體程式碼見src\modules\commander\accelerometer_calibration.cpp檔案。
7.幾個需要注意的點
Ø 前面有提到,在採集資料的時候,主要是要獲得靜態狀態下資料,所以最好不要加速晃動飛控採集,同樣的原理,比如開源pixhawk飛控校準的時候,在擺6個面的時候,儘量緩慢,且保持一段時間;
Ø 雖然求出了12個引數,但是pixhawk飛控輸出加速度資料的時候,也只用了6個數據,3個零偏,3個尺度變換因子,即accel_T矩陣的對角元素;
Ø 前面所述的演算法,只是核心的思想,PX4飛控實際的模型還包含了旋轉資訊。
這裡的rot矩陣,主要是根據你的飛控安裝方向,外接羅盤的安裝方向進行的資料座標系校正;
Ø 加速度資料的標定並不能保證你的飛行是水平的,如果有幾度的安裝誤差,飛起來會怎樣?很顯然,飛機會以固定的角度,一直往一個地方飄。
如果有讀者對飛控研發的某些知識點,有不清楚的地方可以在評論下寫明,筆者會挑一些普遍的問題進行講解。後續文章主要方向還是演算法方面,且偏向工程應用,具體的理論推導就不闡述了。