ROS实现自定义信息以及使用

常见的消息包

ROS实现自定义信息以及使用_第1张图片
ROS实现自定义信息以及使用_第2张图片
ROS实现自定义信息以及使用_第3张图片
ROS实现自定义信息以及使用_第4张图片
消息包定义一般如下
ROS实现自定义信息以及使用_第5张图片
ROS实现自定义信息以及使用_第6张图片
ROS实现自定义信息以及使用_第7张图片
(1)创建包和依赖项
在这里插入图片描述
ROS实现自定义信息以及使用_第8张图片

(2)在新建的qq_msgs的包新建msgs的文件夹,在该文件夹里面新建Carry.msg类型的文件。
ROS实现自定义信息以及使用_第9张图片

  其实,Carry.msg就是你自己定义的消息类型,属于qq_msgs包下面的。
(3)在对应CMakeList.txt文件下查看如下信息

  • 查看依赖项是否都满足

ROS实现自定义信息以及使用_第10张图片

  • (4)选中如下文件
    ROS实现自定义信息以及使用_第11张图片
  • 取消注释
    ROS实现自定义信息以及使用_第12张图片
    ROS实现自定义信息以及使用_第13张图片
    ROS实现自定义信息以及使用_第14张图片
    因为我们只需要使用string 还有int64类型的数据组成我们的新的消息包,所以就只需要包括标准消息包就可以了。

ROS实现自定义信息以及使用_第15张图片
保存即可
(5)打开package.xml文件
ROS实现自定义信息以及使用_第16张图片
ROS实现自定义信息以及使用_第17张图片
(6)保存 编译
在这里插入图片描述

使用新的消息包
chao_node节点文件如下

#include
#include

#include  //引进我们自己的消息包


int main(int argc, char  *argv[])
{
    ros::init(argc,  argv,  "chao_node");
    printf("小马同学,hello welcome coming Ros world!  \n ");
    // 建立节点句柄
    ros::NodeHandle nh;
    //建立发布者
    ros::Publisher pub=nh.advertise<qq_msgs::Carry>("play_game_topic",10);
    //控制循环次数,ros系统给我自带了控制语句,不用我们自己写睡眠函数
    ros::Rate loop_rate(10); // publish 10 times of per second
    while(ros::ok())
    {
        printf("xiaoma will carry  !\n");
        //开始定义标准消息包、
        qq_msgs::Carry msg;
        msg.grade = "hornor";
        msg.star=30;
        msg.data="please  come on!\n";
        //给发布者发布
        pub.publish(msg);
        loop_rate.sleep();//调用loop_rate的sleep函数,让其产生短暂的阻塞
    }
    return 0;
}

ROS实现自定义信息以及使用_第18张图片
ROS实现自定义信息以及使用_第19张图片

ROS实现自定义信息以及使用_第20张图片
ma_node的代码

#include
#include
#include   //引进我们自己的消息包
void xiaoli_callback(qq_msgs::Carry msg)
{
      ROS_INFO(msg.grade.c_str());
     ROS_INFO("%lld", msg.star);
    ROS_INFO(msg.data.c_str());
   
}

void play_game_callback(qq_msgs::Carry msg)
{
    ROS_WARN(msg.data.c_str());//这个输出语句只是把输出内容变成还黄色
}

int main(int argc, char  *argv[])
{
    ros::init(argc,  argv,  "ma_node");
    printf("马同学,我将接受发布者的消息! \n ");
    // 建立节点句柄
    ros::NodeHandle nh;
    //建立订阅者1
    ros::Subscriber sub=nh.subscribe("xiang_he_xiao_ma_wan_you_xi",10,xiaoli_callback);
   //建立订阅者2不能和第一个名字一样
    ros::Subscriber sub2=nh.subscribe("play_game_topic",10,play_game_callback);
    while(ros::ok())
    {

        ros::spinOnce();
       }
    return 0;
}

他的配置文件格式与chao_node一样,分别是CMakeList.txt文件和package.xml文件。
ROS实现自定义信息以及使用_第21张图片
运行结果:
ROS实现自定义信息以及使用_第22张图片

你可能感兴趣的:(无人机设计开发,ROS,飞控,Linux)