C++实现Publisher
Publisher创建流程
1. 初始化ROS,创建节点
| ros::init(argc, argv, nodeName);
ros::NodeHandle node;
|
2. 通过Node 创建发布者
| 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提供了命令行工具和图形化工具进行调试。
首先要去做的就是编译项目:
| cd 工作空间
catkin_make
source devel/setup.bash
|
1. 通过rostopic工具进行调试
查看所有的主题
打印主题所发布的信息
Tip
rostopic
为ros的topic通讯命令行工具,供我们做调试使用。
2. 通过rqt_topic工具进行调试
通过命令启动rqt_topic工具
| rosrun rqt_topic rqt_topic
|
选中要调试的主题