ROS整理 ——自定义话题消息(4)

.msg 文件是ROS定义消息类型的文件,放置在相应功能包下的 msg 文件夹中。

步骤:

1. 在msg文件夹下创建一个Person.msg文件,将下列代码复制进去:

string name
uint8  sex
uint8  age

uint8 unknown = 0
uint8 male    = 1
uint8 female  = 2

注:前三行是ROS提供的基础数据类型;后三行是定义的常量,发布和订阅数据时可直接使用,相当于C++中的宏定义;

此外,很多ROS消息定义中会包含一个标准格式的头信息 std_msgs/Header,如下:

#Standard metadata for higher-level flow data types
unit32 seq           // 消息的顺序标志
time stamp           // 时间戳
string frame_id      // 参考坐标系id

2. 在功能包清单 package.xml 中添加功能包依赖:编译依赖 + 运行依赖

  <build_depend>message_generation</build_depend>
  <run_depend>message_runtime</run_depend>

3. 在编译规则 CMakeList.txt 中添加编译选项

  • find_package 中添加 消息生成 依赖的功能包 message_generation,如下:
find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
  message_generation
)
    • catkin_package 中设置 catkin 依赖的功能包,如下:
catkin_package(
   CATKIN_DEPENDS roscpp rospy std_msgs message_runtime
)
    • add_message_filesgenerate_messages 中设置需要编译的.msg文件,如下:
add_message_files(
  FILES
  Person.msg
)

generate_messages(
  DEPENDENCIES
  std_msgs
)

4. 编译整个工作空间

  • 执行:catkin_make
  • 在这一步可能会出错:
    - The manifest (with format version 2) must not contain the following tags: run_depend
    

解决办法:法一:将 package.xml 中的 format 修改为1;法二:根据package.xml 中的说明格式添加依赖;

(可参考:增加新msgs时,package.xml出错:https://www.shiyanlou.com/questions/44296

5. 查看自定义的 Person 消息类型

  • 执行:rosmsg show Person

猜你喜欢

转载自blog.csdn.net/kongli524/article/details/87788634