ROS定制并使用自己的msg

本文为个人学习笔记,仅作为日后使用是方便自己使用,不做过多的讲解,如果有需要了解具体定制细节,可以参考官网教程或者大神的博客


1.在需要使用自定义msg的包里创建msg文件夹,专门用来存放自定义的msg文件。

mkdir msg
vim msg_name.msg

2.编辑自定义的msg文件,设置需要的消息内容,这里官网上对于消息定义类型的定义。

msg文件实际上就是每行声明一个数据类型和变量名。可以使用的数据类型如下:

  • int8, int16, int32, int64 (plus uint*)
  • float32, float64
  • string
  • time, duration
  • other msg files
  • variable-length array[] and fixed-length array[C]

在ROS中有一个特殊的数据类型:Header,它含有时间戳和坐标系信息。在msg文件的第一行经常可以看到

3.修改package.xml文件,确保它包含以下两个语句。

  message_generation
  message_runtime

4.修改CMakeLists.txt文件。

你需要确保你设置了运行依赖

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。 确保添加了如下代码:

Hydro和新版的ROS中,需要添加将如下代码进行修改:

# generate_messages(
#   DEPENDENCIES
#   std_msgs
# )

修改为
generate_messages(
  DEPENDENCIES
  std_msgs
)
 
   
 
   
 
  

在早期的版本中(ROS wiki 中文教程中),你只需要添加如下代码即可(注意:是早期版本,新版本还需要添加具体内容):

generate_messages()

现在,你已经生成自己的消息源代码了。

5.查看msg是否已经成功定义。

rosmsg show [message type]

样例:

rosmsg show beginner_tutorials/Num

6.在CMakeLists.txt中找到如下部分:

# generate_messages(
#   DEPENDENCIES
# #  std_msgs  # Or other packages containing msgs
# )

去掉注释并附加上所有你消息文件所依赖的那些含有.msg文件的package(这个例子是依赖std_msgs,不要添加roscpp,rospy),结果如下:

generate_messages(
  DEPENDENCIES
  std_msgs
)

由于增加了新的消息,所以我们需要重新编译我们的package:

catkin_make

所有在msg路径下的.msg文件都将转换为ROS所支持语言的源代码。生成的C++头文件将会放置在~/catkin_ws/devel/include/beginner_tutorials/Python脚本语言会在~/catkin_ws/devel/lib/python2.7/dist-packages/beginner_tutorials/msg目录下创建。lisp文件会出现在~/catkin_ws/devel/share/common-lisp/ros/beginner_tutorials/msg/路径下。

遇到了一个重新编译时自定义消息调用找不到头文件的问题。解决方法是从垃圾箱里把原来头文件存放目录中找到相应文件,放到新的编译位置。

7.现在就可以在代码中使用我们自己定义好的msg了。

c++中需要include对应的msg头文件,例如:

#include 

声明类似如下代码:

package_name::massage_name::ConstPtr& input

python中需要import相应的msg库,例如:

from package_name.msg import massage_name

声明类似如下代码:

output = massage_name()

你可能感兴趣的:(ROS)