当前位置:   article > 正文

【大一立项】ROS服务机器人-结题报告_ros机器人课程设计报告

ros机器人课程设计报告

知乎:Magical-E
GithubMagical-E
项目展示:【大一立项】亲手搭建ROS机器人小车

1.课题背景

近年来,机器人领域飞速发展,各种技术层出不穷。从四足机器狗的运动,到阿尔法狗战胜柯洁,再到无人驾驶上路测试,各种新发明、新成果向我们表明机器人将会给社会带来翻天覆地的变化。未来,机器人必将会引领人们的工作进行智能化升级,帮助人们更高效、更准确、更节省成本地完成工作。随着人工智能、云计算的发展,机器人所需要的成本不断下降,在可以遇见的未来,一大批服务机器人将出现在前台迎宾、餐厅送菜、养老服务、清洁康复等领域,而我国服务机器人起步较晚,但发展迅猛、需求巨大,值得引起关注。服务机器人通常应用于非确定性环境,如酒店、家庭、医院,需要通过激光雷达、深度摄像头等传感器对周围环境进行感知,还要通过语音交互与人共同协作才能完成任务。本文从服务机器人所需的基本功能入手,初步学习了所需功能的经典算法原理,并复现了经典算法在服务机器人上的效果。

2.课题研究内容与方法

服务机器人所需要的功能包括但不限于:自主移动、语音交互、环境感知、路径规划、目标检测、目标跟踪等功能,项目组自主搭建基于Arduino的底盘完成了机器人的自主移动,使用树莓派和Jetson Nano运行ROS将Gmapping、RGB-DSLAMv2、路径规划(A* & TEB)、语音交互、YOLOv3目标检测、KCF目标跟踪等算法整合到机器人上,并检测算法效果。

2.1底盘搭建

底盘为两轮差速模型,采用Arduino作为下位机,树莓派作为上位机。Arduino接收树莓派的速度信息,通过L298N对两个直流减速电机进行调速;并且接收霍尔编码器数值,返回给树莓派。树莓派计算出速度后发送给Arduino,并且接收Arduino反馈的编码器数值,将编码器进行积分得出底盘的里程计信息。流程如下:

在这里插入图片描述

2.2 Gmapping原理与实践

​ 服务机器人想要获得周围的环境信息以及自身在环境中的位姿需要SLAM,目前较为经典的SLAM算法有Gmapping、Karto、Cartographer、Hector等算法,本次项目主要学习了Gmapping的原理,并检测了小范围建图的效果。

原理: SLAM指实时位姿估计和地图构建,对于激光SLAM,由于激光的数据较为准确,使用覆盖栅格建图可以很好地构建地图,所以主要任务便是位姿估计。Gmapping优化了基于RBPF的粒子滤波器:1. 优化粒子耗散问题:减少重采样次数来避免粒子多样性被耗散:通过公式在这里插入图片描述评估粒子权重的分散度,当Neff小于一定阈值时,说明粒子分布与真实情况差距较大,此时才应该进行重采样;而Neff未小于阈值时,说明粒子分布与真实情况较为符合,可以减少重采样次数。2. Gmapping通过改善提议分布来优化滤波器,提升proposal分布采样的效果来减少所需粒子数,从而减少内存消耗,配合里程计仅需30个粒子便能较好地估计位姿、构建地图:里程计给出预测后,激光雷达进行一次扫描匹配得到图示L所代表的尖峰区域,在L区域内选择K个点计算里程计的均值与方差,得到了真实位姿的近似分布,在高斯分布中采用的粒子有更好的效果,从而可以减少所需粒子数目。
在这里插入图片描述
实践:在ROS中编译好相关软件包后,配置对应launch文件,添加好laser到base_link的静态TF变换便可运行。但最开始建图效果很差,后来发现是里程计未进行校准,在进行里程计的标定(轮径和轮距)后效果有一定提升,最终效果如下:
在这里插入图片描述
如图可见:即便Gmapping没有回环检测算法,但依靠粒子多样性仍能够在小回环中消除累计误差。虽然目前基于图优化的Cartographer已经基本取代gmapping,但作为经典SLAM的Gmapping凭借简洁、计算量小等特点仍值得学习。

2.3 RGB-D SLAMv2实践

顾名思义,RGB-D SLAMv2采用深度摄像头,通过对RGB图与深度图(Depth)处理生成点云,SLAM主要分为四个部分:前端、后端、闭环检测、建图:
在这里插入图片描述
实践:由于RGB-D SLAMv2使用g2o优化并且用点云表示三维地图,所以在使用前首先要编译好g2o与PCL库。编译完成后需要改写launch文件,将相机的RGB图像的topic、深度图像的topic和相机参数的topic重映射到launch所需的话题名。由于使用点云表示三维地图消耗的内存较大,运行时需要缓慢移动相机,效果如下:
在这里插入图片描述

2.4 EKF & AMCL & 路径规划

对于服务机器人而言,最重要的就是能够自主移动到想要到达的位置,即自主导航。导航之前机器人首先需要定位自身位置,然后通过SLAM为机器人建立的拓扑地图进行全局路径规划。全局路径规划器规划好全局路径后,为了让机器人尽量沿着规划的全局路径走会,同时避免在路线中碰撞到突然出现的障碍物,局部路径规划器会根据激光雷达的扫描信息规划出一条局部路径,然后根据局部路径不断发送速度给底盘控制器完成导航。导航的总体框架如下:
在这里插入图片描述
机器人需要准确定位自身位置,由于单独由编码器积分得出的odom存在一定的累计误差,可以让线速度主要由编码器计算,而角速度主要由IMU计算,在设置好编码器和imu的协方差后,通过扩展卡尔曼滤波robot_pose_ekf将编码器信息和imu信息进行融合,得出odom_combined话题:

在这里插入图片描述
在导航的过程中可能会出现意外情况让里程计跑飞,为了避免这样的情况,导航包中提供了AMCL即自适应蒙特卡罗定位的功能包用于定位机器人的位姿。AMCL是基于粒子滤波的定位方法,可以通过设置粒子数目和粒子分布情况来调节定位效果。在给定初始位姿后,该算法会在对应位置散布一定数量的粒子,机器人进行移动后,根据激光雷达扫描信息进行滤波处理,粒子会逐渐收敛得到准确位姿:
在这里插入图片描述在这里插入图片描述
定位完成后便可以进行路径规划,路径规划包括全局规划和局部规划,本次项目主要采用A*全局路径规划器和TEB局部路径规划器。A*是Dijkstra的改进版,加入了启发式函数进行估值,达到最短路径的效果。TEB全称Timed-Elastic-Band,是时间最短的最优控制器,基本思路为在周围散布姿态,通过搜索树搜索最优方案。效果如下:(红色为全局路径规划路线,绿色为全局路线上突然出现障碍物后规划的局部路径)

在这里插入图片描述
当然,在真实情况中服务机器人不一定需要采用最短路径,也就是说可以根据实际需要自己规划一条路径,加上局部路径规划器便可以按照需求自主导航。

2.5 语音交互

人们最自然的交流方式是语音,语音也是人机交互中最便捷、高效的方式,语音交互突破了传统人机交互方式的局限性,对老人、残障人群较为友好,在助老、迎宾等领域效果显著。所以作为服务机器人,语音交互是必不可少的一个功能。语音交互目前分为四个部分:语音唤醒(Wake Up)、语音识别(ASR)、语义理解(NLP)、语音合成(TTS)。本次项目中采用SnowBoy开源语音唤醒库,百度语音的语音识别、语音理解和语音合成进行语音交互。

SnowBoy是一个开源的、轻量级的语音唤醒库,可根据用户定制唤醒词。在语音唤醒后,才能进行百度语音提供的识别、理解和合成功能。具体流程如下:
在这里插入图片描述
本次项目使用树莓派配合树莓派语音板完成了查看时间、查询天气、垃圾分类等功能,但在噪声较大的地方语音交互效果不够理想。

2.6 YOLOv3

深度学习是近年来机器人学最火的领域之一,目标检测是深度学习最主要应用的课题。目标检测可用于服务机器人的识别跟踪,从而提高机器人的任务辅助能力。YOLO算法是由Redmon等提出的基于回归方法的目标检测算法,使用Darknet-53网络架构,不断将特征图卷积处理得到三次预测结果,然后对三次预测结果进行抑制处理得到最终效果,流程如下:
在这里插入图片描述
本次项目采用Jetson Nano配合奥比中光深度摄像头进行目标检测.Jetson Nano是英伟达今年新推出的低功耗GPU开发板,配备128个CUDA核心。在使用GPU加速后YOLOv3摄像头实时检测帧率可达10帧。

2.7 KCF目标跟踪

有了目标检测自然需要目标跟踪,在特殊场景下可能需要服务机器人跟随人,或跟随某一移动物体来完成任务。KCF算法是由Joao F. Henriques等人提出的逐帧训练2D滤波器的跟踪算法,其效果稳定、反应迅速。

本次项目采用深度摄像头,首先将RGB图像话题和深度图像话题重映射到kcf_tracker所需话题下,然后调试相机深度参数,打印出dist_val值,乘以一定的比例系数将其控制在0.4~2之间即可,kcf_tracker原理流程如下:
在这里插入图片描述
2.8 APP控制

​ ROS Control是一款基于ros_bridge的手机APP,通过HTTP协议连接到底盘的Master,读取Master下的image、scan等topic并显示出来。同时,APP还可以模拟摇杆和重力传感发送速度给底盘,甚至可以设置目标点,通过读取odom信息让底盘移动到目标点。效果如下:
在这里插入图片描述在这里插入图片描述
4.研究成果

本次项目通过分布式通讯,搭建了以树莓派、Jetson Nano、PC共同为上位机,以Arduino Mega为下位机的ROS服务机器人,机器人总体框架如下:
在这里插入图片描述
完成了以下功能:

  1. 通过串口通讯完成树莓派控制Arduino进而控制底盘的功能。
  2. 使用Gmapping进行建图,做到1000平范围的优良建图效果。
  3. 通过RGB-D SLAM进行小范围的三维重建。
  4. 使用A *全局算法和TEB全局算法进行路径规划完成导航,并且通过脚本在地图中设定多个目标点,完成了每个目标点停止10秒中的多点定点巡航。
  5. 通过Snowboy语音唤醒库和百度语音的识别、理解、合成功能做到语音交互的功能,可以进行查询天气、时间、垃圾的类别等。
  6. 使用YOLOv3算法做到10帧的实时摄像头目标检测。
  7. 通过KCF算法完成目标跟踪的功能。
  8. 基于ros_bridge完成APP控制。
    本次项目小组使用ROS将整合到了服务机器人上,完成了SLAM、多点导航、语音交互、目标检测、目标跟踪、APP控制等服务机器人所需的基本功能。同时小组对串口通讯、SLAM、路径规划进行了系统学习,也对语音交互、深度学习、计算机视觉有了一定的了解和认识。

5.创新点

本次项目通过学习ROS将许多算法整合到了服务机器人上,学会了使用开源软件完成项目需求。ROS是一种松耦合的系统结构,可以方便开发者根据需求灵活添加不同功能模块。同时ROS提供标准化框架,方便代码的重复利用,也方便开发者学习开发。

6.结束语
经过这次创新立项,我们了解到了一个机器人是需要很多功能才能高效地完成任务,这说明机器人领域有很多值得探索的方向。根据估算,全球机器人市场需求巨大,而目前除了扫地机器人和无人机,其他领域尚未成功大批量落地产品,尤其是服务机器人领域,目前的产品功能有限,所以还有很多复杂的问题等待我们去解决。

7.参考文献

[1] Grisetti, C. Stachniss, and W. Burgard, “Improved techniques for grid mapping with rao-blackwellized particle filters,” IEEE Transactions on Robotics (T-RO), vol. 23, pp. 34–46, 2007.
[2]wiki.ros.org.
[3]范丽,苏兵,王洪元,《基于YOLOv3模型的实时行人检测改进算法》,山西大学学报(自然科学版),3-4,2019.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/602769
推荐阅读
相关标签
  

闽ICP备14008679号