Message按照定义解释就是topic内容的数据类型, 也称之为topic的格式标准。
1、结构与类型
基本的msg包括bool、 int8、 int16、 int32、 int64(以及uint)、 float、 float64、 string、 time、
duration、 header、 可变长数组array[]、 固定长度数组array[C]。
2、操作命令
3、常见message
常见的message类型, 包括std_msgs, sensor_msgs, nav_msgs,geometry_msgs等 。
使用 msg
创建一个 msg
-
增加Num.msg文件
$ roscd your_packagename
$ mkdir msg
$ echo "int64 num" > msg/Num.msg
- 上面是最简单的例子——在.msg文件中只有一行数据。
- 当然,你可以仿造上面的形式多增加几行以得到更为复杂的消息:
string first_name
string last_name
uint8 age
uint32 score
- 接下来,还有关键的一步:我们要确保msg文件被转换成为C++,Python和其他语言的源代码:
- 查看package.xml, 确保它包含一下两条语句,没有被注释掉,如果被注释了就取消注释:
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
或者
<build_export_depend>message_generation</build_export_depend>
<exec_depend>message_runtime</exec_depend>
出错请看;https://blog.csdn.net/fancyop/article/details/79149402
如果有其他依赖也要添加
-
如果没有,添加进去。
-
注意:在构建的时候,我们只需要"message_generation"。
-
然而,在运行的时候,我们只需要"message_runtime"。
-
在CMakeLists.txt文件中,利用find_packag函数,增加对message_generation的依赖,这样就可以生成消息了。
-
你可以直接在COMPONENTS的列表里增加message_generation,就像这样:
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation)
- 找到如下代码块:
# add_message_files(
# FILES
# Message1.msg
# Message2.msg
# )
# generate_messages(
# DEPENDENCIES
# std_msgs
# )
- 在catkin_package函数中去掉#加入message_runtime依赖
- catkin_package(
- ...
- CATKIN_DEPENDS message_runtime
- ... ...)
- 去掉注释符号#,用你的.msg文件替代Message*.msg,就像下边这样:
add_message_files(
FILES
Num.msg
)
去掉注释符号#
generate_messages(
DEPENDENCIES
std_msgs
)
使用以下命令进行编译:
$ cd ~/catkin_ws/
$ catkin_make
使用 rosmsg验证是否编译成功
-
以上就是你创建消息的所有步骤。
-
下面通过rosmsg show命令,检查ROS是否能够识消息。
-
使用方法:
$ rosmsg show [message type]
- 样例:
$ rosmsg show beginner_tutorials/Num
- 你将会看到:
int64 num
-
在上边的样例中,消息类型包含两部分: beginner_tutorials
- 消息所在的package Num
- 消息名Num.
-
如果你忘记了消息所在的package,你也可以省略掉package名。
-
输入:
$ rosmsg show Num
- 你将会看到:
[beginner_tutorials/Num]:
int64 num