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