APP下载

无人机飞行控制程序在树莓派上的移植

2016-02-13林志洁周旭宝

浙江科技学院学报 2016年6期
关键词:控制程序树莓旋翼

韩 宇,林志洁,周旭宝

(1.浙江科技学院 信息与电子工程学院,杭州 310023;2.温州市文成县科学技术局,浙江 文成 325300)

无人机飞行控制程序在树莓派上的移植

韩 宇1,林志洁1,周旭宝2

(1.浙江科技学院 信息与电子工程学院,杭州 310023;2.温州市文成县科学技术局,浙江 文成 325300)

基于无人机应用的扩大及微型板载电脑性能的提高,提出一种将APM(ArduPilotMega)飞行控制程序移植到树莓派微型板载电脑的方法,并增加视频回传功能。对该方法进行实验验证,结果表明:采用此方法可使无人机拥有更好的飞行稳定性和实时视频回传的功能。该研究对无人机的飞行控制具有一定的参考价值。

无人机;飞行控制;树莓派;APM(ArduPilot Mega)

无人机(unmanned aerial vehicle, UAV)是一种由预设程序操控或遥控设备操控的无人驾驶的航空器,低损耗、低成本、零伤亡、高机动性和可重复使用等优点使其在军事、民用和科学研究三大领域得到广泛应用。飞行控制器,即自动驾驶仪(autopilot),代替飞机驾驶员来控制无人机的飞行,是无人机的组成核心和控制核心[1-2]。近年来,无人机和飞行控制器技术越来越成熟,微型板载电脑的性能越来越高,各种传感器的灵敏度和抗干扰能力也越来越好。因此,将高性能的微型板载电脑作为无人机的飞行控制器成为现实,其性能足够用来运行机器视觉、ROS、光流测速、图像捕捉、视频实时回传及双目避障等程序,亦可方便地接入网络实现云端控制。微型板载电脑结合无人机在行业的应用具有一定的创新性和实际意义。因此,飞行控制成了对无人机研究的焦点。

张昊天等[3-6]采用了APM飞行控制程序及与该飞行控制程序适配的单片机作控制器,该单片机成熟且工作稳定,但主频低、运算性能弱,不能满足视频实时传输等对计算能力要求较高的应用条件。袁博等[7-8]基于树莓派硬件平台研发飞行控制程序,但研发的飞行控制程序不如现有开源飞行控制程序功能强大,其飞行控制程序仅适用于其特定硬件和用途,且不支持GPS定位和自动巡航等功能。王利民等[9-12]研究了基于航拍图像的机器视觉技术,这类研究在现有无人机上加装了复杂的独立摄像装置以实现图像采集,但其额外增加的重量极大增加了无人机的功耗。

针对上述不足,本研究将高性能的微型板载电脑作为无人机的主控,并基于该高性能板载电脑实现实时视频回传的功能。

1 飞行控制器嵌入式平台与控制程序的选择

由于微型板载电脑要搭载在无人机上,对其体积、重量和功耗要求较高。综合对比Arduino、Galileo、Mini2440和Raspberry Pi四种主流嵌入式平台的性能(CPU主频分别为16、400、400、1 200 MHz),性能强大的树莓派(Raspberry Pi)成为了本研究首选嵌入式平台。

在飞行控制程序的选择上,本研究选择了APM(ArduPilot Mega)这款开源飞行控制程序。它由DIY Drones社区和3D Robotics公司共同发起,在开源社区有数百位爱好者负责维护,支持固定翼机、多旋翼机和直升机等,可以支持上百个三维航点,使用强大的MAVLink协议,支持双向遥测站和飞行中任务设置等[13],是开源社区中开发最久的飞行控制程序。

2 飞行控制器的主要技术路线

因APM的官方代码已经向Linux做了移植,故理论上可使得其在树莓派(运行Raspbian操作系统,基于Debian)上运行,具体实现思路如下。

移植:APM飞行控制器的硬件部分主要包括作数据处理、信号输出的单片机和收集无人机飞行信息的传感器。要使用树莓派作处理器则需要为树莓派配备合适的传感器,同时,修改程序与传感器相关的部分代码,使程序能与传感器进行通信。

改进:采用树莓派连接摄像头,程序使用系统接口从摄像头中采集图片,对用户的请求返回图片,通过连续的图片流组成了视频。

无人机飞行控制整体结构如图1所示。

2.1 硬件部分

树莓派是一款只有银行卡大小的ARM架构的微型板载电脑,其软硬件平台已经比较成熟且性能较好,最新硬件版本为树莓派3Model B,CPU 1.2 GHz*4, 1 GB RAM,有GPU,可使用CSI接口的摄像头。有1路SPI总线(通过片选可接2个设备)和2路I2C总线,其引脚如图2[14]所示。其中MOSI、MISO、SCLK、CE0、CE1为SPI总线,SCL0、SDA0、SCL1、SDA1为I2C总线[15]。

飞行控制器中仅有树莓派是不够的,还需要传感器为树莓派提供飞行数据。其中,陀螺仪可以采集角速度,加速度计可以采集线加速度,这两组数据是无人机飞行必须的信息[16];气压传感器可以采集气压并算出海拔高度,帮助无人机稳定高度,磁场传感器可以采集地磁,帮助无人机稳定方向。本研究只使用了此4种传感器作测试。另外,由于树莓派只有1路硬件PWM输出,故应另外使用芯片扩展PWM输出。飞行控制器所需硬件见表1,硬件连接如图3所示。

图2 树莓派引脚Fig.2 Pin of Raspberry Pi

图3 无人机飞行控制硬件连接Fig.3 Hardware connection of UAV flight control

2.2 软件部分

软件部分基于APM开源飞行控制程序,对应上述硬件架构,增加实时视频回传功能。由于树莓派原版的操作系统是非实时操作系统,而作为飞行控制器要保证中断响应时间是可控的,所以,要增加实时补丁,重新编译内核和飞行控制程序代码。

ArduPilot的代码主要分为vehicle directories、AP_HAL、libraries、tools directories、external support code这5个主要部分,AP_HAL为硬件抽象层[17,18],该层为不同的硬件定义了统一的接口,其下各模块为有对具体硬件平台的适配程序,AP_HAL_Linux为官方代码对Linux平台做的移植,应对该目录下的程序进行修改。即要将负责同模块通信的程序中的引脚定义、地址定义等与实际硬件模块对应,例如,pca9685的时钟是内部时钟,通道映射也有区别,于是要将源码中/libraries/AP_HAL_Linux/HAL_Linux_Class.cpp文件的第173行改为static RCOutput_PCA9685 rcoutDriver(i2c_mgr_instance.get_device(1,PCA9685_PRIMARY_ADDRESS ), false,0,RPI_GPIO_27)。

图4 实时视频回传数据流Fig.4 Data flow of real-time video viewing

对于实时视频回传功能,参考了开源项目mjpg-streamer[19-20]的方法,即使用摄像头采集数据之后以流的形式通过网络来传输,其数据流如图4所示。

核心实现步骤为:

1)用一个给定的结构体描述摄像头采集图片的大小和编码格式等设置信息,利用Linux的V4L2接口,通过ioctl将有设置信息的结构体写入驱动来实现对摄像头的初始化。

2)通过ioct读取摄像头采集的图片,通过mmap来实现内存的映射,将图片放在全局内存中。

图5 实时视频回传程序流程Fig.5 Program flow of real-time video viewing

3)通过基于TCP的socket通信来实现对http请求的响应,新建一个socket对象绑定一个端口并对其监听,读取内存中的图片并通过网络进行输出。输出连续的图片流就组成了视频。

实时视频回传程序流程见图5。

为提高编译效率,可以使用有Linux环境的PC机交叉编译,具体步骤为:

1)下载树莓派内核源码,该源码已在GitHub中开源[21]。

2)配置编译选项,对于实验用的树莓派3B应执行以下命令。

i.cd linux

ii.KERNEL=kernel7

iii.make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig

3)下载工具链。

4)根据树莓派内核版本对应版本下载相应的补丁[22],之后解压下载的文件并应用该补丁,命令如下。

i.gunzip patch-4.1.10-rt11.patch.gz

ii.cat patch-4.1.10-rt11.patch | patch -p1

5)编译内核和飞行控制程序,使用以下命令编译内核。

i.make -j4 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs

使用以下命令编译飞行控制程序。

ii.cd ArduCopter

iii.make-j4 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- ArduCopter

3 实验测试

采用普通四旋翼飞行器机架和动力部分,支持S.BUS协议的遥控器和接收器进行实验。在实验中,飞行器在遥控器控制下完成升降、定高悬停等动作,并通过网络进行视频实时回传。实验测试结果表明,树莓派与各模块工作正常,飞行控制程序移植成功。飞行器测试情况如图6~7所示。

图6 无人机飞行实验Fig.6 UAV flight test

图7 无人机回传视频截图Fig.7 Screenshots of UAV real-time video viewing

由于目前无同类飞行器的航拍图像稳定性研究,故需自行做对照实验,以测试所移植飞行控制器的稳定性。实验在无风时同时起飞采用移植飞行控制器的四旋翼飞行器和采用APM原版飞行控制器四旋翼飞行器加装摄像装置的飞行器,使其稳定在空中并录制视频,对其所摄视频的第10帧至第40帧相对于第10帧的图像位移进行分析,结果见图8。由图8可以得出,采用移植飞行控制的飞行器视频抖动较小,飞行较稳定,具有更好的飞行稳定性。

图8 无人机回传视频逐帧位移分析Fig.8 Displacement analysis frame by frame on UVA video viewing

4 结 语

本文通过对无人机飞控的研究,提出并实现了移植APM飞行控制程序运行在树莓派上的方案,并在实验中使用树莓派摄像头完成了图像捕捉和视频录制。搭载该飞行控制器的无人机较之市面上的其他无人机有着更高的硬件性能和更好的可扩展性,可为今后实现无人机机器视觉等研究提供参考。

[1] FAHLSTORM P G, GLEASON T J. Introduction to UAV Systems[M]. New Delhi: John Wiley & Sons, 2012:12.

[2] 李晓锋,程莉,蔡雨辰,等.基于集成数字化的月地高速再入返回飞行器飞控支持系统[J].中国科学(技术科学),2015,45(3):284.

[3] 张昊天.基于多旋翼无人机的实时红外图像采集系统的设计[D].南京:南京林业大学,2015:15.

[4] 张腾.基于智能手机运动感知的小型无人飞行器姿态控制[D].哈尔滨:哈尔滨工业大学,2014:16.

[5] 董晓婉.基于APM飞控板的模型直升机控制技术研究[D].北京:北方工业大学,2016:18.

[6] 商博.基于ROS的室内四旋翼飞行器SLAM研究[D].沈阳:东北大学,2013:17.

[7] 袁博,陈昕,高铭.基于四旋翼飞行器的航拍增稳云台系统的控制算法[J].数字技术与应用,2016(1):116.

[8] 曾亚坚.小型四旋翼飞行器集群协作实验平台设计[D].大连:大连理工大学,2013:10.

[9] 王利民,刘佳,杨玲波,等.基于无人机影像的农情遥感监测应用[J].农业工程学报,2013,29(18):136.

[10] 王琳.基于双目立体视觉技术的桥梁裂缝测量系统研究[D].上海:上海交通大学,2015:17.

[11] 汤明文,戴礼豪,林朝辉,等.无人机在电力线路巡视中的应用[J].中国电力,2013(3):35.

[12] 常燕敏.无人机影像在地震灾区道路损毁应急评估中的应用研究[D].成都:西南交通大学,2013:12.

[13] APM Studio. GitHub-ArduPilot/ardupilot: ArduPlane, ArduCopter, ArduRover source[EB/OL]. [2015-10-11]. https:∥github.com/ArduPilot/ardupilot.

[14] The Raspberry Pi Foundation. GPIO: Models A+, B+, Raspberry Pi 2 B and Raspberry Pi 3 B-Raspberry Pi Documen-tation[EB/OL].[2016-05-01].https:∥www.raspberrypi.org/documentation/usage/gpio-plus-and-raspi2/README.md.

[15] The Raspberry Pi Foundation. Raspberry Pi 3 Model B-Raspberry Pi[EB/OL].[2016-05-01].https:∥www.raspberrypi.org/products/raspberry-pi-3-model-b/.

[16] 蔡红专,牟涛,刘静超,等.一种农用喷洒无人机飞控系统的设计[J].农业与技术,2015,35(17):41.

[17] 路青起,席丹丹.嵌入式Linux系统移植[J].国外电子测量技术,2014(12):78.

[18] 耿道渠,郭春,李小龙,等.基于ARM9的嵌入式Linux系统移植研究与QoS功能实现[J].四川大学学报(自然科学版),2014,51(4):719.

[19] STOEVEKEN T. MJPG-streamer download | SourceForge.net[EB/OL]. [2015-11-25]. https:∥sourceforge.net/projects/mjpg-streamer/.

[20] STOEVEKEN T. GitHub - jacksonliam/mjpg-streamer: Fork of http:∥sourceforge.net/projects/mjpg-streamer/[EB/OL]. [2014-11-25]. https:∥github.com/jacksonliam/mjpg-streamer.

[21] The Raspberry Pi Foundation. GitHub-raspberrypi/linux: Kernel source tree for Raspberry Pi Foundation-provided kernel builds. Issues unrelated to the linux kernel should be posted on the community forum at https:∥www.raspberrypi.org/forum[EB/OL]. [2015-02-24]. https:∥github.com/raspberrypi/linux.

[22] Linux Kernel Organization, Inc. Index of /pub/linux/kernel/projects/rt[EB/OL]. [2015-11-02]. https:∥www.kernel.org/pub/linux/kernel/projects/rt/.

Transplantation of UAV flight control program on Raspberry Pi

HAN Yu1, LIN Zhijie1, ZHOU Xubao2

(1.School of Information and Electronic Engineering, Zhejiang University of Science and Technology, Hangzhou 310023,China; 2.Science and Technology Bureau of Wencheng County, Wencheng 325300, Zhejiang, China)

Base on the widening of UVA applications and improvement of the performance of micro-board computer in recent years, this paper presents a method of transferring APM flight control program to the raspberry mini-on-board computer adding real-time video viewing capabilities. The method is tested experimentally, and the experimental results show that this method can make the UAV stability better and with the real-time video capability viewing, which has some reference value for UVA flight control.

unmanned aerial vehicle(UAV); flight control; Raspberry Pi; APM(ArduPilot Mega)

10.3969/j.issn.1671-8798.2016.06.004

2016-11-28

国家级大学生创新创业训练计划项目(201611057006);浙江省科技计划项目(2017C3317);浙江科技学院教师教学发展专题研究项目(教务处[2015]2号);浙江科技学院引进企业优秀课程项目(浙科院教[2015]37号)

韩 宇(1996— ),男,山东省济宁人,2014级计算机科学与技术专业本科生。

林志洁,讲师,博士研究生,主要从事计算机视觉、数字图像处理研究。

TP319;V249.1

A

1671-8798(2016)06-0433-06

猜你喜欢

控制程序树莓旋翼
山间“小精灵”
——树莓
改进型自抗扰四旋翼无人机控制系统设计与实现
大载重长航时油动多旋翼无人机
基于PLC的变电站备用电源自动投入装置控制程序的研究
基于树莓派的骑行智能头盔设计
基于STM32的四旋翼飞行器的设计
基于树莓派的远程家居控制系统的设计
未成年人刑事案件撤回起诉制度立法思考
黄金水果红树莓
四旋翼无人机动态面控制