基于ROS及KCF算法的自主跟随四驱小车的设计
2023-05-24周旭华伍懿美赖理智黄宇俊
周旭华 伍懿美 赖理智 黄宇俊
【摘 要】本文主要设计一款利用深度摄像头搭配KCF算法实现对指定目标跟随的四驱小车。小车以Jetson Nano为核心控制器、Arduino驱动板为辅控制器、深度摄像头为主要传感器、ROS为控制系统,采取KCF算法对图像进行分析处理。经过反复测试,小车能平稳顺畅地跟随指定目标,同时深度摄像头也采集出具有清晰鲜艳并且对比度高的环境信息。
【关键词】KCF算法;目标跟随;四驱小车;ROS系统
中图分类号:U463.63 文献标志码:A 文章编号:1003-8639( 2023 )05-0027-03
【Abstract】A Four-wheel drive car is designed that uses a depth camera and KCF algorithm to follow a specified target. The car uses Jetson Nano as the core controller,Arduino driver board as the auxiliary controller,the depth camera as the main sensor,the ROS system as the control system,and the KCF algorithm is used to analyze and process the image. After repeated tests,the car can follow the designated target smoothly and smoothly,and the depth camera collects clear,vivid and high-contrast environmental information.
【Key words】KCF algorithm;target following;4WD car;ROS system
作者簡介
伍懿美(1985—),硕士,主要研究方向为人工智能、楼宇智能化(通讯作者)。
随着汽车数量的不断增加和科技的飞速发展,汽车行业迎来了自动驾驶的热潮。中国政府对自动驾驶技术的支持力度也是非常大的,《中国制造2025》明确指出,中国要在2025年掌握自动驾驶的总体技术以及各项关键技术,建立起比较完善的智能网联汽车自主研发体系、生产配套体系以及产业群,要基本完成汽车产业的转型升级。在政策和市场的共同作用下,中国的自动驾驶技术得到了迅猛发展。自动驾驶汽车是指能够通过车载传感器感知道路环境、自动规划行车路线并控制车辆到达预定目标的一种智能汽车。本文主要通过研究深度摄像头所采集的数据包括深度信息也就是距离的感知,把深度信息和图像信息传送到ROS上利用算法分析处理,实现对目标保持一定距离的跟随[1]。
1 自动跟随四驱小车的总体设计
本文设计的自动跟随四驱小车以Jetson Nano为核心控制器、Arduino驱动板为辅控制器、深度摄像头为主要传感器,以ROS为控制系统,采取KCF算法对图像进行分析处理,其主要工作原理是将深度摄像头采集到的深度信息和图像数据通过ROS系统进行汇集并通过KCF算法分析处理,然后信号传输到电机驱动板上来控制4个电机以不同的转速旋转,让小车利用转速差进行直走、转向动作,最终实现智能四驱小车保持一定距离跟随目标[2-3]。
四驱小车的设计主要分为硬件设计和软件设计。硬件设计主要包括硬件电路的设计、硬件的选择、硬件的搭建和调试,硬件电路包括Jetson Nano与深度摄像头和Arduino 2560控制板的连接、Arduino 2560控制板与电机驱动板和编码器的连接、电机驱动板和电机的连接;软件设计包括Ubuntu 18.04系统和ROS系统的下载和安装、KCF算法的使用和适配、四驱底盘控制程序等,系统结构框图如图1所示。
2 硬件设计
2.1 硬件结构设计
KCF跟随的智能四驱小车的硬件设计包括Jetson Nano、深度摄像头、Arduino 2560控制板、降压稳压模块、24V锂电池、双路直流电机驱动板、扩展板和光电编码器电机等,系统的硬件设计框图如图2所示。
2.2 硬件电路设计
硬件部分包括电源模块设计、下位机外围电路模块、深度摄像头信息采集模块、电机驱动模块、上位机及操作系统、下位机-底盘控制模块等。
2.2.1 电源模块的设计
电源模块是整个硬件系统的核心,决定了小车能不能稳定地工作。智能小车硬件模块电压需求情况见表1。由于每个硬件系统的电压需求不一样,使用压降稳压模块使电源模块可以给使用低电压的硬件供电。为了满足各个硬件系统的用电要求,采用规格为24V、20000mAh的锂离子充电电池。在使用时,给电池充满电时电压能达到24V。电池直接向电机驱动板供电,下位机Arduino 2560和摄像头通过USB线与Jeston Nano连接,实现硬件之间的通信并且间接给Arduino板和深度摄像头供电。上位机Jeston Nano的工作电压为5V,因此在给Jeston Nano供电时必须先通过降压模块把电压降至5V。电源与各模块的连接如图3所示。
2.2.2 下位机外围电路模块
下位机Arduino 2560接收到Jeston Nano传输来的指令后向电机驱动板发送信号,电机驱动板可通过下位机Arduino 2560上的PWM端口单独控制左右电机的速度。电机驱动板的IN1、IN2和ENA1控制左电机的正反转和速度,IN3、IN4和ENA2控制右电机的正反转和速度。下位机外围电路模块连接示意图如图4所示。
电机编码器与下位机Arduino 2560连接,可以测量电机的速度并调整,还能让电机更迅速达到目标速度。下位机Arduino 2560与编码器的连接如图5所示。
2.2.3 深度摄像头信息采集模块
深度摄像头信息采集模块采用的是奥比中光的Astra Pro深度摄像头,它包含彩色摄像头(RGB)、红外相机(IR Camera)、红外投影仪(LDM)、深度计算处理器(Depth Processor)、麦克风拾音(MIC)、激光保护装置(LDP)、USB2.0。此模块的深度范围为0.6~8m,彩色图分辨率为1280×720,深度图分辨率为1280×1024。采用Class 1激光,供电方式USB。其功耗2.5W MAX,峰值电流小于500mA。深度摄像头特点在于除了能够获取平面图像以外,还可以获得拍摄对象的深度信息(Z轴),即位置和距离信息。深度摄像头实时获取环境物体深度信息、三维尺寸以及空间信息,为跟随的KCF算法提供了足够和稳定的数据。此模块通过深度摄像头采集深度信息和图像信息经USB串口反馈到Jeston Nano上。
2.2.4 电机驱动模块
电机驱动采用双路直流电机驱动板,可同时驱动2台直流电机,单路有7A大功率,光耦隔离输入信号,带有欠压保护,稳定可靠。驱动板上的+5V引脚可以接5V或者3.3V,为信号端提供电源,ENA1和ENA2为电机使能端,可接Arduino驱动板上的PWM来调节电机的转速,IN1、IN2、IN3、IN4可控制电机的正反转和制动,见表2。
2.2.5 上位机及操作系统
自主跟随的四驱小车的上位机选用Jeston Nano,是一台新一代且只有盒子大小的微型计算机,采用4核64位ARM CPU和128核集成NVIDIA GPU,可提供472 GFLOPS的计算性能,并在其上安装运行了Ubuntu 18.04操作系统和ROS[1]。Jeston Nano主要负责接收深度摄像头传输来的信息,然后再利用KCF算法分析处理,将KCF算法分析处理的结果,即小车的行进方向等指令信息下发给下位机Arduino 2560。
2.2.6 下位机-底盘控制模块
底盘的控制平台采用Arduino 2560为核心,Arduino 2560内置了54路数字输入/输出口(其中15路可作为PWM输出),15路模拟输入,4路UART接口,支持USART和其他通信模式,适合需要大量IO接口的设计。处理器核心是ATmega 2560,一个16MHz晶体振荡器。Arduino 2560通过USB线与Jeston Nano连接,接收Jeston Nano传来的指令,以此发给与电机驱动板相连接的端口信号,带动电机驱动。
3 软件设计
软件系统主要有KCF算法处理和运动控制层两部分。软件整体设计流程如图6所示。
3.1 KCF算法处理
KCF是一种鉴别式追踪方法,在追踪过程中训练一个目标检测器,使用目标检测器去检测下一帧预测位置是否是目标,然后再使用新检测结果去更新训练集,进而更新目标检测器,而在训练目标检测器时,一般选取目标区域为正样本,目标的周围区域为负样本,当然越靠近目标的区域为正样本的可能性越大。算法中使用轮转矩阵对样本进行采集,把图像向上、向下分别移动不同的像素得到新的样本图像,这就是循环之后的样本,直接增加了样本的数量,然后用这些样本去训练一个判别分类器,判断跟踪到的是目标还是周围的背景信息,并且通过离散傅里叶变换的推导,通过对下位机下发移动指令从而实现对指定目标跟随[4-5]。KCF算法部分源代码如图7所示。
3.2 运动控制层
运动控制层主要包括底盘控制程序。底盘控制程序采用ROS_arduino_bridge功能包,负责Arduino与上位机ROS系统的通信,将上位机发布的速度话题解析成小车底盘左右轮的速度和转向,同时将小车底盘的里程计信息收集,并通过话题发布,供上位机中传感器融合节点使用,进而实现小车自身位置的定位。控制部分源程序部分源代码如图8所示。
4 测试
测试时,将小车放在测试场地上,测试小车如图9所示。运行KCF跟随功能,然后框选需要跟随的目标,移动目标,观察小车的跟随情况。在目标直线前后匀速移动时可以很好地跟随,距离保持在设定的范围内。目标在横向移动时出现小车跟丢目标的情况,经过多次调整目标的移动速度,对比发现小车的角速度满足不了目标横向移动时的跟随要求,通过调整KCF算法下发给下位机跟随目标的角速度,对于跟随横向移动的目标时,目标丢失率大大降低。
5 结论
本文设计了一个利用深度摄像头搭配KCF算法實现对指定目标跟随的四驱小车。小车以Jetson Nano为上位机控制器,Arduino控制板作为下位机控制器,深度摄像头为主要传感器,以ROS为控制系统,采取KCF算法对图像进行分析处理。经过调试,该自动跟随四驱小车能够较为准确地跟随目标行走。
参考文献:
[1] 金志熙,王宏远,勾尤旭,等. 基于ROS目标跟踪移动机器人设计与实验[J]. 电脑知识与技术,2021,17(2):1-3.
[2] 杜玉红,刘贤超,刘大维,等. 基于高置信度更新KCF的移动机器人行人跟随[J]. 天津工业大学学报,2020,39(5):67-74.
[3] 戴浩. 一种基于ROS的室内跟随机器人的设计与实现[D]. 西安:西京学院,2020.
[4] 程姜荣,宋芳. 基于ROS的移动机器人视觉跟随系统设计[J]. 软件,2020,41(2):23-27,43.
[5] 陈丹,姚伯羽,吴欣. 基于ROS的移动机器人核相关目标跟踪方法的优化设计[J]. 计算机辅助设计与图形学学报,2020,32(12):1967-1975.
(编辑 凌 波)