APP下载

一种四轴飞行器单目视觉测距算法

2024-02-28顾兆军王家亮

小型微型计算机系统 2024年1期
关键词:单目测距飞行器

顾兆军,韩 强,,王家亮,陈 辉,,董 楷,

1(中国民航大学 信息安全测评中心,天津 300300)

2(中国民航大学 计算机科学与技术学院,天津 300300)

0 引 言

测距对于四轴飞行器来说有着重要意义,许多四轴飞行器重要技术,例如目标跟踪技术[1-4],避障技术[5,6]以及路径规划技术[7,8]等都需要进行测距.视觉测距是目前主流的测距方法,利用同一目标在多幅图像中的成像特征计算目标三维坐标,主要有双目视觉测距[9]和单目视觉测距[10,11]两种方式.飞行器视觉测距凭借其灵活性大、效率高、适用范围广等优势而受到越来越多的关注.

目前主流的双目视觉测距基于视差原理,根据相机结构参数和2个不同位置的相机所获取2张图片中同一目标像素点位置参数,并计算目标的三维坐标信息,其计算精度高,在移动机器人视觉测距中应用广泛.例如仲伟波[12]等采用区域视差计算的方法,在左右视场确定同一目标区域后进行视差提取和滤波,利用平均视差计算目标的距离;WANG[13]等提出了一种利用激光测距传感器进行辅助校正的方法,解决了双目视觉传感器在目标跟踪过程中沿光轴方向测量精度较低的问题;JIANG J[14]等利用沿拍摄方向放置的两个透镜之间的垂直距离差来消除焦距引起的误差,再根据目标图像和目标占用的像素数计算目标与探测器之间的距离.

但双目视觉测距的精度受光线、基线长度等因素影响较大,且其匹配算法往往比较复杂.而单目测距则利用移动的单一相机获取图像并通过分析目标特征预测其距离,虽然单目视觉测距存在精确度低的缺点,但其凭借造价低,部署方便,测距算法相对简单的优势而备受青睐.例如LIU Z[15]等研究了单相机测距难以达到高精度的原因,提出了一种提高测距精度的新方法,并与现有方法进行了比较,证明了该方法的有效性和较高的精度.目前单目视觉测距普遍基于小孔成像原理(相似三角形原理),例如黄同愿[16]等对传统的相似三角形测距算法进行分析,提出了一种包含pitch和yaw的改进相似三角形测距算法,不仅实现了远距离测距,而且具有更高的测距准确性.一些单目视觉测距算法对图像噪声进行降噪处理,由此来达到提高单目视觉测距的精确度,例如孙伟[17]等提出一种基于二维集合经验模态分解的区间阈值图像噪声滤除方法,该方法不仅能有效抑制BEMD中的模态混叠问题,而且能有效削弱图像噪声影响,从而提高单目视觉测距的精度和可靠性.

但上述算法均是执行单一的测距任务,无法在四轴飞行器执行目标检测与跟踪任务的同时,判断机身与障碍物或跟踪目标之间的距离.当四轴飞行器与障碍物或跟踪目标之间距离较近,却无法判断此距离是否为安全距离时,四轴飞行器在执行任务时具备测距的能力就显得极为重要.为解决这个问题,本文提出一种四轴飞行器单目视觉测距算法,该算法融合基于帧间差分技术的水平测距模型与基于小孔成像的垂直测距模型.依据几何关系、被测物体在视频帧中的成像位置变化以及四轴飞行器的飞行数据依次计算出四轴飞行器与被测物体的水平距离和垂直距离,最终计算出四轴飞行器与被测物体的实际距离.

1 四轴飞行器测距算法设计与实现

1.1 四轴飞行器测距算法设计

为适应不同测距环境,测距方式分为4种:1)向左前方移动方式测距;2)向正左方移动方式测距;3)向右前方移动方式测距;4)向正右方移动方式测距.

四轴飞行器依据所选择的测距方法进行位移与转向调整.首先,四轴飞行器在初始观测位置进行转向调整,通过使被测物体成像调整到视频帧中线位置,达到单目摄像头光轴对准被测物体的目的;其次,四轴飞行器依据所选择的测距方式位移到最终观测位置;再次,四轴飞行器在最终观测位置进行转向调整,再次通过使被测物体成像调整到视频帧中线位置,达到单目摄像头光轴对准被测物体的目的;最后,四轴飞行器测距模型对飞行数据进行处理,计算出四轴飞行器与被测物体之间的实际距离.

四轴飞行器测距算法基于特洛平台实现.测距算法结构流程图如图1所示.

图1 测距算法结构流程图Fig.1 Structure flow chart of ranging algorithm

测距算法运行流程如下:

1)系统初始化.四轴飞行器通过WIFI与系统终端建立通信链路,系统终端接收视频流数据并发送控制指令.

2)处理视频帧.视频帧首先被YOLOV4-Tiny算法处理,识别并框选出视频帧中的物体,随后视频帧被KCF核相关滤波算法处理,跟踪被测物体并计算出被测物体的像素坐标.

3)利用反馈结果控制四轴飞行器飞行.四轴飞行器此阶段将进行位移、转向调整.

4)测距模型计算距离.根据四轴飞行器位移参数和旋转参数,利用四轴飞行器测距模型计算出四轴飞行器与被测物体之间的距离.

1.2 基于图像层面的视频帧处理

首先,系统终端通过WIFI连接的方式与四轴飞行器建立通信链路,并获取单目摄像头所采集到的视频帧;其次,利用YOLOv4-Tiny算法识别出视频帧中的障碍物或跟踪目标,并用矩形框的形式框选出来,KCF算法则实时跟踪被框选的目标;最后,系统终端利用跟踪测距算法计算框选目标中心与视频帧中线像素坐标差值生成四轴飞行器的偏转控制指令与位移控制指令.

YOLO(You Only Look Once)是一种典型的one-stage目标检测算法,其利用anchor box将分类与目标定位的回归问题结合起来,具有高效、灵活和泛化性能好的优点.该算法创造性的将候选区和目标分类合二为一,看一眼图片就能知道有哪些对象以及它们的位置.本文使用YOLOv4-Tiny算进行目标检测,其是YOLOv4的精简版,属于轻量化模型,相比YOLOv4其检测速度提升很大.YOLOv4-Tiny还具备多任务、端到端、注意力机制和多尺度的特点,应用于本算法中可以有效并实时地识别出障碍物或跟踪目标.

KCF(Kernelized Correlation Filters)是一类基于模板匹配的可视物体跟踪算法,其使用循环矩阵对样本进行采集,使用快速傅里叶变换对算法进行加速计算,并且引入了hog特征和核方法,在跟踪的精度和速度上都有非常好的效果.本文使用该算法进行目标跟踪,可以满足四轴飞行器在执行跟踪任务时所要求的实时性和准确性.

本文为了实现在四轴飞行器在执行目标检测与跟踪任务的同时,判断机身与障碍物或跟踪目标之间的距离.融合YOLOv4-Tiny和KCF的目标检测与跟踪算法处理视频帧,通过加载数据文件、权重文件以及配置文件利用GPU对传入的视频帧进行多次卷积和池化处理,随后经过全连接层和输出层.最后将经过目标检测处理的视频帧加载KCF跟踪器,并将最终结果显示在系统终端.同时,将最终的视频帧处理结果作为测距阶段的输入,为测距做准备.

1.3 基于帧间差分的四轴飞行器水平测距模型

帧间差分法[18]是一种通过对视频图像序列中相邻两帧作差分运算来获得运动目标轮廓的方法,它可以很好地适用于存在多个运动目标和摄像机移动的情况.基于帧间差分思想,提出一种四轴飞行器水平测距模型,通过计算视频帧中被测物体的像素变化,控制四轴飞行器移动与转向调整,最终利用飞行数据计算出四轴飞行器与被测物体之间的水平距离.

1.3.1 基于向左前方移动方式的水平距离计算模型

如图2所示为基于向左前方移动方式的水平距离计算模型.

图2 基于向左前方移动方式的水平距离计算模型Fig.2 Horizontal distance calculation model based on left-front movement mode

四轴飞行器在初始观测位置与被测物体的水平距离为PreHorDistance,在中途观测位置与被测物体的水平距离为MidHorDistance,在最终观测位置与被测物体的水平距离为HorDistance,四轴飞行器向前位移displacement1,向左位移displacement2,在最终观测位置转向调整的角度为θ.根据几何关系,有:

(1)

(2)

PreHorDistance=MidHorDistance+displacement1

(3)

对式(1)、式(2)变形,得:

(4)

(5)

将式(5)带入式(3),得:

(6)

基于向左前方移动方式的水平距离测算过程:首先,四轴飞行器旋转自身,使单目摄像头光轴穿过被测物体:其次,四轴飞行器先向正前方移动displacement1,再向正左方移动displacement2;最后,四轴飞行器旋转自身,再次使单目摄像头光轴穿过被测物体,并记录旋转角度为θ.飞行器移动结束之后,根据已知条件:∠AOB=θ、AD=d1、BD=d2以及上述公式,计算出四轴飞行器初始位置与被测物体的水平距离h1,以及四轴飞行器移动后的位置与被测物体的水平距离h2.

由于4种测距算法思想相似,因此,本文只对基于向左前方移动方式的测距算法用伪代码描述.具体描述如算法1所示.

算法1.向左前方移动方式测距算法

Input:Frame

1.boundingbox←tracker.update(Frame);

2.frame_w←960,frame_h←720;

3.centre_x←(boundingbox[0]+ boundingbox[2])/2;

4.centre_y←(boundingbox[1]+ boundingbox[3])/2;

5.whilecentre_x>490 or centre_x<470do

6. centre_x←(boundingbox[0]+ boundingbox[2])/2;

7. centre_y←(boundingbox[1]+ boundingbox[3])/2;

8.ifcentre_x<470then

9. tello.rotate_counter_clockwise(3);

10.ifcentre_x>490then

11. tello.rotate_clockwise(3);

12.PrePixelDistance←abs(centre_y-360);

13.tello.move_forward(displacement1);

14.tello.move_left(displacement2);

15.angle←0;

16.whilecentre_x>490 or centre_x<470do

17. centre_x←(boundingbox[0]+ boundingbox[2])/2;

18. centre_y←(boundingbox[1]+ boundingbox[3])/2;

19.ifcentre_x<470then

20. tello.rotate_counter_clockwise(3);

21. angle←angle-3;

22.ifcentre_x>490then

23. tello.rotate_clockwise(3);

24. angle←angle+3;

25 PixelDistance←abs(centre_y-360);

26 HorDistance←displacement2/sin(abs(angle));

27.PreHorDistance←(displacement2/tan(abs(angle)))+displacement1;

28.VerDistance←(PixelDistance·HorDistance)/f;

29.PreVerDistance←(PrePixelDistance·PreHorDistance)/f;

30.BeforeDistance←sqrt(PreHorDistance·PreHorDistance+31. PreVerDistance·PreVerDistance);

32.PresentDistance←sqrt(HorDistance·HorDistance+33. VerDistance·VerDistance);

Output:BeforeDistance,PresentDistance

1.3.2 基于向正左方移动方式的水平距离计算模型

如图3所示为基于向正左方移动方式的水平距离计算模型.

图3 基于向正左方移动方式的水平距离计算模型Fig.3 Horizontal distance calculation model based on moving to the left

四轴飞行器在初始观测位置与被测物体的水平距离为PreHorDistance,在最终观测位置与被测物体的水平距离为HorDistance,四轴飞行器向左位移displacement,在最终观测位置转向调整的角度为θ.根据几何关系,有:

(7)

(8)

对式(7)、式(8)变形,得:

(9)

(10)

基于向正左方移动方式的水平距离测算过程:首先,四轴飞行器旋转自身,使单目摄像头光轴穿过被测物体;其次,四轴飞行器向正左方移动displacement;最后四轴飞行器旋转自身,再次使单目摄像头光轴穿过被测物体,并记录旋转角度为θ.飞行器移动结束之后,根据已知条件:AB=d、∠AOB=θ以及上述公式,计算出四轴飞行器初始位置与被测物体的水平距离h1,以及四轴飞行器移动后的位置与被测物体的水平距离h2.

1.4 基于小孔成像的四轴飞行器垂直测距模型

单目摄像头成像基于小孔成像原理[19].摄像头采集图片时,是将三维物体投影到摄像头的二维平面上.宽度为W的物体,经过针孔平面投影到摄像头成像平面之后的影像宽度为W1,针孔平面与成像平面的距离即摄像头焦距为F,物体平面与针孔平面的距离设为D,利用三角形相似原理,根据式(11)就可以得到物体到摄像头的距离.

(11)

对于基于小孔成像的四轴飞行器垂直测距,参数标定意义重大.利用单目摄像头参数标定模型,计算出世界坐标系与像素坐标系的坐标转换参数f,随后基于参数标定结果的垂直距离计算模型计算出四轴飞行器与被测物体之间的垂直距离.

1.4.1 单目摄像头参数标定模型

摄像头成像基于小孔成像,摄像头采集图片时,是将三维物体投影到摄像头的二维平面上,宽度为W的物体,经过针孔平面投影到摄像头成像平面之后的影像宽度为W1,针孔平面与成像平面的距离即摄像头焦距为F,物体平面与针孔平面的距离设为D,利用三角形相似原理,可得到式(12).

(12)

利用标定物对四轴飞行器的单目摄像头进行参数标定,标定物实际高度为Height,视频帧中标定物的像素高度为PixelHeight,单目摄像头光心与被测物体的水平距离为Distance,世界坐标系与像素坐标系的坐标转换参数为f.根据小孔成像原理,有:

(13)

对式(13)变形,得:

(14)

1.4.2 基于参数标定结果的垂直距离计算模型

如图4所示为运用小孔成像原理的四轴飞行器垂直距离计算模型.

图4 四轴飞行器垂直距离计算模型Fig.4 Vertical distance calculation model of quadcopter

依据单目摄像头参数标定模型计算得出世界坐标系与像素坐标系的坐标转换参数,基于参数标定结果,计算出四轴飞行器与被测物体间的垂直距离.四轴飞行器在初始观测位置与被测物体的水平距离为PreHorDistance、真实距离为PreDistance,在最终观测位置与被测物体的水平距离为HorDistance、真实距离为Distance,四轴飞行器与被测物体的垂直距离为VerDistance,世界坐标系与像素坐标系的坐标转换参数为f.

根据小孔成像原理,有:

(15)

对式(15)变形,得:

(16)

根据几何关系,得:

(17)

四轴飞行器在最终观测位置与被测物体的水平距离为HorDistance、真实距离为Distance,根据小孔成像原理,有:

(18)

对式(18)变形,得:

(19)

根据几何关系,得:

(20)

测算四轴飞行器与被测物体的垂直距离及实际距离的过程:首先,在距离四轴飞行器单目摄像头一定距离D处,放置一个已知高度为H的标定物.根据单目摄像头参数标定模型,计算出四轴飞行器单目摄像头的焦距f.其次,根据垂直距离计算模型计算出移动前四轴飞行器与被测物体的垂直距离及实际距离;最后,根据基于小孔成像原理的垂直距离计算模型计算出移动后四轴飞行器与被测物体的垂直距离及实际距离.

2 四轴飞行器飞行控制

四轴飞行器的飞行控制分为转向控制和位移控制.

2.1 转向控制

四轴飞行器转向控制如图5所示.

图5 四轴飞行器转向控制Fig.5 Quadcopter steering control

四轴飞行器按照模版方法在不同测距位置都要进行转向,使单目摄像头光轴对准被测物体.依据被测物体外接矩形框中心与视频帧中线相对位置判断单目摄像头光轴是否对准被测物体.由于控制四轴飞行器转向的角度只能为整数级别,很难将四轴飞行器搭载的单目摄像头的光轴调整到正好穿过被测物体中心,在实际操作过程中设定了一个转向容错范围,允许被测物体外接矩形框中心与视频帧中线偏差5个像素点.

对四轴飞行器转向控制可以量化为以下两种情况:

1)当被测物体的外接矩阵中心点位于视频帧中线左侧,表明此时四轴飞行器的单目摄像头光轴位于被测物体右侧,此时,四轴飞行器应向左转.

2)当被测物体的外接矩阵中心点位于视频帧中线的右侧,表明此时四轴飞行器的单目摄像头光轴所在被测物体左侧,此时,四轴飞行器应向右转向.

2.2 位移控制

四轴飞行器遵循测距方法设定的位移路线飞行.

4种测距方法分别设定了不同的位移路线:1)向左前方移动方式:四轴飞行器向正前方移动displacement1,再向正左方移动displacement2;2)向正左方移动方式:四轴飞行器向正左方移动displacement;3)向右前方移动方式:四轴飞行器向正前方移动displacement1,再向正右方移动displacement2;4)向正右方移动方式:四轴飞行器向正右方移displacement.

3 实验与结果分析

3.1 实验平台介绍

本文使用四轴飞行器特洛(Tello)作为硬件实验平台,Tello无人机是深圳睿炽科技生产的一款航拍无人机,采用DJI大疆飞控技术与英特尔芯片,搭载单目摄像头,可以进行720P高清图传,传输速率25fps,图传距离为100米.

3.2 实验结果与分析

为了验证提出的基于帧间差分的四轴飞行器水平测距模型,以及基于小孔成像的四轴飞行器垂直测距模型,布置如下实验场景:

场景1.现场环境只允许四轴飞行器向左前方移动.

场景2.现场环境只允许四轴飞行器向右前方移动.

场景3.现场环境只允许四轴飞行器向正左方移动.

场景4.现场环境只允许四轴飞行器向正右方移动.

在场景1与场景2中,四轴飞行器为了避免在飞行过程中与障碍物发生碰撞,对障碍物椅子执行检测与跟踪的同时,执行测距任务.由此判断四轴飞行器与障碍物是否处于安全距离,并且四轴飞行器可依据实时测距结果为下一步的避让规划出合理的路线.在场景3与场景4中,四轴飞行器在跟踪行人的过程中,为了避免与跟踪目标距离过近而发生碰撞,在执行跟踪行人任务的同时对行人进行测距,从而判断四轴飞行器与行人是否处于安全距离.四轴飞行器依据实时测距结果可适当调整与行人的距离,从而避免在执行跟踪任务的时候发生碰撞.

3.2.1 基于场景1测距测试

基于场景1的实验图如图6所示.

图6 基于场景1测距测试Fig.6 Ranging test based on scenario 1

场景1选择向左前方移动方式进行测距.

首先,识别视频帧中的物体,并在视频帧中框选出位于四轴飞行器飞行路线上的障碍物,此实验中障碍物为椅子;其次,在初始观测位置进行转向调整.在检测出椅子之后,需调整四轴飞行器自身角度,使椅子成像调整到视频帧中线位置,如图6(a)所示,为随后跟踪目标做准备,避免四轴飞行器移动过程中跟踪目标过快移出视频帧画面;再次,四轴飞行器向左前方移动,到达最终观测位置,如图6(b)所示,四轴飞行器在移动过程中,算法实时跟踪椅子在视频帧中的的位置;最后,四轴飞行器在最终观测位置进行转向调整,四轴飞行器向左前方移动过程中,椅子成像移开视频帧中央,经过转向调整,再次使椅子成像调整到视频帧中线位置.四轴飞行器经过位移与转向调整后,视频帧显示测距结果,如图6(c)所示.最后显示四轴飞行器在初始观测位置与椅子的距离为293cm,在最终观测位置与椅子的距离为255cm,四轴飞行器依据实时测距结果可为下一步避让规划处合理的路线.

3.2.2 基于场景2测距测试

基于场景2的实验图如图7所示.

图7 基于场景2测距测试Fig.7 Ranging test based on scenario 2

场景2选择向正左方移动方式进行测距.首先,识别视频帧中的物体,并在视频帧中框选出位于四轴飞行器飞行路线上的障碍物,此实验中障碍物为椅子;其次,在初始观测位置进行转向调整.在检测出椅子之后,需调整四轴飞行器自身角度,使椅子成像调整到视频帧中线位置,如图7(a)所示,为随后跟踪目标做准备,避免四轴飞行器移动过程中跟踪目标过快移出视频帧画面;再次,四轴飞行器向正左方移动,到达最终观测位置,如图7(b)所示,四轴飞行器在移动过程中,算法实时跟踪椅子在视频帧中的的位置;最后,四轴飞行器在最终观测位置进行转向调整,四轴飞行器向正左方移动过程中,椅子成像移开视频帧中央,经过转向调整,再次使椅子成像调整到视频帧中线位置.四轴飞行器经过位移与转向调整后,视频帧显示测距结果,如图7(c)所示.测得四轴飞行器在初始观测位置与椅子的距离为287cm,在最终观测位置与椅子的距离为284cm,四轴飞行器依据实时测距结果可为下一步避让规划处合理的路线.

3.2.3 基于场景3测距测试

基于场景3的实验图如图8所示.

图8 基于场景3测距测试Fig.8 Ranging test based on scenario 3

场景3选择向右前方移动方式进行测距.首先,识别视频帧中的行人,并在视频帧中框选出被识别出来的行人;其次,在初始观测位置进行转向调整.在检测出行人之后,需调整四轴飞行器自身角度,使行人成像调整到视频帧中线位置,如图8(a)所示,为随后跟踪目标做准备,避免四轴飞行器移动过程中跟踪目标过快移出视频帧画面;再次,四轴飞行器向右前方移动,到达最终观测位置,如图8(b)所示,四轴飞行器在移动过程中,算法实时跟踪行人在视频帧中的的位置;最后,四轴飞行器在最终观测位置进行转向调整,四轴飞行器向右前方移动过程中,行人成像移开视频帧中央,经过转向调整,再次使行人成像调整到视频帧中线位置.四轴飞行器经过位移与转向调整后,视频帧显示测距结果,如图8(c)所示,依据测距结果四轴飞行器可判断目前的跟踪距离是否安全,从而适当调整随后的跟踪间距.在场景3的测距测试中,最终视频帧结果显示四轴飞行器在初始观测位置与行人之间的距离为144cm,在最终观测位置与行人之间的距离为112cm.

3.2.4 基于场景4测距测试

基于场景4的实验图如图9所示.

图9 基于场景4测距测试Fig.9 Ranging test based on scenario 4

场景4选择向正左方移动方式进行测距.

首先,识别视频帧中的物体,并在视频帧中框选出被识别出来的行人;其次,在初始观测位置进行转向调整.在检测出行人之后,需调整四轴飞行器自身角度,使行人成像调整到视频帧中线位置,如图9(a)所示,为随后跟踪目标做准备,避免四轴飞行器移动过程中跟踪目标过快移出视频帧画面;再次,四轴飞行器向正右方移动,到达最终观测位置,如图9(b)所示,四轴飞行器在移动过程中,算法实时跟踪行人在视频帧中的位置;最后,四轴飞行器在最终观测位置进行转向调整,四轴飞行器向正右方移动过程中,行人成像移开视频帧中央,经过转向调整,再次使被测物体成像调整到视频帧中线位置.四轴飞行器经过位移与转向调整后,视频帧显示测距结果,如图9(c)所示,依据测距结果四轴飞行器可判断目前的跟踪距离是否安全,从而适当调整随后的跟踪间距.在场景4的测距测试中,视频帧显示四轴飞行器在初始观测位置与行人的距离为257cm,在最终观测位置与行人的距离为253cm.

3.2.5 误差分析

测距实验误差分析如表1所示.

表1 测距误差分析Table 1 Range error analysis

为分析测距算法的误差,实验过程中工作人员用卷尺手动测量了四轴飞行器与被测目标之间的实际距离.实验结果表明所提出的算法可以有效分析出各视频帧中物体的景深,为搭载单目摄像头的四轴飞行器在执行目标检测与跟踪任务的同时提供可靠的测距技术支持,算法误差所占百分比均值为4.07%.

4 结 论

融合基于帧间差分的水平测距模型与基于小孔成像的垂直测距模型的四轴飞行器单目视觉测距算法.在实际测距过程中,根据不同测距环境选择最佳的测距方法进行测距,系统终端按照所选测距方法控制四轴飞行器飞行进行位移与转向调整,并记录飞行参数.最后,测距模型处理飞行参数生成四轴飞行器与被测目标之间的距离.实验结果表明,该方法可以有效地分析出各视频帧中物体的景深,可为搭载单目摄像头的四轴飞行器在执行目标检测与跟踪任务的同时提供可靠的测距技术支持.下一步将考虑优化测距流程,缩小测距误差,并且进一步扩充测距方法种类,使算法适应更复杂的测距环境.

猜你喜欢

单目测距飞行器
高超声速飞行器
类星体的精准测距
一种单目相机/三轴陀螺仪/里程计紧组合导航算法
复杂飞行器的容错控制
单目SLAM直线匹配增强平面发现方法
浅谈超声波测距
基于CAD模型的单目六自由度位姿测量
神秘的飞行器
基于PSOC超声测距系统设计
基于单目立体视觉的三坐标在线识别技术研究