開源一份基於STM32F1平臺的ROS機器人底盤構建代碼

前言

最初參考網上資料移植了一份基於串口的STM32通過rosserial和ROS系統通信的代碼。對於小數據量格式的消息,可以正常通信,但消息量一大便會出錯(如:發佈ROS提供的odom和imu格式的消息)。網上還有另一種建立單片機和ROS系統的通信方式,https://blog.csdn.net/xiaoyuanwuhui/article/details/103203465這裏的第二點有介紹,這裏就不再敘述了。專爲turtlebot3設計的OPENCR硬件通過USB虛擬串口可以很好的和ROS系統通信。鑑於此,我便想可以通過USB虛擬串口的方式和ROS系統通信。

小插曲1:採用USB虛擬串口和ROS系統之前,我嘗試了好多方法都不能使傳感器消息的發佈頻率達到程序設定的傳感器的發佈頻率,如串口循環發送中斷接收、串口中斷髮送中斷接收、串口DMA發送接收等都不能很好的達到效果。

小插曲2:在想做一個ROS底盤之前,做了一個平衡車,感覺搭建一個基於ROS的平衡車也是非常cool的(主要是不想破費買硬件了,哈哈!),這也正是下面代碼介紹的第二個分支爲平衡車分支的原因。限於對平衡控制方面的一些理解不到位,故最後在平衡車實現導航時存在一些問題。這些問題調試起來比較困難,故又萌生了先製作一個穩定底盤的想法。

在整個過程,我也是邊學習ROS的知識,邊學習底盤構建的嵌入式方面的知識。但對於目前來說,基本達到了我可以開發程度的極限,故將代碼open出來給那些需要的人蔘考,也非常希望各路大牛可以給一些參考和指導,不勝感激!

開源代碼

目前代碼放置在github上地址爲https://github.com/Apex-yuan/ROS_STM32F1 目前只包含下位機部分,上位機部分的代碼等後續整理好再上傳。

代碼總共分爲三個分支:

master

基於STM32F1平臺建立的ROS和STM32之間的通信模板(USB VCP + rosserial)

ros_balancecar

基於STM32平臺的ROS機器人平衡底盤控制程序(雙輪平衡+差速控制)

ros_stablecar

基於STM32平臺的ROS機器人穩定底盤控制程序(差分模型)

在Doc文件夾內有一個log.md的文件,記錄了更新修改的內容。

代碼特性

  1. 支持手機APP控制小車運動
  2. 支持虛擬示波器顯示動態參數(通過藍牙傳輸)
  3. 採用dmp庫獲取mpu6050融合後的姿態信息(偏航角誤差較大,又進行了簡單的數據濾波)
  4. 支持pwm電機控制
  5. 支持編碼器獲取輪子轉速
  6. 支持上位機通過topic形式動態調參(後續可通過ROS參數服務器的形式實現,暫未實現)
  7. 支持USB虛擬串口
  8. pid控制
  9. 平衡小車的直立+速度+方向控制算法(僅在平衡車分支的代碼中包含)

成品展示

實物圖片

在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述

測試視頻

ROS平衡車測試視頻:https://www.bilibili.com/video/av56831989

ROS平衡車第三彈-成品展示

ROS穩定底盤測試視頻:

​ 未調參優化:https://www.bilibili.com/video/av71112199

ROS小車導航實戰篇—魔鬼的步伐

​ 調參優化:https://www.bilibili.com/video/av76744814

ROS穩定底盤---優化後的導航效果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章