基于AprilTag的四轴无人机自动返航设计*
2022-10-31芦展博
芦展博,童 谦
(河南科技大学信息工程学院,河南 洛阳 471000)
1 概述
四轴飞行器由机身与分布在四角的螺旋桨组成,通过电机驱动,根据四个电机输出功率不同来控制各个机翼的升力大小,进而调整飞行方向。由于其体积小,飞行高度与速度较低,飞行状态平稳,灵活等特点,在实际生活中,四轴飞行器常被应用在农林侦测,电力巡航,火灾现场探明险情或者高空搜救中;而在大多数四轴飞行器的实际应用中,其最具有标志性的特点就是无人方案,自主性。四轴飞行器的应用不断扩展,对其具备的自主性要求也越来越高。其中,解决四轴飞行器自动返航以及它的精准性和稳定性就变得极为重要。
2 飞行原理
四轴飞行器可以实现前后运动,垂直运动,侧向运动和偏航运动四种运动。四轴飞行器的机身呈“X”型,四个电机分布在四个角上,为了抵消螺旋桨的自旋,需保证对角的桨转向一致,相隔的桨转向相反,所以需要正反桨。
四轴飞行器通过调节四个电机转速来改变旋翼转速,实现升力的变化,从而控制飞行器的姿态和位置[1]。当电机产生的升力大于机身自身的重力时,飞行器上升;当减小电机输出功率,产生的升力小于机身重力时,飞行器下降;当提升M1与M2的输出功率,飞行器向前运动,反之向后运动;当提升M2和M3的输出功率,飞行器向右运动,反之向左运动;当提升M1和M3的输出功率,飞行器向与M1和M3转向相反的方向偏航,反之向与其相同的方向偏航。
3 系统整体设计
该系统由四轴飞行器,地面落点坐标,PC上位机,LoRa通信技术组成。四轴飞行器采用一节600mAh的锂离子电池作为电源,采用低压差的LDO转换成3.3 V的电压,主控芯片接受MPU6050传来的数据进行姿态调整,保证飞行的稳定性;通过高精度GPS获取实时坐标数据,通过LoRa通信与PC上位机进行数据传输,并将数据显示在PC端的实时监控软件上,以此实现特定情况下对四轴飞行器的及时操控。四轴飞行器接收到PC上位机发送的指令后,自动向落点坐标飞行;由于GPS存在一定的误差,当飞行到指定坐标后,利用机身上挂载的摄像识别模块对落点标志物进行精确识别并实现降落。以此来实现飞行器的自动返航。在定位落点方面与GPS相比,摄像识别能做到更加精确的定位,因此采用GPS和摄像识别双模块可以将误差更进一步地缩小。
而无人机降落和摄像识别模块对无人机高度的精准性和大小有一定要求,采用超声波传感器来辅助气压传感器获取无人机高度。各个模块协作工作,实现四轴无人机的自主精准返航功能。具体框架图如图1所示。
图1 系统结构图
4 硬件实现
4.1 飞行器硬件设计
想要完成飞行器的自主返航,在这里分两步来实现:首先根据GPS获取的位置信息——大致飞行至落点区域;其次再由摄像识别模块去识别落点标志物完成降落。这个过程需要各个传感器的数据汇聚与主控模块的处理,在这里,我们选用挂载在IIC总线上的气压计,加速度计和MPU6050来获取飞行器的体态数据,通过PID算法进行姿态调整[2];采用GPS定位模块通过串口获取精确的定位;最后通过飞行器上挂载的摄像识别模块来对落点进行图像识别。具体框架如图2所示。
图2 系统功能模块图
4.2 主控模块
与51单片机相比STM32外围接口丰富,程序大多模块化[3],采用哈弗结构,可以提供更高的运算速度。考虑到性能需求、资金预算,在这里我们选用STM32F103C8T6作为主控芯片。STM32F103C8T6是ST在2007年发布的一款基于COREX-M3内核的芯片,CPU频率高达72 MHz,拥有128 k字节的内置闪存存储器,20 k字节的内置SRAM[4]。与其他系列的芯片相比,STM32F103C8T6生产更早,学习成本比较低,网上有大量的资料供初学者学习使用。
4.3 卫星定位模块
要实现飞行器的自动返航,离不开高精度位置定位信息的支持,通过对不断获取的位置信息进行处理来调节飞行器的飞行方向。这里我们选用野火生产的BH-ATGM332D定位模块,BH-ATGM332D是野火设计的高性能、低功耗GPS、北斗双模定位模块。它采用中科微电子公司的ATGM332D-5N-31模组方案,可以通过串口向单片机系统和电脑输出GPS及北斗定位信息[5],使用简单方便,通过串口获取定位数据。
4.4 HC-SR04模块
本方案无人机返航的第二步是无人机下降,调整高度以便于摄像头能够在适当的距离内识别到放置在无人机降落点的特殊标签[6]。这里我们选择采用HC-SR04超声波传感器模块,虽然也有很多其他类似传感器可以检测物体的高度,但是超声波传感器检测比较迅速、方便并且易于实时控制,在测量精度上能比肩工业实用要求的标准,在无人机降落地面探测这一方面比其他比如气压计更加精准和稳定[7],方案更加可靠。
4.5 OpenMV视觉模块
为了实现无人机的精准降落,我们决定使用视觉定位的方案,采用AprilTag机器视觉来获取无人机相对于降落点的精准位置。而硬件方面,OpenMV是开源并且低成本的视觉模块,以STM32F427为核心处理器,可以用C语言编写视觉算法。可通过UART,I2C,SPI和GPIO等来控制其他硬件设备,也可以被其他设备控制。用OpenMV视觉模块来实现该算法具有可行性。
5 程序设计
5.1 距离检测
我们选择HC-SR04来检测无人机距离地面的距离,采用IO口TRIG触发工作,该模块自动发送8个40 kHz的方波并检测返回信号,如果有返回信号,即从IO口的ECHO输出一个高电平,而该高电平持续的时间正是超声波从发出到返回的时间[8]如图3所示。
图3 HC-SR04距离检测原理波形图
声波在这一过程中经历了发出和反射这两步,两次跨越了发射模块于反射面之间。从ECHO引脚得到的时间为超声波在实际间隔距离间经历的两倍,则高电平持续的时间需要减半之后用于测试距离的计算。
T=Dis/v
.
Dis=T*v/2
.
其中:T为高电平持续时间,及ECHO输出的数据;Dis为传感器与被测物距离;v为声速。其中声速为340 m/s,换做微秒级别则是0.034 cm/us。
则:Dis=T*0.034/2
.
通过改公式即可计算出传感器与被测物之间的实际距离。
5.2 AprilTag原理
AprilTag是一个视觉基准系统,可用于相机校准等二维定位相关操作。该系统主要步骤为自适应的阈值分割,连通域寻找tag轮廓,进行轮廓的直线拟合并查找四边形,然后对四边形进行解码识别,最后进行坐标变换,解析相机的姿态。
其中姿态解析是其最重要的步骤,是通过三维世界中的N个特征点与二维图像中的N个点,计算出映射关系的P-n-P问题。用到单应性变换。在三维空间和二维图像空间之间,图像的坐标可以通过单应矩阵对应。
如下转换关系中,s代表深度信息;[uv1]T为图像坐标系;[XwYw1]T是当Zw=0时的世界坐标系。
经过展开后可以得到:
由这三个等式变换消除s,得到如下:
到这一步,即可以根据二维图像坐标系上tag的四个角的坐标,求解该方程组,得到单应矩阵。根据相机内参和tag的尺寸可求得由世界坐标系到相机坐标系的旋转矩阵R和平移矩阵T,进而得到标签在相机坐标下的位置。
TAG16H5的有效区域是4×4的方块,TAG36H11由6×6的方块组成,它的检测距离比TAG16H5更远,但是TAG16H5的错误率比TAG36H11高很多,因为TAG36H11的校验信息多[9]。由于方块数量更多,出错率更低,所以为了实现更加精准的无人机返航降落,我们采用TAG36H11标签。根据AprilTag官网给出的tag生成方法,通过IDE生成如下tag图片(截取id号为0、1、2、3的前四张)。如图4所示。
图4 TAG36H11标记图
将这些标签打印出来水平贴至无人机降落点,即可供无人机的OpenMV识别。
要用OpenMV识别我们的tag,需要先对OpenMV模块进行算法编写,将AprilTag算法写入该模块中。当OpenMV视觉模块识别到tag之后,会在串口中输出6个变量,分别为:Tx、Ty、Tz三个在x、y、z轴上的空间位置变量和Rx、Ry、Rz三个旋转量。这6个变量是tag相对于视觉模块的三维空间相对位置信息。为了避免各个传感器之间数据混乱,我们将该数据转换为三维空间的绝对数据变量。在调试阶段,实现测试好视觉模块与tag之间的距离,再通过模块串口输出数据进行计算:
转换后:
Sw=Out*K
.
其中:K表示实际距离与传感器相对距离的比值;Sw表示实际距离;Out代表传感器输出的数据(可以是x、y、z轴,也可以是通过三轴计算出来的直线方向距离),即实际距离就通过该公式计算出来了。
6 总结
本文说明了一种基于图像识别传感器和GPS等多个传感器融合实现四轴无人机精准返航的方案。该方案采用STM32作为核心计算单元,具有高效的运算能力和拓展性;使用OpenMV视觉模块,将图像识别应用于无人机,在无人机返航降落方面,弥补了卫星定位具有一定误差的缺点,与GPS定位相结合,具有精准性和稳定性。四轴飞行器在飞行过程中,周围的温度、地形等环境都会对气压传感器的数据获取造成影响;而在低空降落时,超声波获取高度数据更加精确,因此在对飞行器实现降落时采用了超声波传感器HC-SR04辅助降落而非采取气压计,并且将无人机控制在适当高度,解决了OpenMV硬件对图像识别距离上的不足。综上所述,该四轴无人机自动返航系统具有可行性。