为减少ROS进程间通信使用消息包的复杂程度,避免重复和减少依赖耦合。将ROS节点进程使用的消息,单独自定义为一个纯msg_package:仅包含消息定义的ROS package。
一、配置自定义消息包
自定义消息包msg_package目录结构为内容:
action/
CMakeLists.txt
include/
msg/
package.xml
srv/
其中msg目录存放自定义消息文件,srv目录存放自定义请求/响应格式文件,action目录存放自定义动作格式文件。
1、package.xml 中需要添加ROS消息生成相关包的依赖
<build_depend>actionlib_msgs</build_depend>
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
<exec_depend>actionlib_msgs</exec_depend>
2、CMakeList.txt 中需要添加ROS消息生成相关包的依赖
#1.添加ROS消息生成包依赖
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
actionlib_msgs
message_generation #添加ROS消息生成
)
#2.添加msg目录自定义消息文件
add_message_files(
FILES
myMsgBodyA.msg
myMsgBodyB.msg
myMsgBodyC.msg
)
#3.添加srv目录自定义格式文件
add_service_files(
FILES
myServiceA.srv
)
#4.添加action目录自定义格式文件
add_action_files(
FILES
myAction1.action
myAction2.action
)
#5.打开消息生成依赖
generate_messages(
DEPENDENCIES
std_msgs actionlib_msgs
)
#6.配置catkin_package依赖增加message_runtime
catkin_package(
CATKIN_DEPENDS roscpp rospy std_msgs actionlib_msgs message_runtime
)
#7.配置include目录
include_directories(
# include
${catkin_INCLUDE_DIRS}
)
二、在其他包中引用自定义消息包
1、package.xml 中增加对自定义消息包的依赖
<build_depend>msg_package</build_depend>
<exec_depend>msg_package</exec_depend>
2、CMakelist.txt 中增加对自定义消息包的依赖
#1. 添加自定义消息包
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
msg_package #添加自定义消息包
)
3、在代码中使用消息
#include "msg_package/myServiceA.h"