輪式里程計標定
輪式里程計標定是校準機器人輪子的旋轉和移動,以提供機器人運動中的準確位置和姿態信息的方法。通過標定,可以修正因輪子尺寸和輪距等因素引起的誤差,獲得更準確的運動軌跡。本節將以MyCar導航機器人爲例演示標定過程,其標定步驟如下:
- 準備測量場地;
- 線性位移標定;
- 轉角位移標定;
- 驗證和調整。
另外,該過程還需要使用尺子作爲測量工具。
1.準備測量場地
選擇一個開放而平坦的區域,確保沒有障礙物和其他干擾因素。
2.線性位移標定
線性位移標定是用來標定機器人在直線移動時行進的距離。該標定與車輪直徑參數密切相關,當車輪直徑測量不準確或輪胎磨損時,會導致輪式里程計的線性位移出現誤差。以下是線性位移標定的主要步驟:
(1)實際數據採集
啓動機器人底盤和鍵盤控制節點,使用鍵盤控制機器人向前直線運動一段距離,並測量線性位移數據。
(2)里程計消息採集
機器人停止後,輸出里程計消息,並獲取里程計消息中的機器人的位移數據。
(3)參數計算以及修改
收集實際位移數據(w1)和里程計消息中的位移數據(w2),並結合驅動包配置文件中的原輪胎直徑值(d1),即可計算修正後的輪胎直徑值(d)。計算公式如下:
d = w1 / w2 * d1;
將計算出的結果寫入 MyCar 機器人的配置文件對應的參數,並重新構建。
爲了獲得最佳結果,可以多次執行上述流程。每次執行後,測量並記錄新的實際位移數據(w1)和里程計消息中的位移數據(w2),然後根據新的數據再次計算修正後的輪胎直徑值(d)。不斷迭代這個過程,可以逐步優化輪胎直徑的估計值,減小里程計的線性位移誤差。
小提示:
如果使用的是以Arduino爲主控的MyCar兩輪差速機器人,那麼需要修改ros2_arduino_bridge功能包下的params/arduino.yaml文件,該文件中有一個名爲wheel_diameter參數即爲車輪直徑;
如果使用的是以Stm32爲主控的MyCar兩輪差速機器人,那麼需要修改ros2_stm32_bridge功能包下的params/stm32_2w.yaml文件,該文件中有一個名爲wheel_diameter參數即爲車輪直徑;
如果使用的是以Stm32爲主控的MyCar四輪差速機器人,那麼需要修改ros2_stm32_bridge功能包下的params/stm32_4w.yaml文件,該文件中有一個名爲wheel_diameter參數即爲車輪直徑。
3.轉角位移標定
轉角位移標定是用來標定機器人在轉彎時的角度變化。該標定與底盤的旋轉半徑參數密切相關,當旋轉半徑設置不當時,會導致轉角位移的測量誤差。另外需要注意的是,如果是兩輪差速機器人,那麼旋轉半徑和輪間距基本一致。這是因爲兩輪差速機器人在旋轉時沒有造成車體的側滑運動,所以可以使用輪間距來計算旋轉角度,並且旋轉半徑可以近似等於輪間距。然而,對於四輪差速機器人,在旋轉時會產生側滑,輪間距無法直接用於計算旋轉角度。四輪差速機器人的旋轉半徑需要通過實驗獲取,因爲它的旋轉半徑受到側滑運動的影響。此外,由於機器人的左右側輪胎差異或車輛重心偏移等原因,左旋轉和右旋轉時計算旋轉角度所使用的旋轉半徑可能不同,因此需要進行分別實驗來獲取左右旋轉時的旋轉半徑。
以下是轉角位移標定的主要步驟:
(1)實際數據採集
啓動機器人底盤和鍵盤控制節點,使用鍵盤控制機器人原地旋轉,並測量轉角位移數據,比如可以原地旋轉一週。
(2)里程計消息採集
機器人停止後,打開rviz2,並添加tf插件,以顯示機器人基座標系(一般是base_link或base_footprint)與里程計座標系(一般是odom)相對關係。
(3)參數計算以及修改
在機器人原地旋轉一週時,如果機器人基座標系與里程計座標系相吻合,那麼旋轉半徑參數無需調整;如果機器人基座標系與里程計座標系不吻合且rviz2中機器人的旋轉角度大於實際旋轉角度,那麼請將旋轉半徑調大;如果機器人基座標系與里程計座標系不吻合且rviz2中機器人的旋轉角度小於實際旋轉角度,那麼請將旋轉半徑調小。將計算出的結果寫入 MyCar 機器人的配置文件對應的參數,並重新構建。
爲了獲得最佳結果,可以多次執行上述流程。每次執行後,測量並記錄新的實際轉角位移數據和rviz2中的座標系相對關係,然後根據新的數據再次修正旋轉半徑。通過不斷迭代這個過程,可以逐步優化旋轉半徑的估計值,減小轉角位移的測量誤差。
小提示:
如果使用的是以Arduino爲主控的MyCar兩輪差速機器人,那麼需要修改ros2_arduino_bridge功能包下的params/arduino.yaml文件,該文件中有一個名爲wheel_track參數即爲車輪直徑,在ros2_arduino_bridge中並未對左旋轉和右旋轉做區分;
如果使用的是以Stm32爲主控的MyCar兩輪差速機器人,那麼需要修改ros2_stm32_bridge功能包下的params/stm32_2w.yaml文件,在機器人左旋轉時,要標定的是名爲model_param_acw的參數,在機器人右旋轉時,要標定的是名爲model_param_cw的參數;
如果使用的是以Stm32爲主控的MyCar四輪差速機器人,那麼需要修改ros2_stm32_bridge功能包下的params/stm32_4w.yaml文件,和兩輪差速類似的,在機器人左旋轉時,要標定的是名爲model_param_acw的參數,在機器人右旋轉時,要標定的是名爲model_param_cw的參數。
4.驗證和調整
將標定後的輪式里程計應用於實際場景中,並進行驗證和調整。觀察車輛的實際位置和運動與估計值的差異,並進行必要的調整和校準。另外,當車輛使用環境發生改變,或持續使用較長一段時間後,建議對里程計進行重新標定。