文章目录
- 0. 前言
- 1. 创建 `.msg` 文件
- 2. 构建 pkg 解析 `.msg` 文件
- 3. 在其他 pkg 中使用自定义消息
0. 前言
1. 创建 .msg
文件
fieldtype1 fieldname1
fieldtype2 fieldname2
fieldtype3 fieldname3
- fieldtype 注意事项
- 有四种类别,分别是内置类型(如float32)、其他定义的消息类型(如
geometry_msgs/PoseStamped
)、数组(长度可以固定,也可以不固定,如 float32[]
或 float32[10]
)、特殊类型 Header - 内置类型如下图所示
#Standard metadata for higher-level flow data types
#sequence ID: consecutively increasing ID
uint32 seq
#Two-integer timestamp that is expressed as:
# * stamp.secs: seconds (stamp_secs) since epoch
# * stamp.nsecs: nanoseconds since stamp_secs
# time-handling sugar is provided by the client library
time stamp
#Frame this data is associated with
string frame_id
- 以目标检测结果为例,定义自定义消息类型
BoxesMsg.msg
- 每张图片的检测结果对应一个
BoxesMsg
对象 - 内容包括:header、物体数量、x1y1x2y2形式的坐标、box置信度、box类别
Header header
int32 num_objects
float32[] coords
float32[] socres
int32[] classes
2. 构建 pkg 解析 .msg
文件
<build_depend>message_generation</build_depend>
<build_export_depend>message_generation</build_export_depend>
<exec_depend>message_runtime</exec_depend>
- 步骤二:修改
CMakeLists.txt
- 在
find_package
中添加 message_generation
- 添加
add_message_files
和 generate_messages
,注意,前后顺序不能改变
find_package(catkin REQUIRED COMPONENTS
roscpp
std_msgs
message_generation
)
# 自定义消息相关配置
add_message_files(
FILES
BoxesMsg.msg
)
generate_messages(
DEPENDENCIES
std_msgs
)
3. 在其他 pkg 中使用自定义消息
- 本质就是 引用同一工作区中pkg,这个本文就不介绍了。
- 现在主要看一下在源码中如何使用
- 前提:在
custom_msgs
包中添加了 BoxesMsg.msg
文件。
- 在其他包中使用
BoxesMsg.msg
主要包括
- 添加头文件:
#include "custom_msgs/BoxesMsg.h"
,即 <包名/文件名.h>
- 可使用对象:
BoxesMsg
、BoxesMsgPtr
、BoxesMsgConstPtr
,顾名思义,第一个是普通类,第二个和第三个都是第一个对象的指针。 - 对象中成员变量对应数据类型:
- msg中内置类型对应C++类型的关系表,在第一章中有截图
- 数组类型对应C++中的
std::vector
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)