10.2 使用 msg
10.2.1 创建一个 msg
下面,我们将在之前创建的package里定义新的消息。
$ cd ~/catkin_ws/src/beginner_tutorials
$ 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>
<run_depend>message_runtime</run_depend>
如果没有,添加进去。 注意,在构建的时候,我们只需要"message_generation"。然而,在运行的时候,我们只需要"message_runtime"。
在你最喜爱的编辑器中打开CMakeLists.txt文件(可以参考前边的教程rosed).
在 CMakeLists.txt文件中,利用find_packag函数,增加对message_generation的依赖,这样就可以生成消息了。 你可以直接在COMPONENTS的列表里增加message_generation,就像这样:
# Do not just add this line to your CMakeLists.txt, modify the existing line
find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation)
有时候你会发现,即使你没有调用find_package,你也可以编译通过。这是因为catkin把你所有的package都整合在一起,因此,如果其他的package调用了find_package,你的package的依赖就会是同样的配置。但是,在你单独编译时,忘记调用find_package会很容易出错。
同样,你需要确保你设置了运行依赖:
catkin_package(
...
CATKIN_DEPENDS message_runtime ...
...)
找到如下代码块:
# add_message_files(
# FILES
# Message1.msg
# Message2.msg
# )
去掉注释符号#,用你的.msg文件替代Message*.msg,就像下边这样:
add_message_files(
FILES
Num.msg
)
手动添加.msg文件后,我们要确保CMake知道在什么时候重新配置我们的project。 确保添加了如下代码:
generate_messages()
编译新建的消息
$ cd ~/catkin_ws
$ catkin_make
现在,你可以生成自己的消息源代码了。如果你想立即实现,那么就跳过以下部分,到Common step for msg and srv.
10.2.2 使用 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
Last updated