ROS系统是一个松耦合的系统, 节点之间通过消息进行交互. 消息是至关重要的.
Topic是名字, 而消息类型是数据结构.
要使一则消息从一个节点成功到达另一个节点. 首先, 需要topic是一样的, 这样就确定了接口相同. 接着是消息的类型需要使一样的, 这样接收方才能将收到的数据进行正确的提取(类似于解码), 得到发送方原来的意思.
现在如果已经知道了topic的名字, 如何去查找消息的类型, 以便我们可以根据正确的格式去发送或者读取消息呢?
1, rostopic info [消息名字]; 可以得到Type:信息.
例
$ rostopic info /odom
Type: nav_msgs/Odometry
Publishers:
* /mobile_base_nodelet_manager ()
Subscribers: None
2, 根据上述操作得到 topic 消息类型为nav_msgs/Odometry;
使用工具 $rosmsg show nav_msgs/Odometry 后可以得到如下结果
std_msgs/Header header
uint32 seq
time stamp
string frame_id
string child_frame_id
geometry_msgs/PoseWithCovariance pose
geometry_msgs/Pose pose
geometry_msgs/Point position
float64 x
float64 y
float64 z
geometry_msgs/Quaternion orientation
float64 x
float64 y
float64 z
float64 w
float64[36] covariance
geometry_msgs/TwistWithCovariance twist
geometry_msgs/Twist twist
geometry_msgs/Vector3 linear
float64 x
float64 y
float64 z
geometry_msgs/Vector3 angular
float64 x
float64 y
float64 z
float64[36] covariance
根据得到的数据结构就可以仿造消息了. 不同的缩进代表的是级别, 有些类似于目录级别的感觉, 可以找到msg文件进行对比加深理解.
3, 如果想要查看上述msg的说明文件可以使用
$roscd nav_msgs
进入目录下的msg文件夹查看, 该msg文件夹下有很多*.msg文件. 用于描述不同的msg的说明. 不过在文件中经常会用到其他包中使用到的消息类型, 即存在类型嵌套,不是很直观.
阅读(6838) | 评论(0) | 转发(0) |