金志熙 王宏远 勾尤旭 郝佳鑫
摘要:目标跟踪技术在机器人领域中占据非常重要的一部分,可应用于日常生活、军事工业等多个领域。该文采用改进的KCF算法,基于ROS(Robot Operating System)搭建目标跟踪移动机器人。该机器人主要由驱动执行系统、传感系统和控制系统组成。利用Kinect深度摄像头和hector_slam算法建立环境地图,再利用KCF算法进行目标识别与跟踪,获取目标位置,利用move_base功能包实现机器人的导航。
关键词:目标跟踪技术;KCF算法
中图分类号:TP3 文献标识码:A
文章编号:1009-3044(2021)02-0001-03
近年来,由于机器人技术的高速发展,使得机器人进入了我们生活中的方方面面,改变了我们的生活方式。当机器人加上视觉传感器实现目标跟踪功能,可以使得机器人的应用更加的广泛,可以完成更为复杂的任务,例如应用于服务业的各种服务型机器人、应用于物流管理的仓储机器人、应用于军事领域的巡逻机器人等,都可以为我们的生活带来更多的便利。
2014年,Henriques等人提出了一种精度高、速度快的运动目标跟踪算法,即KCF (Kernel Correlation Filter)算法[1]。但KCF算法也有不足,如提取外观特征单一,不能自适应尺度变化和模型更新因子,當运动物体被严重遮挡的时候会导致跟踪失败[2]。针对这两个不足,本文设计的移动机器人的视觉跟踪使用了改进的KCF算法,该算法借鉴快速分类尺度空间跟踪器(FDSST)进行尺度估计,从而达到目标尺寸的准确估计;同时采用Kalman滤波器,使用预测位置进行跟踪[3]。本文设计的移动机器人是基于ROS平台,相当于一个“机器人框架”,是一个功能实现平台。其兼容性强,支持多种编程语言接口,使得ROS系统中的代码复用率高,为机器人操作系统的开发和后续维护提供了方便。在传感系统方面,我们采用了Kinect深度摄像头,可以在一定的范围内采集到深度信息,可替代一般的激光雷达完成地图的建立;利用采集到的信息,使用改进过的KCF算法,通过计算机的处理,得到跟踪目标的位置,实现移动机器人目标跟踪的功能。
1 移动机器人硬件部分
移动机器人硬件部分的设计分为了传感器层、执行层和控制层。其中传感器层包含Kinect深度摄像头,完成图像和深度位置信息的获取工作。执行层包括DC24V的直流电机、电机驱动器和获取里程计信息的编码器。控制层包括Arduino控制板和PC机。Arduino控制板用于获取编码器信号来计算里程计信息,同时接收PC机的速度信息控制电机工作。PC机利用得到的图像信息和深度信息,通过使用改进过的KCF算法进行目标的追踪,得出目标的位置,然后运用move_base功能包得出移动机器人的速度,发送到Arduino控制板从而控制电机实现移动机器人目标跟踪的工作。
本文的移动机器人使用的是两个驱动轮的差动轮式设计,由两个DC24V的电机控制机器人运动,为实现机器人的运动控制,建立机器人差动驱动模型,机器人的几何模型图如图1所示。
以中心点C为参考点描述下的机器人运动学建模如下:
2 移动机器人软件部分
ROS作为一个开源的机器人操作系统,它的运行架构是一种使用ROS通信模块实现各个节点之间的通信,包括基于同步通信方式的服务、基于异步通信的话题等多种通信方式。它支持多种编程语言,方便了更多的使用者[4],官方提供给开发者各种实用的工具和功能包,而且在网络上还有全球机器人软件开发者发布的特殊功能包[5],提高了代码的复用率,为机器人开发节约了不少时间和精力,提高了开发效率。根据设计要求,设计出了本文的移动机器人系统的节点框图,如图2所示,可更直观地了解系统中各个节点之间的通信关系。
本文设计的移动机器人追踪系统就是基于ROS平台,利用Kinect深度摄像头获取节点云信息,利用hector_slam算法功能包建立环境的栅格地图;利用Kinect获取图像和深度位置信息,使用改进的KCF进行对目标的跟踪,得出目标位置,然后运用导航功能包得出移动机器人的速度,发送信息到Arduino控制功能包来控制机器人的移动。目标跟踪这一部分的内容在ROS自带的gazebo物理仿真程序中进行仿真。
3 改进的KCF算法
3.1 KCF跟踪算法
KCF全称为Kernel Correlation Filter 核相关滤波算法,提出时轰动一时,取得了巨大的成功,其核心步骤有采样、训练、检测和更新。为了增强核滤波器的稳定器,需要大量的训练数据集,KCF算法采用目标样本循环位构建训练数据集[xi(i∈{0,...,m-1}×{0,...,n-1})]和跟踪目标标签[yi]。其中m和n为图像x方向和y方向像素点的数量。
但是传统的KCF算法不能根据跟踪目标的尺度变化对初始化跟踪矩阵进行大小改变使得模型的特征丢失、偏移,和当目标被严重遮挡会使模型被破坏,[3]这两种情况都会使得跟踪失败。所以该算法需要进行改进。
3.2 KCF算法改进
将寻找的对象进行一定比例的放缩,生成M组目标(本文的实验中M=33),使用3.1的基本KCF跟踪算法来生成[wm(m=1,...,M)],分别使用[wm]计算最大响应位置。取[max(wmX)],作为计算结果,得出目标所在位置以及目标缩放比例。
3.3 卡尔曼滤波算法
卡尔曼滤波是由消息过程、测量过程和滤波过程组成,是一套线性无偏最小均方误差的递推公式,该滤波算法利用前一刻的估计值和当前时刻的观测值,进行预测当前时刻目标出现的位置。
通过结合该算法,可解决当跟踪目标被严重遮挡时跟踪失败的问题。
3.4 改进KCF整体流程
针对KCF算法难以应对尺寸变化、目标完全遮挡等问题,使用基于改进核相关滤波的运动目标跟踪算法。
首先融合FDSST算法的尺度滤波器,增强算法对目标尺寸变化的适应能力。然后融合卡尔曼滤波器对人物目标下一帧的位置进行预测,结合遮挡判断,当目标被遮挡时,停止KCF算法的模型更新和尺度更新,使用卡尔曼滤波的预测位置进行跟踪,当目标重新回到视野当中时,继续使用KCF算法进行跟踪。
改进的KCF目標跟踪算法的流程图如图3所示。
4 视觉跟随工作流程
本文的视觉跟随移动机器人基于ROS平台,各部分的工作由不同的节点完成,各节点通过通信发布信息或订阅信息完成整体的视觉跟随工作。具体步骤如下:
第一步:在系统中订阅Kinect深度摄像头发布的色彩图像话题,使得在笔记本屏幕上显示当前的摄像头拍摄的视频,然后使用鼠标对跟踪目标进行框选,获取框的坐标信息和图像信息,使目标跟踪算法进行初始化;
第二步:利用摄像头发布的图像信息,目标跟踪算法开始工作。为了实现机器人移动追踪功能,需要使用一个话题将图像的深度信息和框坐标信息进行分析后获得的坐标位置进行发布。对摄像头发布的每一帧图像重复执行第二步的操作;
第三步:为了实现机器人的跟踪导航及避障移动,需要第二步中话题发布的位置信息,当move_base功能包获取位置信息后,会进行全局路径规划(global planner)和本地实时规划(local planner),最后得出机器人所需的移动速度和方向并进行发布;
第四步:对于移动机器人的执行部分,会由ROS_arduino_bridge功能包进行控制。该功能包接收move_base功能包发布的速度信息,进行对电机控制,使得机器人进行移动。
5 实验结果
图4为选择背景图片和目标对象。
图5为正常的跟踪所执行的效果,正常捕捉到了目标对象。
图6为我们将目标远离摄像头时,改进的KCF同样正常的捕捉了目标对象,同时捕捉框变小,和目标大小基本一致,实验效果良好。
图7为我们将目标靠近摄像头时,改进的KCF同样正常的捕捉了目标对象,同时捕捉框变大,和目标大小基本一致,实验效果良好。
6 结论
本文设计的目标跟踪移动机器人,利用Kinect深度摄像头进行数据采集,使用改进的KCF跟踪算法对目标进行追踪,利用move_base进行路径的规划,完成目标跟踪的功能。在仿真实验中,本文设计的目标跟踪机器在摄像头跟踪效果中可以很好地完成对目标的跟踪,实现了预期的目标任务。目前完成了机器人的仿真实验,接下来就对机器人进行实物的搭建,完成实物的组装,继续改进。
参考文献:
[1] Henriques Jo?o F, Caseiro Rui, Martins Pedro, et al. High-Speed Tracking with Kernelized Correlation Filters,2015, 37(3):583-596.
[2] 周正松,陈虹君,周红.基于多特征融合的尺度自适应KCF目标跟踪算法[J].四川大学学报(自然科学版),2020,57(4):697-703.
[3] 王林,胥中南.改进的KCF算法在车辆跟踪中的应用[J].计算机测量与控制,2019,27(7):195-199.
[4] 曹正万,平雪良,陈盛龙,等.基于ROS的机器人模型构建方法研究[J].组合机床与自动化加工技术,2015(8):51-54.
[5] 李贺喜,李富强,牛童立,等.基于ROS系统移动机器人SLAM算法的研究与实现[J].技术与市场,2020,27(7):97,99.
【通联编辑:代影】