如何学习Ros? 您所在的位置:网站首页 ROS介绍 如何学习Ros?

如何学习Ros?

2023-04-14 06:44| 来源: 网络整理| 查看: 265

简而言之,学习ROS的关键是——多实践!

ROS是一个机器人研发中的重要工具,“学以致用”才是我们学习的最终目的:给学习赋能的就是实践!而实践就是不断进行知行合一的各种尝试!

现在关于ROS的资料已经非常多了,无论是图书、视频还是博客,都可以找到很多学习的资源,但是ROS的学习曲线还是有点陡峭,很多初学者还没来得及在ROS的世界走一走,就半路放弃回了头。

那么ROS该如何学习?如何实践?古月君尝试给各位提供一些参考思路。

一、 基础教程不可少

1.背景知识

ROS需要基于Ubuntu使用,涉及的编程语言主要是C++和Python,另外还需要对所研究的机器人理论有一定了解。

这些是对初学者背景知识的要求,但千万不要抱出一本《C++ primer》开始研读,这些知识都需要在实践中打磨,所以建议在网上找一些速成教程,花几天时间大概了解知识框架和重点即可。

2.ROS安装

ROS安装当然是开始动手的第一步,在Ubuntu官网下载镜像,根据百度指引完成系统的安装。

Get Ubuntu | Download | Ubuntu

接下来就是ROS的安装了,按照ROSwiki上的安装教程,完成桌面完整版的安装。

Ubuntu install of ROS Melodic

安装完毕之后运行一下“roscore”,如果没有问题,恭喜你,安装成功!

3.wiki基础教程

ROS wiki是ROS资源最丰富的地方,20新手教程非常详细,对代码都有解释,花一天时间把这些教程好好学习下。

ROS/Tutorials - ROS Wiki

结束新手教程后,相信你的小海龟例程也已经可以跑起来了,虽然你不一定明白为什么要有这只海龟的存在。

其实,小海龟背后几乎包含了所有ROS核心通信相关的原理,可以多花两天时间,配合《A Gentle Introduction to ROS》这本书,加深对这只小海龟的理解,熟悉ROS基础工具的使用,比如你可能会用到:rqt_graph、rostopic、rosservice、rosnode等。

4. 编程学习

ROS使用的编程语言主要是C++和python,所以也有针对这两种语言的功能支持包roscpp和rospy,看完上面的教程也可以看看这两种语言的基础教程。

rospy_tutorials - ROS Wikiroscpp/Tutorials - ROS Wiki

努力学习完上面的这些内容,你至少应该明白ROS里面的节点和消息是干什么用的了吧,如果还没理解,那就再结合小海龟多试几次吧!

二、常用功能包知多少

ROS不仅为机器人开发提供了分布式通信框架,而且还提供了大量实用的组件工具,了解这些工具是后续使用它们的基础,这里列出部分常用的组件工具:

1. launch启动文件

到目前为止,每当运行一个ROS节点或工具时,都需要打开一个新的终端运行一个命令。当系统中的节点数量不断增加时,每个节点一个终端的模式会变得非常麻烦。

启动文件(Launch File)是ROS中一种同时启动多个节点的途径,还可以自动启动ROS Master节点管理器,而且可以实现每个节点的各种配置,为多个节点的操作提供了很大便利。

roslaunch/XML - ROS Wiki ROS探索总结(五十六)—— launch文件

2、tf坐标变换是机器人系统中常用的基础功能,ROS中的坐标变换系统由TF功能包维护。

TF是一个让用户随时间跟踪多个坐标系的功能包,它使用树型数据结构,根据时间缓冲并维护多个坐标系之间的坐标变换关系,可以帮助开发者在任意时间,在坐标系间完成点、向量等坐标的变换。

tf - ROS WikiROS探索总结(十八)--重读tf - 古月居ROS探索总结(二十二)--设置机器人的tf变换 - 古月居

3.rviz

rviz是ROS中一款强大的3D可视化工具,在后面可是要频繁用到的。

rviz - ROS WikiROS探索总结(五十七)—— Rviz三维可视化平台

我们可以在里面创建自己的机器人,并且看到机器人动起来,还可以创建地图,显示3D点云等等,总之,想在ROS中显示的东东都可以在这里显示出来。

当然这些显示都是通过消息的订阅来完成的,机器人通过ROS发布数据,rviz订阅消息接收数据,然后显示,这些数据也是有一定的数据格式。

rviz/DisplayTypes - ROS Wiki

4.urdf

上面的机器人模型是不是很酷,在rviz中,这样的机器人模型是通过urdf文件描述的。

URDF(Unified Robot Description Format,统一机器人描述格式)是ROS中一个非常重要的机器人模型描述格式,后续的开发中也将频繁用到。

urdf - ROS WikiROS探索总结(二十三)--解读URDF - 古月居

5.gazebo

gazebo是一款功能强大的三维物理仿真平台,其中的机器人模型与rviz使用的模型相同,但是需要在模型中加入机器人和周围环境的物理属性,例如质量、摩擦系数、弹性系数等。机器人的传感器信息也可以通过插件的形式加入仿真环境,以可视化的方式进行显示。

simulator_gazebo/Tutorials - ROS WikiROS探索总结(五十八)—— Gazebo物理仿真平台ROS探索总结(二十四)——使用gazebo中的插件

更多功能和工具还需要我们在不断的学习过程中熟悉,比如action、plugin、smach等等。

三、仿真操作很重要

以上都是ROS的基本功能和使用方法,了解之后的关键还是要进入实践阶段,综合应用以上功能,完成机器人的开发。

这一步我们可以不用真实机器人,从以上提到的ROS教程中选一本,包括配套的源代码,按照书上的操作,一步一步实现,其中必然会遇到很多问题,灵活应用google是正道

实现之后当然不是结束,挑选自己感兴趣或者需要研究的章节,一定要把这些源码的实现原理搞明白,仔细研究每一个节点、launch、config文件是如何实现并完成配置的,最好自己动手调试一下,熟悉之前提到的各种工具的使用方法。

除了书本上的内容,这里也给大家推荐几款常用的机器人,都配有仿真环境和使用说明,挑选一款搞明白即可,其他都是大同小异。

1.turtlebot

TurtleBot可以说是ROS中最为重要的机器人之一,它伴随ROS一同成长,一直都作为ROS开发前沿的机器人,几乎每个版本的ROS测试都会以TurtleBot为主,包括ROS2也率先在TurtleBot上进行了大量测试。

所以TurtleBot是ROS支持度最好的机器人之一,可以在ROS社区中获得大量关于TurtleBot的相关资源,很多功能包都能直接复用到我们自己的移动机器人平台上,绝对是使用ROS开发移动机器人的重要资源。

Robots/TurtleBot - ROS WikiROS探索总结(四十九)——ROS机器人实例 (TurtleBot)

2.Husky

这款机器人是室外轮式移动机器人,同样有丰富的学习资料:

Robots/Husky - ROS Wiki

3.Universal Robots

Universal Robots(优傲机器人)是一家引领协作机器人全新细分市场的先驱企业,近几年在机械臂领域用的非常多,对于ROS的支持也比较友好。

universal_robot - ROS WikiROS探索总结(五十)——ROS机器人实例 (Universal Robots)

4.PR2

PR2是ROS中元老级的机器人平台,所有软件代码依托于ROS,并且全部在ROS社区中开放源代码,为我们学习、应用ROS提供了丰富的资源。

Robots/PR2 - ROS WikiROS探索总结(四十八)——ROS机器人实例 (PR2)四、真实机器人跑起来

相信你已经迫不及待的想找一台真实机器人练练手啦,如果你所在的实验室或者公司有相关的机器人给你玩,千万不要放过这个机会,SLAM、navigation、Image、MoveIt全都跑起来!!!

这里先用ROS已有的功能包把需要的功能实现了,然后肯定会发现结果不令人满意,此时再来分析是哪个部分的原因,可以进入下边的第五个步骤。

如果周围没有这样的环境,也不要灰心,仿真环境可以满足你绝大部分的需求,如果实在手痒痒,那还是败个家吧,淘宝上的ROS机器人很丰富,选择一款适合自己的,为了梦想还是值得的。比如下图就是古月君自己买来搭建的移动机器人,总花费不超过2000大洋。

还有很多心灵手巧的小伙伴,可以自己买各种原材料攒一台机器人出来,这个挑战更大,需要自己实现很多嵌入式底层方面的驱动和控制功能,ROS在这部分没有太多指导,需要大家参考一些嵌入式开发和电机控制相关的资料。

ROS探索总结(五十一)——ROS机器人实例 (HRMRP)五、回归初心是正道

经过九九八十一难来到这里,说明你已经“衣带渐宽终不悔,为伊消得人憔悴”啦!

相信你一定和我一样,遇到并解决过类似下边的问题:

1. 一个launch文件敲下去,终端里各种红色的错误飞出来,无数包和节点找不到2. 机器人还没跑起来,tf相关的错误已经搞的晕头转向3. slam过程中机器人飘的厉害,地图和真实环境相去甚远4. 导航的时候满地打转,机器人已经不知道何去何从5. 机械臂运动规划略显随意,同样的路径点每次走出的轨迹却不一致......

这些问题大部分原因是和ROS配置相关的。

回想一下我们最开始为什么要学习ROS,是为了研究slam、研究导航、研究运动规划、研究人工智能等,但是我们好像花了很多时间在配置环境、写launch、改yaml参数,和开始的目标有点偏离了,自己的研究并没有多大进展。

所以到这里,是时候好好想想自己的初心了,ROS你已经比较熟悉,千万不要满足于用ROS已有的功能包调试出一个八九不离十的效果就可以了。

ROS是一个工具,可以帮助我们快速搭建起机器人应用的原型,接下来我们的重点应该集中在你自己的研究上,做slam的就来实现自己的算法和gmapping对比,做navigation的就来优化move_base的导航效果,做运动规划的就用自己的规划算法替换ompl。

在这个过程中,下边这些书应该是我们参考的重点(优先选择英文原版):

正确认识和使用ROS,或许是我们在学习路上要不断精进的一项内功。它已经成为很多机器人开发者的一种生活方式,每当遇到机器人问题,都会想到用google搜索关键词“ROS + 问题”,找到资源后就是试用、学习、消化、重造。但ROS并不完美,问题还非常多,也不代表机器人开发的全部。

好啦,洋洋洒洒说了这么多,如果你还不明白怎样学习ROS,那我也只能把看家的秘诀告诉你了!

《ROS机器人开发实践》+ 关注“古月居”,就O啦!

~欢迎关注~微信公众号:古月居博客网站:古月居


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有