吴文秀 关志全 汪磊 郑军斌 阳璞琼
摘 要:无人机广泛应用于军事、农业、交通运输等方面,具有巨大的应用潜力和广阔前景。受电池能量密度和能量利用效率等因素的制约,无人机机载电池没有足够的续航能力,发挥不了最大优势。为提高无人机的飞行续航能力,采用无线充电基站对无人机进行充电。为达到无线充电的最大充电效率,需要实现无人机精确降落。为了实现无人机的定点降落,提高定点飞行能力,提出了一种GPS和视觉识别相结合定点降落方法。首先通过pixhawk飞控模块配合M8N模块来进行GPS定位,使无人机到达充电基站附近,然后通过再启用视觉辅助(openmv)实现较精准的降落。实验结果表明,无人机能够准确识别充电基站从而实现定点降落。
关键词: 无人机;视觉识别;openmv;定点降落
文章编号: 2095-2163(2021)01-0041-05 中图分类号:V279;V249 文献标志码:A
【Abstract】Unmanned Aerial Vehicle (UAV) is widely used in military, agriculture, transportation and other fields, and has great application potential and broad prospects. Restricted by factors such as battery energy density and energy utilization efficiency, the onboard battery of UAV does not have enough endurance, which can't give full play to its advantages. In order to improve the flight endurance of UAV, wireless charging base station is used to charge UAV. In order to achieve the maximum charging efficiency of wireless charging, it is necessary to realize the accurate landing of UAV. In order to realize the fixed-point landing of UAV and improve its fixed-point flight capability, a fixed-point landing method combining GPS and visual recognition is proposed. At first, the pixhawk flight control module is matched with M8N module to carry out GPS positioning, so that the UAV can reach the vicinity of the charging base station, and then, the visual aid (openmv) is enabled again to achieve a more accurate landing. The experimental results show that the UAV can accurately identify the charging base station and realize fixed-point landing.
【Key words】UAV; visual recognition; openmv; fixed point landing
0 引 言
目前,各類科技创新有效地推动了现代无人机技术的发展,无人机广泛用于气象探测、灾害监测、农药喷洒、地质勘测、地图测绘、交通管制等诸多领域[1-5]。近些年来,无人机技术取得了长足进步,且应用领域正在不断拓展,对其各项技术指标也随即提出了更高的要求。传统的无人机技术主要依靠惯性导航系统(Inertial Navigation System, INS)和全球定位系统(Global Position System, GPS)进行导航,然而,导航过程中的惯性器件具有累积误差,对初始值过于敏感,而GPS并不总是可获取的,并且即使是可获取,精度也无法满足无人机导航要求[6-7]。随着现代技术的发展,计算机视觉导航开始逐步走上无人机技术领域的舞台[8-11]。计算机视觉技术利用搭载的摄像头获取外界环境的数字图像信息,通过计算机算法分析解算获取图像的有效信息[12-14],比如形状、尺度等,无人机根据这些有效信息进行相应的操作到达目的地。张义桢等人[15]提出了一种基于二维码图像识别的无人机定位方法。AprilTag标志的样式与二维码比较相似但是却没有那么复杂,可以减少处理器所需要的计算量,满足一些实时性的要求。
本文主要研究了无人机的定点降落相关技术,系统的主要流程是先通过GPS使无人机降落到充电基站附近,再通过视觉装置openmv识别充电基站上的AprilTag图标,实现定点降落。研究了openmv与飞控pixhawk之间的通信以及openmv识别AprilTag图标的相关代码编写和测试。
1 系统总体设计
以实现无人机的定点降落为目标进行系统设计,系统整体框图如图1所示。
为实现无人机的定点降落控制过程,先通过GPS导航至指定地点附近(无人机充电基站位置),依靠气压计和加速度计控制好高度(GPS数据和高度数据由当前选择降落的无线充电基站提供),再启用视觉辅助实现较精准的降落。系统主要涉及到飞控和视觉模块两大块,飞控和视觉处理模块均搭载在同一架无人机平台上。电脑端作为主机端,负责接收无人机数据和传达指令给无人机[16-18]。
电脑控制台与无人机间,无人机搭载的飞控模块和视觉模块间都需要进行通信。电脑控制台主要与pixhawk飞控模块进行信息交流,而pixhawk与openmv(视觉模块)之间也可直接通信。由此看出,pixhawk是整个自动降落系统中比较核心的部分,并且将全面控制着无人机的运动,处理来自电脑端和openmv的数据,其中电脑控制台与pixhawk间的通信不再赘述。
2 视觉定位原理
视觉定位采用开源视觉模块openmv。这部分的主要作用为:当无人机通过GPS导航至充电基站附近时(x,y,z方向距离在1 m左右),启用摄像头,在当前视野中搜寻目标点。
基站上需要安装带有一定信息量的标识,帮助视觉模块判断当前自己相对于目标点的位置。需要多个自由度的信息,分别指的是x,y,z轴的位移和yaw(或者说z轴)旋转角度(以无人机为参考点)。
暂定的对齐步骤为(以下步骤均以无人机为原点建立坐标系,见图2,且各步骤的定位信息来源均依靠视觉模块,不再依靠GPS):
(1)旋转。机头到与充电基站头部平行(以无人机机头与机尾所在直线位于x轴,如果基站的对准未做特殊要求的话,0°和180°均可,默认对齐到0°)的状态。
(2)高度不变,水平平移。此时通过测得的x,y轴距离值,控制好无人机的飞行姿态后,再飞行到充电基站的正上方。
(3)控制无人机平稳下落至目标点上,下落过程中,不断进行距离及旋转角度的校正[19-20]。
采用AprilTag标志标识充电基站,AprilTag是一个第三方的视觉基准库而且在机器人位置识别等领域得到了广泛使用。一些AprilTag标志如图3所示。使用AprilTag进行位置计算时可以分为2步:获取tag和计算tag。其中,获取tag基本方法是去寻找场景中可能是属于tag系列的各种图样,这种图形样式也有利于辨别黑白边缘特征。将tag标识的外观信息提取完毕,还需要相机的焦距和图像分辨率大小信息。相机的焦距由使用的openmv摄像头参数决定,图像分辨率则由具体编程和实际测试确定[21-22]。
3 软件设计
3.1 系统总体软件流程
无人机定点自动降落过程中,首先通过GPS定位降落到目标点附近,打开openmv摄像头,系统获取到AprilTag标志时,无人机进入自稳模式。自稳模式下,无人机的油门及角度控制没有被锁定,控制很自由。对获取到的AprilTag标志进行分析,通过pixhawk调整无人机姿态完成降落。整个系统软件流程图如图4所示。
pixhawk代码的主要编写位置在“自稳模式”代码处,基于该模式,进行与openmv联动的代码编写。
3.2 视觉处理模块软件流程
视觉处理方面使用openmv模块,加上AprilTag标识来实现无人机的位置计算。openmv部分代码的主要功能为計算当前相对于目标点的位置,并通过串口按照自订协议传输相关数据[23]。openmv视觉处理流程如图5所示。
4 软件程序代码设计
视觉处理主要代码参见如下:
sensor. reset()
sensor. set_pixformat(sensor. RGB565)
sensor. set_framesize(sensor. QQVGA)
sensor. skip_frames(time=2 000)
sensor.set_auto_gain(False)#关闭自动增益
sensor.set_auto_whitebal(False)#关闭白平衡
clock=time.clock()
uart=UART(3,115200)#定义串口3变量
uart.init(115200,bits=8,parity=None,stop=1)#串口配置定义
这里设置好了openmv的一些基本参数。sensor.set_pixformat用于设置像素模式,代码里设置为彩色图像模式RGB565,每个像素16bit。sensor.set_framesize用于设置图像的分辨率,这里考虑到了stm32的性能和需要的帧率要求,将其值设为sensor.QQVGA,即openmv里定义的160×120分辨率。set_auto_gain(False)和set_auto_whitebal(False)用于关闭openmv的自动增益和白平衡的功能,因为这2个功能对AprilTag的处理有影响。时钟和串口的初始化代码依次展开如下:
f_x = (2.8 / 3.984) * 160 # 默认值
f_y = (2.8 / 2.952) * 120 # 默认值
c_x = 160 * 0.5 # 默认值(image.w * 0.5)
c_y = 120 * 0.5 # 默认值(image.h * 0.5)
img = sensor.snapshot() #截取一帧图像
for tag in img.find_apriltags(fx=f_x, fy=f_y, cx=c_x, cy=c_y): # 默认为TAG36H11
代码中,find_apriltags()函数可获取摄像头相对于当前目标的位置和角度信息,然后将处理得到的值存储到tag中。函数的传入值共有4个,即:fx,fy,cx和cy,其他传入值没写出则保持默认(默认选择AprilTag的TAG36H11家族)。在设置上面提到的4个值时,需根据一些硬件配置和软件配置进行选择。图中的2.8代表的是所用摄像头的焦距信息。而3.984和2.952两个值则是所使用的感光元件尺寸(本课题使用的openmv型号为openmv3,感光元件为ov7725)。160与120即是所设置的分辨率了。0.5为默认值,无需变动。sensor.snapshot()函数为立即截取当前摄像头图像。每截取一张图像,即开始寻找AprilTag标识,初步计算出相对位置和角度。位置及角度的转换代码详见如下。
p_x[0]=int(tag.x_translation()*k1/100%10)#获取x轴位移的个位(单位m)
p_x[1]=int(tag.x_translation()*k1/10%10)#获取x轴位移的0.1位(单位m)
p_x[2]=int(tag.x_translation()*k1/1%10)#获取x轴位移的0.01位(单位m)
p_y[0]=int(tag.y_translation()*k1/100%10)#获取y轴位移的个位(单位m)
p_y[1]=int(tag.y_translation()*k1/10%10)#获取y轴位移的0.1位(单位m)
p_y[2]=int(tag.y_translation()*k1/1%10)#获取y轴位移的0.01位(单位m)
p_z[0]=int(tag.z_translation()*k1/100%10)#获取z轴位移的个位(单位m)
p_z[1]=int(tag.z_translation()*k1/10%10)#获取z轴位移的0.1位(单位m)
p_z[2]=int(tag.z_translation()*k1/1%10)#获取z轴位移的0.01位(单位m)
r_z[0]=int(degrees(tag.z_rotation())/100%10)#获取z轴角度的百位(单位(°))
r_z[1]=int(degrees(tag.z_rotation())/10%10)#获取z轴角度的十位(单位(°))
r_z[2]=int(degrees(tag.z_rotation())/1%10)#获取z轴角度的个位(单位(°))
通过实际测试,可以得到一个AprilTag测出的距离与实际距离的比例值k1,然后在运算时考虑进去。角度无需使用比例系数,但需要进行弧度与角度的转换(degrees()函数)。位置和角度将按照协议规定进行处理。之后即可调用相应的串口发送函数将信息传递到pixhawk端。
研究中给出了实现openmv定位精度测试及视觉定位的关键代码,具体如下。
while(True):
clock.tick()
img=sensor.snapshot()
for tag in img.find_apriltags(fx=f_x, fy=f_y, cx=c_x, cy=c_y):#默认为TAG36H11
img.draw_rectangle(tag.rect(),color=(255,0,0))#画矩形
img.draw_cross(tag.cx(),tag.cy(),color=(0,255,0))#在矩形中心画十字
print_args=(tag.x_translation(),tag.y_translation(),tag.z_translation(),
degrees(tag.x_rotation()),degrees(tag.y_rotation()),degrees(tag.z_rotation()))
print("Tx: %f, Ty %f, Tz %f, Rx %f, Ry %f, Rz %f" % print_args)
print(clock. fps())#打印帧率
上面用于测试的一小段代码,主要作用是将AprilTag函数获取的信息通过串口直接打印在电脑端的openmv IDE界面上,同时也会将运行帧率打印出来。本次测试使用电脑屏幕显示AprilTag标记,方便随时调整标记的大小。测试时要注意,不要将屏幕的亮度调太高,过高的亮度会使摄像头观察到的AprilTag标记被白光掩盖,将会严重影响AprilTag的识别效果(眩光干扰)。
5 实验分析
为了验证系统有效性,进行了相关的实验,距离AprilTag标记15 cm的实验结果如图6所示。
测试数据见表1(忽略正负,位移单位为m,角度单位为(°)。15 cm时测定的比例系数6.17作为测量时的距离校正。表格的数据为openmv测得的数值)。
经过测量,当ApriTag的标记大小为12 cm边长的正方形时,最近的识别距离为0.15 m(垂直距离),系统获取到的视觉目标清晰有效。最远也符合论述的范围。误差均在容忍范围之内。
openmv搭载到无人机上时,要注意使用自稳云台,确保无人机在调控姿态时摄像头始终是垂直向下的。openmv的供电直接由pixhawk的5 V供电提供。接下来可连接好openmv与pixhawk的串口通信接口。
6 結束语
以无人机为研究对象,研究了一种无人机定点降落的方式,较传统的降落方式,采用了机器视觉openmv和新的地面识别图标,该标识包含6个自由度信息,为无人机的位置判断提供比GPS更加准确的参考。通过对openmv视觉识别系统的探讨开发,为无人机定点降落的研究开拓了一些新的思路。
参考文献
[1]FENG Quanlong, LIU Jiantao, GONG Jianhua. UAV remote sensing for urban vegetation mapping using Random Forest and texture analysis[J]. Remote Sensing,2015,7(1):1074-1094.
[2]祁圣君,井立,王亚龙. 无人机系统及发展趋势综述[J]. 飞航导弹,2018(4):17-21.
[3]湯明文,戴礼豪,林朝辉,等. 无人机在电力线路巡视中的应用[J]. 中国电力,2013,46(3):35-38.
[4]李德仁,李明. 无人机遥感系统的研究进展与应用前景[J]. 武汉大学学报(信息科学版),2014,39(5):505-513,540.
[5]范承啸,韩俊,熊志军,等. 无人机遥感技术现状与应用[J].测绘科学,2009,34(5):214-215.
[6]聂博文,马宏绪,王剑,等. 微小型四旋翼飞行器的研究现状与关键技术[J]. 电光与控制,2007,14(6):113-117.
[7]赵文一. 无人机视觉辅助自主降落系统研究[D]. 哈尔滨:哈尔滨工业大学,2018.
[8]吴显亮,石宗英,钟宜生. 无人机视觉导航研究综述[J]. 系统仿真学报,2010,22(S1):62-65.
[9]钟木财,何炳蔚,曾金源,等. 基于单目视觉的无人机自主跟踪降落研究[J]. 机械制造与自动化,2019,48(4):149-152,187.
[10]王旭峰,董新民,孔星炜,等. 视觉辅助的无人机自主空中加油建模与仿真[J].飞行力学,2013,31(4):331-335.
[11]范保杰,朱琳琳,崔书平,等. 旋翼无人机视觉跟踪系统[J].红外与激光工程,2011,40(1):149-152.
[12]王海罗. 基于视觉感知的无人机目标识别与跟踪技术研究[D]. 北京:北京理工大学,2015.
[13]苏贇,王挺,姚辰,等. 基于合作目标的无人机目标跟踪方法[J]. 机器人,2019,41(4):425-432.
[14]韩鹏,耿增显,刘宏,等. 无人机视觉识别与移动追踪技术综述[J].飞航导弹,2018(10):24-28.
[15]张义桢,向婕,唐立军. 基于二维码图像识别的无人机定位方法研究[J]. 计算机应用与软件,2019,36(9):117-121.
[16]徐贵力,倪立学,程月华. 基于合作目标和视觉的无人飞行器全天候自动着陆导引关键技术[J].航空学报,2008(2):437-442.
[17]李永健. 基于机器视觉的四旋冀无人机定点着陆系统设计与实现[D]. 广州:华南理工大学,2015.
[18]金伟,葛宏立,杜华强,等. 无人机遥感发展与应用概况[J]. 遥感信息,2009(1):88-92.
[19]索文凯,胡文刚,张炎,等. 无人机自主降落过程视觉定位方法研究[J]. 激光技术,2019,43(5):101-106.
[20]吴赛飞. 基于视觉信息引导的舰载无人机精确着舰技术研究[D]. 南京:南京航空航天大学,2016.
[21]崔红霞,林宗坚,孙杰. 无人机遥感监测系统研究[J]. 测绘通报,2005(5):11-14.
[22]WATANABE Y, FABIANI P. Optimal guidance design for UAV visual target tracking in an urban environment[J]. IFAC Proceedings Volumes,2010,43(15):69-74.
[23]GUPTA K, EMRAN B J, NAJJARAN H. Vision-based pose estimation of a multi-rotor unmanned aerial vehicle[J]. International Journal of Intelligent Unmanned Systems,2019,7(3):120-132.