我们使用的ROS是ROS-I的版本,我接触的第一个ROS是在Ubuntu 16.04的Kinetic,过了不久就出了Melodic版本的ROS。当时我特别纠结,是继续Kinetic学习,还是转到Melodic学习(那时候身为小白,啥也不懂,现在觉得想笑)当时学习的资料是古月老师的星火计划课程,觉得课程是这个,果断地选择了Kinetic版本。一套课程看完,当时看到第三章之后就有点看不下去,信息量很庞大,自身地知识储备不足,脑瓜子嗡嗡的。感觉视频看不下去,我买了一本ROS的书——《ROS机器人项目开发11例》,拿到书的时候,我更懵了。书里面用到了不同版本的ROS!!!至此,我的ROS学习搞一段落。
大概是过了有小半年吧,这小半年一直在跟着老师做项目,学习B/S和C/S,学了Socket,学历mqtt,最最重要的是,学了在Linux下的C++编程,知道CMake是什么。其实对比可以发现,这些东西和ROS之间还是存在着关联性的——技术无界限之分。
当时实验室里面买了一辆ROS的小车,大概两千多吧,我重新开始了我对ROS的学习之旅。小车有配套的资料,按照着视频一步步操作,小车可以动起来,也可以建图导航,但
是我就是感觉少了什么。我还是不会ROS,如果没有视频,我来小车启动都无法实现。很迷茫困惑。不知道ROS的下一步该怎么去走。
ROS是一个很好的工具,我们要做的是去使用这个工具,而不是被这个工具束缚,不能离开了这个工具,什么也做不了。我需要是熟悉这个工具。于是我再一次拿出古月老师的视频,第二遍从头开始看。这一次的效率很高,感觉ROS Master节点管理器的模式可以类比到mqtt,它们两个都是分布式的通讯;感觉话题通讯就是发送数据和接收数据,只是丢出去和接收的关系;感觉服务通讯就是我给你数据,你给我反馈,没有反馈就是失败和错误;参数编程模式也慢慢的熟悉,其实就是一个全局变量......
ROS = 通讯机制 + 开发工具 + 应用功能 + 生态系统
通讯......节点......节点管理器......话题......服务......
少了什么,应该有很直观的方式可以来展示这个结构,就像是文件结构、文件层次一样的东西。没错,我少的是工具!是开发工具,是对开发工具的使用。
我想要去学习的是这个系统是怎么运行的,而不是简单的学习如何让这个系统运行起来。可以表述关系的工具......
rqt_graph!!!节点关系图!!!
我拿出ROS小车,启动键盘控制的相关文件,启动rqt_graph,很清晰,哪个位置发送了什么到了哪里,一清二楚。虽然实现我不懂,但是我看到了这个系统是如何让运行起来的!我想我现在需要知道这个节点关系图里面的都是什么,这些个节点都是什么,那就是来看看话题的内容是什么。查看话题内容,那就是rostopic工具。既然有rostopic,那么就应该也有rosservice工具!!!
topic话题的格式是msg决定的,service服务的格式是srv文件决定的。那么就是rosmsg工具,又或者是rossrv工具!!!
至此,我的ROS正式入门。ROS的通讯机制只是它的一部分,熟练使用ROS系统下的工具,才是开发ROS的王道。
ROS的工具不仅仅只是这些指令,rviz、gazebo、Moveit等等,都是。这个体系十分庞大。
ROS的应用功能是指什么呢?功能包!可以移植到自己系统使用的功能包!!我突然回忆起来了一幅图。
提高机器人研发中的软件复用率,可能你是做嵌入式方向的,不懂导航算法,那么你可以在ROS当中使用其他人的ROS导航功能包,来应用到自己的机器人上面;又或者是你是做算法方向的,你需要一个机器人的驱动板来验证自己的算法设计,那么你可以选择一款ROS驱动包的驱动板,使用ROS来进行开发;再或者你想添加机械臂到ROS小车上面,那么机械是一组ROS功能包,导航小车又是一组ROS功能包,如何让两组功能包再一起工作,这就是你需要调配的任务。既然别人造好了轮子,我们可以直接拿来使用,除非你也是造轮子的。
在拿到一个新的、陌生的功能包的时候,我的习惯,先是tree一下,看一下这个功能包里面都有哪些组成;然后是看package.xml,这个文件可以让我大致知道这个功能包能做什么,依赖了什么;接着是CMakeList.txt,这里我可以看到依赖包、消息、服务、动作、配置,甚至是需要编译的文件、测试节点、文档等等内容。在看完package.xml和CMakeList.txt以后,对这个功能包有了一个大概的猜想。
然后是查看话题、服务等等内容,看看数据格式是什么,内容是什么;再然后就是看launch文件,看launch文件的每个node和param,了解在这个功能包里面的节点关系是什么样的。
最后就是启动这个功能包,rqt_graph验证自己的猜想。至此,一个功能包的分析大致结束。当然这是我的一个思路,大家可以来借鉴。
上面的是一些我从ROS初学者一步步走来的一些感悟,希望对屏幕前的你有所帮助。ROS的生态系统十分庞大,你有什么ROS相关的问题几乎都可以找到相关的讨论以及学习。
在ROS系统项目当中,我们可能会碰到非标准系统的ROS开发——这些系统不是ROS支持的系统,又或者是我当前的版本没有这个功能包、功能包无法使用等等错误。
在安装ROS系统的时候,我们都是通过ROS Wiki的步骤,在终端复制粘贴一步步执行。但是对于不支持ROS而非用ROS不可得情况下,我们就需要使用源码编译的方式来安装ROS。其实步骤呢,真的很简单很简单很简单,简单到什么地步呢,还是一幅图来描述吧~
ROS怎么说呢,我最深的感触就是需要积累!ROS涉及的太多太多,机械、电气、单片机、嵌入式、Linux、网络、前后端,最后尤为重要的就是算法,如果“全栈”是形容软件领域全能程序员的话,我觉得用“超栈”这个词语来形容ROS工程师会更加的合适。所以啊,刚开始搞ROS的,不要心慌,也不要心慌!
守得云开见月明,静待花开终有时!