7.2 发布者节点和订阅者节点的创建和运行
介绍
ROS消息通信中使用的发布者(Publisher)和订阅者(Subscriber)可以被发送和接收所代替。在ROS中,发送端称为发布者,接收端称为订阅者。本节旨在创建一个简单的msg文件,并创建和运行发布者和订阅者节点
通过 topic 通讯时,不同的 node 可以向同一个 topic 上发送、接收数据,发送数据的 node 不知道数据是从哪个 node 发送过来的,同样地,发送数据的 node 也不知道是哪个 node 接收了数据。因此,每个 node 都是相对独立的,只需要负责自己的功能实现以及外部接口,不需要关心其他 node 的行为。这是一种开放式的收、发数据的方式,也是 node 之间通讯的主要形式,有利于构造分布式大系统。
创建功能包
以下命令是创建ros_tutorials_topic功能包的命令。这个功能包依赖于message_generation、std_msgs和roscpp功能包,因此将这些用作依赖选项。第二行命令意味着将使用创建新的功能包时用到的message_generation表示将使用创建新消息的功能包std_msgs(ROS标准消息功能包)和roscpp(在ROS中使用C/C ++的客户端程序库)必须在创建功能包之前安装。用户可以在创建功能包时指定这些相关的功能包设置,但也可以在创建功能包之后直接在package.xml中修改。
$cd ~/catkin_ws/src
$catkin_create_pkg ros_tutorials_topic message_generation std_msgs roscpp
创建功能包时,将在~/catkin_ws/src目录中创建ros_tutorials_topic功能包目录,并在该功能包目录中创建ROS功能包的默认目录和CMakeLists.txt和package.xml文件。可以使用下面的ls命令检查它,并使用基于GUI的Nautilus(类似Windows资源管理器)来检查功能包的内部。
修改功能包配置文件
ROS的必备配置文件package.xml是一个包含功能包信息的XML文件,其中包含用于描述功能包名称、作者、许可证和依赖包的信息。使用以下命令,利用编辑器(gedit、vim、emacs等)打开文件,并修改它以匹配当前节点。
修改构建配置文件
ROS的构建系统catkin基本上使用CMake,它在功能包目录中的CMakeLists.txt文件中描述了构建环境。该文件设置可执行文件的创建、依赖包优先构建、链接创建等。
cmake_minimum_required(VERSION 2.8.3)
project(ros_tutorials_topic)
##catkin构建时需要的组件包。
##是依赖包,是message_generation、std_msgs和roscpp。
##如果这些功能包不存在,在构建过程中会发生错误。
find_package(catkin REQUIRED COMPONENTS message_generation td_msgs roscpp)
##消息声明:MsgTutorial.msg
add_message_files(FILES MsgTutorial.msg)
##这是设置依赖性消息的选项。
##如果未安装std_msgs,则在构建过程中会发生错误。
generate_messages(DEPENDENCIESstd_msgs)
##catkin功能包选项,描述了库、catkin构建依赖项和系统依赖的功能包。
catkin_package(
LIBRARIES ros_tutorials_topic
)
CATKIN_DEPENDS std_msgs roscpp
##设置包含目录。
include_directories(${
catkin_INCLUDE_DIRS})
##topic_publisher节点的构建选项。
##配置可执行文件、目标链接库和其他依赖项。
add_executable(topic_publisher src/topic_publisher.cpp)
add_dependencies(topic_publisher ${
${
PROJECT_NAME}_EXPORT