趙宸銳,白英良
(防災(zāi)科技學(xué)院,河北 廊坊 065201)
現(xiàn)在越來越多的地方需要非人力設(shè)備進(jìn)行工作,特別是危險的巡檢工作,因巡檢的環(huán)境、地形以及工作任務(wù)的特殊性,對非人力設(shè)備有著不同的要求。本文設(shè)計(jì)的基于ROS系統(tǒng)的可二次開發(fā)四輪驅(qū)動平臺能夠快速滿足開發(fā)任務(wù)要求,大大節(jié)約了前期可移動平臺搭建的時間,在此過程中可根據(jù)需要安裝激光雷達(dá)、深度攝像機(jī)以及其他各種傳感器,或者更換扭矩更大的電機(jī)。
良好的平臺設(shè)計(jì)能減少系統(tǒng)對自身位置判斷的誤差及不必要的能量損耗,所以移動平臺采用37-520直流減速電機(jī),其鋁合金底盤尺寸為324 mm×200 mm×3 mm,有4個60 mm×24 mm的麥克納姆輪,以及mpu9250九軸加速陀螺儀和STM32F103RCT6下位機(jī)主控芯片,電池則采用12 V,10 A·h的大容量鋰電池。
下位機(jī)通過編碼器和IMU獲得自身位置信息,通過rosserial協(xié)議和STM32(ST庫)與上位機(jī)進(jìn)行通信,上位機(jī)則通過實(shí)際需要選擇配置,文中使用的上位機(jī)搭載Ubuntu 16.04系統(tǒng),硬件為i5-8300H+GTX1050ti+16 GB的筆記本電腦。
硬件控制流程如圖1所示。
圖1 硬件控制流程
底盤材質(zhì)選用厚度為3 mm的鋁合金,其可以承受更多的設(shè)備重量進(jìn)行具體功能的開發(fā),同時鋁合金具有質(zhì)量輕和堅(jiān)硬的特性,能減少不必要的電機(jī)負(fù)載和意外撞擊的損失。4個電機(jī)采用帶有霍爾編碼器的12 V直流減速有刷電機(jī),最大扭矩為5 kg·cm,可以滿足大部分實(shí)驗(yàn)所需,電機(jī)上的霍爾編碼器可以實(shí)時獲取電機(jī)的轉(zhuǎn)動數(shù)據(jù),從而更加準(zhǔn)確地控制小車直線運(yùn)動和曲線運(yùn)動,并獲取小車的二維坐標(biāo)位置,同時,4個電機(jī)驅(qū)動有較好的穩(wěn)定性和靈活性。驅(qū)動芯片采用常見的TB6612FNG芯片,TB6612FNG是基于MOSFET的H橋集成電路,效率遠(yuǎn)高于晶體管H橋驅(qū)動器;相比L293D每通道平均600 mA的驅(qū)動電流和1.2 A的脈沖峰值電流,它的輸出負(fù)載能力提高了一倍;相比L298N的熱耗性和外圍二極管續(xù)流電路,它無需外加散熱片,外圍電路簡單,只需外接電源濾波電容。因?yàn)樗男阅軆?yōu)越,于是采取1個芯片控制2個電機(jī)的方法,加以配合PWM脈沖寬度調(diào)制以及PID算法進(jìn)行閉環(huán)控制,PID最優(yōu)化參數(shù)是在保持PID一定的魯棒性下,尋找最優(yōu)化的參數(shù)配置[1],這樣可以使其運(yùn)動更加平滑穩(wěn)定。電機(jī)驅(qū)動模塊電路如圖2所示。
圖2 電機(jī)驅(qū)動模塊電路
下位機(jī)采用STM32F103RCT6,它屬于Cortex-M3基礎(chǔ)型MCU,內(nèi)部具有多個定時器,自身集成了CAN控制器,支持CAN協(xié)議2.0A和2.0B,同時有較多的開源資料可供開發(fā)使用,同時工作頻率可達(dá)到72 MHz,可作為控制四輪驅(qū)動車運(yùn)動的處理器,還支持3個USART接口,有豐富的可拓展性。串口通信電路采用CH340G芯片,只需通過在外圍電路附加晶振和電容就可以實(shí)現(xiàn)USB轉(zhuǎn)串口功能,支持硬件全雙工串口,內(nèi)置收發(fā)緩沖區(qū)[2],軟件使用rosserial協(xié)議和STM32(ST庫)進(jìn)行通信[3],通過這樣的P2P數(shù)據(jù)傳輸以及通信協(xié)議,可以與上位機(jī)進(jìn)行4個電機(jī)、IMU數(shù)據(jù)交互,以及上位機(jī)對下位機(jī)運(yùn)動的控制。STM32以及串口通信的電路圖如圖3所示。
圖3 STM32以及CH340G芯片電路
慣性測量儀模塊采用MPU9250,它內(nèi)部集成了3軸的陀螺儀、加速度計(jì)和磁力計(jì),輸出為16位的數(shù)字量,可通過集成電路總線(I2C)與單片機(jī)進(jìn)行數(shù)據(jù)交互,傳輸速率最高可達(dá)400 kHz/s,滿足下位機(jī)及時獲取四輪驅(qū)動車方向信息的要求,上位機(jī)可及時記錄和調(diào)整控制[4]。IMU電路模塊如圖4所示。
圖4 IMU電路模塊
本文選擇差速模型,前后一共有4個驅(qū)動輪,轉(zhuǎn)彎靈活,同時能產(chǎn)生很大的驅(qū)動力,可以實(shí)現(xiàn)圈地轉(zhuǎn)向,為了更好地控制平臺的轉(zhuǎn)向,減小不必要的摩擦力,需要對模型進(jìn)行運(yùn)動力學(xué)和摩擦力學(xué)的分析,找到電機(jī)轉(zhuǎn)速與輪距和小車自身重量的關(guān)系。
參考阿克曼轉(zhuǎn)向幾何原理,即在汽車轉(zhuǎn)向時4個輪子都近似圍繞一個圓點(diǎn)做圓周運(yùn)動,以此保證轉(zhuǎn)彎的穩(wěn)定性,由此得出四輪差速驅(qū)動車的運(yùn)動學(xué)模型如圖5所示。
在圖5中:前左輪和后左輪的轉(zhuǎn)角為α1;前右輪和后右輪的轉(zhuǎn)角為α2;左右輪間距為2L;前后輪軸距為2K,車子重心的線速度為v;角速度為ω;4個輪子實(shí)際的運(yùn)動方向分別為V1,V2,V3,V4,R=V/ω,通過圖5可以得出:
圖5 四輪驅(qū)動車運(yùn)動學(xué)模型
綜上可得,電機(jī)的角速度ωn為:
式中:i為減速器的減速比;r為車輪半徑。根據(jù)公式ωn可得到影響小車運(yùn)動的主要因素有輪距和4個電機(jī)的轉(zhuǎn)速,根據(jù)此關(guān)系式可以得到較好的運(yùn)動模型,以此控制小車,使其穩(wěn)定地前后移動和平滑轉(zhuǎn)彎[5]。
由于4WD沒有轉(zhuǎn)向機(jī)制,所以小車在轉(zhuǎn)向時會產(chǎn)生一定的摩擦力。當(dāng)小車原地旋轉(zhuǎn)時,受到的摩擦力可以分為靜摩擦力F,滑動摩擦力Fo,滾動摩擦力Fμ,各個力的方向如圖6所示。
圖6 原地旋轉(zhuǎn)時輪子受力方向
假定小車以O(shè)點(diǎn)為圓心做勻速圓周運(yùn)動,小車質(zhì)量為m,動摩擦因數(shù)為μ,則可得出:
兩式和并得到:
由此可以看出,如果輪胎和地面之間的接觸面積較大,即動摩擦因數(shù)大,所產(chǎn)生的摩擦力不僅不能忽略,而且還對電機(jī)和輪胎產(chǎn)生一定的損耗,進(jìn)而對PID系數(shù)產(chǎn)生浮動影響,使其控制影響因素變多,使用麥克納姆輪就可以很好地解決這些問題[6-7]。
下位機(jī)主程序流程如圖7所示,程序分為IMU信息處理程序、運(yùn)動控制程序、串口程序。慣性測量單元(IMU)收集小車運(yùn)動方位,通過程序進(jìn)行數(shù)據(jù)處理,將得到的位置運(yùn)動信息經(jīng)過串口程序發(fā)送給上位機(jī),運(yùn)動控制程序則通過串口程序接收到上位機(jī)指令,通過解析從而進(jìn)行相應(yīng)的運(yùn)動,串口程序主要是與ROS進(jìn)行信息交互,使用rosserial協(xié)議可以很方便地讓ROS與非ROS設(shè)備進(jìn)行P2P通信。
圖7 主程序流程
通信格式為:[第一字節(jié)-同步標(biāo)志(0xFF)][協(xié)議版本][消息長度-低字節(jié)][消息長度-高字節(jié)][消息長度校驗(yàn)和][主題ID-低字節(jié)][主題ID-高字節(jié)][消息數(shù)據(jù)]…[消息數(shù)據(jù)]…[主題ID和消息數(shù)據(jù)校驗(yàn)和]。
機(jī)器人操作系統(tǒng)(Robot Operating System)并不是傳統(tǒng)意義上的操作系統(tǒng),本文將ROS操作系統(tǒng)安裝在Ubuntu操作系統(tǒng)上,因?yàn)槟壳皟烧叩募嫒菪允亲詈玫?。ROS操作系統(tǒng)的通信部分采用發(fā)布/訂閱、客戶端/服務(wù)器的方式,開發(fā)者若想使用只需要了解規(guī)則即可,這種操作模式大大提高了工作效率。同時,ROS操作系統(tǒng)具有免費(fèi)開源、模塊化、支持多種語言等特點(diǎn)[8-10],本文的ROS訂閱與發(fā)布列表見表1所列,訂閱下位機(jī)STM32F103RCT6發(fā)送過來的數(shù)據(jù),其他功能包可對其引用計(jì)算。
表1 ROS話題列表
4WD平臺試驗(yàn)驗(yàn)證步驟為:
(1)修改.bashrc文件,使下位機(jī)和上位機(jī)的通信協(xié)議匹配。
(2)更新修改后的.bashrc配置文件,使系統(tǒng)處于最新配置。
(3)運(yùn)行bringup.launch文件,進(jìn)行上位機(jī)與下位機(jī)串口通信,獲得下位機(jī)的詳細(xì)信息數(shù)據(jù),如圖8所示。
圖8 ROS系統(tǒng)接收顯示的下位機(jī)信息
(4)運(yùn)行teleop_twist_keyboard.py文件,可以使用鍵盤控制4WD平臺移動,如圖9所示。
圖9 測試使用的4WD平臺
本文基于可快速二次開發(fā)的4WD移動平臺,實(shí)現(xiàn)了使用ROS機(jī)器人操作系統(tǒng)與下位機(jī)使用C語言開發(fā)的嵌入式系統(tǒng)來控制平臺的基礎(chǔ)移動和對搭載傳感器的通信。本文設(shè)計(jì)智能機(jī)器人平臺的運(yùn)動控制流程和相關(guān)運(yùn)動控制電路,并通過對四輪驅(qū)動的運(yùn)動學(xué)和摩擦力學(xué)分析得出使用麥克納姆輪能更好地解決摩擦力問題。同時,參考ros_lib庫文件和rosserial協(xié)議搭建了上位機(jī)與下位機(jī)的信息交互。通過對上述問題的解決,最終為二次快速開發(fā)做出了較為全面的設(shè)計(jì)。