吉水县建设局网站,wordpress仿qq,网站备案认领,做赚钱的网站有哪些消息和消息类型
节点能相互传递消息#xff0c;节点之间通信也是基于消息。消息类型也就是数据类型数据类型#xff0c;理解消息的类型很重要#xff0c;因为它决定了消息的内容。也就是说#xff0c;一个话题的消息类型能告诉你该话题中每个消息携带了哪些信息#xff0…消息和消息类型
节点能相互传递消息节点之间通信也是基于消息。消息类型也就是数据类型数据类型理解消息的类型很重要因为它决定了消息的内容。也就是说一个话题的消息类型能告诉你该话题中每个消息携带了哪些信息以及这些信息是如何组织的。正如开篇提到的geometry_msg/Twist ,Twist就是消息类型。
利用rosmsg show geometry_msg/Twist 查看消息类型的详情如下 geometry_msgs/Vector3 linear float64 x float64 y float64 z
geometry_msgs/Vector3 angular float64 x float64 y float64 z 该例中linear 和 angular 都是复合域其数据类型是 geometry_msgs/Vector3。缩进格式表示命名为xy和z的域是对应的上级两个域之一的成员。也就是说geometry_msgs/Twist 消息包含六个成员并且以两个向量的形式组织分别为 linear 和 angular。其中每个数值都是基本数据类型 float64即每个数值都 是 64位浮点型 数据。一般来说一个复合域是由简单的一个或者多个子域组合而成其中的每一个子域可能是另一个复合域或者独立的域而且它们一般也都由基本数据类型组成。同样的思想也出现在 C以及其他面向对象的编程语言中即对象的数据成员可能是其他对象。 此外上述复合域本身也可以作为消息类型。例如一个具有消息类型 geometry_msgs/Vecotr3 的话题是完全符合语法的假如利用命令 rosmsg show geometry_msgs/Vecotr3 则类型的详情是 float64 x float64 y float64 z 每行一个元素每个域由基本数据类型float64以及域名称x、y和z定义。该类型的消息包含三个顶层域即x、y和z。这种嵌套组织方法有助于提高代码的复用率尤其是在该系统中很多消息类型共享相同的数据类型。一个常见的例子是 std_msgs/Header 消息类型其包含一些基本的序列号时间戳以及坐标系等信息。这种类型将作为一个复合域一般称作 header出现在在上百个其他的消息类型中。幸运地是 rosmsg show 命令在显示消息类型时自动向下展开复合域直到基本类型为止同时使用缩进的形式来展示这种嵌套结构因此一般没有必要直接查看这些内层结构的消息类型。
消息类型同样可以包含固定或可变长度的数组用中括号[]表示和常量一般用来解析其他非常量域。比如在 3Dslam 中会用到点云表示点云的消息 sensor_msgs/PointCloud 则类型的详情是 Header header
geometry_msgs/Point32[] points
ChannelFloat32[] channels
这个消息包含3 d点的集合,加上可选的额外的每一点信息在给定的帧头每个Point32应解释为一个3 d点。也许表示激光雷达数据的类型rosmsg show sensor_msgs/LaserScan会更好理解但是这里不再熬述。
理解消息类型的命名
和ROS里其他的程序一样每条消息类型都属于一个特定的包。消息类型名总会包含一个斜杠/斜杠前面的名字是包含它的包例如 geometry_msgs/Twist
功能包名geometry_msgs 类型名称Twist 消息类型geometry_msgs/Twist
这种命名方式的好处是把包的名字包含在消息类型名里能避免命名冲突。
举个例子比如geometry_msgs/Pose 和 turtlesim/Pose 是有区别的消息类型它们包含了不同的但概念上是类似的数据。这也有助于猜测它的含义。例如消息类型 ModelState 单独出现可能会让人产生迷惑但是以 gazebo/ModelState 的形式出现后就会指明这个消息类型是 Gazebo 仿真器中的一部分而且很有可能包含了这个仿真器中某个模型的状态信息。 今后笔者会结合简单的开发程序继续讲解。