ROS消息及消息自定义

ROS消息包

ROS消息包分为

std_msgs:基础数值类型
common_msgs:常规消息包,与应用密切相关

一、ROS消息包

可以在网址中查找需要的消息包

https://index.ros.org/

1、ROS标准消息包std_msgs

在这里插入图片描述

2、ROS常规消息包common_msgs

在这里插入图片描述

3、ROS常规消息包geometry_msgs几何消息包

在这里插入图片描述

4、ROS常规消息包sensor_msgs传感器消息包

在这里插入图片描述

二、自定义消息类型

生成自定义消息的步骤:
在这里插入图片描述

1.创建新软件包xx_msgs,依赖项roscpp、 rospy、 std_msgs 、***message_generation、message_runtime***【消息包也是软件包,以msg结尾来区分】
2.软件包添加msg目录,新建自定义消息文件,以.msg结尾。
3.在CMakeLists.txt中,将新建的.msg文件加入add_message_files()
4.在CMakeLists.txt中,去掉generate_messages()注释符号,将依赖的其他消息包名称添加进去。
5.在CMakeLists.txt中,将 message_runtime 加入 catkin_package()的CATKIN DEPENDS。
6.在package.xml中,确认message_generation、message_runtime都加入依赖项中<build_depend>和<exec_depend>中编译软件包,生成新的自定义消息类型

创建信息的软件包时,要添加message_generation、message_runtime

catkin_create_pkg new_msgs roscpp rospy std_msgs message_generation message_runtime

在功能包下src新建msg/new.msg
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/d749113ac9004fe08b04ea9f1df6c2d5.png在这里插入图片描述

修改CMakeLists.txt,=,加入新建消息

## Generate messages in the 'msg' folder
add_message_files(
  FILES
  new.msg
)

新的消息类型需要依赖的其他消息包列表,string是std_msgs中的数据类型

## Generate added messages and services with any dependencies listed here
generate_messages(
  DEPENDENCIES
  std_msgs
)

依赖的软件包能够在启动的时候使用新定义的消息类型

catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES qq_msg
 CATKIN_DEPENDS message_generation message_runtime roscpp rospy std_msgs
#  DEPENDS system_lib
)

在package.xml中,确保message_generation、message_runtime都加入依赖项中<build_depend>和<exec_depend>中编译软件包
在这里插入图片描述
编译后,可查看消息列表rosmsg
在这里插入图片描述

三、自定义类型在C++节点中的应用

1、在节点代码中,先include新消息类型的头文件
2、在发布或订阅话题的时候,将话题中的消息类型设置为新的消2息类型o
3、按照新的消息结构,对消息包进行赋值发送或读取解析
4、在CMakeList.txt文件的find_package()中,添加新消息包名称作为依赖项。
5、在节点的编译规则中,添加一条add dependencies0,将新消息软件包名称_generate messages_cpp作为依赖项。
6、在package.xml中,将新消息包添加到和中夫
7、运行 catkin make 重新编译

修改发布者节点的消息发布类型
chao_node.cpp

#include <ros/ros.h>
#include <std_msgs/String.h>
#include <qq_msgs/carry.h>
int main(int argc, char **argv)
{
    ros::init(argc,argv,"chao_node");
    printf("begin 1\n");

    ros::NodeHandle n;
    ros::Publisher chao_pub = n.advertise<qq_msgs::carry>("kuaishangche", 10);

    // 设置循环的频率
    ros::Rate loop_rate(10);
    while(ros::ok())
    {
        printf("Start 2\n");
        qq_msgs::carry msg;
        msg.grade  = "wangzhe";
        msg.star = 50;
        msg.data = "machao,daifei";
        chao_pub.publish(msg);

        loop_rate.sleep();
    }
        return 0;
}

修改chao_node的编译规则
使其先去编译新的消息包,然后再编译节点

find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
  new_msgs
) 

在这里插入图片描述
添加节点编译的依赖项

add_dependencies(chao_node new_msgs_generate_messages_cpp)

在这里插入图片描述
修改package.xml

在package.xml中,确认new_msgs都加入依赖项中<build_depend>和<exec_depend>中

在这里插入图片描述
修改订阅者节点的消息接收类型
ma_node.cpp


#include <ros/ros.h>
#include "std_msgs/String.h"
#include <qq_msgs/carry.h>
// 接收到订阅的消息后,会进入消息回调函数
void chao_Callback(qq_msgs::carry msg)
{
    ROS_INFO(msg.grade.c_str());
    ROS_INFO("%d",msg.star);
    ROS_INFO(msg.data.c_str());
}
void yao_Callback(std_msgs::String msg)
{
    ROS_INFO(msg.data.c_str());
}
int main(int argc, char **argv)
{
    // 初始化ROS节点
    ros::init(argc, argv, "ma_node");

    // 创建节点句柄
    ros::NodeHandle n;

    // 创建一个Subscriber,订阅名为kuaishangche的topic,注册回调函数 InfoCallback
    ros::Subscriber ma_sub = n.subscribe("kuaishangche", 10,  chao_Callback);
    ros::Subscriber yao_sub = n.subscribe("daiwo", 10,  yao_Callback);

    // 循环等待回调函数
    while(ros::ok())
    {
        //printf("9\n");
        ros::spinOnce();

    }

    return 0;
}

修改ma_node的编译规则,添加节点编译的依赖项
修改package.xml
在package.xml中,确认new_msgs都加入依赖项中<build_depend>和<exec_depend>中

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在MATLAB中添加ROS自定义消息,需要遵循以下几个步骤: 步骤1: 创建自定义消息的文件夹 首先,在MATLAB工作目录下创建一个文件夹,用于存放自定义消息文件。例如,可以创建一个名为"my_msgs"的文件夹。 步骤2: 创建.msg文件 在"my_msgs"文件夹中创建一个扩展名为.msg的文件,用于定义自定义消息的结构和字段。在该文件中,可以定义消息的名称、数据类型以及其他需要的字段。 步骤3: 编译自定义消息 在命令窗口中,使用"rosgenmsg"命令来编译自定义消息。例如,输入"rosgenmsg('my_msgs')"来编译"my_msgs"文件夹中的自定义消息。 步骤4: 添加生成的消息包 编译完成后,会在当前文件夹中生成一个名为"gen"的文件夹。将该文件夹复制到MATLAB的工作目录下。 步骤5: 添加自定义消息的路径 在MATLAB中,使用"rosgenmsg"函数生成的消息包默认是不在ROS消息路径中的。因此,需要将其添加到ROS消息路径中。可以通过设置ROS_PACKAGE_PATH环境变量来实现。例如,在MATLAB命令窗口中输入"setenv('ROS_PACKAGE_PATH', fullfile(pwd, 'gen'))",将gen文件夹添加到ROS消息路径中。 步骤6: 加载自定义消息 最后,可以使用"loadlibrary"函数来加载自定义消息。例如,输入"loadlibrary('my_msgs')"来加载"my_msgs"中定义的消息。 完成以上步骤后,就可以在MATLAB中使用自定义消息了。可以使用"rospublisher"和"rossubscriber"函数发布和订阅自定义消息,或者在MATLAB中创建自定义ROS节点来处理自定义消息

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值