ROS之msg文件定义以及自定义发布主题消息类型
来源:互联网 发布:中国微观数据库简介 编辑:程序博客网 时间:2024/06/15 12:49
一、创建msg文件(相当于一个结构体)
- 在catkin_ws/src: mkdir msg
- catkin_ws/src/msg: touch xxx.msg chmod 777 xxxx.msg
- 编辑msg文件(定义数组):
**float32[] X
float32[] Y
float32[] Z** - 打开package.xml文件,确保里面存在这两行且去掉它们的注释:
message_generation
message_runtime 打开包src目录下的CMakeLists.txt文件,然后打开包目录下的CMakeLists.txt
文件,在find_message调用中添加message_generation依赖,让你可以生成ROS信息。
如下所示,括号里添加一项message_generation即可
***find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation
)确保你加入了message_runtime 依赖,如图所示:
- 接着在add_message_files 里面去掉注释,改为:
add_message_files(
FILES
Num.msg //编辑的msg文件名
) - 保证generate_messages()函数被调用:去掉注释,修改为:
generate_messages(
DEPENDENCIES
std_msgs
) - catkin_make编译会自动生成xxxx.h头文件(路径:devel/include/xxxx.h)
总结:
- 在msg目录下使用msg文件语法定义一个msg
- 修改CmakeLists.txt,在find_package调用中,添加message_generation依赖
- 修改CmakeLists.txt,在catkin_message下添加message_runtime依赖
- 修改CmakeLists.txt,去掉add_message_files注释,添加我们自己定义的msg文件
- 修改CmakeLists.txt,去掉generate_messages()的注释
二、使用msg文件
- catkin_make编译完之后,rosmsg show beginner_tutorials/xxx会得到:
float32[] X
float32[] Y
float32[] Z - 在需要用到msg文件中自定义的类型的文件中加入编译该文件时自动生成的xxx.h头文件,如:#include “ControlRobot/RobotControl.h”,其中ControlRobot 是该msg文件所处的包的名称。
*注意:msg文件自定义数据类型其实就是一个结构体类型,所以使用的时候就是相当于定义一个结构体成员变量
struct stu{
char *name; //姓名
int num; //学号
int age; //年龄
char group; //所在学习小组
float score; //成绩
}stu1,stu2;*
三、自定义发布消息的类型
这里举一个例子:
RobotControl.msg:(相当于定义了一个含有三个一维数组作为成员的结构体类型)
float32[] X
float32[] Y
float32[] Z
TestPublish.cpp:
#include "ControlRobot/RobotControl.h"nt main(int argc, char **argv){ ros::init(argc, argv,"TestPublish"); ros::NodeHandle n; ros::Publisher cordinate_pub = n.advertise<ControlRobot::RobotControl>("RobotCordinate",1000); //发布的主题名称 (定义了消息发布类型:ControlRobot::RobotControl ) ros::Rate loop_rate(10); while(ros::ok()){ ControlRobot::RobotControl RobotCordinate; //相当于定义了一个结构体变量 RobotCordinate.X.resize(6); //一定要定义数组大小,否则会出现段错误 RobotCordinate.Y.resize(6); RobotCordinate.Z.resize(6); for(int i = 0; i<6; i++){ RobotCordinate.X[i] = i; //把Kinect获取的骨骼坐标赋值后发布出去(在此处赋值) RobotCordinate.Y[i] = i; RobotCordinate.Z[i]= i; } cordinate_pub.publish(RobotCordinate); ros::spinOnce(); loop_rate.sleep(); }return 0; }
0 0
- ROS之msg文件定义以及自定义发布主题消息类型
- ros定义msg消息
- ROS自定义msg类型以及使用
- ROS:定制自己的消息类型msg
- ROS:定制自己的消息类型msg
- ROS:定制自己的消息类型msg
- ROS自定义msg类型及使用
- ROS 自定义消息类型
- ros自定义动态消息发布(vector)
- ROS入门之主题和服务、msg和srv(C++)
- ros的topic:创建消息类型、发布、订阅
- 在ROS中定义并使用自己的消息类型
- ROS msg
- 创建ros自定义消息
- Ros自定义消息
- ROS自定义消息
- ROS:三个节点相互传递消息,每个节点都可以同时发布和订阅主题
- ROS学习笔记(消息msg和服务srv)
- Android 边框圆角
- 使用javaScript控制伪元素
- 单播、广播、多播
- 安卓 theme常用主题
- STS或者Eclipse修改@author及其他默认备注的信息的方法
- ROS之msg文件定义以及自定义发布主题消息类型
- spring+redis 实例
- 兼容iOS 10 资料整理笔记
- 写一个简单的操作系统
- HTML5 JS Canvas利用贝塞尔曲线绘制圆角矩形
- Lecture1 Overview of Tensorflow
- android studio 2.3更新踩坑记
- CentOS7下基于Hadoop2.7.3集群搭建
- 利用css-redundancy-checker去除冗余、无用、废弃的css样式代码