ROS编程基础(二)发布者节点的创建和运行

时间:2024-02-22 12:33:56

  ROS消息通信中使用的发布者(Publisher)和订阅者(Subscriber)可以被发送和接收所代替。在ROS中,发送端称为发布者,接收端称为订阅者。本节旨在创建一个简单的msg文件,并创建和运行发布者和订阅者节点。

1.创建功能包

  以下命令是创建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资源管理器)来检查功能包的内部。

cd ros_tutorials_topic
ls
include          → 头文件目录
src              → 源代码目录
CMakeLists.txt   → 构建配置文件
package.xml      → 功能包配置文件

 2.修改功能包配置文件

  ROS的必备配置文件package.xml是一个包含功能包信息的XML文件,其中包含用于描述功能包名称、作者、许可证和依赖包的信息。使用以下命令,利用编辑器(gedit、vim、emacs等)打开文件,并修改它以匹配当前节点。

vim package.xml

  以下代码显示如何修改package.xml文件以匹配我们这次要创建功能包。笔者的个人信息包含在如下文件内容中,您可以修改它,以适应您的需求。有关每个选项的详细说明,咱们后面再说。

3.修改构建配置文件(CMakeLists.txt)

  ROS的构建系统catkin基本上使用CMake,它在功能包目录中的CMakeLists.txt文件中描述了构建环境。该文件设置可执行文件的创建、依赖包优先构建、链接创建等。

vim CMakeLists.txt

 以下是为了匹配正在创建的功能包而修改的CMakeLists.txt。同样,有关每个选项的详细说明,咱们后面再讲。

 

 4.创建消息文件

  在上述的CMakeLists.txt文中添加了如下选项。

add_message_files(FILES MsgTutorial.msg)

  这意味着在构建时要包含消息MsgTutorial.msg,该消息将在此节点中被使用。现在我们还没有创建MsgTutorial.msg,因此按以下顺序创建它:

roscd ros_tutorials_topic    → 移动到功能包目录
mkdir msg                    → 功能包中创建新的msg消息目录
cd msg                       → 转到创建的msg目录
vim MsgTutorial.msg          → 创建新的MsgTutorial.msg文件并修改内容

 

  内容很简单。如下所示,创建一个time消息类型的stamp消息和一个int32消息类型的data消息, 除了这些消息类型之外,还有一些如bool、int8、int16、float32、string、time、duration和common_msgs等基本消息类型,以及在ROS中收集常用消息的common_msgs。这里我们只是为了创建一个简单的例子,因此用了time和int32。 

 4.创建发布者节点

在前面的CMakeLists.txt文件中,给了生成以下可执行文件的选项。

add_executable(topic_publisher src/topic_publisher.cpp)

  换句话说,是在src目录中构建topic_publisher.cpp文件以创建topic_publisher可执行文件。那么我们按如下顺序创建一个执行发布者节点函数的源代码。

roscd ros_tutorials_topic/src      → 移至src目录,该目录是功能包的源代码目录
gedit topic_publisher.cpp          → 新建源文件并修改内容