魯青青 宋志強 陳豪



摘要:多旋翼無人機的自主著陸系統研究對于其智能應用具有重要作用。著重研究如何通過樹莓派3B和開源Pixhawk飛行控制器構建性價比高的多旋翼無人機自主著陸系統,從硬件構成、開發環境搭建、軟件仿真等方面做了較為詳細的介紹,可給經費緊張的研究人員搭建系統提供有益參考。仿真實驗和實物驗證證明了方案的可行性。
關鍵詞:樹莓派;PX4飛控;多旋翼無人機;自主著陸系統
中圖分類號: 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
無人機最初應用于軍事領域,近年來在民用領域,特別是搜救、災害監管、測繪、安防、農業、電力、交通、環保等領域均有無人機的身影。隨著現代技術的進步,特別是人工智能技術的快速發展,未來無人機+行業應用的模式具有廣闊的應用前景。目前無人機還不能做到完成自主地執行任務,其背后都有操作人員在控制,而無人機的主要優勢之一就是在無須大量人力勞動參與的前提下進行工作,因此提高無人機的自動化和智能化水平是目前迫切需要解決的問題。自主著陸操作對于其能否智能地完成作業任務有重要影響,是學術界和工業界均希望迫切解決的關鍵技術。Ruchanurucks等[1]提出一種自主著陸輔助系統綜合方法,該方法利用跑道上的標記作為算法的對象點,采用透視n點(PnP))算法控制固定翼無人機自動著陸。Wang等[2]采用紅外T形標記概念,使得固定翼無人機能夠在任何天氣條件下著陸。對于多點特征情況,使用單應性算法[3]來針對平面標記進行定位,但由于單應性的線性特性,當場景中出現一定程度的圖像噪聲時,輸出姿勢會出錯,這會導致著落中墜機。
對于自主著陸的研究,學術界主要集中于算法,對如何搭建無人機自主著陸硬件系統則鮮有研究。本文著重研究如何通過樹莓派3B和開源Pixhawk飛行控制器構建性價比高的多旋翼無人機自主著陸系統,可給經費緊張的研究人員搭建系統提供有益參考。
1 Pixhawk飛行控制器簡介
Pixhawk是由PX4開源項目小組聯合3DR公司于2014年推出的飛行控制器[4],Pixhawk開源飛控項目已在國內引起廣泛關注[5]。Pixhawk的開放性非常好,參數全部開放給開發者調整,其集成多種電子地圖,開發者可以根據當地情況進行選擇。Pixhawk被定位為下一代無人機飛控,系統具備的所有特征均符合未來無人機飛行控制系統未來發展的需求。Pixhawk飛行控制器的主要組成部分如下:
主控制器:32位STM32F427 ARM Cortex M4 核心外加浮點運算單元,主頻168MHz;
故障保護協處理器:32位STM32F103;
存儲器:2M RAM和256K運行內存;
三軸加速度計/陀螺儀:InvenSense MPU6000,測量將三軸加速度和角速度,用于后續姿態控制;
16位陀螺儀:ST Micro L3GD20,用于測量旋轉速度;
14位加速度計/磁力計:ST Micro LSM303D,用于確認外部影響和羅盤指向;
氣壓計:MS5611 MEAS,,用來測量高度。
2 基于Pixhawk的無人機組裝
采用Pixhawk飛行控制器結合自行采購的其他部件組裝無人機,組成無人機的主要部件如表1所示。
組裝后的無人機實物圖如圖1所示,飛行控制器固件采用開源固件PX4,地面站采用QGroundControl,運行于操作系統Ubuntu 16.04 LTS之上。
3基于樹莓派3B的無人機系統硬件構成
樹莓派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接口支持大電流輸出,可以給樹莓派供電,這樣樹莓派可作為機載電腦充當決策者的角色,決定無人機的飛行路線。
樹莓派3B安裝raspbian-stretch版操作系統,TF卡中寫入2018-11-13-raspbian-stretch.img系統鏡像,其內核為Linux。樹莓派3B充當高性能的機載指揮和決策平臺,可讀取飛行控制器的狀態信息,運行機器學習、圖像識別等程序,給飛行控制器發送指令,控制無人機的飛行。
4基于DroneKit的Python程序開發
樹莓派端采用Python進行程序設計,為達到快速開發的效果,采用DroneKit-Python庫,其提供了控制無人機的庫函數,代碼獨立于飛行控制器,可運行于機載電腦(本文將樹莓派3B作為機載電腦)上,可采用串口或無線方式通過MAVLink協議和飛行控制器通信。樹莓派操作系統raspbian-stretch或Ubuntu 16.04 LTS安裝DroneKit方法比較簡單,在終端輸入如下命令:
sudo pip install dronekit
4.1樹莓派3B下通用串口的設置
樹莓派3B通過串口和Pixhawk飛行控制器相連接(如圖2),但是樹莓派3B增加了藍牙功能,這一功能正好占用了開發想要使用的串口,故需要關閉藍牙功能并更改串口配置,使之變為通用串口,步驟如下:
1.關閉板載藍牙功能。打開終端,輸入語句:
sudo systemctl disable hciuart
2.恢復串口使用并設置為通用串口。
(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. 依次執行以下命令完成更新并重啟:
sudo apt-get update
sudo reboot
經過上述步驟后,樹莓派3B的串口變為通用串口,可以通過串口和飛行控制器通信。
4.2仿真環境搭建
在做樹莓派與飛行控制器聯調測試之前,應先對樹莓派端的Python程序進行仿真,以測試程序是否正確,這樣可最大程序地減少墜機的危險。在Ubuntu 16.04 LTS下進行仿真,環境的搭建步驟如下:
1.建立Pixhawk原生固件PX4編譯環境,具體可參考官方教程[6];
2.采用jMAVSim作為仿真軟件,在PX4源碼中自帶jMAVSim仿真源碼,路徑為:/Firmware/Tools/jMAVSim,因此不需要另外下載源碼。執行如下步驟:
(1) 打開終端,切換至Firmware文件夾:
cd Firmware
(2) 輸入以下指令:
make posix_sitl_default jmavsim
上述指令意思為將Firmware目標代碼編譯為posix系統軟件仿真代碼,并用JMAVSim仿真器打開編譯好的目標文件。
若編譯成功,則打開三維仿真界面。在仿真過程中JMAVSim終端會顯示來自仿真四旋翼無人機的MAVLink指令。三維仿真界面效果圖如圖3所示。
若安裝過程中出現如下錯誤:
"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函數將會返回一個Vehicle類型的對象