SLAM+語音機器人DIY系列:(四)差分底盤設計——3.底盤通信協議


摘要                                            

運動底盤是移動機器人的重要組成部分,不像激光雷達、IMU、麥克風、音響、攝像頭這些通用部件可以直接買到,很難買到通用的底盤。一方面是因為底盤的尺寸結構和參數是要與具體機器人匹配的;另一方面是因為底盤包含軟硬件整套解決方案,是很多機器人公司的核心技術,一般不會隨便公開。出於強烈的求知欲與學習熱情,我想自己DIY一整套兩輪差分底盤,並且將完整的設計過程公開出去供大家學習。說干就干,本章節主要內容:

1.stm32主控硬件設計

2.stm32主控軟件設計

3.底盤通信協議

4.底盤ROS驅動開發

5.底盤PID控制參數整定

6.底盤里程計標



3.底盤通信協議                           

對於做純SLAM算法、機器人導航避障、或者別的需要用到移動底盤的應用,其實不需要搞明白底盤的底層硬件原理和軟件實現等繁瑣的細節,只需要根據底盤通信協議,在上層應用程序中利用串口以收發數據的方式來完成對底盤的操作。也就是說底盤的底層操作細節被封裝到基於串口通信的API中了。

先來說說ROS社區提供的rosserialrosserial庫是為了解決單片機與機器人之間的通信問題,使用rosserial庫可以實現單片機與機器人之間透明的ROS主題發布與訂閱通信。原理其實很簡單,如圖30

(圖30ROS社區提供的rosserial協議

單片機中通過包含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

(圖31miiboo機器人底盤自己的通信協議

其實很好理解,miiboo機器人底盤自己的通信協議包含兩個部分:DEBUG-uart1DATA-uart2DEBUG-uart1用於stam32與機器人之間傳輸調試打印信息、調試命令;DATA-uart2用於stam32與機器人之間傳輸速度反饋、速度控制。並且DEBUG-uart1DATA-uart2兩個串口都采用波特率115200進行數據傳輸。下面就針對DEBUG-uart1DATA-uart2這兩部分的協議進行詳細的講解。

3.1.DEBUG-uart1協議內容     

DEBUG-uart1協議內容分為:調試打印信息stm32單片機==>機器人)、調試命令stm32單片機<==機器人)。調試打印信息是stm32單片機向機器人發送數據,調試命令是機器人向stm32單片機發送數據。

(圖32)調試打印信息(stm32單片機==>機器人)

在機器人端,對從串口獲取的字符串數據流,直接用printf()函數就可以解析。

(圖33)調試命令(stm32單片機<==機器人)

在機器人端,將要下發的調試命令(其實就是請求stm32單片機的版本信息與PID信息命令、請求將stm32PID恢復為默認值命令、請求將stm32PID設置為指定值命令)封裝成對應的數據幀,然后讓串口下發由這15個字節組成的數據幀就行了。

3.2.DATA-uart2協議內容     

DATA-uart2協議內容分為:速度反饋stm32單片機==>機器人)、速度控制stm32單片機<==機器人)。速度反饋是stm32單片機向機器人發送數據,速度控制是機器人向stm32單片機發送數據。

(圖34)速度反饋(stm32單片機==>機器人)

在機器人端,對從串口獲取的字符串數據流,按照這個數據幀格式進行解析,就可以從這11字節組成的數據幀中解析出左輪速度、右輪速度。

(圖35)速度控制(stm32單片機<==機器人)

在機器人端,將要下發的目標速度控制值(左輪速度、右輪速度),按照這個數據幀格式進行封裝,然后讓串口下發由這11個字節組成的數據幀就行了。其實不難發現,速度反饋和速度控制遵循同樣的數據幀格式,這也是很好理解的。

后記                

------SLAM+語音機器人DIY系列【目錄】快速導覽------

第1章:Linux基礎

1.Linux簡介

2.安裝Linux發行版ubuntu系統

3.Linux命令行基礎操作

第2章:ROS入門

1.ROS是什么

2.ROS系統整體架構

3.在ubuntu16.04中安裝ROS kinetic

4.如何編寫ROS的第一個程序hello_world

5.編寫簡單的消息發布器和訂閱器

6.編寫簡單的service和client

7.理解tf的原理

8.理解roslaunch在大型項目中的作用

9.熟練使用rviz

10.在實際機器人上運行ROS高級功能預覽

第3章:感知與大腦

1.ydlidar-x4激光雷達

2.帶自校准九軸數據融合IMU慣性傳感器

3.輪式里程計與運動控制

4.音響麥克風與攝像頭

5.機器人大腦嵌入式主板性能對比

6.做一個能走路和對話的機器人

第4章:差分底盤設計

1.stm32主控硬件設計

2.stm32主控軟件設計

3.底盤通信協議

4.底盤ROS驅動開發

5.底盤PID控制參數整定

6.底盤里程計標

第5章:樹莓派3開發環境搭建

1.安裝系統ubuntu_mate_16.04

2.安裝ros-kinetic

3.裝機后一些實用軟件安裝和系統設置

4.PC端與robot端ROS網絡通信

5.Android手機端與robot端ROS網絡通信

6.樹莓派USB與tty串口號綁定

7.開機自啟動ROS節點

第6章:SLAM建圖與自主避障導航

1.在機器人上使用傳感器

2.google-cartographer機器人SLAM建圖

3.ros-navigation機器人自主避障導航

4.多目標點導航及任務調度

5.機器人巡航與現場監控

第7章:語音交互與自然語言處理

1.語音交互相關技術

2.機器人語音交互實現

3.自然語言處理雲計算引擎

第8章:高階拓展

1.miiboo機器人安卓手機APP開發

2.centos7下部署Django(nginx+uwsgi+django+python3)

----------------文章將持續更新,敬請關注-----------------

 

如果大家對博文的相關類容感興趣,或有什么技術疑問,歡迎加入下面的《SLAM+語音機器人DIY》QQ技術交流群,一起討論學習^_^

關於我們:

視頻教程:

 

https://www.bilibili.com/video/av61448040


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM