C++实现Publisher

Publisher创建流程

1. 初始化ROS,创建节点

1
2
ros::init(argc, argv, nodeName);
ros::NodeHandle node;

2. 通过Node 创建发布者

1
const ros::Publisher &publisher = node.advertise<std_msgs::String>(topicName, 1000);

Tip

第一个参数为topic名称. topic的名称为自己定义的字符串。可以分级,有点类似与网址地址。 例如: 可以写作/hello 或者 /hello/a,再或者/hello/a/b. 可以具备一定的层级。这种写法为通用常规写法。

第二个参数为tipic中消息队列最多的数量。

3. 定期发布消息

Tip

publisher.publish负责发布消息。

std_msgs::String为消息类型。说明当前发送消息的类型。

目前我们用最简易的消息类型来做示例。

完整的示例代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include "ros/ros.h"
#include <iostream>
#include "std_msgs/String.h"

using namespace std;

int main(int argc, char **argv) {

    string nodeName = "cpppublisher";
    string topicName = "cpptopic";

    //初始化ros节点
    ros::init(argc, argv, nodeName);
    ros::NodeHandle node;

    //通过节点创建publisher
    const ros::Publisher &publisher = node.advertise<std_msgs::String>(topicName, 1000);

    //按照一定周期,发布消息
    int index = 0;
    ros::Rate rate(1);
    while (ros::ok()) {
        std_msgs::String msg;

        msg.data = "hello pub " + to_string(index);
        publisher.publish(msg);

        cout << msg.data << endl;

        rate.sleep();
        index++;
    }
    return 0;
}

调试发布者

调试Publisher主要是查看是否有发送数据,也就是提供一个订阅的调试工具。ROS提供了命令行工具和图形化工具进行调试。

首先要去做的就是编译项目:

1
2
3
cd 工作空间
catkin_make
source devel/setup.bash

1. 通过rostopic工具进行调试

查看所有的主题

1
rostopic list

打印主题所发布的信息

Tip

rostopic为ros的topic通讯命令行工具,供我们做调试使用。

2. 通过rqt_topic工具进行调试

通过命令启动rqt_topic工具

1
rosrun rqt_topic rqt_topic

选中要调试的主题