魯青青 宋志強 陳豪
摘 要:首先通過樹莓派3B和開源Pixhawk飛行控制器構(gòu)建性價比高的多旋翼無人機,將Google深度學(xué)習(xí)框架TensorFlow應(yīng)用于多旋翼無人機著陸地標(biāo)識別,采用卷積神經(jīng)網(wǎng)絡(luò)模型,將無人機拍攝的停機坪、飛機場、水面、建筑物、森林、草地、道路等圖片作為訓(xùn)練集輸入神經(jīng)網(wǎng)絡(luò),通過多次訓(xùn)練校正神經(jīng)網(wǎng)絡(luò)參數(shù),得到可用于多旋翼無人機著陸時可識別停機坪的神經(jīng)網(wǎng)絡(luò)模型,為多旋翼無人機的自主著陸奠定了基礎(chǔ)。
關(guān)鍵詞:樹莓派;PX4飛控;多旋翼無人機;著陸地標(biāo)識別
中圖分類號: TP391 ? ? ? ? ? ? ? 文獻(xiàn)標(biāo)識碼: A
0? 引言
隨著現(xiàn)代技術(shù)的進(jìn)步,特別是人工智能技術(shù)的快速發(fā)展,未來無人機+行業(yè)應(yīng)用的模式具有廣闊的應(yīng)用前景。多旋翼無人機的起飛和著陸無需跑道,特別是其懸停的特征對于監(jiān)視一些感興趣的區(qū)域具有非常大的吸引力。自主著陸操作技術(shù)對于其能否智能地自主完成任務(wù)具有較大的影響,這也是學(xué)術(shù)界和工業(yè)界均希望迫切解決的關(guān)鍵技術(shù),多旋翼無人機能夠安全精準(zhǔn)地完成自主著陸成為多旋翼無人機技術(shù)應(yīng)用發(fā)展的重難點之一。深度學(xué)習(xí)技術(shù)近幾年在圖像、機器視覺、自然語言處理等領(lǐng)域取得了重大突破,基于TensorFlow的深度學(xué)習(xí)技術(shù)應(yīng)用日益廣泛[1-3],將其應(yīng)用于多旋翼無人機自主著陸地標(biāo)識別是有益的嘗試。
1? 基于Pixhawk的無人機組裝
采用Pixhawk飛行控制器[4]結(jié)合自行采購的其他部件組裝無人機,組成無人機的主要部件如表1所示。
組裝后的無人機實物圖如圖1所示,飛行控制器固件采用開源固件PX4,地面站采用QGroundControl,運行于操作系統(tǒng)Ubuntu 16.04 LTS之上。
基于Pixhawk飛行控制器的無人機主要硬件配置[5]:
主控制器:32位STM32F427 ARM Cortex M4 核心外加浮點運算單元,主頻168MHz;
故障保護(hù)協(xié)處理器:32位STM32F103;
存儲器:2M RAM和256K運行內(nèi)存;
三軸加速度計/陀螺儀:InvenSense MPU6000,測量將三軸加速度和角速度,用于后續(xù)姿態(tài)控制;
16位陀螺儀:ST Micro L3GD20,用于測量旋轉(zhuǎn)速度;
14位加速度計/磁力計:ST Micro LSM303D,用于確認(rèn)外部影響和羅盤指向;
氣壓計:MS5611 MEAS,,用來測量高度。
2? 基于樹莓派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ā)送指令,控制無人機的飛行。將連接有攝像頭的樹莓派與無人機通過串口連接后,樹莓派通過無人機供電,搭載樹莓派的無人機實物圖如圖3所示。
3? 著陸地標(biāo)識別系統(tǒng)設(shè)計
3.1? 著陸地標(biāo)圖片獲取
樹莓派系統(tǒng)上電啟動后自動啟動拍照程序。通過無人機在距離地面2米、4米、8米、12米時拍攝的停機坪照片(確保模型訓(xùn)練的強度),作為著陸地標(biāo)(停機坪)訓(xùn)練集。每次拍攝200張照片,每張照片拍攝時延時3秒,Python程序源代碼如下:
import cv2
import os
import numpy as np
import time
i=0
cap = cv2.VideoCapture(0)
while(1):
# get a frame
ret, frame = cap.read()
dir_name='/home/pi/video/'
if not os.path.isdir(dir_name):
os.makedirs(dir_name)
if i<200:
now=time.strftime("%Y-%m-%d-%H_%M_%S",time.localtime(time.time()))
cv2.imwrite(dir_name+now+'.jpg',frame)
time.sleep(3)
i+=1
else:
cap.release()
cv2.destroyAllWindows()
os._exit(0)
無人機在距離地面8米時,拍攝的其中一幅停機坪照片如圖4所示。
3.2? 其他圖片獲取
除通過無人機實際拍攝停機坪圖片作為訓(xùn)練、測試圖片外,還從百度圖片中下載水面、飛機場、建筑物、森林、草地、道路等圖片,和著陸地標(biāo)一起形成7個類別的訓(xùn)練集和測試集。
3.3? 圖片預(yù)處理
訓(xùn)練前,首先對獲取的圖片進(jìn)行預(yù)處理,將圖片轉(zhuǎn)維(reshape)成64×64大小,以節(jié)省訓(xùn)練時間。程序部分包括:制作Tfrecords數(shù)據(jù),將圖像的大小轉(zhuǎn)換成64*64,讀取Tfrecords數(shù)據(jù)獲得各個圖像所對應(yīng)的image和label,為后續(xù)的操作提供數(shù)據(jù)支持。完整的圖像識別步驟如圖5所示。
3.4? 模型構(gòu)建及模型訓(xùn)練
建立神經(jīng)網(wǎng)絡(luò)模型,將數(shù)據(jù)輸入到神經(jīng)網(wǎng)絡(luò)訓(xùn)練,并保存訓(xùn)練好的網(wǎng)絡(luò)參數(shù)。模型結(jié)構(gòu)表如表1所示。
表1網(wǎng)絡(luò)模型結(jié)構(gòu)表
3.5? 基于DroneKit的Python程序開發(fā)
樹莓派端采用Python進(jìn)行程序設(shè)計,為達(dá)到快速開發(fā)的效果,采用DroneKit-Python庫,其提供了控制無人機的庫函數(shù),代碼獨立于飛行控制器,可運行于機載電腦,本研究將樹莓派3B作為機載電腦,可采用串口或無線方式通過MAVLink協(xié)議和飛行控制器通信。樹莓派操作系統(tǒng)raspbian-stretch或Ubuntu 16.04 LTS安裝DroneKit方法比較簡單,在終端輸入如下命令:
sudo pip install dronekit
樹莓派3B通過串口可和Pixhawk飛行控制器通信。
3.6? 實驗環(huán)境搭建
在做樹莓派與飛行控制器聯(lián)調(diào)測試之前,應(yīng)先對樹莓派端的Python程序進(jìn)行仿真,以測試程序是否正確,這樣可最大程序地減少墜機的危險。在Ubuntu 16.04 LTS下進(jìn)行仿真,環(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目標(biāo)代碼編譯為posix系統(tǒng)軟件仿真代碼,并用JMAVSim仿真器打開編譯好的目標(biāo)文件。
若編譯成功,則打開三維仿真界面。在仿真過程中JMAVSim終端會顯示來自仿真四旋翼無人機的MAVLink指令。三維仿真界面效果圖如圖6所示。
若安裝過程中出現(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上也能運行。將訓(xùn)練好的模型應(yīng)用于無人機著陸仿真,無人機檢測到停機坪后,飛控就可以控制無人機飛向停機坪。代碼通過仿真測試后,將連接無人機的代碼修改為:vehicle= connect(‘/dev/ttyAMA0’,baud=57600,wait_ready=True),即可進(jìn)行樹莓派3B和無人機通過串口連接后的真機測試。
4? 結(jié)束語
多旋翼無人機的自主著陸系統(tǒng)研究對于其智能應(yīng)用具有重要作用。著重研究如何通過樹莓派3B和開源Pixhawk飛行控制器構(gòu)建性價比高的多旋翼無人機自主著陸系統(tǒng),從硬件構(gòu)成、開發(fā)環(huán)境搭建、基于TensorFlow的著陸地標(biāo)識別、軟件仿真等方面作了較為詳細(xì)的介紹,可給經(jīng)費緊張的研究人員搭建系統(tǒng)提供有益參考,仿真實驗證明了方案的可行性。機載電腦與飛行控制器相連,機載電腦作為指揮和決策平臺,采用Python程序結(jié)合DroneKit庫開發(fā)機器學(xué)習(xí)、圖像識別等程序,以便機載電腦控制飛行控制器的動作,使之具備更高的智能。本文通過樹莓派3B作為機載電腦,詳細(xì)闡述了這一方案的可行性,對于使用Pixhawk開源飛行控制器的開發(fā)者進(jìn)行二次開發(fā)具有很好的借鑒意義。
參考文獻(xiàn):
[1] 劉帆, 劉鵬遠(yuǎn), 李兵, et al. TensorFlow平臺下的視頻目標(biāo)跟蹤深度學(xué)習(xí)模型設(shè)計[J]. 激光與光電子學(xué)進(jìn)展, 2017,(9):283-291.
[2] 馮偉, 易綿竹, 馬延周. 基于TensorFlow的俄語詞匯標(biāo)音系統(tǒng)[J]. 計算機應(yīng)用, 2018,38(4):971-977.
[3] 張春露, 白艷萍. 基于TensorFlow的LSTM模型在太原空氣質(zhì)量AQI指數(shù)預(yù)測中的應(yīng)用[J]. 重慶理工大學(xué)學(xué)報(自然科學(xué)), 2018, 32(8):143-147.
[4] 華清遠(yuǎn)見.飛行控制器Pixhawk簡介[EB/OL].http://emb.hqyj.com/Column/7615.html,2018-08-15/2019-04-26.
[5] 楊小川, 劉剛, 王運濤, 等. Pixhawk 開源飛控項目概述及其航空應(yīng)用展望[J]. 飛航導(dǎo)彈, 2018,(4): 25-32.
[6] DroneCode.Linux開發(fā)環(huán)境[EB/OL]. http://dev.px4.io/zh/ setup/dev_env_linux.html, 2019-01-01 /2019-04-26.