APP下载

基于双目相机与嵌入式GPU 的SLAM 系统设计*

2021-01-24佘黎煌童文昊孙健伟许洪瑞

科技创新与应用 2021年4期
关键词:双目测距嵌入式

佘黎煌,童文昊,孙健伟,许洪瑞

(东北大学 计算机科学与工程学院,辽宁 沈阳 110000)

引言

随着人工智能理论方法的快速发展应用,以及自动驾驶技术、VR/AR 领域、机器人定位导航方面等人工智能技术的发展。如何在嵌入式系统中使用FPGA 和GPU等高性能边缘技术,成为嵌入式系统技术发展应用的重要内容之一。因此,在高校的嵌入式系统课程中为本科生开展目前流行的嵌入式GPU 应用技术介绍,不仅是嵌入式系统课程与时俱进的必要课程内容,也可以为学生今后就业和深造提供重要嵌入式高性能边缘计算的重要基础。

本系统基于Nvidia Jetson TX2 的ARM+GPU 嵌入式平台,该平台类似传统的PC 机中处理器搭载GPU 显卡的模式,但是在可靠性和功耗等方面有着极大的优化,适合于嵌入式系统的应用。其中ARM 核心嵌入式操作系统运行和系统管理,开发的架构,GPU 负责繁杂的计算,极大的拓展了嵌入式技术的能力范围。本文将以嵌入式GPU 和双目摄像头为主要硬件,以双目SLAM 和目标识别运算为示例来展示嵌入式GPU 的性能。

SLAM 技术是无人智能机器必备技术,它使用光学传感器,以设备自身为中心对周围环境进行建图,并且确定自身位置。SLAM 技术有多重,其中双目SLAM 效果优秀,代价是运算量很高。

同时我们注意到,智能设备的任务往往是有特定目标的,如无人驾驶车需要识别出什么位置有车辆,什么位置有人,红绿灯在哪等等。所以我们将目标识别也加入到我们的系统中,形成能够目标识别的SLAM 建图系统。

1 双目建图原理

1.1 双目测距模型

双目摄像头测距的方案有很多种,既有将两个摄像头竖直放置也有水平放置。在本例中使用的是模仿人类双眼的平行成像模式,两个摄像头平行成像。如图1、图2所示。

两侧摄像头的成像CMOS 焦点处分别为Cl和Cr,Pl和Pr为摄像头最外侧外镜片顶点,P 为成像物体。由于对于已知的摄像机两个成像交点处的距离为定值其在生产时就已经确定并且是已知的量,其距离为L。而每个摄像头都有其固定的焦距为D。对于物体发射光线同外侧镜片交点处与光轴的距离分别定义为xl和xr对于这两者差值的绝对值为视差值。根据这些已知的参量使用简单的三角形相似原理就能得出摄像机和P 点间的距离Y。

从公式中可直观的看出对于双目摄像头成像影响较大的有视差和焦距,可以通过改变焦距来提高远处物体的测距能力,这一点类似于使用不同焦距的摄像头拍摄不同距离的物体。而对于视差无法控制时,尽量距离物体较近以获得更好的测距效果[1]。

图1 双目测距模型

图2 双目测距数学模型

1.2 双目立体视觉模型

双目立体视觉是基于仿生的双目视觉系统,其原理可以看为双目测距原理在空间三个维度上的推广,三维立体的成像即在空间坐标系中确定一物体在X Y Z 三个维度上分别获得摄像头与物体间的距离信息,基于此信息建立起整个物体的在空间中的立体信息。如图3 所示。

图中Or和Ol则为平行入射光线同相机镜头最外侧镜片交点。f 为焦距,P 点为空间中的要在相机内成像的点。Pl(Xl,Yl),Pr(Xr,Yr)为目标点P 在两个相机内所成的像。类似于双目测距的原理,得到如下公式[2]。

图3 双目立体视觉模型

定义D=Xl-Xr为视差,由三角测量原理可以用以下公式计算出P 点的三维坐标。

对于单独一个点的情况根据以上公式可以得到其空间坐标,而对于一个实际物体的建图则涉及到对应点的匹配。需要使用特征点匹配算法。

1.3 双目视觉建模原理

通过双目摄像头获取了左右摄像机拍摄的两张不同方位的照片,使用SIFT 算法进行特征点匹配,能够得到匹配图,算法能够自动匹配图中相似的点、线、面,从这些匹配点看,SIFT 算法提取的特征点大部分都是图像中物体结构的轮廓,这些点反映了这一物体的整体结构,能够帮助计算机理解空间位置。通过计算点在空间中相对相机的位置,将其标注在3D 建图中,进一步得到由点云构成的3D 建图。

2 深度学习目标识别

本项目使用TensorFlow 深度学习框架和训练完成的图像识别训练集,在嵌入式GPU 和深度学习加速器的帮助下,能够做到对每一帧画面实时识别,其识别原理如下。

机器学习的原理就是对输入进行解析,将提取出的信息乘上参数,累加后得出结果,而参数的确定就是训练过程,通过大量的输入和结果纠正,程序自行对参数进行调整。最终得到训练完成的机器学习网络。

图4 设计架构

本文选用SSD 算法。它采用多层卷积的方式,用不同大小的卷积核对图像卷积,将输入图像以不同的规格划分为多个区块并强化特征信息,之后采取池化,将多个子矩阵以取平均压缩,最终得到一个高度凝练的矩阵,以这种方式将图像矩阵快速缩小并且提取、压缩出主要特征信息,值得注意的是,在卷积与池化的过程中必然有信息损失,这些信息损失会导致较小或不清晰物体丢失,或者识别边界不准确。最后再采取全连接的方式分配神经元进行加权求和、判断置信区间,得到结果。

3 设计架构(见图4)

我们选用如下硬件搭建系统:

(1)NVIDIA 的嵌入式 GPU 开发板 Jetson TX2,它集成了8 核CPU、GPU 等电路,单精度浮点运算性能为2.8Tflops,双精度为1.4Tflops 而功耗仅有20W,能在低功耗下情况下提供高计算力。此外,它提供了灵活的驱动和接口,既可以直接使用熟悉设备,也可以自己编写强化技能,非常利于教学。

(2)ZED 双目摄像机,它能够高清高帧率地传输图像,且其生产公司提供了丰富的库、工具集和接口,能够快速计算深度信息,方便其他程序调用。

(3)载具,我们使用自己搭建的小车作为平台,配有舵机、蓄电池等,受ROS 系统控制,能满足中低速平稳运动的需要。

软件方面,我们在jetson TX2 开发板上运行的系统是NVIDIA 公司定制的Ubuntu 系统JetPack OS,它优化了系统对GPU 和深度学习的支持。使用ZED 官方工具软件进行建图,TensorFlow 作为深度学习框架,ROS 系统对小车进行控制。

4 系统建立及测试

4.1 系统安装

JetPack OS 的安装需要一台Ubuntu 系统的PC 主机辅助,将它们连在同一路由器下,并使用官方提供的数据线将TX2 与PC 相连,运行官网下载的SDK Manager 刷机工具,跟随指引完成刷机安装。进入系统后,桌面操作与Ubuntu 无异。

4.2 ZED 相机驱动安装

进入ZED 相机官网,下载Nvidia Jetson 专有版本的ZED SDK,这是官方提供的ZED 相机驱动工具,用以下指令运行下载的.run 文件即可安装成功。(其中zed_sdk_file 指的是run 文件所在文件夹,zed_sdk 指的是下载的.run 文件全名)

cd ~/ zed_sdk_file

chmod +x zed_sdk

./zed_sdk

4.3 TensorFlow 安装与测试

由于TX2 是ARM+GPU 的结构,所以我们安装的版本实际上是TensorFlow-GPU。我们使用如下指令安装:

pip3 install --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v42 tensorflow-gpu==1.13.1+nv19.3 --user

如果网络状态良好,没有报错,则安装完成。在终端输入以下代码进行测试,如果最后看到输出"hello,world"则说明安装成功。

python3

import tensorflow as tf

hello=tf.constant("hello,world")

sess=tf.Session()

print(sess.run(hello))

4.4 API 安装

API 是一些预先定义的函数,官方提供了ZED Python API 和 TensorFlow Object Detection API,前者提供ZED 相机的调用函数,后者是深度学习的函数库。二者代码均在GitHub 下载。

4.5 其他软件

如果JetPack OS 的安装顺利的话,系统中已经带有其他所需的软件,但是我们了解到,部分情况下,这些软件没有安装成功,就需要手动安装,包括cuDNN、OpenCV和CUDA 等。

4.6 测试

我们用终端指令启动建图程序和目标识别程序,

./ZED oolEDfu

python3 object_detection_zed.py

可以在屏幕上看到实时3D 建图与计算出的相机移动轨迹(如图5 所示),以及实时目标识别的结果,同时在系统中,可以调整算法精度,以适应不同场合。

图5 建图结果

5 结束语

经测试,使用嵌入式GPU 与双目摄像头结合的方式,能够实现对载具经过的空间进行实时构建3D 模型并对自身定位,同时对当前摄像头内的物体进行实时识别。这套系统,结合寻路避障程序,可以实现自主巡航建图的无人车,进入人类无法进入的空间进行自主勘探或工作。

猜你喜欢

双目测距嵌入式
基于RSSI测距的最大似然估计的节点定位算法
霜 降 苏美玲
基于双目视觉的机器人定位与导航算法
Focal&Naim同框发布1000系列嵌入式扬声器及全新Uniti Atmos流媒体一体机
基于双目测距的卡尔曼滤波船舶轨迹跟踪
基于STM32的多通道超声波测距系统设计
TS系列红外传感器在嵌入式控制系统中的应用
嵌入式PLC的设计与研究
嵌入式单片机在电机控制系统中的应用探讨
浅谈超声波测距