ROS学习——一个简单的c++发布订阅程序

#include <ros/ros.h>
#include <std_msgs/String.h>

void callback(const std_msgs::String::ConstPtr &msg)
{
    ROS_INFO("I heard: %s", msg->data.c_str());
}

int main(int argc, char **argv)
{
    ros::init(argc, argv, "example_pub_sub");//初始化一个叫example_pub_sub的节点
    ros::NodeHandle nh;//类似于婚介所,两个功能:收集别人的信息(发布),把一个人的信息发给另一个人(发布)

    ros::Subscriber sub = nh.subscribe<std_msgs::String>("example_topic", 10, callback);//订阅了一个叫"example_topic"的话题
    ros::Publisher pub = nh.advertise<std_msgs::String>("example_topic", 10);//发布了一个叫"example_topic"的话题

    ros::Rate loop_rate(10);

    int count = 0;
    while (ros::ok())
    {
        std_msgs::String msg;
        std::stringstream ss;
        ss << "Hello World " << count;
        msg.data = ss.str();
        pub.publish(msg);
        ROS_INFO("I sent: %s", msg.data.c_str());

        ros::spinOnce();
        loop_rate.sleep();
        count++;
    }

    return 0;
}

  • 以上代码中,我们创建了一个ROS节点,该节点同时包括一个发布者和一个订阅者。订阅者订阅了名为"example_topic"的话题,并在接收到消息时调用callback函数进行处理;发布者向同一话题发布消息,在while循环中不断发送消息并打印发送的消息内容以及收到的消息内容。

    需要注意的是,在执行上述代码之前,你需要先创建一个ROS工作区,然后在工作区下创建一个C++程序包,并在程序包下创建一个节点文件夹,将上述代码保存在该节点文件夹中的.cpp源文件中。并且在工作区的根目录下执行catkin_make命令进行编译。

    另外,类似于callback函数,ROS中的回调函数通常需要使用ROS消息数据类型的指针进行参数传递,以确保在回调函数中可以正确地读取消息内容。

欢迎各位大佬参观我的博客:[https://bainiu2.github.io/]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值