摘要
運動底盤是移動機器人的重要組成部分,不像激光雷達、IMU、麥克風、音響、攝像頭這些通用部件可以直接買到,很難買到通用的底盤。一方面是因為底盤的尺寸結構和參數是要與具體機器人匹配的;另一方面是因為底盤包含軟硬件整套解決方案,是很多機器人公司的核心技術,一般不會隨便公開。出於強烈的求知欲與學習熱情,我想自己DIY一整套兩輪差分底盤,並且將完整的設計過程公開出去供大家學習。說干就干,本章節主要內容:
6.底盤里程計標
機器人底盤運行的精度是衡量底盤的重要指標。底盤精度受里程計的走直線誤差和轉角誤差影響。因此,需要對里程計的走直線和轉角進行標定,盡量減小誤差。miiboo機器人底盤的ROS驅動中已經寫好了相應的標定程序,跟里程計標定有關的文件主要有:
.../miiboo_bringup/launch/check_linear.launch為里程計走直線標定啟動文件
.../miiboo_bringup/launch/check_angular.launch為里程計轉角標定啟動文件
.../miiboo_bringup/launch/minimal.launch為設置標定參數及底盤控制啟動文件
下面是標定步驟過程。
第一步:
打開終端,給標定腳本賦予可執行權限
cd miiboo_bringup/scripts/ sudo chmod +x ./*
第二步:
連接好底盤DATA-uart2串口,啟動底盤
roslaunch miiboo_bringup minimal.launch
第三步:
設定前進1米的目標,對走直線進行標定
roslaunch miiboo_bringup check_linear.launch
測量底盤停止時實際走的直線距離M,按下面的規則調整里程計直線參數speed_ratio
如果M > 1米,增大speed_ratio
如果M < 1米,減小speed_ratio
里程計的參數存放在miiboo_bringup/launch/minimal.launch文件中,如圖53所示。
(圖53)里程計待標定參數
修改好參數后,需要保存,然后重新啟動一下底盤節點,這樣參數才能生效。
roslaunch miiboo_bringup minimal.launch
重復第三步的操作,直到走直線的誤差達到我們能接受的范圍(比如1%的誤差),則進入下一步。
第四步:
設定旋轉360度的目標,對轉角進行標定
roslaunch miiboo_bringup check_angular.launch
測量底盤停止旋轉時實際轉過的角度A,按下面的規則調整里程計轉角參數wheel_distance
如果A > 360度,減小wheel_distance
如果A < 360度,增大wheel_distance
上面已經講過,里程計的參數存放在miiboo_bringup/launch/minimal.launch文件中,如圖53所示。
修改好參數后,需要保存,然后重新啟動一下底盤節點,這樣參數才能生效。
roslaunch miiboo_bringup minimal.launch
重復第四步的操作,直到走轉角的誤差達到我們能接受的范圍(比如1%的誤差),則標定完成。
當然,有興趣的朋友可以閱讀miiboo_bringup/scripts/中的標定腳本源碼,結合航跡推演算法,理解里程計標定的整個原理。其實wheel_distance這個參數是編碼脈沖值與電機輪胎位移值的一個比例系數,簡單點說就是電機轉過一個編碼脈沖,這個時候電機輪胎走過多少距離;wheel_distance這個參數是左右兩個輪子的間距。有了這個認識后,我們可以在這兩個參數的理論值附近對參數進行微調,標定起來會更快。
后記
------SLAM+語音機器人DIY系列【目錄】快速導覽------
第1章:Linux基礎
第2章:ROS入門
第3章:感知與大腦
第4章:差分底盤設計
第5章:樹莓派3開發環境搭建
第6章:SLAM建圖與自主避障導航
2.google-cartographer機器人SLAM建圖
第7章:語音交互與自然語言處理
第8章:高階拓展
2.centos7下部署Django(nginx+uwsgi+django+python3)
----------------文章將持續更新,敬請關注-----------------
如果大家對博文的相關類容感興趣,或有什么技術疑問,歡迎加入下面的《SLAM+語音機器人DIY》QQ技術交流群,一起討論學習^_^
關於我們:
視頻教程: