基于单目视觉测距及深度学习识别的机器人跟踪方法研究

2022-10-20 09:35陈逸扬
电子元器件与信息技术 2022年8期
关键词:单目测距标定

陈逸扬

扬州市职业大学,江苏扬州,225009

0 引言

随着大功率计算机以及高精度摄像机的迅速普及,有关机器视觉的研究也越来越深入。在以前的研究中,常用Camshift算法来检测人体,当环境光照充足时,跟踪效果良好,但在光照条件较差时,跟踪性能下降。因此,本文再目标检测部分了深度学习,该方法可以在不使用冗余帧的情况下更加精确。它类似于人类通过寻找特殊属性或特征来持续提取图像数据,从而理解信息。在追踪的部分中,本文采用了一种结构简单、易于实现、计算量小的单目相似三角测距方法,可以快速获得机器人与检测目标间的距离。

1 摄像头的标定

1.1 标定的作用以及准备工作

摄像头的镜头数据是进行单目测距过程中最重要的参数,为了获得这些参数,就必须要对摄像头进行标定。在标定之前,一共准备了三块校准板,每一块板都是由高精度的黑白矩形组成的,并输入图像上所有内角的图像坐标和校准板图像上所有内角的空间三维坐标。

1.2 摄像机标定过程

首先需要在不同位置、角度下拍摄校准板的照片。如图1所示,共获取了9张不同角度的校准板,使用OepenCV中的函数cvFindChessboardCorners来提取角点坐标,可以获得一个粗略的坐标,然后再调用函数cvFindCornerSubPix()获取精确的角点坐标。展示时,可以用CVDrawChessboarCorner将其绘制在图片上。然后初始化校准点的三维坐标。最后一步是调用cvCalibrateCamera来计算摄像头的内外部参数矩阵。

图1 不同角度标定板拍摄

2 深度学习

2.1 CNN卷积神经网络

在深度学习的领域中,卷积神经网络是非常重要的一部分,它在目标的检测和识别、图像的分割和处理等方面出现的使用频率非常高。它是一种多层神经网络,与普通神经网络不同,卷积神经网络的每个神经元与前一层的所有神经元和后一层的所有神经元都是相连的。

2.2 SSD的目标识别过程

目标识别和定位可分为两个任务。第一个任务是在场景中找到对象,并给出该对象的边界框检测信息。另一项任务是根据识别的对象进行类别的建立。识别检测过程集成到卷积神经网络中。网络的第一部分使用标准网络进行图像分类,例如VGG、lexNet等。然后再添加额外的卷积层,以此逐层减小卷积层特征映射的比例。利用不同卷积层的特征映射可以预测目标的分类和检测框体的移动,从而实现多目标的尺度特征映射检测。如图2所示,每个特征层在用来进行预测时,可以使用卷积滤波器来生成许多大小固定的预测。再对特征层进行卷积运算,便可以得到相应大小的特征图,可以用来预测类别分数和相对于默认框产生的坐标偏移。由于不同层级的默认框拥有不同的特征图尺度,所以也就具有不同的尺寸以及长宽比,来适应待检测目标的尺度变换。

图2 不同层级的默认框尺寸

在图2中可以看出,对于猫和狗采用了不同的层级的特征图来进行预测,并且通过不同大小的默认框来进行匹配。每一层的默认框的大小可以由公式计算得出:

既然每个特征图有6个预测框,那么就可以预测对象的不同大小和形状。而且默认框的数量远大于实际框的数量,因此在训练时需要将默认框与实际框进行匹配。

2.3 检测结果

在检测之前,只需将代码中原先的真循环改为CLASSES[idx]==”person,从图3中可以看出,这样在检测过程中,程序只会将人体未检测目标,而且对于人体检测的默认框非常准确,不会多余的空白框体。

图3 人体检测效果图

3 单目摄像头测距

3.1 算法原理

在单目视觉测距部分,本文基于相似三角形的相似化过程计算出机器人与检测物之间的距离。用相机拍摄一个宽度为W,且与相机相距距离为D的物体,获得其像素宽度为P,从而可以得到摄像头焦距的公式。在上文中,我们也根据标定过程得到了摄像头的焦距值。

在计算过程中,将一张长8.5英寸宽11英寸的A4纸放在距离摄像头D=24英寸的地方,再用摄像头拍摄纸张获得它的像素宽度为249像素。所以根据公式4-1便可以计算出焦距大小为:

当继续将摄像头靠近或远离对象或目标时,依据相似三角形的相似化过程便可以得到目标与相机之间的距离的公式:

再将摄像头移到离目标36英寸的地方,拍下放置好的A4纸。通过图像处理,可以得到A4纸在图片中170像素的像素值。将其代入公式,得到:

从以上的计算可以看出,如果需要计算距离,必要的两个参数就是摄像头的焦距和目标物体的大小。这两个参数代入公式,就可以获得从目标到相机的距离D。

3.2 计算人与摄像机之间的距离

在具体应用中,首先通过深度学习来检测人,然后根据预估的人体高度和相机焦距来计算人与相机之间的距离。这里选择高度的原因是人们的高度在不同方向上略有变化,同时相机高度也是固定的。

3.3 检测结果

根据4.1中的结论,同时考虑摄像头的摆放高度和角度对结果的影响,本文最终将摄像头高度设置在2m,角度在15度,测量结果如表1所示。

表1 测量距离与实际距离误差

从表中信息可以看出,测量的误差基本控制在百分之三以内,因此这种单目视觉测距算法的具有一定的精度,可以使用。

4 机器人移动控制

4.1 移动机器人的硬件和软件

本文在移动机器人控制系统部分选择的是Ubuntu 16.04的ROS indigo。摄像头选用的是Logicool C270网络摄像头。如图4所示,该机器人有4个USB接口与摄像头和显示器连接。它还有一个用于激光雷达的微型USB接口。

图4 机器人硬件部分

机器人机身部分的具体参数见表2。

表2 机器人具体参数

4.2 机器人运动控制模块

本文是基于ROS indigo作为机器人的移动控制系统,ROS可以提供了一个非常强大的图形仿真环境rviz以及move_base导航包,可以帮助使用者创建环境地图。首先,启用激光雷达节点和机器人键盘。通过移动按键帮助我们控制机器人移动到每个角落,以扫描周围环境,并使雷达覆盖每个地方。当机器人建立好所处环境的地图后,利用ROS提供的move_base导航包让机器人在已建立好的地图中指定目标位置和方向后,结合机器人码盘推算出的odometry信息,作出路径规划,输出前进速度和转向速度。在导航过程中,首先需要输入goal指令让机器人获取我们所期望它在地图中到达的目标位置。再利用转换指令将机器人的地图坐标转换为Odom坐标,根据Odom指令所计算出的机器人左右轮速度推算出的航向信息,包括在Odom坐标系中机器人的坐标以及航向角。当获得坐标以及航向角后,通过cmd_vel在cmd_vel这个主题上发布Twist消息,将速度以及航向角发送给机器人基座,当move_base导航包接收到目标地点后,再通过客户端向服务器发送,move_base会根据转换坐标来不断控制机器人的状态和路径规划。move_base在工作工程中会向geometry_msgs/Twist消息类型发出运动命令。基本控制器节点使用控制命令。/cmd_级别的全称为“命令速度”。基本控制器节点订阅/cmd_level主题,并通过PID控制算法将运动命令转换为电机信号。移动机器人在二维平台(如地板)上操作.只需要x轴和z轴的信息,是因为这种机器人只能在x轴上前后移动,并且只能绕z轴旋转。换句话说,Y轴和Z轴的线速度始终为零,机器人不会在其他轴上旋转。为了让机器人以0.1m/s的速度直线移动,消息部分将以以下形式编写:“{linear:{x:0.1,y:0,z:0},angular:{x:0,y:0,z:0}”。然后这个Twist信息将发送给机器人,并被其他ROS节点使用。

基于通过深度学习和相似三角形算法获得的距离,本文设定了两个临界值,一个是290,另一个是220。从图5的对比可以发现,如果距离超过290cm,程序将向机器人发送Twist信息,使其向前移动;当距离处于220cm至290cm之间,机器人保持距离不运动;如果距离小于220cm,机器将获得负速度保持距离在220cm。

图5 机器人追踪界面效果图

由表3中的数据数据可以看出,当可以根据测得的距离的改变而发出相应的运动状态指令,并且灵敏度较高。当机器人距离目标439cm时,超过了最大临界值,因此会接收到一个给左右轮正速度的指令,机器人会向着检测目标的方向前进;当距离在290cm,正好达到临界点时,机器人会收到正负轮速度均为零的指令,因此机器人会停止不动;当小于220cm时,机器人距离目标过远,便会通过指令靠近目标。

表3 运动状态随距离的变化

5 结语

本文提出了一种基于深度学习和单目摄像机测距的机器人跟踪方法。实验过程基于普通的网络摄像头,而不是深度摄像头,可以在节省成本的同时加快操作速度。深度学习可以有效地检测人体,并使检测框体非常稳定。一个稳定的检测框体可以帮助我们精确地测量距离。再通过相似三角形的相似化过程,利用摄像头的焦距、高度以及人体的身高,可以计算出摄像头与人体之间的距离,通过ROS indigo来控制机器人的移动,使得机器人与人体之间不会过远也不会过近,保持一定的跟踪距离。本文中也存在一定缺点,在跟踪前需要录入人体的身高,对于应急的处理能力可能不足。未来的工作是通过改进测距算法来解决这个问题。

猜你喜欢
单目测距标定
基于RSSI测距的最大似然估计的节点定位算法
基于单目视觉的分离图像分析方法
基于单目视觉车距测量方法综述
轻卡前视摄像头的售后标定
一种轻卡前视单目摄像头下线标定方法
使用朗仁H6 Pro标定北汽绅宝转向角传感器
基于STM32的多通道超声波测距系统设计
CT系统参数标定及成像—2
CT系统参数标定及成像—2
基于单片机的超声波测距导盲杖设计