#include "ros/ros.h"
#include "std_msgs/String.h"
int main(int argc, char **argv)
{
// 初始化 ROS 节点
ros::init(argc, argv, "publisher_node");
// 创建 ROS 句柄
ros::NodeHandle nh;
// 创建一个 publisher,用于发布类型为 std_msgs::String 的消息
ros::Publisher pub = nh.advertise<std_msgs::String>("ok", 1000);
// 设置循环频率(10Hz)
ros::Rate loop_rate(10);
int count = 0;
while (ros::ok())
{
// 创建一个 std_msgs::String 类型的消息
std_msgs::String msg;
std::stringstream ss;
ss << "Hello World " << count;
msg.data = ss.str();
// 发布消息
pub.publish(msg);
// 打印日志
ROS_INFO("%s", msg.data.c_str());
// 等待一段时间
loop_rate.sleep();
++count;
}
return 0;
}
这个程序使用了 ROS 的 C++ API,其中包括了 ros/ros.h
头文件和 ros::
命名空间。我们首先初始化了 ROS 节点,并创建了一个名为 publisher_node
的节点句柄。
之后,我们通过 nh.advertise<std_msgs::String>("ok", 1000);
创建了一个 publisher,用于发布类型为 std_msgs::String
的消息到名为 ok
的 topic 上。1000
表示消息队列的长度。
接着,我们进入一个循环中,在每次循环中创建一个 std_msgs::String
类型的消息,并将其发布到 ok
topic 上。同时,我们也打印了日志和计数器信息,以便在控制台上查看。
最后,我们通过调用 loop_rate.sleep()
函数等待一段时间,以控制程序的运行频率。
这只是一个简单的例子,但它可以帮助您开始学习如何使用 C++ 编写 ROS 节点并发布消息。