1. 引言
多旋翼无人机的实际飞行环境往往十分复杂,并且环境中存在的动态和静态障碍物,更是威胁到了无人机自主飞行的安全性。如果无人机能够感知自身与飞行环境中障碍物之间的距离,则可以在与障碍物发生碰撞之前采取规避的动作,从而避免与障碍物发生碰撞。鉴于此,本文将研究基于深度视觉传感器的无人机动、静态障碍物的监测技术,以实现无人机在复杂环境下的安全可靠飞行。
目前,国内外一些专家学者对目标检测和双目视觉的应用领域进行了一些有意义的研究。在目标检测的应用领域中,国外有Ross Girshick等人将改进的Faster R-CNN [1] 算法引入区域提取网络(Region Proposal Network, RPN),可以在特征图的基础上生成较好的检验框,能够实现更快速和更准确的目标检测。Joseph Redmon等人 [2] 于2016年提出了端到端检测的YOLO (You Only Look Once, YOLO)算法,通过神经网络的处理直接输出目标的类别及位置,提高了目标检测的速度与精度。国内有张志佳等人 [3] 在YOLOv3 [4] 检测算法的基础上改进,使用四种不同的尺度特征进行检测,在交通标识等小目标检测的实验中,改进后的模型具有较高的检测精度。王卫星等人 [5] 在YOLOv4 [6] 的基础上改进,引入轻量化网络代替传统网络,并进一步改进特征融合方法,在荔枝病虫害数据集上的检测速度提升了38%。在双目视觉的应用领域中,国外有Wang L等人 [7] 研究了基于双目视觉技术对桥梁中存在的裂缝测量的方法,比较了单目视觉和双目的实测结果,验证了双目视觉测量桥梁裂纹的精度更高。Nedevschi S等人 [8] 提出了一种高精度的立体视觉系统,可以在远距离的交通场景中检测不同的障碍物并执行目标跟踪任务。国内有张凤静等人 [9] 根据目标在双目立体视觉中左、右图像的不同位置,提出了一种在高速公路上测量车距的方法,实验验证了该方法可以提高远距离测量精度。吉林大学的马智 [10] 通过双目视觉获取图像的视差信息,利用双线性插值方法提高测距精度,实现了无人加油机器人对油箱盖圆心的精确定位。
2. 障碍物的识别与定位方法
2.1. 障碍物检测架构设计
目标检测方法主要分为两类:One-stage (一阶段)和Two-stage (两阶段)两种 [11] 。如图1为两类检测算法的流程图,使用两阶段方法进行目标检测。首先,该方法会通过滑动窗口搜索生成大量可能包含目标的候选区域。然后,对这些候选区域进行分类操作,使用分类器确定是否包含目标以及目标的精确位置。Faster R-CNN算法是这种方法的典型代表。一阶段检测方法直接输入图像,经过深度神经网络处理,直接输出目标检测结果。这种方法不需要提前生成候选框,而是可以直接检测图像中的多个物体。其中,YOLO系列是主要的代表 [12] 。
![](//html.hanspub.org/file/7-2571526x7_hanspub.png?20240509082446335)
Figure 1. One stage and two-stage detection algorithm flowchart
图1. 一阶段、两阶段检测算法流程图
(1) Faster R-CNN算法
Faster R-CNN是在R-CNN和Fast R-CNN的基础上进行改进的目标检测算法。它利用区域提取网络来生成多个候选区域,并对每个候选区域进行物体检测。通过共享卷积特征,区域提取网络和分类网络可以共享相同的特征提取层,这样做加速了计算速度并提高了检测准确率。
![](//html.hanspub.org/file/7-2571526x8_hanspub.png?20240509082446335)
Figure 2. R-CNN, Fast R-CNN, Faster R-CNN Comparison of detection speed
图2. R-CNN、Fast R-CNN、Faster R-CNN检测速度对比
图2为R-CNN系列算法的检测速度对比,尽管Faster R-CNN在处理一帧图像时速度大大提升,只需约0.2秒,而R-CNN需要的时间为49秒,但Faster R-CNN的结构相对复杂。它需要大量的标注数据和对超参数进行调整。此外,相比于R-CNN和Fast R-CNN,Faster R-CNN对于小目标和目标形变的鲁棒性不够强。
(2) YOLOv5s算法
YOLOv5s的整体结构,如图3所示。主要分为四个部分,输入层用于接收输入图像,主干网络(Backbone)用于提取特征,多尺度特征融合网络(Neck)用于将不同层级的特征融合起来,输出端(Prediction)用于对特征图进行检测和定位,最终得到检测框和类别信息 [13] 。图中CBS层结构由卷积(Convolution, Conv)、归一化处理(Batch Normalization, BN)、SiLU激活函数组成,Concat表示对两层网络进行拼接。
![](//html.hanspub.org/file/7-2571526x9_hanspub.png?20240509082446335)
Figure 3. YOLOv5s Network Architecture
图3. YOLOv5s网络结构
在本文所构建的测试集上,我们将分别使用YOLOv5s目标检测算法和Faster R-CNN目标检测算法进行实验。通过这两种算法对测试集中的图像进行检测,并记录检测结果。将目标检测算法检测出的结果与实际的结果进行对比,统计两种目标检测算法在本文建立的测试集上检测结果正确的数量,从而根据目标检测算法的评价指标分析算法的性能。
从图4中可以看出,针对本文建立的数据集,使用Faster R-CNN算法对person检测的平均精度为82.67%,对car检测的平均精度为94.83%;使用YOLOv5s对person检测的平均精度为82.21%,对car检测的平均精度为90.13%。两种算法对于建立的数据集的检测精度均较高,检测性能较好,能较为准确地识别出目标。
通过两类物体的平均精度可以计算出各自的mAP值,如图5所示。从图中可以看出,Faster R-CNN对两类物体检测的mAP值为88.75%,而YOLOv5s对两类物体检测的mAP值为86.17%,两种算法的检测精度较为接近,没有特别大的差距。而Faster R-CNN在检测中包含的步骤更多,因此检测精度略微高于YOLOv5s,部分检测情况如图6所示。
为了比较两种算法在检测速度上的差异,我们将分别使用它们对不同场景的视频进行多次检测。然后,将每次检测所用的时间求平均值,作为每种算法的检测速度结果。针对本文建立的测试集,使用Faster R-CNN和YOLOv5s两种算法的检测速度结果如表1所示。
![](//html.hanspub.org/file/7-2571526x10_hanspub.png?20240509082446335)
Figure 4. Object detection algorithm detection results
图4. 目标检测算法检测结果
![](//html.hanspub.org/file/7-2571526x11_hanspub.png?20240509082446335)
Figure 5. Object detection algorithm mAP results
图5. 目标检测算法mAP结果
![](//html.hanspub.org/file/7-2571526x12_hanspub.png?20240509082446335)
Figure 6. Schematic diagram of partial test results
图6. 部分检测结果示意图
![](Images/Table_Tmp.jpg)
Table 1. Target detection algorithm detection speed results
表1. 目标检测算法检测速度结果
通过实验可以得到,使用Faster R-CNN目标检测算法在本文建立的实物环境的测试集上检测速度的平均值为10.05 FPS;使用YOLOv5s目标检测算法在本文建立的实物环境的测试集上检测速度的平均值为66.53 FPS。可以看出,整体上YOLOv5s的检测速度要远快于Faster R-CNN,部分检测情况如图7所示。
根据上述实验结果分析可知,一阶段目标检测算法YOLOv5s在检测的精度上要略微弱于两阶段目标检测算法Faster R-CNN,但是也能满足当下的目标检测要求;而在目标检测的速度方面,YOLOv5s要明显优于Faster R-CNN。由于无人机在避障问题中,需要考虑到动态的障碍物,对目标检测的实时性要求更高,需要及时获取动态障碍物的位置信息,因此一阶段目标检测算法YOLOv5s能在满足检测精度的前提下,更加适合用于本文的研究。
2.2. 障碍物深度信息定位估计
四大坐标系的关系,如图8所示 [14] 。坐标系(u, v)存在于图像平面上,其中原点位于图像的左上角,而沿着水平和竖直的方向分别定义成u轴、v轴,坐标系中点的单位为像素的个数,通常将其命名成像素
![](//html.hanspub.org/file/7-2571526x13_hanspub.png?20240509082446335)
Figure 7. FPS results of object detection algorithms in different scenarios
图7. 不同场景下目标检测算法FPS结果
![](//html.hanspub.org/file/7-2571526x14_hanspub.png?20240509082446335)
Figure 8. Schematic diagram of the four major coordinate systems
图8. 四大坐标系示意图
坐标系,常用于图像处理算法的实现,例如图像滤波、特征提取等;如果将像素坐标系的中心作为一个原点,分别将与u轴、v轴平行的方向定义为x轴、y轴,则可以建立起图像坐标系,该坐标系中每个点的坐标的单位为实际物理尺寸;相机坐标系是用来描述相机内部结构的坐标系,其中ZC轴指向相机朝向的方向,与图像坐标系的坐标轴平行的方向分别为XC轴和YC轴。相机内部有一个光心O,位于相机坐标系的原点上。焦距f指的是从相机光心到图像平面的距离,物点P (Xw, Yw, Zw)所在的位置可以用世界坐标系中的坐标来描述。世界坐标系是用来描述物体在三维空间中位置和方向的坐标系,其中每个物体都有一个唯一的位置。
将世界坐标系中的点转换为相机坐标系中的点的过程可以看成一种刚体变换,其相应的变换如式(1)所示,包括了旋转和平移两种操作。
(1)
通过结合六自由度(沿着X、Y、Z轴的旋转和平移)的外参矩阵可以描述物体相对于相机的相对运动关系。其中,旋转矩阵R是一个3 × 3的正交矩阵,用于描述旋转变换;平移矩阵t是一个三维向量,用于描述平移变换。
将相机坐标系中的三维点(XC, YC, ZC)投影到图像平面上,就可以得到其在二维图像坐标系下的对应点(x, y),可以使用相机内参矩阵计算,如式(2)所示:
(2)
f为相机的焦距,变化公式的矩阵表达形式,如式(3)所示:
(3)
图像平面上的点和像素平面上的点之间的关系可以被视为一个缩放和平移的变换,如图9所示。每个像素对应于图像中的一个区域,这个区域的大小通常由相机的感光元件决定,其大小为(dx, dy)。在理想情况下(忽略相机畸变),在u轴方向缩放了1/dx倍,在v轴方向缩放了1/dy倍。u0和v0分别表示两个坐标系原点的平移距离。这个转换关系可以用式(4)表示。
![](//html.hanspub.org/file/7-2571526x18_hanspub.png?20240509082446335)
Figure 9. The relationship between image coordinate system and pixel coordinate system
图9. 图像坐标系与像素坐标系的关系
(4)
用矩阵的表示形式如式(5)所示:
(5)
根据上述公式可以得到世界坐标系与像素坐标系的关系如式(6)所示:
(6)
化简公式如(7)所示:
(7)
其中,M1表示相机内参矩阵;M2表示相机外参矩阵。通过上述变换可以获取障碍物在相机坐标系下的定位,以便后续无人机的研究。
双目测距主要用来对环境中障碍物的距离进行计算,可以将双目相机的彩色图转成局部深度图以实现所需的功能。双目相机由左右两个相机组成,每个相机都可以视作一个单目相机,空间中某一物体在左相机和右相机中会存在视线偏差,视差随着物体的远近而变化,根据视差可以计算出物体的距离。其计算公式如(8)所示:
(8)
物体在双目相机中的深度信息与相机的焦距f、基线长度B以及物体在左右两个相机中成像的视差d有关。在已知相机的焦距和基线长度的情况下,可以通过计算左右两个相机中对应像素点的视差来推断物体的深度信息。获取物体在双目相机中的视差需要对左右两个相机拍摄的图像进行立体匹配,可以采用视差估计算法进行求解。而立体匹配算法是一种比较常见的用于计算双目视觉图像中对应点之间深度的算法,其基本思想是通过比较左、右相机拍摄到的两幅图像之间的相似程度来确定对应点的深度信息。SGBM (Semi-Global Block Matching) [15] 为半全局立体匹配算法,用于计算双目视觉中的视差,该算法考虑了窗口内像素和窗口周围像素的相似性,使得立体匹配的结果更加准确。
SGBM算法包括如图10所示的几个步骤。预处理步骤通常用于提高图像质量和降低噪声。代价计算是该算法的核心步骤,它通过比较左、右视图中像素值的差异来计算代价,并使用代价聚合技术来获取每个像素的最优匹配点。动态规划是用于处理代价聚合过程中的路径搜索和代价计算的方法。后处理步骤包括误差检查和修复,以消除因光照变化和纹理缺失等原因造成的匹配误差。
使用OpenCV中的SGBM立体匹配算法的流程图如图11所示,首先在计算机中启动已经标定好的USB双目相机,将捕捉的左、右目图像输入给SGBM算法,接着在算法中将彩色图转成灰度图,然后使用立体矫正以消除误差,最后通过SGBM立体匹配算法计算出视差。
获取到图像的视差后,可以根据双目成像模型将视差转成深度图。SGBM算法已经内置在OpenCV中,可以很方便地进行调用,使用时需要对算法的参数设置以达到一个较好的效果。如图12所示,可以看出算法具有不错的效果。
2.3. 障碍物深度估计策略
在前面的2.1和2.2节中,主要介绍了障碍物的识别与定位方法,本节将把目标检测与位置估计整合起来,设计成整体实验流程图,如图13所示。
![](//html.hanspub.org/file/7-2571526x27_hanspub.png?20240509082446335)
Figure 13. Flow chart of object detection and position estimation based on binocular vision
图13. 基于双目视觉的目标检测与位置估计流程图
首先利用Matlab标定工具对双目相机进行标定,获得双目相机的参数,接着使用标定后的参数对双目图像进行矫正,消除畸变和对齐图像。然后,使用SGBM算法对校正后的图像进行立体匹配,得到左右相机对应像素点的视差值。可以进一步得到深度图信息,结合之前利用YOLOv5s检测出的障碍物像素坐标后,将像素坐标与深度图进行匹配,进而获得障碍物的位置信息。
3. 结果与讨论
通过上述步骤得到障碍物的深度信息,该深度信息可以作为以后的避障模块的输入部分,也可以通过坐标变换公式将障碍物的像素坐标转换成空间位置坐标。为了验证障碍物深度估计算法的准确性,分别对静态物体和动态物体进行双目测距实验,将实验的结果与真实的结果进行对比分析,从而判断双目深度估计算法的性能,实验的过程如图14所示。
在静态目标测距实验中使用的目标为塑料瓶,将塑料瓶放在距离双目相机的1.0 m~3.0 m处进行实验,每间隔0.1 m进行一次实验,每一次实验需要通过算法预测多次,取其平均值作为该次实验的结果,对实验结果验证分析。分别将塑料瓶放在距离双目相机不同的位置处,使用米尺测量出其真实距离,然后通过SGBM立体匹配算法估计图像中塑料瓶的距离,比较真实值与估计值可以反映SGBM立体匹配算法的精度情况,部分实验结果如图15所示。
由图可知,对于静态的饮料瓶在不同的距离下,结合了目标检测的双目深度估计算法都能不错的识别出饮料瓶在图像中的位置并估计出其与双目相机的距离。在实际距离为1.0 m的位置处,算法估计的距离为1.0089 m左右;在实际距离为1.5 m的位置处,算法估计的距离为1.5054 m左右;在实际距离为2.0 m处,算法估计的距离为2.0107 m左右。整体的相对误差较小,初步判断该算法对目标深度的估计较为准确,为了进一步反映算法的效果,将不同位置的检测结果以及实际距离记录下来,如表2所示。为了形象的对比真实值与估计值之间的差距,将所有测量的真实值与估计值转成折线图的形式,如图16所示。
![](//html.hanspub.org/file/7-2571526x28_hanspub.png?20240509082446335)
Figure 14. Experimental process of depth estimation for binocular cameras
图14. 双目相机深度估计实验过程
![](//html.hanspub.org/file/7-2571526x29_hanspub.png?20240509082446335)
Figure 15. Static object detection and ranging effect diagram at different distances
图15. 不同距离下静态物体检测与测距效果图
![](//html.hanspub.org/file/7-2571526x30_hanspub.png?20240509082446335)
Figure 16. Line chart of actual distance and estimated value
图16. 实际距离与估计值折线图
可以看出,在静态目标距离相机较近的时候,深度估计值与实际值越接近,算法测量的精度更高;当距离超过2.5 m时,实际值与估计值之间存在一定的误差,在3.0 m范围内算法的相对误差不超过2.0%,整体的误差较小。当目标与相机的距离较远时,立体匹配的难度加大,对于精度存在着影响,在实际的无人机避障过程中,当障碍物离得较远时,并不会对无人机的安全飞行造成影响,因此认为对于静态的物体,通过本文双目深度估计算法能够较为准确地反应障碍物的深度信息。
![](Images/Table_Tmp.jpg)
Table 2. Distance measurement results of static targets at different distances
表2. 不同距离下静态目标测距结果
在动态目标测距实验中选择的目标为行人,让行人在距离双目相机1.0 m至5.0 m的范围内行走,使用双目深度估计算法对行人进行检测以及测距,记录不同时刻下算法估计的距离,部分检测的过程如图17所示。从图中可以看出,随着运动的物体逐渐远离双目相机,算法估计的距离也在相应的增加,并且算法对动态物体进行距离估计的平均速度为9.7 FPS,整体的实时性较好。将不同时刻的距离估计值的数据保存下来,绘制成如图18所示的散点图。
![](//html.hanspub.org/file/7-2571526x31_hanspub.png?20240509082446335)
Figure 17. Dynamic object detection and ranging effect diagram at different times
图17. 不同时刻动态物体检测与测距效果图
![](//html.hanspub.org/file/7-2571526x32_hanspub.png?20240509082446335)
Figure 18. Algorithm estimates for dynamic objects at different times
图18. 动态物体不同时刻算法估计值
图18中黑色的点为算法估计值,红色线条为趋势线,可以反映估计值的偏差情况。从图中可以看出,当运动目标与双目相机的距离较近时,误差较小,使用该算法对动态目标的检测与测距具有较好的效果;随着行人不断远离双目相机,当距离超过4.0 m时,算法对目标距离的估计误差较大,但该距离的障碍物并不会对无人机的安全飞行造成威胁,因此认为该算法能满足本研究中无人机对动态障碍物距离的实时监测。
综合上述实验结果表明,本研究选择的目标检测算法和双目深度估计算法能够获取环境中的障碍物类别以及深度信息,算法的实时性和准确性较好,能够为自主飞行的无人机提供较为准确的局部障碍物的深度信息,通过深度信息与坐标变换关系可以进一步得到障碍物的位置信息。
4. 结论
为了实现无人机在复杂环境下能够很好的避障,本文研究了无人机对动、静态障碍物的检测。首先,设计了障碍物检测架构,选择合适的作为无人机感知环境的目标检测算法,论文从实时性和准确性两方面考虑,利用本文建立的数据集对两种目标检测算法进行实验分析,最终选择一阶段目标检测算法YOLOv5s作为无人机的视觉障碍物检测工作。其次,进行障碍物深度信息定位估计,本文在双目深度估计的基础上,结合了选择的目标检测算法,提出了对双目图像中目标深度估计的方法,根据双目视差图生成局部深度图,并利用目标的像素位置获取目标的深度信息,可以根据需要进一步获得障碍物的空间位置信息。最后,将目标检测算法与深度信息定位估计整合起来,并验证了目标检测算法和双目深度估计算法对四旋翼无人机定位障碍物的实时性和准确性。研究结果表明,基于深度视觉的四旋翼无人机可以高效地监测和规避动态、静态障碍物,而且完全依赖于仿真,具有灵活、方便和低成本的特点。本文的研究内容可以为无人机及其它机器人在复杂、动态的环境中安全运行提供重要的方法论指导,具有重要的工程实践意义。