ROS学习记录:话题发布和订阅的实现(C++/python)

发布方(C++):

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

/*
    需求: 实现基本的话题通信,一方发布数据,一方接收数据,
         实现的关键点:
         1.发送方
         2.接收方
         3.数据(此处为普通文本)

         PS: 二者需要设置相同的话题


    消息发布方:
        循环发布信息:Hello... 后缀数字编号

    实现流程:
        1.包含头文件 
        2.初始化 ROS 节点:命名(唯一)
        3.实例化 ROS 句柄
        4.实例化 发布者 对象
        5.组织被发布的数据,并编写逻辑发布数据
    
*/

int main(int argc, char *argv[])
{
    // 解决乱码问题
    setlocale(LC_ALL,"");
    // 2.初始化ROS节点,这里是节点名
    ros::init(argc,argv,"besproma_pub_node");

    // 3.实例化 ROS 句柄
    ros::NodeHandle nh;
    
    // 4.实例化发布者对象,参数是话题名,buffer大小
    ros::Publisher pub = nh.advertise<std_msgs::String>("besproma_topic",10);
    
    // 以10HZ的平率发布数据
    ros::Rate rate(10);

    //设置编号,让数据发布时带上编号
    int count = 0;

    // 加入休眠 ros::Duration(3.0).sleep(); 延迟第一条数据的发送,防止前几条数据的丢失
    ros::Duration(3.0).sleep();

    // 5.组织被发布的数据,并编写逻辑发布数据,程序会一直在这里循环
    std_msgs::String msg;
    while(ros::ok()){
        // 发布的内容和编号拼接
        count++;
        std::stringstream ss;
        ss<<"hello ..."<<count;
        msg.data = ss.str();
        // msg.data = "hello";s

        pub.publish(msg);

        ROS_INFO("发布的数据是: %s",ss.str().c_str());

        rate.sleep();
    }

    return 0;
}

接收方(C++):

#include "ros/ros.h"
#include "sstream"
#include "std_msgs/String.h"

/*
    需求: 实现基本的话题通信,一方发布数据,一方接收数据,
         实现的关键点:
         1.发送方
         2.接收方
         3.数据(此处为普通文本)


    消息订阅方:
        订阅话题并打印接收到的消息

    实现流程:
        1.包含头文件 
        2.初始化 ROS 节点:命名(唯一)
        3.实例化 ROS 句柄
        4.实例化 订阅者 对象
        5.处理订阅的消息(回调函数)
        6.设置循环调用回调函数

*/

// 回调函数
vo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Besproma_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值