運動底盤是移動機器人的重要組成部分,不像激光雷達、IMU、麥克風、音響、攝像頭這些通用部件能夠直接買到,很難買到通用的底盤。一方面是由於底盤的尺寸結構和參數是要與具體機器人匹配的;另外一方面是由於底盤包含軟硬件整套解決方案,是不少機器人公司的核心技術,通常不會隨便公開。出於強烈的求知慾與學習熱情,我想本身DIY一整套兩輪差分底盤,而且將完整的設計過程公開出去供你們學習。說幹就幹,本章節主要內容:html
1.stm32主控硬件設計python
2.stm32主控軟件設計nginx
3.底盤通訊協議算法
4.底盤ROS驅動開發django
5.底盤PID控制參數整定ubuntu
6.底盤裏程計標centos
對於作純SLAM算法、機器人導航避障、或者別的須要用到移動底盤的應用,其實不須要搞明白底盤的底層硬件原理和軟件實現等繁瑣的細節,只須要根據底盤通訊協議,在上層應用程序中利用串口以收發數據的方式來完成對底盤的操做。也就是說底盤的底層操做細節被封裝到基於串口通訊的API中了。網絡
先來講說ROS社區提供的rosserial庫,rosserial庫是爲了解決單片機與機器人之間的通訊問題,使用rosserial庫能夠實現單片機與機器人之間透明的ROS主題發佈與訂閱通訊。原理其實很簡單,如圖30。架構
(圖30)ROS社區提供的rosserial協議ide
單片機中經過包含rosserial.h頭文件來引用rosserial庫中的數據封裝與數據解析方法,這樣在單片機上能夠直接按照ROS中發佈和訂閱數據的語法來編寫程序,rosserial庫會自動完成封裝和解析;被rosserial庫封裝成串口字節流後能夠在串口數據線上傳輸;在機器人上一樣經過包含rosserial.h頭文件來引用rosserial庫中的數據封裝與數據解析方法,這樣在機器人上直接按照ROS中發佈和訂閱數據的語法來編寫程序,rosserial庫會自動完成封裝和解析。rosserial協議創建了單片機與機器人之間的透明ROS通訊,這個ROS機器人開發這帶來了很大的方便。
可是,rosserial協議雖然好,目前rosserial對不少單片機的支持還不是很好,只對少數型號的單片機(好比Arduino系列單片機)有支持,像應用普遍的stm32單片機就沒有官方rosserial庫的支持;另外一個缺點,rosserial協議比較臃腫,這樣對通訊的資源消耗大而且影響數據實時性。
其實解決rosserial協議這幾個缺點很簡單,咱們借鑑rosserial協議的思想,對rosserial協議中的冗餘進行裁剪,咱們miiboo機器人底盤本身的通訊協議也就應運而生了。miiboo機器人底盤本身的通訊協議,如圖31。
(圖31)miiboo機器人底盤本身的通訊協議
其實很好理解,miiboo機器人底盤本身的通訊協議包含兩個部分:DEBUG-uart1和DATA-uart2。DEBUG-uart1用於stam32與機器人之間傳輸調試打印信息、調試命令;DATA-uart2用於stam32與機器人之間傳輸速度反饋、速度控制。而且DEBUG-uart1和DATA-uart2兩個串口都採用波特率115200進行數據傳輸。下面就針對DEBUG-uart1和DATA-uart2這兩部分的協議進行詳細的講解。
DEBUG-uart1協議內容分爲:調試打印信息(stm32單片機==>機器人)、調試命令(stm32單片機<==機器人)。調試打印信息是stm32單片機向機器人發送數據,調試命令是機器人向stm32單片機發送數據。
(圖32)調試打印信息(stm32單片機==>機器人)
在機器人端,對從串口獲取的字符串數據流,直接用printf()函數就能夠解析。
(圖33)調試命令(stm32單片機<==機器人)
在機器人端,將要下發的調試命令(其實就是請求stm32單片機的版本信息與PID信息命令、請求將stm32中PID恢復爲默認值命令、請求將stm32中PID設置爲指定值命令)封裝成對應的數據幀,而後讓串口下發由這15個字節組成的數據幀就好了。
DATA-uart2協議內容分爲:速度反饋(stm32單片機==>機器人)、速度控制(stm32單片機<==機器人)。速度反饋是stm32單片機向機器人發送數據,速度控制是機器人向stm32單片機發送數據。
(圖34)速度反饋(stm32單片機==>機器人)
在機器人端,對從串口獲取的字符串數據流,按照這個數據幀格式進行解析,就能夠從這11字節組成的數據幀中解析出左輪速度、右輪速度。
(圖35)速度控制(stm32單片機<==機器人)
在機器人端,將要下發的目標速度控制值(左輪速度、右輪速度),按照這個數據幀格式進行封裝,而後讓串口下發由這11個字節組成的數據幀就好了。其實不難發現,速度反饋和速度控制遵循一樣的數據幀格式,這也是很好理解的。
------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技術交流羣,一塊兒討論學習^_^
關於咱們:
視頻教程: