当前位置:无忧公文网 >范文大全 > 征文 > 基于树莓派和Pixhawk的多旋翼无人机自主着陆系统的研究

基于树莓派和Pixhawk的多旋翼无人机自主着陆系统的研究

时间:2022-03-24 09:17:05 浏览次数:


打开文本图片集

摘要:多旋翼无人机的自主着陆系统研究对于其智能应用具有重要作用。着重研究如何通过树莓派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类型的对象

# 即无人机的主体,通过vehicle对象,可直接控制无人机

vehicle = connect(connection_string, wait_ready=True)

# 定义ArmandTakeoff函数,无人机解锁并起飞到目标高度

# 参数aTargetAltitude即为目标高度,单位为米

def ArmandTakeoff(aTargetAltitude):

#进行起飞前检查

print("Basic pre-arm checks")

# vehicle.is_armable会检查飞行控制器是否启动完成、有无GPS等

# 是否初始化完毕。若以上检查通过,则会返回True

while not vehicle.is_armable:

print(" Waiting for vehicle to initialise...")

time.sleep(1)

# 解锁无人机,电机开始旋转

print("Arming motors")

# 将无人机的飞行模式切换成"GUIDED"

vehicle.mode = VehicleMode("GUIDED")

# 设置vehicle.armed状态变量为True,解锁无人机vehicle.armed = True

# 在无人机起飞之前,确认电机已经解锁

while not vehicle.armed:

print(" Waiting for arming...")

time.sleep(1)

# 发送起飞指令

print("Taking off!")

vehicle.simple_takeoff(aTargetAltitude)

# 在无人机上升到目标高度之前,阻塞程序

while True:

print(" Altitude: ", vehicle.location.global_relative_frame.alt)

# 当高度上升到目标高度的0.95倍时,即认为达到了目标高度,退出循环

if vehicle.location.global_relative_frame.alt >= aTargetAltitude * 0.95:

print("Reached target altitude")

break

# 等待1秒

time.sleep(1)

# 调用ArmandTakeoff函数,设置目标高度20m

ArmandTakeoff (20)

……

仿真时若一直显示" Waiting for vehicle to initialise...",则可先将起飞前检查的代码注释掉后测试。上述代码通过仿真测试后,将vehicle = connect(connection_string, wait_ready=True)

改为vehicle= connect(‘/dev/ttyAMA0’,baud=57600, wait_ready=True)即可进行树莓派3B和无人机通过串口连接后的真机测试。

5 结束语

通过树莓派3B作为机载电脑作为指挥和决策平台,采用Python程序结合DroneKit库开发机器学习、图像识别等程序,以便机载电脑控制飞行控制器的动作,使之具备更高的智能。本文详细阐述了这一方案的可行性,对于使用Pixhawk开源飞行控制器的开发者进行二次开发具有很好的借鉴意义。

参考文献:

[1] Ruchanurucks M, Rakprayoon P, Kongkaew S. Automatic Landing Assist System Using IMU+ PnP for Robust Positioning of Fixed-Wing UAVs[J]. Journal of Intelligent & Robotic Systems, 2018, 90(1-2): 189-199.

[2] Xiao-Hong W, Gui-Li X, Yu-Peng T, et al. UAV"s automatic landing in all weather based on the cooperative object and computer vision[C]//Instrumentation, Measurement, Computer, Communication and Control (IMCCC), 2012 Second International Conference on. IEEE, 2012: 1346-1351.

[3] Gonçalves T, Azinheira J, Rives P. Homography-based visual servoing of an aircraft for automatic approach and landing[C]//Robotics and Automation (ICRA), 2010 IEEE International Conference on. IEEE, 2010: 9-14.

[4] 華清远见.飞行控制器Pixhawk简介[EB/OL].http://emb.hqyj.com/Column/7615.html,2018-08-15/2019-01-24.

[5] 杨小川, 刘刚, 王运涛, 等. Pixhawk 开源飞控项目概述及其航空应用展望[J]. 飞航导弹, 2018,(4): 25-32.

[6] DroneCode.Linux开发环境[EB/OL].http://dev.px4.io/zh/setup/dev_env_linux.html, 2019-01-01 /2019-01-25.

【通联编辑:梁书】

推荐访问: 无人机 着陆 自主 旋翼 研究