為減少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"