Ros自定义消息话题通信代码(C++实现)

参考自赵虚左老师-Ros机器人入门课程

发布方:

#include "ros/ros.h"
#include "communication/person.h"           // 包含自定义msg的头文件

int main(int argc,char *argv[])
{
    setlocale(LC_ALL,"");                                      // 解决发送中文乱码问题
    ros::init(argc,argv,"personpub");               //节点初始化,节点名
    ros::NodeHandle nh;                                      //创建句柄类对象
    ros::Publisher pub= nh.advertise<communication::person>("person",10);        //指定发布者发布的类型(泛型),发布者的话题,缓存队列
    //编写发布逻辑并发布数据:
    communication::person person ;          //创建发布数据的对象
    person.name = "张三";
    person.age = 18;
    person.height = 1.72;
    ros::Rate rate(10);                    //设置发布频率,创建Rate对象,有参构造函数设置对象发布频率为10hz
    ros::Duration(3).sleep();        //延迟三妙,防止未注册就发送数据,导致数据丢失
    while (ros::ok())                        //只要节点存在,循环就继续
    {
        pub.publish(person);
        person.age+=1;                     //修改数据发送
        //ROS_INFO("发布的消息为姓名:%s,年龄:%d,身高:%.2f",person.name.c_str(),person.age,person.height);            //编辑输出日志
        rate.sleep();                   //让对象按频率延迟
    }
     return 0;
}

接收方:

#include "ros/ros.h"
#include "communication/person.h"           // 包含自定义massages的头文件

void doperson(const communication::person::ConstPtr &person)        //编写回调函数,用于处理接收的数据 ,每订阅到一条数据都会执行一下它(指针常量指针  指向与指向的指都不可变)     
{
    ROS_INFO("发布的消息为姓名:%s,年龄:%d,身高:%.2f",person->name.c_str(),person->age,person->height);                   //对接收到的数据就做打印输出
}
int main(int argc,char *argv[])
{
    ROS_INFO("jhfdikfhedio");
    setlocale(LC_ALL,"");                                      // 解决接收中文乱码问题
    ros::init(argc,argv,"personsub");               //节点初始化,节点名
    ros::NodeHandle nh;                                      //创建句柄类对象
    ros::Subscriber sub= nh.subscribe("person",10,doperson);        //指定接受者的话题,队列,以及接收后的回调函数,将接收到的数据传入回调函数  回调函数:由外部时机控制等待调用的函数
    ros::spin();              //死循环检测回调函数是否存在并执行回调函数
    return 0;
}

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

似苦又甜

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

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

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

打赏作者

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

抵扣说明:

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

余额充值