一、对ROS的基础理解

一、对ROS的基础理解

0.前言

我是一年前开始学习ROS的,一年里都时不时地使用到ROS。我用ROS参加过两次比赛,一次是用gmapping和navigation,让扫地机器人进行建图和自主导航;一次是配合webots(一个仿真软件)进行家庭服务机器人创意设计的比赛,总体上也还是借助了gmapping和navigation。最近在使用ROS参加另一个比赛,想使用树莓派作为上位机,涉及到了ROS和32的通讯问题,以及一些顶层算法编写的问题。

可以说我是很喜欢ROS的,但是我一开始学的时候,由于一知半解,以及急于求成的心态,对于很多重要的概念没有理解到位,对于基础的编程也只是三脚猫功夫。而且我始终利用着ROS生态圈开源的好处,只是干着调包的工作。我参加的两个比赛成绩都比较好,但是只有我自己最清楚,我到底有多少本事。

这一年中,有学长建议我去学习源代码,我当时觉得有道理,就去报名了网课。然后因为我是导航这方向开始入手ROS的,所以我中途还去学了一点SLAM的东西。但是有过类似经历的人肯定能明白,这种学法其实都是没学会走路就要跑的天真做法。因为学不懂的缘故,我已经很久没再去学过算法方面的东西了。

但现在因为另一个比赛的缘故,我又开始使用ROS,但这次没有功能包可以调用了,然后我发现我对ROS竟不知所措,连最基本的publisher都不会写。这里就长话短说了,这些博客我就当是写给自己看的,我想根据我这盲目摸索的一年的浅薄经验,重新理解ROS,然后及时记录下来,希望最后自己可以真正学会ROS。

前言末尾用一句话与读者共勉:“人生在世,是不用听取别人意见的,不会明白的,除非自己经历过。“我现在回头想起一年中别人给我学习上的意见,我就有些感慨,以及重新看到ROS书上对一些仿佛很熟悉的概念的解释,又会有仿佛从未知道过的感觉。

1.节点(node)

节点是一个个有各自功能的“模块”,整个ROS抽象层面最基础的东西就是节点。我以前有一个错误的观念,那就是ROS是单节点的系统。这个错误观念很奇怪,因为所有以ROS为基础的东西肯定可以形成一个网状的结构,要不然根本没有使用ROS的必要。我之所以有这种错觉,是因为我是调包出身的,所以一开始需要我自己处理的节点只有一个象征机器人本身的节点,而其他众多节点都由gmapping等这些功能包封装好后直接提供。

这里暂时还可以提一句的是,ROS节点往往和功能包紧密联系,我现在见到的大多数情况都是一个功能包产生一个节点。

2.消息(msg)

msg是最重要的通讯概念,但对于msg的理解我也是最近几个月才获得的。

msg很灵活,它的强大体现在它可以用类似struct(C++)的形式撰写自定义的信息。

3.话题(topic)

这个东西其实我的理解还是很到位的,因为调包工作的核心就是要正确发布topic给你调用的功能包产生的节点。比如gmapping会需要你提供“/imu”“laser”等话题,以完成建图。

经过复习我最近还掌握了编写publisher和subscriber的一种妙招,这里就不展开说了。

我觉得topic这里除了基础的编写要会以外,要特别理解清楚msg的概念,因为传来传去的东西就是个msg;然后就是要理解callback(回调函数)。

4.服务(service)

我就是在准备复习这个东西的时候想到学习记录的事情。

我很纳闷,因为这一整年里我都没用过service功能。

我去请教了学长,他就是把网上的主流定义跟我讲了一下。然后我自我反问了一个问题:如果需要一问一答的通讯,可以用subscriber的回调函数内含一个if语句来解决啊,这个service有什么用吗?

现在我想通了一点,以激光雷达建图为例:gmapping使用subscriber订阅你/laser_scan话题,是因为你要一直听着,然后不断更新代价地图。回调函数确实可以实现问答功能,但是有必要一直pub一直sub吗?肯定没有!所以只要让节点内部自己运转,遇到设定的情况后,作为client向外发出一个请求,然后相关server提供service解决问题即可。

总结起来,topic适合实时处理,service适合逻辑处理。

5.节点管理器(ROS Master)

节点管理器可以简单理解为节点管理器。它的存在让各个节点知道互相的存在,并且可以构成通讯。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值