ROS通过话题订阅得到自己需要的信息——Gazebo仿真软件中模型的位姿信息为例
前言
最近毕业设计需要用到ROS去控制机械臂,且现在因为疫情被困家中只能用仿真的形式来完成,于是不得已通过仿真的形式完成实验。由于话题(Topic)是ROS系统中最常用的通信手段之一,ROS系统在运行时各个节点间的信息交互、参数传递等都需要用到发布和订阅话题的手段完成,但很多Fresh fish like me(像我一样的菜鸟)并不能在短时间内很好地从官方的教程提炼出其中的用法和思路。授人以鱼不如授人以渔,本文重点讲解在一个系统或者一套(开源)代码运行起来之后,找到自己想要的信息,然后一步一步通过话题订阅获得自己想要的信息的思路。Gazebo是常用的物理仿真环境之一,本文就以Gazebo中对应模型的位姿信息为例。
以下是笔者的系统信息与编程环境:
操作系统:Ubuntu18.04-amd64
ROS版本:ROS-Melodic
查找所需信息所在的话题——若已知目标话题名可略过该节
首先我们需要将这个系统运行起来,如果是开源代码往往通过运行launch文件,自己写的代码也还有可能是运行自己的节点,如此我们才能在系统的消息列表中找到我们需要的信息。系统运行之后Gazebo界面如下图所示,在左侧可以看到当前环境中存在的模型信息。本文的目标模型为 box
系统开始运行之后,首先通过指令 rostopic list 得到当前系统中所有的消息名称
rostopic list
找到这时候往往会发现系统的消息名称列表特别多,很难找到自己想要的那一部分信息,于是我们快速拖动滑块浏览一下列表,快速查找有没有那一部分可能是我们需要的信息。不难发现在消息列表偏上的不分有几个话题是以/gazebo
为开头的,这里面很可能就包含我们需要的信息。于是重新通过指令rostopic list /gazebo
来查看所有以/gazebo
为开头的话题列表。
rostopic list /gazebo
找到相关的消息列表后,其中第二行的消息为/gazebo/model_states
,看名字就很像我们需要的消息内容,但如果并不确定的话可以继续往下查看该话题的相关信息。
rostopic info /gazebo/model_states