ROS2 广泛应用于机器人和自动化系统的开发,例如:
- 工业自动化。用于机器人和自动化设备的控制和监控,例如生产线上的物料搬运、装配、质检等。
- 服务机器人。用于服务机器人的开发,例如提供导航、人脸识别、语音识别、图像识别、自主探索等功能。
- 智能交通。用于智能交通系统的开发,例如自动驾驶汽车、无人机等。
- 医疗保健。用于医疗保健设备的开发,例如外科手术机器人、病房机器人等。
- 农业机器人。用于农业机器人的开发,例如自动化种植、灌溉、收获等。
可见,学习ROS2有多么重要。那为什么我们选择学习ROS2而不是ROS呢,首先ROS2去除了ROS的部分缺点,ROS2比ROS更优秀。其次ROS不维护了,学ROS2是未来的趋势。
虽然ROS2出来的时间也不算很久,生态不够健全,学习资料和开源少之又少,但我们也要学它,学的人多了生态自然会好起来。
下面分享我的个人学习经验:
学习ROS2前,你最好有以下基础,不然学得很艰难
会编程语言:c++, python
学习ubuntu系统命令的使用
学习c++的智能指针 , make_ptr共享指针
学习c++的命名空间
学习vscode的使用,熟悉vscode : VScode的使用-CSDN博客
学习多线程编程思想
学习数学知识,坐标转换,pnp解算,旋转度RPY, 四元素等
学习CmakeLists.txt的语法: Notion – The all-in-one
学习ros2的基础主要看视频,看视频比看书好,学得也快,先花一个月弄懂基础先
在B站上,ROS2的学习视频有赵虚左、鱼香ROS、古月居等,我个人推荐看视频就看赵虚左老师讲的,使用工具就用鱼香ROS的。
基础--赵虚左
看赵虚左的视频,他讲的好:
ROS2理论与实践_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1VB4y137ys/?spm_id_from=333.337.search-card.all.click&vd_source=fa413bc52093fd6d8d349a293cda2c55我有赵虚左的视频课件,后台私信发你
赵虚左的知识星球有实践课程,买他的小车然后实践,视频我看了,他没有教建图和导航的原理,只是运行命令让小车跑起来而已。
看完赵虚左的视频,基础已经学完,然后没有视频看了,接下来看鱼香ROS的文档来学习进阶那部分
进阶--鱼香ros 鱼香ROS机器人 (fishros.com)
学习进阶部分主要是学 navigation2那部分 ,学懂了你就能导航,让小车动起来。
然而,学习nav2框架的资料很少,而且很难懂,需要你慢慢积累
动手学ROS2Descriptionhttps://fishros.com/d2lros2/
注意,鱼香ROS的文档里面有些代码是错的,如果运行报错,不要怀疑,问AI解决。
Nav2:
学习nav2主要看官方文档,官方文档全是英文,我们难以看懂,所以看鱼香ROS翻译的官方文档,因为是软件翻译的,有许多错误,将就不了的自行翻译官方文档
Nav2 — Navigation 2 1.0.0 文档 (fishros.com)http://dev.nav2.fishros.com/doc/看完文档,理解好nav2框架的原理,你就开始做项目
做鱼香ROS的开源项目,让小车在仿真里面跑起来
这个项目得手动初始化位姿,手动标点进行导航,这非常不方便,开始进一步学习。
使用代码进行导航,nav2源码提供了python的API,这会使得导航变得很简单,所以你必须搞懂nav2的官方源码
然后我自己改了鱼香ROS的开源项目,让机器人在仿真里自动导航,跑一下代码
使用nav2提供的API进行自动导航,有开机自启动的导航脚本shell:
卢东艺/fishbot_ws - 码云 - 开源中国 (gitee.com)https://gitee.com/Ludongyi/fishbot_ws/tree/master
快速上手--机器人工匠阿杰
机器人工匠阿杰的个人空间-机器人工匠阿杰个人主页-哔哩哔哩视频
如果想快速能让机器人跑起来,看他的视频跑命令
如果你实在想看导航视频,花钱去买一些课程,这样能快速上手
移动机器人规划控制入门与实践(基于navigation2) (3dcver.com)
有便宜卖课的,懂的都懂
经验:
每次运行都要source install/setup.bash ,除非你把它添加到.bashrc文件里,不然运行出现奇怪的错误
ros的log会存到 ~/.ros/log 报错就去log里面找
如果运行出现奇怪的错误,把install、build目录删了,重新编译
话题订阅者每次回调函数都处理当前时刻最新的一个消息,所以缓冲区队列的大小必须设置为1,不要用默认的10,发布者也一样:ROS2/DDS/QoS/主题的记录-(tencent.com)ROS订阅最新的消息及queue_size和buff_size的理解_ros为什么要设置缓冲区的大小?-CSDN博客
建图的时候要把map坐标系的原点建在机器人的初始位置 初始化位姿的时候要初始化在map坐标系的原点(0,0),这样odom坐标系就与map坐标系重叠,定位就不容易飘
在实车或者仿真导航中,当机器人快要到达目标点时,由于定位的偏差,可能会一直徘徊在目标点附近,导致到不了目标点,到不了目标点就一直卡在那里。所以需要加反馈,不断的计算当前位置与目标点的距离,distance_threshold=0.5 , 当到达距离目标点0.5米时,开始计时,如果5秒还没到达目标点,取消当前点的导航,开始下一个目标点导航。 (这些数值根据自己的情况修改)
nav2源码的使用: https://zhuanlan.zhihu.com/p/392662454
nav2源码提供了许多导航的python API,所以决策的功能包用python写就很方便,使用c++写就有点复杂了:https://blog.csdn.net/qq_27865227/article/details/132640872
nav2源码找到src\navigation\nav2_simple_commander\nav2_simple_commander里面的代码,比如你要运行这个robot_navigator.py,把它复制到你自己的功能包,编译,运行这个节点就能用,或者找到nav2_simple_commander\launch里面的对应的launch文件直接启动
如果你要搞一个和鱼香ROS一样的项目,搞好机器人模型urdf,搞好仿真环境world等东西,放到description功能包,启动打开仿真环境,然后建图,拿到地图就好办了。
新建一个navigation2功能包,负责启动nav2框架。把地图丢到maps文件里,然后,把src\navigation\nav2_bringup\params\nav2_params.yaml文件复制到param文件里,修改里面的参数。 use_sim_time参数的意思是使用仿真时间,如果使用仿真导航,就把所有的use_sim_time设置为True, 实车导航设置为False amcl:默认使用amcl定位,你需要用什么定位自己添加和删除。DWB:默认使用DWB控制器,根据自己的情况写一个插件添加到nav2框架
你需要理解里面的所有的参数是什么意思,然后根据自己的情况修改,因为我们还在初学,先会改use_sim_time先,其他的先用nav2默认参数。启动nav2框架,手动初始化位姿,就可以仿真导航 实车导航:在工作空间里添加雷达、IMU等设备的驱动,启动设备,获得数据,构建机器人的整个tf, 然后使用雷达建图,最后导航
所以你看,导航动起来并不难,难的是精准的定位导航,如果飘了,到达距离目标一米的地方停下,这样的导航没什么意义了。 所以,你需要花很多时间来学习精准导航,这个过程很难很漫长
资料:
学习过程中,我写了一点笔记,需要自取:
后续整理后发...
可以看别人的文章:
ROS2机器人个人教程博客汇总(2021共6套)_ros机器人编程原理与应用百度网盘-CSDN博客