一、在同一个功能包下创建.msg文件
1、在功能包目录下创建msg文件夹
2、在文件夹中创建.msg文件
3、在该功能包的package.xml文件中加入:
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
4、在该功能包的CMakeLIst文件中修改
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation
)
# 需要加入 message_generation,必须有 std_msgs
## 配置 msg 源文件
add_message_files(
FILES
Person.msg
)
# 生成消息时依赖于 std_msgs
generate_messages(
DEPENDENCIES
std_msgs
)
#执行时依赖
catkin_package(
# INCLUDE_DIRS include
# LIBRARIES demo02_talker_listener
CATKIN_DEPENDS roscpp rospy std_msgs message_runtime
# DEPENDS system_lib
)
5、编译之后,会发现在devel/include中产生依赖项
6、在c_cpp_properties.json 中加入devel/include的路径
7、编写发布方、订阅方程序,修改该功能包下的CMakeList.txt
add_executable(plumbing_pub src/plumbing_pub.cpp)
add_executable(plumbing_sub src/plumbing_sub.cpp)
add_dependencies(plumbing_pub ${PROJECT_NAME}_generate_messages_cpp)
add_dependencies(plumbing_sub ${PROJECT_NAME}_generate_messages_cpp)
target_link_libraries(plumbing_pub
${catkin_LIBRARIES}
)
target_link_libraries(plumbing_sub
${catkin_LIBRARIES}
)
8、启动节点,查看效果
二、单独创建一个功能包存放自定义话题类型
1、创建于一个功能包my_msg2,在该功能包中创建一个msg文件夹,在该文件夹中创建.msg文件
2、修改my_msg2功能包的package.xml文件
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
3、修改my_msg2功能包的CMakeList.txt文件
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation
)
# 需要加入 message_generation,必须有 std_msgs
## 配置 msg 源文件
add_message_files(
FILES
Person.msg
)
# 生成消息时依赖于 std_msgs
generate_messages(
DEPENDENCIES
std_msgs
)
#执行时依赖
catkin_package(
# INCLUDE_DIRS include
# LIBRARIES demo02_talker_listener
CATKIN_DEPENDS roscpp rospy std_msgs message_runtime
# DEPENDS system_lib
)
4、编译,在devel/include中产生依赖项
5、在c_cpp_properties.json 中加入devel/include的路径
6、创建一个新的功能包test_msg2
7、创建test_msg2功能包时,要包含my_msg2。(在c_cpp_properties.json已经包含了my_msg2的目录,所以会去搜索my_msg2)
8、创建一个src文件夹,在该文件夹中创建节点
9、修改CMakeList文件
find_package(catkin REQUIRED COMPONENTS
my_msg2
roscpp
rospy
std_msgs
my_msg2
)
catkin_package(
# INCLUDE_DIRS include
# LIBRARIES test_msg2
CATKIN_DEPENDS my_msg2 roscpp rospy std_msgs
# DEPENDS system_lib
)
add_executable(plumbing_pub2 src/plumbing_pub2.cpp)
add_executable(plumbing_sub2 src/plumbing_sub2.cpp)
target_link_libraries(plumbing_pub2
${catkin_LIBRARIES}
)
target_link_libraries(plumbing_sub2
${catkin_LIBRARIES}
)
10、编译运行节点