自定义话题消息
前面的博客中讲了在之前创建好的工作空间中创建创建功能包learning_topic,继续在learning_topic中创建msg文件夹,与消息相关的定义都放在msg文件夹中
关于Person.msg文件的创建可以在终端中输入touch Person.msg命令创建
1.完成数据接口的定义,将消息类型写在该msg文件中
2.在package.xml中添加功能包依赖:
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
3.在CMakeLists.txt中添加编译选项
• find_package( ...... message_generation)
• add_message_files(FILES Person.msg)
generate_messages(DEPENDENCIES std_msgs)
• catkin_package(...... message_runtime)
在find_package中添加message_generation
在下面的位置添加如下两行指令
add_message_files(FILES Person.msg)
generate_messages(DEPENDENCIES std_msgs)
在catkin_package中解开CATKIN_DEPENDS的注释,在该行后面添加message_runtime
在catkin_ws根目录下利用catkin_make指令编译
创建发布者代码(C++)
创建订阅者代码
将这两个代码放到catkin_ws/src/learning_topic/src路径下
配置代码编译规则
add_executable(person_publisher src/person_publisher.cpp)
target_link_libraries(person_publisher ${catkin_LIBRARIES})
add_dependencies(person_publisher ${PROJECT_NAME}_generate_messages_cpp)
add_executable(person_subscriber src/person_subscriber.cpp)
target_link_libraries(person_subscriber ${catkin_LIBRARIES})
add_dependencies(person_subscriber ${PROJECT_NAME}_generate_messages_cpp)
在工作空间根目录下用catkin_make 指令编译
然后就可以运行了
分别在三个新的终端中输入下面三条指令
roscore
rosrun learning_topic person_subscriber
rosrun learning_topic person_publisher
即可看到发布者在发布信息,订阅者在订阅信息
下面的两个终端中,左侧是订阅者,右侧是发布者,可以看到数据很同步也很顺畅。
关掉ROS Master之后不影响发布者和订阅者之间的通信,ROS Master是建立发布者和订阅者之间建立链接,一旦建立起链接ROS Master就不起作用了。