趙宸銳,白英良
(防災科技學院,河北 廊坊 065201)
現在越來越多的地方需要非人力設備進行工作,特別是危險的巡檢工作,因巡檢的環境、地形以及工作任務的特殊性,對非人力設備有著不同的要求。本文設計的基于ROS系統的可二次開發四輪驅動平臺能夠快速滿足開發任務要求,大大節約了前期可移動平臺搭建的時間,在此過程中可根據需要安裝激光雷達、深度攝像機以及其他各種傳感器,或者更換扭矩更大的電機。
良好的平臺設計能減少系統對自身位置判斷的誤差及不必要的能量損耗,所以移動平臺采用37-520直流減速電機,其鋁合金底盤尺寸為324 mm×200 mm×3 mm,有4個60 mm×24 mm的麥克納姆輪,以及mpu9250九軸加速陀螺儀和STM32F103RCT6下位機主控芯片,電池則采用12 V,10 A·h的大容量鋰電池。
下位機通過編碼器和IMU獲得自身位置信息,通過rosserial協議和STM32(ST庫)與上位機進行通信,上位機則通過實際需要選擇配置,文中使用的上位機搭載Ubuntu 16.04系統,硬件為i5-8300H+GTX1050ti+16 GB的筆記本電腦。
硬件控制流程如圖1所示。

圖1 硬件控制流程
底盤材質選用厚度為3 mm的鋁合金,其可以承受更多的設備重量進行具體功能的開發,同時鋁合金具有質量輕和堅硬的特性,能減少不必要的電機負載和意外撞擊的損失。4個電機采用帶有霍爾編碼器的12 V直流減速有刷電機,最大扭矩為5 kg·cm,可以滿足大部分實驗所需,電機上的霍爾編碼器可以實時獲取電機的轉動數據,從而更加準確地控制小車直線運動和曲線運動,并獲取小車的二維坐標位置,同時,4個電機驅動有較好的穩定性和靈活性。驅動芯片采用常見的TB6612FNG芯片,TB6612FNG是基于MOSFET的H橋集成電路,效率遠高于晶體管H橋驅動器;相比L293D每通道平均600 mA的驅動電流和1.2 A的脈沖峰值電流,它的輸出負載能力提高了一倍;相比L298N的熱耗性和外圍二極管續流電路,它無需外加散熱片,外圍電路簡單,只需外接電源濾波電容。因為它的性能優越,于是采取1個芯片控制2個電機的方法,加以配合PWM脈沖寬度調制以及PID算法進行閉環控制,PID最優化參數是在保持PID一定的魯棒性下,尋找最優化的參數配置[1],這樣可以使其運動更加平滑穩定。電機驅動模塊電路如圖2所示。

圖2 電機驅動模塊電路
下位機采用STM32F103RCT6,它屬于Cortex-M3基礎型MCU,內部具有多個定時器,自身集成了CAN控制器,支持CAN協議2.0A和2.0B,同時有較多的開源資料可供開發使用,同時工作頻率可達到72 MHz,可作為控制四輪驅動車運動的處理器,還支持3個USART接口,有豐富的可拓展性。串口通信電路采用CH340G芯片,只需通過在外圍電路附加晶振和電容就可以實現USB轉串口功能,支持硬件全雙工串口,內置收發緩沖區[2],軟件使用rosserial協議和STM32(ST庫)進行通信[3],通過這樣的P2P數據傳輸以及通信協議,可以與上位機進行4個電機、IMU數據交互,以及上位機對下位機運動的控制。STM32以及串口通信的電路圖如圖3所示。

圖3 STM32以及CH340G芯片電路
慣性測量儀模塊采用MPU9250,它內部集成了3軸的陀螺儀、加速度計和磁力計,輸出為16位的數字量,可通過集成電路總線(I2C)與單片機進行數據交互,傳輸速率最高可達400 kHz/s,滿足下位機及時獲取四輪驅動車方向信息的要求,上位機可及時記錄和調整控制[4]。IMU電路模塊如圖4所示。

圖4 IMU電路模塊
本文選擇差速模型,前后一共有4個驅動輪,轉彎靈活,同時能產生很大的驅動力,可以實現圈地轉向,為了更好地控制平臺的轉向,減小不必要的摩擦力,需要對模型進行運動力學和摩擦力學的分析,找到電機轉速與輪距和小車自身重量的關系。
參考阿克曼轉向幾何原理,即在汽車轉向時4個輪子都近似圍繞一個圓點做圓周運動,以此保證轉彎的穩定性,由此得出四輪差速驅動車的運動學模型如圖5所示。
在圖5中:前左輪和后左輪的轉角為α1;前右輪和后右輪的轉角為α2;左右輪間距為2L;前后輪軸距為2K,車子重心的線速度為v;角速度為ω;4個輪子實際的運動方向分別為V1,V2,V3,V4,R=V/ω,通過圖5可以得出:

圖5 四輪驅動車運動學模型

綜上可得,電機的角速度ωn為:

式中:i為減速器的減速比;r為車輪半徑。根據公式ωn可得到影響小車運動的主要因素有輪距和4個電機的轉速,根據此關系式可以得到較好的運動模型,以此控制小車,使其穩定地前后移動和平滑轉彎[5]。
由于4WD沒有轉向機制,所以小車在轉向時會產生一定的摩擦力。當小車原地旋轉時,受到的摩擦力可以分為靜摩擦力F,滑動摩擦力Fo,滾動摩擦力Fμ,各個力的方向如圖6所示。

圖6 原地旋轉時輪子受力方向
假定小車以O點為圓心做勻速圓周運動,小車質量為m,動摩擦因數為μ,則可得出:

兩式和并得到:

由此可以看出,如果輪胎和地面之間的接觸面積較大,即動摩擦因數大,所產生的摩擦力不僅不能忽略,而且還對電機和輪胎產生一定的損耗,進而對PID系數產生浮動影響,使其控制影響因素變多,使用麥克納姆輪就可以很好地解決這些問題[6-7]。
下位機主程序流程如圖7所示,程序分為IMU信息處理程序、運動控制程序、串口程序。慣性測量單元(IMU)收集小車運動方位,通過程序進行數據處理,將得到的位置運動信息經過串口程序發送給上位機,運動控制程序則通過串口程序接收到上位機指令,通過解析從而進行相應的運動,串口程序主要是與ROS進行信息交互,使用rosserial協議可以很方便地讓ROS與非ROS設備進行P2P通信。

圖7 主程序流程
通信格式為:[第一字節-同步標志(0xFF)][協議版本][消息長度-低字節][消息長度-高字節][消息長度校驗和][主題ID-低字節][主題ID-高字節][消息數據]…[消息數據]…[主題ID和消息數據校驗和]。
機器人操作系統(Robot Operating System)并不是傳統意義上的操作系統,本文將ROS操作系統安裝在Ubuntu操作系統上,因為目前兩者的兼容性是最好的。ROS操作系統的通信部分采用發布/訂閱、客戶端/服務器的方式,開發者若想使用只需要了解規則即可,這種操作模式大大提高了工作效率。同時,ROS操作系統具有免費開源、模塊化、支持多種語言等特點[8-10],本文的ROS訂閱與發布列表見表1所列,訂閱下位機STM32F103RCT6發送過來的數據,其他功能包可對其引用計算。

表1 ROS話題列表
4WD平臺試驗驗證步驟為:
(1)修改.bashrc文件,使下位機和上位機的通信協議匹配。
(2)更新修改后的.bashrc配置文件,使系統處于最新配置。
(3)運行bringup.launch文件,進行上位機與下位機串口通信,獲得下位機的詳細信息數據,如圖8所示。

圖8 ROS系統接收顯示的下位機信息
(4)運行teleop_twist_keyboard.py文件,可以使用鍵盤控制4WD平臺移動,如圖9所示。

圖9 測試使用的4WD平臺
本文基于可快速二次開發的4WD移動平臺,實現了使用ROS機器人操作系統與下位機使用C語言開發的嵌入式系統來控制平臺的基礎移動和對搭載傳感器的通信。本文設計智能機器人平臺的運動控制流程和相關運動控制電路,并通過對四輪驅動的運動學和摩擦力學分析得出使用麥克納姆輪能更好地解決摩擦力問題。同時,參考ros_lib庫文件和rosserial協議搭建了上位機與下位機的信息交互。通過對上述問題的解決,最終為二次快速開發做出了較為全面的設計。