ROS话题通信流程自定义数据格式
- 需求
- 流程
- 实现步骤
- 定义msg文件
- 编辑配置文件
- 编译
在 ROS 通信协议中,数据载体是一个较为重要组成部分,ROS 中通过 std_msgs 封装了一些原生的数据类型,比如:String、Int32、Int64、Char、Bool、Empty… 但是,这些数据一般只包含一个 data 字段,结构的单一意味着功能上的局限性,当传输一些复杂的数据,比如: 激光雷达的信息… std_msgs 由于描述性较差而显得力不从心,这种场景下可以使用自定义的消息类型
需求
创建自定义消息,该消息包含人的信息:姓名、身高、年龄等。
流程
1.按照固定格式创建 msg 文件
2.编辑配置文件
3.编译生成可以被 Python 或 C++ 调用的中间文件
实现步骤
定义msg文件
在 plumbing_pub_sub
功能包下创建一个 msg 文件夹,添加文件 Person.msg
编辑配置文件
-
package.xml中添加编译依赖与执行依赖
在plumbing_pub_sub
功能包下的package.xml
文件添加如图所示的编译依赖和执行依赖<build_depend>message_generation</build_depend><exec_depend>message_runtime</exec_depend>
-
CMakeLists.txt编辑 msg 相关配置
-
加入 message_generation
在CMakeLists.txt中找到find_package
添加message_generation编译依赖,如图所示:
-
配置 msg 源文件
在CMakeLists.txt中找到
add_message_files
配置自己定义的msg文件,如图所示:
-
添加生成消息时依赖
std_msgs
在CMakeLists.txt中找到generate_messages
添加生成依赖,如图所示:
-
添加执行时依赖
在CMakeLists.txt中找到catkin_package
添加执行依赖,如图所示:
-
编译
-
按快捷键
ctrl + shift + B
编译
-
编译成功后生成的文件
-
C++ 需要调用的中间文件(…/topic_ws/devel/include/plumbing_pub_sub/xxx.h)
-
Python 需要调用的中间文件(…/topic_ws/devel/lib/python2.7/dist-packages/plumbing_pub_sub/msg)