当前位置 博文首页 > txr152111的博客:12th 自定义msg的使用之消息订阅方(C++)

    txr152111的博客:12th 自定义msg的使用之消息订阅方(C++)

    作者:[db:作者] 时间:2021-09-01 22:13

    一、目标

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

    二、分析

    在模型实现中,ROS master 不需要实现,而连接的建立也已经被封装了,需要关注的关键点有三个:发布方、接收方、数据(此处为自定义消息)

    流程:

    • 编写发布方实现;
    • 编写订阅方实现;
    • 编辑配置文件;
    • 编译并执行。

    三、订阅方的实现

    创建文件:

    编写内容:

    #include<ros/ros.h>
    /*  #include<std_msgs/String.h> */
    #include<plumbing_pub_sub/Person.h>   //刚刚自定义的头文件
    
    /*
         订阅方:订阅人的消息
         1.包含头文件
         2.初始化节点
         3.创建ros的节点句柄
         4.创建订阅者对象
         5.编写回调函数,处理订阅的数据
         6.spin()  ,调用回调函数必须要有这句话
    */
    void doPerson(const plumbing_pub_sub::Person::ConstPtr& person )
    {
        ROS_INFO("订阅人的信息:%s,%d,%.2f",person->name.c_str(),person->age,person->height);
    }
    
    int main(int argc,char *argv[])
    {
        setlocale(LC_ALL,"");
         //  2.初始化节点
        ros::init(argc,argv,"Person_msgs_sub");   
        //  3.创建ros的节点句柄
        ros::NodeHandle  nh;
        //  4.创建订阅者对象
        ros::Subscriber sub=nh.subscribe("LiaoTian",10,doPerson);
        //5.处理订阅的数据
    
        //6.调用spin()函数
        ros::spin();
        
        return 0;
    }

    配置编译文件CMakelist.txt:

    编译:Ctrl + Shift +B

    四、订阅发测试

    cs