【ROS学习】(五)ROS消息传递——自定义消息
来源:互联网 发布:python 下划线用法 编辑:程序博客网 时间:2024/06/05 04:09
尽管ROS中提供了全面的基本数据类型消息,但在很多场合,我们希望根据自己的需要定义数据类型,一个典型的例子是can总线数据帧的传递,数据包中包括id号,数据长度以及数据部分,我们希望每个部分都有一个变量名称来表示,通常我们在这种场合会使用一个结构体封装数据,在ROS中,可以用自定义msg完成用户数据封装的功能。
以can数据帧的封装为例,来学习一下自定义msg的使用方法。
1.定义用户数据
这一步比较简单,在程序包文件夹下新建一个msg文件夹,在文件夹下新建一个can_data.msg文件,并在文件中写入以下内容
std_msgs/Header headerint16 id int16 len int32[4] data
这样就定义好了一个自定义消息,msg文件的名称就是消息的类型。
2.添加编译支持
为了让自定义的数据类型能够使用,需要将它编译成ROS中的消息。在使用std_msgs时,我们知道,要使用某个数据类型的消息,需要包含对应的头文件。因此需要将.msg文件编译生成.h文件,并在使用自定义消息的场合包含改头文件。我们需要做以下几处更改。
package.xml
package.xml需要添加编译依赖项和运行依赖项
<build_depend>message_generation</build_depend><run_depend>message_runtime</run_depend>
CmakeList.txt
find_package()中添加message_generation
find_package(catkin REQUIRED COMPONENTS message_generation roscpp rospy std_msgs)
add_message_files()中添加can_data.msg
add_message_files( FILES can_data.msg )
generate_messages()去掉注释
catkin_package()添加message_runtime
catkin_package( ... CATKIN_DEPENDS ... message_runtime ...)
在程序中要使用can_data数据类型时,要包含头文件#include “custom_msgs_demo/can_data.h”,头文件是ROS编译自动生成的,这样,就能在程序中定义和使用can_data类型对象
custom_msgs_demo::can_data output; output.header.seq = count; output.header.stamp = ros::Time::now(); output.header.frame_id = "can_data"; output.id = 0x101; output.len = 2; output.data[0] = 10; output.data[1] = 20; output.data[2] = 30; output.data[3] = 40;
完整工程参考
https://github.com/wenglihong/wlh_ros_demo/tree/master/msg_demo/custom_msgs_demo
- 【ROS学习】(五)ROS消息传递——自定义消息
- 【ROS学习】(四)ROS消息传递——std_msgs
- ROS消息传递——std_msgs
- ROS 服务 消息传递
- 创建ros自定义消息
- Ros自定义消息
- ROS自定义消息
- ROS 自定义消息类型
- ROS总结——ROS消息和ROS服务
- ROS教程(二十三):自定义消息
- 【ROS学习】(六)ROS多线程订阅消息
- ROS---发送自定义消息,接收消息
- ROS学习(-)基本概念+发布&订阅消息
- ROS Learning-012 beginner_Tutorials (编程) 创建自定义的ROS消息和ROS服务
- ROS总结——ROS消息发布和订阅
- ROS学习之 cpp消息
- [ROS]LaserScan消息的学习
- ROS学习第四弹 (ROS编辑器及配置/ROS msg/srv 消息和服务)
- Qt5与ARM交叉编译环境搭建
- Java 多态性 理解
- 【BZOJ4403】序列统计
- 让自己的开源项目支持CocoaPods
- Exec'ing Processes
- 【ROS学习】(五)ROS消息传递——自定义消息
- css设置尖角按钮
- linux实战(四)----写入文件----实例解析
- windows下利用OpenVPN搭建VPN服务器
- Spring 4.2框架中注释驱动的事件监听器详解
- TBB之parallel_reduce
- sphinx 配置文件全解析(转载)
- java_AES加密解密文件以及字符串
- Incorrect string value: '\xE4\xBC\x9A\xE5\x91\x98' for column 'recipient' at row 1