基於ROS的自主導航小車Plantbot--底層驅動

  • 小車平台

小車採用差分驅動(differential drive),底座包括兩個由直流電機驅動的主動輪以及兩個用於支撐的從動輪。三層支撐板由玻纖板設計定做,層間連接件為螺桿,配以螺母,方便調節高度。為了測量輪子轉速,選用的直流電機帶有正交編碼器。考慮到成本,選用觀測周圍信息的感測器為國產廉價單線激光雷達,有效觀測距離為6m,近距離里融合超聲波感測器實現避障。

第二層板上放的是NUC(Next Unit of Computing),可以視為一個沒有顯示器的小電腦,優點為體積小、質量輕,可以直接架設到小車平台上 。NUC 安裝了Linux系統,在運行時跑ROS,直接處理包括激光雷達在內的感測器數據,負責控制命令接受、速度分解、PID調速以實現對小車的控制以及繪圖、定位、導航的任務。同時SLAM的結果需要上位機來顯示,NUC通過SSH與上位機實現通信。

平台的MCU為EK-TM4C123GXL Launchpad,這款單片機採用ARM Cortex-M4的CPU,因此比Arduino等單片機具有更好地性能,同時其IDE(集成開發環境,Integrated Development Environment)energia 的編程語言與Arduino IDE的相同,並且兩者的大部分代碼可以兼容。但並非全部,在接MPU6050測量四元數的時候,數據不能持續正常輸出。同時Launchpad的IO口輸出電壓為3.3V,而大部分電路模塊引腳的接入電壓是5V,因此需要增加3.3V到5V的電壓轉換模塊,增加了電路的複雜性。

後期為了拓展功能,又接了四路紅外模塊,分別用於防跌和避障,以及藍牙模塊,用來接收由手機App發送來的控制信息,由Arduino作控制器。

  • 底層ROS框架設計

底層ROS的運行狀態設計圖如下所示:

底層ROS的設計目標是:

1. 能夠通過編碼器的數據(lwheel、rwheel),得到此刻小車兩輪的轉速(lwheel_vel、rwwheel_vel),矢量合成為小車的運動速度, 並通過旋轉矩陣變換為里程計坐標繫上的速度,積分迭代得到在x,y軸前進的距離(粗略位姿估計,還會根據激光雷達定位信息糾正odom坐標);

2. 能夠根據控制命令(cmd_vel)的要求速度,分解為小車兩輪的速度 (lwheel_vtarget、rwheel_vtarget),並能通過控制車輪轉速達到目標速度 (PID控制、分段速度法實現);

3. 獲取超聲波、紅外感測器數據,判讀距離障礙物的距離,實現自動避障,並考慮到工廠安全監測,拓展了防火、防霧的功能,可在Arduino板外接火焰或煙霧感測器,當小車在工廠中執行任務時,測到火災隱患,蜂鳴器自動報警,同時通過主題/str發送對應消息 ,讓小車停止任務,持續報警。

  • 控制器與ROS結點

底層設計的一個難點是如何將控制器作為一個節點,即感測器可以由控制器驅動、採集狀態,但是如何將採集到的這些數據以message的形式傳播到ROS框架中。對於串口連接,ROS提供了專門的功能包:rosserial,以及對於一些單片機的直接應用:rosserial_arduino可以直接在Arduino IDE中編程,成為結點;rosserial_tivac可以直接用於Launchpad。其它可以作為ROS節點的感測器可以參照Sensors supported by ROS。此外樹莓派可以直接跑ROS,對於其它單片機如STM32,熟悉串口通信編程的話也可以自己寫,比如@夜貓 提供的學習stm32版的ROS小車。

----------------------------------------------------------------------------------------------------------------------

目錄:

基於ROS的自主導航小車Plantbot--底層驅動

基於ROS的自主導航小車Plantbot--SLAM

基於ROS的自主導航小車Plantbot--自主導航

推薦閱讀:

ROS機器人操作系統相關書籍、資料和學習路徑
ROS 2正式版來了,到底有哪些新變化?
【ROS十周年快樂!】Science Robotics封面文章:ROS助力全世界機器人!

TAG:机器人操作平台ROS | 机器人 | 同时定位和地图构建SLAM |