2.6 ROS2的学习经验

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理论与实践_哔哩哔哩_bilibiliicon-default.png?t=N7T8https://www.bilibili.com/video/BV1VB4y137ys/?spm_id_from=333.337.search-card.all.click&vd_source=fa413bc52093fd6d8d349a293cda2c55我有赵虚左的视频课件,后台私信发你

赵虚左的知识星球有实践课程,买他的小车然后实践,视频我看了,他没有教建图和导航的原理,只是运行命令让小车跑起来而已。

看完赵虚左的视频,基础已经学完,然后没有视频看了,接下来看鱼香ROS的文档来学习进阶那部分

进阶--鱼香ros      鱼香ROS机器人 (fishros.com)

学习进阶部分主要是学 navigation2那部分 ,学懂了你就能导航,让小车动起来。

然而,学习nav2框架的资料很少,而且很难懂,需要你慢慢积累

动手学ROS2Descriptionicon-default.png?t=N7T8https://fishros.com/d2lros2/

 注意,鱼香ROS的文档里面有些代码是错的,如果运行报错,不要怀疑,问AI解决。

Nav2:

学习nav2主要看官方文档,官方文档全是英文,我们难以看懂,所以看鱼香ROS翻译的官方文档,因为是软件翻译的,有许多错误,将就不了的自行翻译官方文档

Nav2 — Navigation 2 1.0.0 文档 (fishros.com)icon-default.png?t=N7T8http://dev.nav2.fishros.com/doc/看完文档,理解好nav2框架的原理,你就开始做项目

做鱼香ROS的开源项目,让小车在仿真里面跑起来 

fishros/fishbot: 动手学ROS2第二阶段课程源码|机器人建模仿真fishbot (github.com)icon-default.png?t=N7T8https://github.com/fishros/fishbot/tree/humble

这个项目得手动初始化位姿,手动标点进行导航,这非常不方便,开始进一步学习。

使用代码进行导航,nav2源码提供了python的API,这会使得导航变得很简单,所以你必须搞懂nav2的官方源码

GitHub - ros-planning/navigation2: ROS2 Navigation Framework and Systemicon-default.png?t=N7T8https://github.com/ros-planning/navigation2

然后我自己改了鱼香ROS的开源项目,让机器人在仿真里自动导航,跑一下代码

使用nav2提供的API进行自动导航,有开机自启动的导航脚本shell: 

卢东艺/fishbot_ws - 码云 - 开源中国 (gitee.com)icon-default.png?t=N7T8https://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博客

ROS2使用nav2全教程_ros2 nav2-CSDN博客

 ROS2与Navigation2入门教程-目录 - 创客智造/爱折腾智能机器人 (ncnynl.com)

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT小艺

如果文章对你有用,请我喝咖啡吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值