11th 自定义msg的使用之消息发布方(C++)

一、目标

编写发布订阅实现,要求发布方以10HZ(每秒10次)的频率发布自定义消息,订阅方订阅自定义消息并将消息内容打印输出。

二、分析

在模型实现中,ROS master 不需要实现,而连接的建立也已经被封装了,需要关注的关键点有三个:

  1. 发布方
  2. 接收方
  3. 数据(此处为自定义消息)

流程:

  1. 编写发布方实现;
  2. 编写订阅方实现;
  3. 编辑配置文件;
  4. 编译并执行。

三、实现

0.先配置VSCode(为了代码提示和误抛异常)

这一步也可以不操作,但是最好操作

将前面生成的 head 文件路径配置进 c_cpp_properties.json 的 includepath属性:

 获得路径,把路径复制到c_cpp_properties.json 的 includepath属性:

1.  消息发布方的实现

 在/src下新建个.cpp文件:

内容:

#include<ros/ros.h>
/*  #include<std_msgs/String.h> */
#include<plumbing_pub_sub/Person.h>   //刚刚自定义的头文件


#include<sstream>
/*
     发布方:发布人的消息
     1.包含头文件
     2.初始化节点
     3.创建ros的节点句柄
     4.创建发布者对象
     5.编写发布逻辑,发布数据
*/

int main(int argc,char *argv[])
{
    setlocale(LC_ALL,"");
     //  2.初始化节点
    ros::init(argc,argv,"Person_msgs");   
    //  3.创建ros的节点句柄
    ros::NodeHandle  nh;
    //  4.创建发布者对象
    ros::Publisher pub = nh.advertise<plumbing_pub_sub::Person>("LiaoTian",10);
    //  5.编写发布逻辑,发布数据
        //5.1创建被发布的数据
    plumbing_pub_sub::Person person1;  
    person1.name = "张三";
    person1.age = 1;
    person1.height = 1.7;
        //5.2设置发布的频率
    ros::Rate  rate(1);
        //5.3循环发布出去
    while (ros::ok())
    {
        //修改被发布的数据
        person1.age +=1;

       //核心:数据发布
       pub.publish(person1);

       rate.sleep();

    //建议回头函数.不写也可以
       ros::spinOnce();
       
    }
    
            return 0;
}

 配置CMakeList.txt文件:

 

  编译:Ctrl + Shift +B

2.发布方测试

在新的终端里:

wood@wood:~$ cd demoros_ws/
wood@wood:~/demoros_ws$ source ./devel/setup.bash 
wood@wood:~/demoros_ws$ rostopic echo LiaoTian
 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

是刃小木啦~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值