1. 引言
随着计算机技术的不断提高,视觉导航技术发展迅速 [1]。视觉系统具有独立性、准确性、可靠性以及信息完整性等优点,可完成目标识别、障碍物回避及路径规划等功能 [2]。在复杂环境中飞行时,利用视觉系统可以尽早发现周围环境中对飞行构成威胁的障碍物,提高飞行安全系数 [3]。
由于单目视觉无法得到目标物体的深度信息,难以估计三维位置信息,为了满足无人机飞行器复杂环境下的导航需求,国内外学者逐步将双目视觉导航方法引入无人飞行器自主导航领域 [4]。基于双目视觉的三维测量技术就是利用双目相机拍摄的图像,将目标在图像上的二维像素坐标转化为三维世界坐标 [5],双目视觉的视觉里程计技术目前在车载导航领域已经得到了验证和应用 [6]。
目前市面上成熟的双目视觉模块,如国内小米公司的深度相机,大疆公司的视觉传感导航模块,国外如英特尔的RealSense D435和微软的kinect2等设备,都包含深度芯片而导致质量过大,有的产品还需要外接图像处理器。这些铲平包含深度芯片的原因是双目视觉进行图像处理时,为了应用于避障场景,实时性的要求非常严格,实时图像处理需要大量的存储空间和计算速度,所以市面上双目相机需要集成深度计算芯片或者外接处理器,从而导致双目相机的重量过大,无法应用于对质量有严格要求的微型飞行器上。
因此,本项目设计出一款能够用于扑翼飞行器上的双目视觉模块,该模块解决重量过大的问题,同时满足实时性避障场景的要求。
2. 硬件设计
双目视觉导航的硬件设计主要需考虑图像处理主芯片和传感器的设计。为了解决两相机不同步的问题,本项目从最前端的图像传感器进行开发,这就要求所依靠的嵌入式平台不仅具备能完成对图像传感器的驱动和配置的逻辑时序控制能力、一定的信号处理能力和计算能力,还需要具备灵活的外设接口和方便的可升级能力。FPGA不仅具备强大的逻辑控制能力,还具备唯一的并行处理能力。因此考虑选用FPGA芯片作为图像处理的主芯片,即能保证实时处理双目图像的匹配,输出深度图,又能满足质量轻、功耗小的要求。另一方面,图像传感器的主要类型有CCD和CMOS。相比之下,COMS传感器的优点为几何尺寸较小,并且CMOS传感器的制造技术与CMOS工艺兼容,CMOS的整合度和帧速率比较高、成本和功耗比较低 [7],所以本项目选择CMOS图像传感器。
本项目图像处理主芯片和传感器的设计具体如下。
2.1. FPGA图像处理主芯片
本项目中采用的FPGA芯片是Altera公司的Cyclone系列芯片EP4CE10F17C8N,该芯片拥有10K的逻辑单元,两个独立锁相环,180个用户I/O管脚,423936bit嵌入式RAM,46个9位嵌入式硬件乘法器等丰富的资源,可以满足目前的设计要求。
FPGA设计的特点是自顶而下及模块化的思想,先将系统框架的总体思路列出,再展示核心模块的细节内容。如图1所示,FPGA通过I2C配置两个CMOS图像传感器,读取拍摄到的场景,输入给图像处理模块,图像处理模块包括Census变换模块和Hamming距离计算模块,计算出Hamming距离后通过WTA策略决策出视差并输入至SDRAM中存储起来,为了实验方便,通过VGA显示其效果。
FPGA的最大特点是流水线计算和并行计算。流水线计算体现在像素自图像传感器读入,然后经过各个模块处理为视差图后又输出至VGA,类似于工厂中的流水线过程。其好处在于,一旦设置好输入输出端的传输频率,整个过程就已经确定了,与数据量的大小无关,即只要传输速率满足要求,处理图像的大小不会影响帧率。另一方面,流水线的计算过程方便发现计算结果的错误,将算法的修改层层分割为某一个模块中的某一个部分,方便修改和迁移。FPGA的并行计算则体现在Verilog语言的特点上,由于硬件描述语言与芯片中的具体电路布线是相对应的,因此可以并行计算出Hamming距离。
2.2. OV7620图像传感器
图像传感器的工作方式分为主动模式和被动模式。在主动模式中,图像采集所需要的时序由相机产生,每个相机均按照自身的时序独立采集,因此容易导致两相机采集不同步。被动模式中,图像采集的部分控制时序由外部逻辑控制,相机依据控制时序来完成图像采集工作,在该模式下若把同一个控制信号输入给两个相机,便可以实现相机的同步采集。因此该系统中所选用的图像传感器必须能工作在被动模式下,其中Omnivision公司生产的OV7620符合要求。
OV7620是一种1/3”CMOS黑白/彩色图像传感器,在图像采集过程中支持连续、隔行扫描方式;工作方式可以配置成主动/被动模式;输出图像数据有VGA/QVGA两种模式;最高像素可以达到664 × 492;最高帧速率为30 fps;支持YUV数据格式。通过其内建的SCCB (Serial Camera Control Bus)通讯接口可以方便地控制其内部寄存器。
OV7620与FPGA的连接如图2所示,其中SCLK、SDTA为FPGA根据I2C协议产生的用来模拟SCCB配置寄存器的时钟和数据信号;同步时序Vsync和Hsync是图像采集中需要的帧同步和行同步信号,在被动模式下,这两个信号是FPGA依据被动时序要求来设计产生的;PCLK是OV7620的像素时钟;DATA[7:0]为相机的8位有效数据。

Figure 2. Logical connection diagram of FPGA and OV7620
图2. FPGA与OV7620的逻辑连接图
3. 算法设计
双目立体匹配的目的是在左右视图中寻找恰当的匹配点,其算法中的关键部分是先建立一个有效的基于能量的代价评估函数,紧接着通过对该函数做最小化处理来计算图像对在成像过程中的匹配像素点的视差值 [8]。立体匹配算法的实质就是最优化求解问题,通过建立合理的能量函数,增加一些约束,采用最优化理论的方法进行方程求解。为了满足扑翼飞行器自主避障的实时性要求,本项目考虑选用的是局部匹配算法,该算法的特点是简便快捷、容易实现 [9]。
为了获得更好的匹配效果,将Census变换引入立体匹配中。Census变换是充分考虑了图像局部相关的特性,而不是直接使用灰度值做差,具有抗光影畸变的作用,效率高、稳定性强,是一种非常有效的代价计算方法,此变换方法能较好地检测出图像中的局部结构特征,如边缘、角点特征等,其核心思想是使用像素邻域内的局部灰度差异,用比特串来表示编码后像素灰度变换信息 [10]。由于Census变换能够更好地检测出图像中的纹理空间分布信息,因而具有更好的鲁棒性和适用性 [11]。
算法的具体步骤如下:
1) Census图像变换
将两个OV7620图像传感器测得的两幅图像都进行Census变换,即将图像像素的灰度值编码成二进制码流,以此来获取邻域像素灰度值相对于中心像素灰度值的大小关系。变换过程通过如下公式进行计算:
其中p是窗口中心像素,q是窗口中心像素以外的其他像素,
表示中心像素 的邻域。
、
表示像素点p、q处的灰度值,符号
表示比特位的逐位连接运算。
2) 计算匹配代价
经过Census变换后的两幅图像使用Hamming距离计算左右视图的匹配度。可将两个视图相应两点的Census值逐位进行异或运算,然后记录结果为1的个数,然后将此个数记为两点之间的Hamming距离。Hamming距离是两点间匹配度的一种体现,Hamming距离越小即匹配度越高。Hamming距离的公式如下:
其中,
和
分别表示左视图和右视图进过Census变换后的二进制编码流,
表示异或运算,n表示二进制编码流的位数,
表示Hamming距离。
3) 代价聚合
局部算法需要对一个支持窗口内的匹配代价进行聚合而得到参考图像上一点在视差处的累积代价。通过匹配代价聚合,可以降低异常点的影响,提高信噪比进而提高匹配精度。
4) 视差计算
通常采用“胜者为王”策略,即在视差搜索范围内选择累积代价最优的点作为对应匹配点,与之对应的视差即为所求的视差。
5) 后续处理
通过以上四个步骤后得到左右两幅视差图像。但此时的视差图存在诸多问题,如存在噪声、障碍区域视差不准确、匹配点之间不匹配等,还不能进行应用,因此本项目对视差图进行优化的方法是图像滤波法。
4. 理论验证
本项目的理论验证实验对双目图像摄像头采集到的图像进行分析。采集的图像如图3所示,其中该图的两幅图像分别是双目摄像头得到的左眼视图和右眼视图。
图4中的两幅图分别是上述设计的基于Census变换的局部立体匹配算法在PC端和FPGA硬件系统处理完的结果,其中左图是在PC端用MATLAB语言编写的程序输出的图像,右图是FPGA硬件系统处理输出的图像。
利用直方图匹配计算的方法对图4的两幅图进行相似度计算,这种计算方法是基于向量之间的差异来进行图像相似程度的度量,计算量小,而且图像能很好的进行归一化处理。两幅图的相似度计算结果如图5所示。
从图5可以看出,基于Census变换的局部立体匹配算法在PC端利用Matlab处理得到的图像,和在FPGA硬件系统处理得到的图像,两幅图的相似程度高达91%。理论实验的结果表明,基于Census变换的局部立体匹配算法的立体视觉导航模块在理论层面是可行的。
5. 实验验证
本项目利用FPGA芯片设计的基于Census变换和局部立体匹配算法的视觉导航模块应用在扑翼飞行器上,并结合开源飞控PX4实现了一套成熟可用的控制系统。通过设计的视觉导航模块将图像信息发送给开源飞控PX4,为扑翼飞行器的自主飞行提供决策依据,同时利用PX4软件系统的地面站,即QGroundControl软件可以实现预先的路径规划,通过设置航点可以实现自动起飞降落和按计划轨迹飞行。通过该软件可以输入航路点和其他命令,规划好航迹后,PX4会利用L1制导路径跟随算法实现沿曲线路径制导。
本实验任务是在QGroundControl软件上预先设置航点,让扑翼飞行器自主飞行控制。设置航点时,将其中的一个航点设置在烂尾楼上,观察扑翼飞行器是否能识别障碍物,并进行自主避障。
实验任务的整个过程路径如图6所示,从图中可以看出,在第二个航点与第三个航点之间存在障碍物烂尾楼,扑翼飞行器在检测到障碍物之后,自主向左做出避障动作,成功绕开烂尾楼,并继续前往第三个航点,最终顺利完成全部任务,验证了扑翼飞行器可以识别障碍物,并进行自主避障。

Figure 6. Task process of autonomous obstacle avoidance
图6. 自主避障任务过程
6. 结论
本项目利用FPGA芯片设计了一款基于Census变换的立体视觉导航模块,该模块质量轻,图像处理速度快,可进行图像的实时处理,能应用于扑翼飞行器的视觉导航。结合开源飞控PX4,本项目设计了一款能实现自动起降、按航迹飞行和自主避障功能的扑翼飞行器,最后通过实验验证了该立体视觉模块的可行性。结果表明,该视觉导航模块具有很强的工程实用价值,可以为无人机的自主避障飞行提供技术支持和决策依据。
NOTES
*通讯作者。