魯青青 宋志強 陳豪
摘要:多旋翼無人機的自主著陸系統(tǒng)研究對于其智能應(yīng)用具有重要作用。著重研究如何通過樹莓派3B和開源Pixhawk飛行控制器構(gòu)建性價比高的多旋翼無人機自主著陸系統(tǒng),從硬件構(gòu)成、開發(fā)環(huán)境搭建、軟件仿真等方面做了較為詳細的介紹,可給經(jīng)費緊張的研究人員搭建系統(tǒng)提供有益參考。仿真實驗和實物驗證證明了方案的可行性。
關(guān)鍵詞:樹莓派;PX4飛控;多旋翼無人機;自主著陸系統(tǒng)
中圖分類號: TP391? ? ? 文獻標識碼: A
文章編號:1009-3044(2019)13-0263-03
Abstract: The study of autonomous landing systems for multi-rotor UAVs plays an important role in their intelligent applications. Focusing on how to build a cost-effective multi-rotor UAV autonomous landing system by using Raspberry Pi 3B and open source Pixhawk flight controller, the hardware composition, development environment construction, software simulation and other aspects have been introduced in detail, which can provide useful reference for researchers with limited funds to build the system. Simulation experiments and physical verification prove the feasibility of the scheme.
Key words: Raspberry Pi; PX4 flight control; multi-rotor drone; autonomous landing system
無人機最初應(yīng)用于軍事領(lǐng)域,近年來在民用領(lǐng)域,特別是搜救、災(zāi)害監(jiān)管、測繪、安防、農(nóng)業(yè)、電力、交通、環(huán)保等領(lǐng)域均有無人機的身影。隨著現(xiàn)代技術(shù)的進步,特別是人工智能技術(shù)的快速發(fā)展,未來無人機+行業(yè)應(yīng)用的模式具有廣闊的應(yīng)用前景。目前無人機還不能做到完成自主地執(zhí)行任務(wù),其背后都有操作人員在控制,而無人機的主要優(yōu)勢之一就是在無須大量人力勞動參與的前提下進行工作,因此提高無人機的自動化和智能化水平是目前迫切需要解決的問題。自主著陸操作對于其能否智能地完成作業(yè)任務(wù)有重要影響,是學(xué)術(shù)界和工業(yè)界均希望迫切解決的關(guān)鍵技術(shù)。Ruchanurucks等[1]提出一種自主著陸輔助系統(tǒng)綜合方法,該方法利用跑道上的標記作為算法的對象點,采用透視n點(PnP))算法控制固定翼無人機自動著陸。Wang等[2]采用紅外T形標記概念,使得固定翼無人機能夠在任何天氣條件下著陸。對于多點特征情況,使用單應(yīng)性算法[3]來針對平面標記進行定位,但由于單應(yīng)性的線性特性,當(dāng)場景中出現(xiàn)一定程度的圖像噪聲時,輸出姿勢會出錯,這會導(dǎo)致著落中墜機。
對于自主著陸的研究,學(xué)術(shù)界主要集中于算法,對如何搭建無人機自主著陸硬件系統(tǒng)則鮮有研究。本文著重研究如何通過樹莓派3B和開源Pixhawk飛行控制器構(gòu)建性價比高的多旋翼無人機自主著陸系統(tǒng),可給經(jīng)費緊張的研究人員搭建系統(tǒng)提供有益參考。
1 Pixhawk飛行控制器簡介
Pixhawk是由PX4開源項目小組聯(lián)合3DR公司于2014年推出的飛行控制器[4],Pixhawk開源飛控項目已在國內(nèi)引起廣泛關(guān)注[5]。Pixhawk的開放性非常好,參數(shù)全部開放給開發(fā)者調(diào)整,其集成多種電子地圖,開發(fā)者可以根據(jù)當(dāng)?shù)厍闆r進行選擇。Pixhawk被定位為下一代無人機飛控,系統(tǒng)具備的所有特征均符合未來無人機飛行控制系統(tǒng)未來發(fā)展的需求。Pixhawk飛行控制器的主要組成部分如下:
主控制器:32位STM32F427 ARM Cortex M4 核心外加浮點運算單元,主頻168MHz;
故障保護協(xié)處理器:32位STM32F103;
存儲器:2M RAM和256K運行內(nèi)存;
三軸加速度計/陀螺儀:InvenSense MPU6000,測量將三軸加速度和角速度,用于后續(xù)姿態(tài)控制;
16位陀螺儀:ST Micro L3GD20,用于測量旋轉(zhuǎn)速度;
14位加速度計/磁力計:ST Micro LSM303D,用于確認外部影響和羅盤指向;
氣壓計:MS5611 MEAS,,用來測量高度。
2 基于Pixhawk的無人機組裝
采用Pixhawk飛行控制器結(jié)合自行采購的其他部件組裝無人機,組成無人機的主要部件如表1所示。
組裝后的無人機實物圖如圖1所示,飛行控制器固件采用開源固件PX4,地面站采用QGroundControl,運行于操作系統(tǒng)Ubuntu 16.04 LTS之上。
3基于樹莓派3B的無人機系統(tǒng)硬件構(gòu)成
樹莓派3B和Pixhawk飛行控制器的接線如圖2所示。Telem 2的5V連接樹莓派的5V (Pin 2);Telem 2的GND連接樹莓派的GND (Pin 6);Telem 2的RX連接樹莓派的TX (Pin 8);Telem 2的TX連接樹莓派的RX (Pin 10)。Pixhawk上,Telem 2的5V接口支持大電流輸出,可以給樹莓派供電,這樣樹莓派可作為機載電腦充當(dāng)決策者的角色,決定無人機的飛行路線。
樹莓派3B安裝raspbian-stretch版操作系統(tǒng),TF卡中寫入2018-11-13-raspbian-stretch.img系統(tǒng)鏡像,其內(nèi)核為Linux。樹莓派3B充當(dāng)高性能的機載指揮和決策平臺,可讀取飛行控制器的狀態(tài)信息,運行機器學(xué)習(xí)、圖像識別等程序,給飛行控制器發(fā)送指令,控制無人機的飛行。
4基于DroneKit的Python程序開發(fā)
樹莓派端采用Python進行程序設(shè)計,為達到快速開發(fā)的效果,采用DroneKit-Python庫,其提供了控制無人機的庫函數(shù),代碼獨立于飛行控制器,可運行于機載電腦(本文將樹莓派3B作為機載電腦)上,可采用串口或無線方式通過MAVLink協(xié)議和飛行控制器通信。樹莓派操作系統(tǒng)raspbian-stretch或Ubuntu 16.04 LTS安裝DroneKit方法比較簡單,在終端輸入如下命令:
sudo pip install dronekit
4.1樹莓派3B下通用串口的設(shè)置
樹莓派3B通過串口和Pixhawk飛行控制器相連接(如圖2),但是樹莓派3B增加了藍牙功能,這一功能正好占用了開發(fā)想要使用的串口,故需要關(guān)閉藍牙功能并更改串口配置,使之變?yōu)橥ㄓ么冢襟E如下:
1.關(guān)閉板載藍牙功能。打開終端,輸入語句:
sudo systemctl disable hciuart
2.恢復(fù)串口使用并設(shè)置為通用串口。
(1)編輯文檔 /boot/config.txt,命令如下:
sudo nano /boot/config.txt
在文檔末尾添加語句:
dtoverlay=pi3-miniuart-bt
(2)編輯文檔/boot/cmdline.txt,命令如下:
sudo nano /boot/cmdline.txt
將文檔中原來的console=serial0,115200 console=tty1修改為console=tty1,即刪除“console=serial0,115200 ”。
3. 依次執(zhí)行以下命令完成更新并重啟:
sudo apt-get update
sudo reboot
經(jīng)過上述步驟后,樹莓派3B的串口變?yōu)橥ㄓ么?,可以通過串口和飛行控制器通信。
4.2仿真環(huán)境搭建
在做樹莓派與飛行控制器聯(lián)調(diào)測試之前,應(yīng)先對樹莓派端的Python程序進行仿真,以測試程序是否正確,這樣可最大程序地減少墜機的危險。在Ubuntu 16.04 LTS下進行仿真,環(huán)境的搭建步驟如下:
1.建立Pixhawk原生固件PX4編譯環(huán)境,具體可參考官方教程[6];
2.采用jMAVSim作為仿真軟件,在PX4源碼中自帶jMAVSim仿真源碼,路徑為:/Firmware/Tools/jMAVSim,因此不需要另外下載源碼。執(zhí)行如下步驟:
(1) 打開終端,切換至Firmware文件夾:
cd Firmware
(2) 輸入以下指令:
make posix_sitl_default jmavsim
上述指令意思為將Firmware目標代碼編譯為posix系統(tǒng)軟件仿真代碼,并用JMAVSim仿真器打開編譯好的目標文件。
若編譯成功,則打開三維仿真界面。在仿真過程中JMAVSim終端會顯示來自仿真四旋翼無人機的MAVLink指令。三維仿真界面效果圖如圖3所示。
若安裝過程中出現(xiàn)如下錯誤:
"com.jogamp.opengl.GLException: J3D-Renderer-1: createImpl ARB n/a but required, profile > GL2 requested (OpenGL >= 3.1). Requested: GLProfile[GL3bc/GL3bc.hw], current: 3.0 (Compat profile, compat[ES2], FBO, hardware) - 3.0 Mesa 17.2.8"
則為OpenGL的版本問題,需要更新OpenGL版本,在終端按序輸入以下三條命令:
sudo apt-add-repository ppa:oibaf/graphics-drivers
sudo apt-get update
sudo ?apt-get dist-upgrade
在Ubuntu 16.04 LTS測試通過的Python程序在樹莓派3B上也能運行。進行仿真的Python程序部分源代碼如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import print_function
import time
from dronekit import connect, VehicleMode, LocationGlobalRelative
# 通過本地14540端口,使用UDP連接到JMAVSim
connection_string = '127.0.0.1:14540'
print('Connecting to vehicle on: %s' % connection_string)
# connect函數(shù)將會返回一個Vehicle類型的對象