1.写一个publisher节点
“节点”是连接到ROS网络的可执行文件的ROS术语。在这里,我们将创建一个发布者(“ talker”)节点,该节点将不断广播消息。
1.1 将目录更改为在catkin工作区以前的教程中创建的beginner_tutorials包:
roscd beginner_tutorials
1.2 在beginner_tutorials包目录中创建一个src目录:
mkdir -p src
该目录将包含我们beginner_tutorials包的所有源文件。
1.3 在beginner_tutorials包中创建src / talker.cpp文件,并将以下内容粘贴到其中:
// ros/ros.h是一个方便的工具,其中包括使用ROS系统最常见的公共部分所需的所有标头。
#include "ros/ros.h"
// 这包括std_msgs / String消息,该消息驻留在std_msgs包中。
// 这是从该程序包中的String.msg文件自动生成的标头。有关消息定义的更多信息,请参见msg页面。
#include "std_msgs/String.h"
#include
/**
* 本教程演示了如何通过ROS系统简单地发送消息。
*/
// 这是下面事情的精简版:
// 初始化ROS系统
// 宣传我们将在chatter主题上向主服务器发布std_msgs / String消息
// 在将消息发布到聊天时每秒循环10次
int main(int argc, char** argv)
{
// 初始化ROS。这使ROS可以通过命令行进行名称重映射-目前尚不重要。
// 这也是我们指定节点名称的地方。节点名称在运行的系统中必须唯一。
ros::init(argc, argv, "talker");
// 创建此进程的节点的句柄。创建的第一个NodeHandle实际上将对节点进行初始化,
// 而最后一个被破坏的节点将清理该节点正在使用的所有资源。
ros::NodeHandle node_handle;
// 告诉管理员,我们将在主题讨论中发布std_msgs / String类型的消息。
// 这样,主服务器就可以告诉所有正在聊天的节点,我们将发布有关该主题的数据。
// 第二个参数是发布队列的大小。在这种情况下,如果我们发布得太快,
// 它将最多缓冲1000条消息,然后再开始丢弃旧消息。
// NodeHandle :: advertise()返回一个ros :: Publisher对象,
// 该对象有两个作用:
// 1)它包含一个publish()方法,可用于将消息发布到其创建的主题上;
// 2)当它超出范围时,它将自动取消广告。
ros::Publisher chatter_pub = node_handle.adv