萬(wàn)宇樓,張琳琳,路淑貞,徐佳,陳娉婷
(吉林大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,吉林長(zhǎng)春,130000)
四旋翼無(wú)人機(jī)作為科技產(chǎn)品在近年來(lái)取得了快速的發(fā)展,憑借迅捷靈活和穩(wěn)定可靠等特點(diǎn)被廣泛應(yīng)用于各個(gè)領(lǐng)域。具有自主避障功能的無(wú)人機(jī)無(wú)論其安全性還是應(yīng)用性都得到了極大的提升,下面我們將介紹基于開(kāi)源飛控的四旋翼無(wú)人機(jī)的避障飛行系統(tǒng)設(shè)計(jì)。
通過(guò)四旋翼飛行器上安裝的傳感器來(lái)實(shí)時(shí)檢測(cè)周?chē)h(huán)境,進(jìn)而使飛行器根據(jù)周?chē)h(huán)境判斷是否改變當(dāng)前飛行狀態(tài)。這一避障方案的基本結(jié)構(gòu)可分為三個(gè)部分,第一部分是檢測(cè)模塊,即使用傳感器,感知周?chē)恼系K物;第二部分是通信模塊,即副控制板與飛控主板實(shí)現(xiàn)通信;第三部分決策模塊,即飛控主板根據(jù)得到的傳感器數(shù)據(jù),進(jìn)行判斷后,對(duì)飛行器發(fā)出相應(yīng)的控制指令來(lái)控制飛行狀態(tài),本文基于此原理實(shí)現(xiàn)四旋翼飛行器的避障飛行系統(tǒng)設(shè)計(jì)。
該模塊基于Arduino Uno R3(主控芯片ATMega328P,14個(gè)I/O口,內(nèi)存32KB,時(shí)鐘頻率16MHz)芯片,該芯片通過(guò)UART串口與主控芯片相連接,通過(guò)I2C總線與四個(gè)方位的測(cè)距傳感器相連,通過(guò)輪詢(xún)方式向四個(gè)方向的傳感器請(qǐng)求數(shù)據(jù)。
圖1 無(wú)人機(jī)總體硬件結(jié)構(gòu)
該模塊使用US-100超聲波傳感器(電壓5v,探測(cè)距離2cm~450cm,精度3mm),飛行器前、后、左、右四個(gè)方向分別安裝了超聲波測(cè)距傳感器,檢測(cè)飛行環(huán)境內(nèi)可能存在的障礙物。在I2C總線上,四個(gè)不同方位的傳感器具有不同的地址(0xf0,0xf2,0xf4,0xf6),根據(jù)不同的地址副芯片便可識(shí)別來(lái)自不同方向的傳感器數(shù)據(jù)。測(cè)距傳感器采取IO觸發(fā)原理,當(dāng)拉低傳感器TRIP引腳后給一個(gè)50μs高電平信號(hào),傳感器開(kāi)始一次測(cè)距,副芯片得到傳感器返回的數(shù)據(jù)后計(jì)算出距離。
圖2 避障飛行系統(tǒng)總流程
圖3 總線與串口圖示
四旋翼飛行器主控基于Pixhawk2.4.8開(kāi)源飛控。Pixhawk開(kāi)源硬件具有五個(gè)uart串口,分別是uartA -the console (usually USB, runs MAVLink telemetry);uartB - the first GPS;uartC - primary telemetry (telem1 on Pixhawk, 2nd radio on APM2);uartD - secondary telemetry (telem2 on Pixhawk);uartE - 2nd GPS。Arduino模塊與主控制模塊上的uartD相連,實(shí)現(xiàn)模塊間的物理連接。
Pixhawk2.4.8開(kāi)源飛控采用STM32F427 Cortex M4為主處理器,具備陀螺儀、加速度、磁強(qiáng)儀、氣壓計(jì)等感應(yīng)器,有25個(gè)UART接口和2個(gè)CAN IO接口,有14個(gè)PWM輸出口。
四旋翼飛行器一般通過(guò)控制各軸電機(jī)的轉(zhuǎn)速來(lái)控制飛行器的姿態(tài),以實(shí)現(xiàn)轉(zhuǎn)彎、爬升、俯沖、橫滾等飛行狀態(tài),其線運(yùn)動(dòng)與角運(yùn)動(dòng)間存在高度約束性。
Pixhawk飛控可分為三大部分:實(shí)時(shí)操作系統(tǒng)、中間件和飛行控制棧。NuttX實(shí)時(shí)操作系統(tǒng)的作用是進(jìn)行底層的任務(wù)調(diào)度;PX4中間件提供設(shè)備驅(qū)動(dòng)和uORB,負(fù)責(zé)各個(gè)模塊間的數(shù)據(jù)傳輸,運(yùn)行于NuttX之上,實(shí)際上uORB是一套跨進(jìn)程的IPC通訊模塊,在Pixhawk中所有的功能被獨(dú)立以進(jìn)程模塊為單位工作,而進(jìn)程間的數(shù)據(jù)交互要能夠符合實(shí)時(shí)、有序的特點(diǎn);飛行控制??梢允褂肞X4的控制軟件棧,也可以使用APM:Plane、APM:Copter等,其運(yùn)行于PX4中間件之上。
圖4
副控制模塊得到四個(gè)傳感器的數(shù)據(jù)后,需要通過(guò)串口將數(shù)據(jù)發(fā)送給主控制模塊,而在這兩個(gè)控制模塊間進(jìn)行數(shù)據(jù)通信,需采用特定的通信協(xié)議。主控制模塊收到信息幀后將會(huì)解析幀格式,根據(jù)解析后得到的控制量來(lái)調(diào)整飛行姿態(tài),信息幀由副控制器根據(jù)獲得的傳感器數(shù)據(jù)生成。
表1 信息幀格式
主控制模塊通過(guò)UART串口獲取數(shù)據(jù),首先定義一個(gè)input_sonar_datas()函數(shù),NuttX實(shí)時(shí)操作系統(tǒng)完成初始化等工作,接下來(lái)調(diào)用飛控核心庫(kù)中的px4_task_spawn_cmd()函數(shù)在NuttX中創(chuàng)建一個(gè)新的任務(wù),uORB中進(jìn)程間的數(shù)據(jù)通信要通過(guò)主題來(lái)進(jìn)行,串口讀取完數(shù)據(jù)后調(diào)用orb_publish()完成主題發(fā)布,最后接收數(shù)據(jù)的進(jìn)程訂閱主題并將input_sonar_datas()返回的值賦值給全局變量sonarDatas,sonarDatas即為主控收到的傳感器測(cè)量數(shù)據(jù),主控模塊根據(jù)sonarDatas來(lái)生成控制信息。
當(dāng)主控芯片接收到副控制板的信息幀后,首先要對(duì)幀格式進(jìn)行解析,得到傳感器的測(cè)距信息,分析信息幀生成控制幀,最終根據(jù)控制幀來(lái)改變飛行姿態(tài),從而實(shí)現(xiàn)規(guī)避障礙物。
對(duì)信息幀解析后可獲取傳感器測(cè)距信息sonarDatas,當(dāng)發(fā)現(xiàn)某一方位距離小于安全值時(shí),便需要及時(shí)調(diào)整飛行姿態(tài)避免與障礙物相撞,四軸飛行器通過(guò)pitch/row的角度大小控制產(chǎn)生的水平加速度,過(guò)大的水平加速度會(huì)造成側(cè)翻,但飛行器在高速遇到障礙物的緊急情況下,需要較大的加速度才能保證飛行安全,所以需要設(shè)置適當(dāng)?shù)募铀俣燃s束值。在滿(mǎn)足加速度約束值的條件下,生成控制幀controlDatas并將其轉(zhuǎn)化為電機(jī)驅(qū)動(dòng)電路輸出的PWM信號(hào),依靠螺旋槳間的轉(zhuǎn)速差實(shí)現(xiàn)飛行姿態(tài)的控制。
表2 控制幀格式
姿態(tài)控制部分分為內(nèi)外環(huán)控制,內(nèi)環(huán)控制角速度、外環(huán)控制角度??刂七^(guò)程是先根據(jù)目標(biāo)姿態(tài)和當(dāng)前姿態(tài)求出偏差角,然后通過(guò)角速度來(lái)修正這個(gè)偏差角,最終到達(dá)目標(biāo)姿態(tài)。具體方法為,AP_Motors和AC_AttitudeController核心庫(kù)中的AP_MotorsMatrix.cpp和AP_Motors_Class.h是根據(jù)roll/pitch/yaw等參數(shù)改變電機(jī)進(jìn)而影響飛行姿態(tài)的文件,根據(jù)sonarDatas來(lái)判斷是否進(jìn)行飛行姿態(tài)調(diào)整,若需要?jiǎng)t結(jié)合當(dāng)前姿態(tài)中各個(gè)參數(shù)的數(shù)據(jù)生成相應(yīng)的controlDatas,通過(guò)controlDatas來(lái)設(shè)定目標(biāo)角度指令(_roll_target)與目標(biāo)高度指令(_pitch_target),實(shí)現(xiàn)轉(zhuǎn)向從而避開(kāi)障礙物。
圖5 飛行姿態(tài)控制
無(wú)人機(jī)的飛行姿態(tài)主要受pitch俯仰、yaw航向、roll橫滾、油門(mén)等參數(shù)影響,要想改變飛行姿態(tài),需要擬合這些參數(shù)生成新的電機(jī)的控制信號(hào)。
飛行器進(jìn)行PID調(diào)節(jié)并輸出需要調(diào)用AC_Attitude Control庫(kù)中的函數(shù),例如rate_bf_to_motor_yaw()、rate_bf_to_motor_roll()、rate_bf_to_motor_pitch() 等方法,而AP_Motor庫(kù)中的set_pitch()、set_roll()、set_yaw()等方法將其轉(zhuǎn)化為電機(jī)混控信號(hào),最后電機(jī)混控信號(hào)需要被解算為PWM信號(hào),以便實(shí)現(xiàn)飛行姿態(tài)的改變。
飛控系統(tǒng)是四旋翼無(wú)人機(jī)的重要組成部分,作為開(kāi)源飛控中最著名的項(xiàng)目之一,PX4被廣大無(wú)人機(jī)愛(ài)好者和學(xué)者研究,基于PX4實(shí)現(xiàn)自主避障功能的無(wú)人機(jī)具有重要的實(shí)際意義。環(huán)境感知系統(tǒng)是無(wú)人機(jī)的“眼睛”,通訊模塊是無(wú)人機(jī)的“神經(jīng)”,主控避障系統(tǒng)是無(wú)人機(jī)的“大腦”,本文合理科學(xué)地設(shè)計(jì)了主控與副控之間的通訊,提供了傳感器-副控制芯片-主控制芯片-無(wú)人機(jī)的思路,就軟件架構(gòu)設(shè)計(jì)進(jìn)行了介紹,最終實(shí)現(xiàn)了無(wú)人機(jī)避障飛行系統(tǒng)的設(shè)計(jì),給未來(lái)無(wú)人機(jī)智能化提供了借鑒意義。