写一个C++发布ros话题,一个接收话题,并利用callback()修改发布的一个参数值
时间: 2024-05-10 20:15:37 浏览: 9
以下是一个简单的C++程序,用于发布名为“my_topic”的ROS话题,并且订阅同样的话题。当接收到消息时,调用回调函数将发布的参数值增加1。
```cpp
#include "ros/ros.h"
#include "std_msgs/Int32.h"
int my_param = 0;
void myCallback(const std_msgs::Int32::ConstPtr& msg)
{
ROS_INFO("Received: %d", msg->data);
my_param++;
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "my_node");
ros::NodeHandle nh;
ros::Publisher my_pub = nh.advertise<std_msgs::Int32>("my_topic", 10);
ros::Subscriber my_sub = nh.subscribe("my_topic", 10, myCallback);
ros::Rate loop_rate(10);
while (ros::ok())
{
std_msgs::Int32 msg;
msg.data = my_param;
my_pub.publish(msg);
ros::spinOnce();
loop_rate.sleep();
}
return 0;
}
```
在这个程序中,我们首先定义了一个名为“my_param”的整数变量,并将其初始化为0。然后我们定义了一个名为“myCallback”的函数,该函数将在接收到名为“my_topic”的消息时被调用。在这个函数中,我们使用ROS_INFO打印消息的值,并将“my_param”的值增加1。
在主函数中,我们初始化ROS节点,并使用NodeHandle创建一个发布者和一个订阅者。我们使用一个10Hz的循环,在其中创建一个类型为std_msgs::Int32的消息,并将其发布到“my_topic”话题上。同时,我们使用ros::spinOnce()来调用回调函数,以确保我们能够接收到订阅的消息。最后,我们使用ros::ok()来检查ROS节点是否还在运行,如果不是,则退出循环。
请注意,这只是一个简单的例子,您需要根据您的实际需求进行修改。