ROS定义自己的消息类型

平台:ubuntu + ros_melodic

1.添加消息(以test.msg为例)

  1. 定位到catkin_ws/src/package
  2. 新建msg文件夹,在msg文件夹中使用命令新建test.msg,命令如下:
cd catkin_ws/src/package
madir msg
cd msg
touch test.msg
  1. 编辑test.msg文件,在这里定义信息内容。
sudo nano test.msg
uint8 test1
uint8 test2
string test3

注意:此处要特别注意数据类型,笔者先前使用float一直报错

2.添加各种依赖配置来使用新消息

  1. 定位到catkin_ws/src/listener,编辑package.xml。
  • 定位到55行左右,添加修改后为:
  <build_depend>generation_msgs</build_depend>#这一行是新添加
  <exec_depend>message_runtime</exec_depend>#这一行是新添加

2.定位到catkin_ws/src/listener,编辑CMakeLast.txt。

  • 定位到第10行find_package(),添加修改为:
find_package(catkin REQUIRED COMPONENTS
  message_generation  #这一行也是新添加的
  roscpp
  rospy
  std_msgs
  geometry_msgs     #这一行是添加的
)
  • 定位到53行左右,取消注释,添加修改后为:
 add_message_files(
   FILES
   test.msg  #这里就是刚刚定义的数据类型
   #Message2.msg
 )
  • 定位到74行左右,取消注释,添加修改后为:
generate_messages(
   DEPENDENCIES
   std_msgs
 )
  • 定位到110行左右,取消注释,添加修改后为:
catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES listener
  CATKIN_DEPENDS roscpp rospy std_msgs message_runtime geometry_msgs
#  DEPENDS system_lib
)

至此,配置完毕。

3.编译工作空间并且查看

回到catkin_ws文件夹下,运行catkin_make。编译完成后,source一下devel文件夹下的setup.bash。用命令行查看rosmsg show test,看见以下内容就说明新消息已经定义并且可以使用:
(笔者先前只定义了一个变量)
ROS定义自己的消息类型_第1张图片

4.在其余功能包下使用新定义消息

假设我们在pak1按照上述流程创建了消息,我们需要在pak2下设置各种依赖,才能在pak2下使用这种消息。方法如下:

  1. 定位到catkin_ws/src/pak2,编辑package.xml,定位到51行左右,修改后如下:
  <build_depend>pak1</build_depend>#这一行新添加

  <build_export_depend>pak1</build_export_depend>#这一行新添加

  <exec_depend>pak1</exec_depend>#这一行新添加
  1. 定位到catkin_ws/src/pak2,编辑CMakeLists, 定位到11行左右,修改为:
find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
  pak1   #这一行新添加
)

至此设置完毕,最后只要在.cpp中使用
#include
即可

5.一点总结

创建msg文件夹下的test.msg类似于c语言中定义了一个结构体test,而test.msg下的具体内容就是定义了结构体的具体子量。ros对于用户自定义消息类型提供了支持,应该就是
geometry_msgs
message_generation
这几个,猜测当用户定义多个自定义消息时只要修改一次,不过笔者还没实验。就先这样吧以后有空再研究研究怎么具体使用。

2020.3.21于家中

你可能感兴趣的:(ROS探索)