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