知乎:Magical-E
Github:Magical-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.

【大一立项】ROS服务机器人-结题报告相关推荐

  1. 计算机专业课题 结题报告,计算机结题报告 - 结题报告 - 书业网.doc

    计算机结题报告 - 结题报告 - 书业网 计算机结题报告 - 结题报告 - 书业网 篇一:计算机信息管理专业课题结题报告 高等职业教育计算机类专业建设整体解决 方案的研发与实现 --计算机信息管理专业 ...

  2. 计算机专业课题 结题报告,《有效技能研究与实践》课题结题报告

    <有效技能研究与实践>课题结题报告 拓展教学技能    促进教师成长 ――庐阳中学<有效技能研究与实践>课题结题报告 一.课题研究的背景和意义 1.课题提出 现代化教育技术在教 ...

  3. 单片机是指把组成微型计算机的各功能部件即,单片机结题报告.doc

    单片机结题报告.doc 序号单片机原理及应用结题报告姓名学号学院专业2010学年秋季学期摘要单片微型计算机是指多个微型计算机集成在一个芯片上,也就是把组成微型计算机的各种功能部件中央处理器.随机存储器 ...

  4. python面向对象编程结题报告_中国大学 MOOC_Python语言程序设计_章节测验答案

    中国章节[单选题]一产妇临产10小时,肛查宫口已开全,先露为头,棘下4cm,此时产力组成是下列哪种情况 参考答案如下 大学答案[判断题]草船借箭说明周瑜鲁肃和曹操的才智远远不如诸葛亮.( )程序测验[ ...

  5. 《中学历史核心素养校本化实施的培育研究》结题报告

    <中学历史核心素养校本化实施的培育研究>结题报告 随着时代的发展,我国教育进入急剧的变革时期.如何在学科教育教学中转变育人方式,达成核心素养,为变革寻找合适的突破口,成为教育科研的重要课题 ...

  6. 项目结题软件测试文本,课题实验结题报告.doc

    课题实验结题报告 小学科学课程与信息技术在教学中的有效整合研究 课题实验结题报告 我校科学综合组于2009年4月开始参加了自治区小课题<信息技术与小学科学整合研究>的实验研究,迈开了新课程 ...

  7. 计算机课前导学结题报告,【学案导学课题结题报告】 课题结题报告范文_课题结题报告模板_东城教研...

    学案导学课题结题报告 近日,出现了许多关于学案导学课题结题报告的资讯,东城教研第一时间为您准备了这一期学案导学课题结题报告专题.一.课题研究的背景 传统的数学课堂教学以教师为中心,从教师的教出发,教师 ...

  8. 西安市基础教育小课题研究结题报告

    西安市基础教育小课题研究结题报告 立项号 2019XAGH243 课题名称 <经典诗文诵读的实践与研究> 负责人 秦继霞 所在单位 西安经开第一学校 结题报告 关键词 关键词:小学经典古诗 ...

  9. 计算机在化学教学中的应用课题,信息技术在教学中的应用研究”课题结题报告...

    一.课题提出的背景 在我国实施远程教育工程的大背景和现代信息技术迅猛发展的环境下,在教育教学工作中现代教育技术所发挥的作用越来越强,我们确立现代信息技术在教育教学中的应用研究这一课题就是要引领我校教师 ...

最新文章

  1. Python自动化开发学习13-堡垒机开发
  2. arm-linux内核编译过程小结
  3. 使用Duilib做桌面应用总结
  4. sts(eclipse)安装svn插件
  5. JS日期函数getMonth()的值域是0--11
  6. 帝国cms 打开打开转换表文件失败!
  7. observable java_Observable基本用法(RxJava)
  8. 为什么都建议学java而不是python-是不是Python比Java更容易学,更容易就业?
  9. 【图像加密】基于matlab仿射变换数字图象置乱【含Matlab源码 1171期】
  10. 我很喜欢电影背后这个看上去很精神分裂的故事,跟影片中那个盘根错节的故事相得益彰。好的艺术作品永远都不可能被简化成纬度单一的说教。
  11. spring 视频教程
  12. 2022深圳杯/东三省数学建模ABCD题 赛题分析解题方案
  13. 自动化 c语言学不会,为什么那么多人学不会PLC自动化编程?
  14. html邮件模板美化,设计利器:定制你的炫酷邮件模板
  15. Quorum加密技术分析
  16. JavaScript/DHTML代码
  17. FPGA控制TDC-GPX2时间间隔测量(一)
  18. VIPKID大米网校“学费交多少,由家长说了算”背后的实力自信
  19. matlab解二阶微分方程组ode,MATLAB解含参数方程、矩阵方程、二阶微分方程组
  20. PHP is_file 和file_exists的区别

热门文章

  1. (转)阿里巴巴大数据平台“达芬奇密码”进化论
  2. HALCON已知平面两点图像坐标和对应机械坐标求仿射变换矩阵
  3. EXCEL中把两列表格里的数字合成一列并且中间用逗号隔开
  4. 计算机网络nsi,运行 NSI 服务 Svchost.exe 泄漏内存和非页面缓冲池内存泄漏标记 NSpc...
  5. 从零开始学习信号完整性--6-带宽
  6. 酒店应用爆发式增长,“API即服务”已成趋势!
  7. 2020年湖北省冬小麦种植分布数据
  8. JAVA WEB 中间件为SERVLET(五)
  9. Java微服务学习 第九天 接口 内部类
  10. 日尺度气象干旱指标:SAPEI