1. 引言
随着技术的发展更新,消费级无人机越来越多的进入大众视野。无人机在很多应用领域被寄予厚望,如空中视频监控、地理测量、农业植保以及航拍摄影等诸多应用。而无人机的智能自主飞行成为当下的研究热门,能够有效的定位和识别障碍物是无人机自主飞行过程的一个重要技术问题。目前已有很多技术用于障碍物感知,这些技术大致分为基于距离传感器的障碍物检测和基于图像视觉的障碍物识别两大类。距离传感器的障碍物检测,即使用超声波传感器、激光扫描仪、声呐传感器和立体相机等技术直接测量障碍物距离来获取周边环境信息。这类方法存在一些缺点,一是有些硬件成本较高,二是增加了无人机载荷重量和功耗问题,三是如超声波之类的测距模块其测量范围有限,难以全方位的测量周边环境信息。另一方面,基于图像视觉的障碍物识别已成为计算机视觉的研究热门,主要分为图像分割、图像深度提取、和光流法这几大类。图像分割方法主要是利用颜色来分割图像中无障碍物区域(如马路、天空等) [1] ,这类方法缺陷是场景单一,无法适用复杂的飞行环境。图像深度提取方法通过图像深度信息构建环境的3D地图 [2] [3] ,这样能很好的检测到周围的障碍物体,但计算量大,实时性难以保证。
本文旨在设计一套实时的视觉避障软硬件系统,能够在线检测并规避障碍物区域。而光流法避障近来研究应用较多,研究者们发现,诸如苍蝇、蜻蜓等飞行昆虫都是通过感知环境的光流信息来导航和规避障碍物 [4] 。本文的避障策略就是采用启发于飞行昆虫的光流平衡法则。首先介绍了金字塔LK方法的计算原理,再结合Shi-Tomasi算法提取视频帧序列的角点特征值,基于角点用金字塔LK方法计算出无人机向前运动产生的稀疏光流场。接着利用运动视差原理从光流场中计算出潜在障碍物区域,最后采用平衡法则避障策略引导无人机规避障碍物。算法框架如图1所示。最终算法应用在基于嵌入式系统控制的无人机平台上作验证,实验表明本文系统具有较好的实时性和准确性,能够很好的识别障碍物并作出相应的避障动作。
2. 光流场计算
2.1. Lukas-Kanade方法
LK算法是一种用于计算稀疏光流的重要方法,只需要每个感兴趣点周围小窗口的局部信息,这与Horn和Schunck的算法全局性是不同的。采用LK算法的三个前提条件是需满足亮度恒定不变、时间连续和空间一致 [5] 。
设
是
时刻图像上点
的亮度,LK算法假设图像中感兴趣区域的像素在相邻帧间运动时亮度不随时间发生变化:

Figure 1. The framework of obstacle avoidance algorithm
图1. 避障算法框架
(1)
其中,
和
为
和
在经过
时间后在两帧间的位移量。结合时间连续性,取
,将(1)左边用泰勒级数展开化简即得:
(2)
其中:
、
就是点
光流的
和
分量,
,
,
。公式(2)即为著名的光流约束方程。
结合空间一致性,即在一个很小的空间领域
内运动矢量保持不变,所以将图像划分成若干小窗口领域。这里窗口不能过大或者过小,避免产生运动跟踪不一致和孔径问题。令光流向量
,在一个很小的空间领域
内,光流估计误差被定义为:
(3)
式(3)中
表示遍历小窗口的像素,
为窗口加权函数,它使窗口中心区域像素对约束方程产生的影响比边缘区域更大。在光流
取最优解时误差方程
一阶导数为0。即:
(4)
令:
(5)
(6)
结合式(4),我们可以得到此点的最优光流向量:
(7)
2.2. 金字塔LK算法
LK方法的缺点是难以跟踪大尺度运动。而无人机所获取的周边环境视频数据大多是漂移晃动较多的一系列大而不连贯运动,难以满足LK方法的前提条件。引入图像金字塔模型可以解决这个问题,利用金字塔模型建立起一系列多尺度图片,先在较大的空间尺度上进行跟踪,接着逐步向金字塔下层依次处理迭代更新得到最终的光流向量,如图2所示。Bouguet给出了结合金字塔模型的LK算法具体的迭代过程 [6] ,因此本文采用这个更有效的算法来计算光流场。为了兼顾算法的有效性及实时性,本文采用3层金字塔模型。
由公式(7)可知,选择用于LK跟踪搜索的窗口中心特征点需满足使得G可逆的条件,即G满秩,而角点能很好的满足这个条件。Harris角点定义为图像的二阶导数自相关矩阵有两个最大特征值的地方,该点附近的图像纹理至少存在两个不同方向区域。此外,由于无人机获取的视频序列时常具有旋转特征,Harris角点具有的移动不变性和旋转不变性就显得很重要。本文采用Shi-Tomasi算法来提取角点 [7] ,其原理和Harris角点相似,但在很多时候效果会更好,金字塔LK算法基于这些角点计算出运动帧间的光流向量。
3. 障碍物检测及避障策略
3.1. 潜在障碍物检测
本文的潜在障碍物检测方法是运用了运动视差原理:当无人机在向前移动时,靠近的物体相比于远处的背景在图像上会产生更大的运动,正如我们乘坐在运动的汽车上观察窗外的风景时近处的物体相较于远景来说运动得更快。另外,近处的物体也会占据更大的视野,因而靠近的障碍物相比于背景区域会产生更大的光流。基于这个原理,本文结合上面获取的光流场来计算潜在的障碍物区域。根据无人机飞行中避障方向的实际情况,可通过上下左右四个方向组合来进行障碍物检测和规避动作。首先将获取的光流向量按其位置划分至左右、上下四个视场区域,如图3所示,分别计算各个区域的平均光流值。

Figure 2. Principle of pyramid LK algorithm
图2. 金字塔LK算法原理

Figure 3. The image is divided into four parts
图3. 将图像平均分成4部分
在判断某点是否可能为潜在的障碍物时,通过比较该点的光流值和与其相反区域的平均光流值,当其比值超过给定阈值T时,则判定该点为潜在障碍物,用公式表示如下:
(8)
式(8)中
为
检测点光流模值,
为检测点相反区域的光流模总和,N为该区域光流点个数。以某一帧左视场区域某检测点
为例,分别计算该点光流值和右视场区域的平均光流值,由上面公式获得相应的
。本文设定的阈值T为0.5,即当检测点光流值超过相反区域平均光流2倍时判断该点为潜在障碍物。所以当
时该点即为潜在障碍物,否则认为该点为背景区域或者其虽然为障碍物但并未达到危险距离。
3.2. 平衡法则避障策略
光流是飞行昆虫用于感知周边环境的重要方式。人们基于蜜蜂、蜻蜓等飞行昆虫做了大量实验,发现昆虫能够利用光流估计出运动速度、感知障碍物信息并规避障碍物。在这方面试验中比较著名的就是Srinivasan团队对蜜蜂所做的系列实验 [8] ,其表明蜜蜂是通过平衡眼睛所感知的左右两边图像速度进行导航来规避障碍物。
本文的无人机避障策略就是采用启发于飞行昆虫的光流平衡法则 [9] 。在无人机向前运动过程中,反应在图像序列上即靠近的潜在障碍物体会较远处的背景产生更大的运动,也因此产生更大的光流,无人机在飞行过程中通过避开光流幅值大的一侧来平衡两侧的光流,以此规避潜在的障碍物区域。由于无人机可通过上下左右四个方向进行规避动作,需利用平衡法则分别判断左右和上下视场区域是否需要避障。本文光流场基于角点计算的,为了最大化减少由于角点数量差异对光流向量模总和的影响,本文通过计算各视场区域的平均光流值代表该区域的光流强度。以左右避障为例,分别计算左右两侧的平均光流值,当一侧的平均值大于另一侧并超过给定阈值T时,则向光流较小的一侧靠近来躲避另一侧潜在的障碍物,用公式表示为:
(9)
式中,
表示光流大的一侧其光流向量模总和,m表示该侧的光流向量数。
表示光流小的一侧其光流向量模总和,n表示其光流向量个数。计算得到
,这里本文设定的需采取避障动作时的阈值T为0.5,所以判断当
时无人机认为光流大的一侧可能为潜在障碍物,应该向光流小的一侧靠近。否则认为前方无障碍物或离障碍物较远。
在确定了避障方向后,下一步就是将避障动作量化成无人机具体的控制量。Warre提出的著名的Law of Control控制法则 [10] 中总结出:光流的变化量与系统反馈作用力之间存在着一种函数关系,即:
(10)
其中
为系统两边的作用力之差,k为一个常量,
是视场中一侧的光流向量模总和。将这种函数关系应用到本算法中来量化无人机的飞行姿态控制参数,同样地,本文使用区域平均光流值代替模总和
。通过公式(10)计算出无人机的具体偏航角度或高度来改变飞行轨迹避障。
4. 实验结果及分析
4.1. 硬件系统构成
本文系统将避障算法运行在基于NVIDIA Tegra K1高性能嵌入式处理器的Dji妙算计算平台。该平台在linux环境下开发,具备高达326GFLOPS的计算能力,提供了基于gpu优化的opencv图像库,能够满足本系统的实时图像处理要求。视觉模块采用Dji Guidence视觉模块,通过usb接口实时将25 hz的320 × 240灰度图数据输入处理器。为了便于开发调试,通过网口使用ssh远程登录到妙算开发算法程序以及存取测试图像数据。
本文使用Dji M100无人机来进行算法验证测试,该无人机平台具有丰富的Onboard SDK用于开发者进行自主飞行控制。处理器实时处理采集的视频图像,并将控制信息通过串口发送给无人机以调整飞行轨迹来规避潜在的障碍物区域。基于以上模块,本文构造了一套视觉实时避障嵌入式系统。其系统结构如图4所示。
4.2. 实验结果分析
为了验证本文算法的可行性和准确性,在室外搭建了一个障碍物场景。在光照充足的室外平地上放置一块竖直的广告牌充当障碍物,无人机以固定的速度从广告牌一侧由远及近地飞向广告牌。如图5所

(a) 远离障碍物时处理结果 (b) 接近障碍物时处理结果
(c) 第一次避障处理结果 (d) 第二次避障处理结果
Figure 5. The result of obstacle avoidance algorithm
图5. 避障算法结果
示,图中蓝色点为提取得到的角点,红色点为潜在障碍物,绿色字符信息代表当前应该采取的避障动作。
图5中蓝色点代表通过Shi-Tomasi算法获取的角点,可以看出能够很好的获取飞行前方物体的轮廓信息,为了能够更全面的获取飞行视野前方的光流场信息,必须要保证每帧图片都能得到足够的角点数量用于计算光流向量。因此在计算光流前,首先判断上一帧金字塔LK算法跟踪到的角点数是否满足最低阈值,若数量满足,则沿用这些角点计算光流,以减少计算量,否则重新计算角点。
如图5(a)所示,当无人机距离广告牌较远时,算法并未将广告牌上角点视为潜在障碍物区域,因此此刻无人机无避障动作保持向前直行(GO STRAIGHT)。当逐渐靠近到危险距离时,如图5(b)所示,广告牌上角点基本被正确的检测为潜在障碍物,显然障碍物位于前方右下角区域,根据本文的平衡法则避障策略正确作出向左上方转向(GO LEFT UP)的避障动作。图5(c)和图5(d)为两次避障动作的结果。
上述实验结果表明,本文提出的视觉避障系统在实际环境中能很好的检测出潜在障碍物及作出适当的规避动作,从而验证了本文系统的可行性。
5. 总结
本文针对无人机自主飞行过程中有效的躲避障碍物问题提出了一套完整的基于嵌入式平台的视觉避障系统。研究并实现了基于光流法的视觉障碍物检测和避障策略算法,从实验结果可以看出本系统能够很好的快速检测出潜在的障碍物区域并做出适当的避障动作,具有较好的准确率。