萬宇樓,張琳琳,路淑貞,徐佳,陳娉婷
(吉林大學計算機科學與技術學院,吉林長春,130000)
四旋翼無人機作為科技產品在近年來取得了快速的發展,憑借迅捷靈活和穩定可靠等特點被廣泛應用于各個領域。具有自主避障功能的無人機無論其安全性還是應用性都得到了極大的提升,下面我們將介紹基于開源飛控的四旋翼無人機的避障飛行系統設計。
通過四旋翼飛行器上安裝的傳感器來實時檢測周圍環境,進而使飛行器根據周圍環境判斷是否改變當前飛行狀態。這一避障方案的基本結構可分為三個部分,第一部分是檢測模塊,即使用傳感器,感知周圍的障礙物;第二部分是通信模塊,即副控制板與飛控主板實現通信;第三部分決策模塊,即飛控主板根據得到的傳感器數據,進行判斷后,對飛行器發出相應的控制指令來控制飛行狀態,本文基于此原理實現四旋翼飛行器的避障飛行系統設計。
該模塊基于Arduino Uno R3(主控芯片ATMega328P,14個I/O口,內存32KB,時鐘頻率16MHz)芯片,該芯片通過UART串口與主控芯片相連接,通過I2C總線與四個方位的測距傳感器相連,通過輪詢方式向四個方向的傳感器請求數據。

圖1 無人機總體硬件結構
該模塊使用US-100超聲波傳感器(電壓5v,探測距離2cm~450cm,精度3mm),飛行器前、后、左、右四個方向分別安裝了超聲波測距傳感器,檢測飛行環境內可能存在的障礙物。在I2C總線上,四個不同方位的傳感器具有不同的地址(0xf0,0xf2,0xf4,0xf6),根據不同的地址副芯片便可識別來自不同方向的傳感器數據。測距傳感器采取IO觸發原理,當拉低傳感器TRIP引腳后給一個50μs高電平信號,傳感器開始一次測距,副芯片得到傳感器返回的數據后計算出距離。

圖2 避障飛行系統總流程

圖3 總線與串口圖示
四旋翼飛行器主控基于Pixhawk2.4.8開源飛控。Pixhawk開源硬件具有五個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相連,實現模塊間的物理連接。
Pixhawk2.4.8開源飛控采用STM32F427 Cortex M4為主處理器,具備陀螺儀、加速度、磁強儀、氣壓計等感應器,有25個UART接口和2個CAN IO接口,有14個PWM輸出口。
四旋翼飛行器一般通過控制各軸電機的轉速來控制飛行器的姿態,以實現轉彎、爬升、俯沖、橫滾等飛行狀態,其線運動與角運動間存在高度約束性。
Pixhawk飛控可分為三大部分:實時操作系統、中間件和飛行控制棧。NuttX實時操作系統的作用是進行底層的任務調度;PX4中間件提供設備驅動和uORB,負責各個模塊間的數據傳輸,運行于NuttX之上,實際上uORB是一套跨進程的IPC通訊模塊,在Pixhawk中所有的功能被獨立以進程模塊為單位工作,而進程間的數據交互要能夠符合實時、有序的特點;飛行控制??梢允褂肞X4的控制軟件棧,也可以使用APM:Plane、APM:Copter等,其運行于PX4中間件之上。

圖4
副控制模塊得到四個傳感器的數據后,需要通過串口將數據發送給主控制模塊,而在這兩個控制模塊間進行數據通信,需采用特定的通信協議。主控制模塊收到信息幀后將會解析幀格式,根據解析后得到的控制量來調整飛行姿態,信息幀由副控制器根據獲得的傳感器數據生成。

表1 信息幀格式
主控制模塊通過UART串口獲取數據,首先定義一個input_sonar_datas()函數,NuttX實時操作系統完成初始化等工作,接下來調用飛控核心庫中的px4_task_spawn_cmd()函數在NuttX中創建一個新的任務,uORB中進程間的數據通信要通過主題來進行,串口讀取完數據后調用orb_publish()完成主題發布,最后接收數據的進程訂閱主題并將input_sonar_datas()返回的值賦值給全局變量sonarDatas,sonarDatas即為主控收到的傳感器測量數據,主控模塊根據sonarDatas來生成控制信息。
當主控芯片接收到副控制板的信息幀后,首先要對幀格式進行解析,得到傳感器的測距信息,分析信息幀生成控制幀,最終根據控制幀來改變飛行姿態,從而實現規避障礙物。
對信息幀解析后可獲取傳感器測距信息sonarDatas,當發現某一方位距離小于安全值時,便需要及時調整飛行姿態避免與障礙物相撞,四軸飛行器通過pitch/row的角度大小控制產生的水平加速度,過大的水平加速度會造成側翻,但飛行器在高速遇到障礙物的緊急情況下,需要較大的加速度才能保證飛行安全,所以需要設置適當的加速度約束值。在滿足加速度約束值的條件下,生成控制幀controlDatas并將其轉化為電機驅動電路輸出的PWM信號,依靠螺旋槳間的轉速差實現飛行姿態的控制。

表2 控制幀格式
姿態控制部分分為內外環控制,內環控制角速度、外環控制角度??刂七^程是先根據目標姿態和當前姿態求出偏差角,然后通過角速度來修正這個偏差角,最終到達目標姿態。具體方法為,AP_Motors和AC_AttitudeController核心庫中的AP_MotorsMatrix.cpp和AP_Motors_Class.h是根據roll/pitch/yaw等參數改變電機進而影響飛行姿態的文件,根據sonarDatas來判斷是否進行飛行姿態調整,若需要則結合當前姿態中各個參數的數據生成相應的controlDatas,通過controlDatas來設定目標角度指令(_roll_target)與目標高度指令(_pitch_target),實現轉向從而避開障礙物。

圖5 飛行姿態控制
無人機的飛行姿態主要受pitch俯仰、yaw航向、roll橫滾、油門等參數影響,要想改變飛行姿態,需要擬合這些參數生成新的電機的控制信號。
飛行器進行PID調節并輸出需要調用AC_Attitude Control庫中的函數,例如rate_bf_to_motor_yaw()、rate_bf_to_motor_roll()、rate_bf_to_motor_pitch() 等方法,而AP_Motor庫中的set_pitch()、set_roll()、set_yaw()等方法將其轉化為電機混控信號,最后電機混控信號需要被解算為PWM信號,以便實現飛行姿態的改變。
飛控系統是四旋翼無人機的重要組成部分,作為開源飛控中最著名的項目之一,PX4被廣大無人機愛好者和學者研究,基于PX4實現自主避障功能的無人機具有重要的實際意義。環境感知系統是無人機的“眼睛”,通訊模塊是無人機的“神經”,主控避障系統是無人機的“大腦”,本文合理科學地設計了主控與副控之間的通訊,提供了傳感器-副控制芯片-主控制芯片-無人機的思路,就軟件架構設計進行了介紹,最終實現了無人機避障飛行系統的設計,給未來無人機智能化提供了借鑒意義。