.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_files 和 generate_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)
扫描二维码关注公众号,回复:
5281703 查看本文章
5. 查看自定义的 Person 消息类型
- 执行:rosmsg show Person