ROS相关消息类型&格式介绍

1.std _ msgs

该类型是 ROS 内置的标准消息类型,是最基础的消息类型


ROS Message Types

#高级戳记数据类型的标准元数据。
#这通常用于通信时间戳数据
#在特定的坐标系中。
uint32 seq序列号
time stamp时间戳
string frame_id参考坐标系

2.geometry_msgs

主要包含一些与机器人运动控制和定位姿态相关的消息类型


ROS Message Types

#这包含了一个点在自由空间中的位置
float64 x
float64 y
float64 z
//一般情况下推荐使用point类型,也就是64位的定义方式,可以促进互操作性(可能ros中大多数函数的接口是用64位定义的)
#这包含了一个点在自由空间中的位置(32位精度)。
#建议尽可能使用Point,而不是Point32。
#这个建议是为了促进互操作性。
#此消息的设计目的是在发送时占用更少的空间
#譬如在有许多点(大规模点云)情况下使用Point32
float32 x
float32 y
float32 z
#这表示一个有参考坐标帧和时间戳的点
std_msgs/Header header
geometry_msgs/Point point
#自由空间中的姿态表示,由位置和方向组成。
geometry_msgs/Point position
geometry_msgs/Quaternion orientation
#这表示了一个2D流形上的位置和方向。
#弃用,请使用完整的3D姿势
#一般来说,我们的建议是使用所有内容的完整3D表示,对于2D特定应用程序,在平面上进行适当的投影以进行计算,但最好在处理过程中保留3D信息。(主要原因在于当使用两种接口去实现内容的时候,3D可以转2D,但2D无法转3D)
float64 x
float64 y
float64 theta
#一个带有全局引用头的姿势数组。
std_msgs/Header header
geometry_msgs/Pose[] poses
#一个带有参考坐标帧和时间戳的位姿
std_msgs/Header header
geometry_msgs/Pose pose
#这代表了一个不确定的自由空间中的位姿。
# 6x6协方差矩阵的行主序表示
#方向参数使用固定轴表示。
#参数依次为:
# (x, y, z,绕x轴旋转,绕y轴旋转,绕z轴旋转)
geometry_msgs/Pose pose
float64[36] covariance
#这表示一个带有参考坐标帧和时间戳的估计的位姿
std_msgs/Header header
geometry_msgs/PoseWithCovariance pose
#这表示一个四元数形式的自由空间方向。
float64 x
float64 y
float64 z
float64 w
#这表示一个带有参考坐标帧和时间戳的方向。
std_msgs/Header header
geometry_msgs/Quaternion quaternion
#这表示了自由空间中两个坐标系之间的变换。
geometry_msgs/Vector3 translation
geometry_msgs/Quaternion rotation
#这代表了父级坐标系id到子级坐标系id之间的变换。
#此消息主要被用于tf包。
std_msgs/Header header
string child_frame_id
geometry_msgs/Transform transform
#这表示自由空间中的速度,分解成线性部分和角部分。
geometry_msgs/Vector3 linear
geometry_msgs/Vector3 angular
#带有参考坐标帧和时间戳的速度
std_msgs/Header header
geometry_msgs/Twist twist
#这表示在不确定的自由空间中的速度
#6x6协方差矩阵的行主序表示
#方向参数使用固定轴表示。
#参数依次为:
# (x, y, z,绕x轴旋转,绕y轴旋转,绕z轴旋转)
geometry_msgs/Twist twist
float64[36] covariance
#这表示一个带有参考坐标帧和时间戳估计的速度。
std_msgs/Header header
geometry_msgs/TwistWithCovariance twist
#表示自由空间中的向量。
#它只是代表一个方向。因此,它没有有意义的应用一个转换到它(例如,当应用一个通用刚性转换到Vector3, tf2将只应用旋转)。如果希望数据也是可转换的,请使用 geometry_msgs/Point消息代替。
float64 x
float64 y
float64 z
#这表示了一个参考坐标帧和时间戳的Vector3
std_msgs/Header header
geometry_msgs/Vector3 vecto

3.nav_msg

主要包含一些与导航相关的消息类型


ROS Message Types

# 2D网格中的单元格数组
std_msgs/Header header
float32 cell_width
float32 cell_height
geometry_msgs/Point[] cells
#这包含了关于占据网格特征的基本信息
#加载地图的时间
#地图分辨率[m/cell]
#地图的宽度
#地图的高度
#地图的起始[m, m, rad]。这是在地图中 cell (0,0)真实世界的位姿
time map_load_time
float32 resolution
uint32 width
uint32 height
geometry_msgs/Pose origin
#这表示一个2D网格地图,其中每个单元格代表占据的概率
#头信息
#地图元数据
#地图数据,以行主序优先,从(0,0)开始。占据概率在[0,100]范围内。未知是-1。
std_msgs/Header header
nav_msgs/MapMetaData info
int8[] data
#这表示在自由空间中的位置和速度的估计。
#这条消息中的Pose应该在header.frame_id给出的坐标帧中指定。
#该消息中的twist应该在child_frame_id给出的坐标帧中指定
std_msgs/Header header
string child_frame_id
geometry_msgs/PoseWithCovariance pose
geometry_msgs/TwistWithCovariance twist
#一个位姿数组,表示机器人要遵循的路径
std_msgs/Header header
geometry_msgs/PoseStamped[] poses

ROS Service Types

ROS Action Types


4.sensor_msgs

主要包含一些与传感器信息读取相关的消息类


ROS Message Types

#这个消息被PointCloud消息用来保存可选数据,与云中的每个点相关联。数组values的长度应该与点云中点的数组的长度相同,values中每个值与点云中一个点相对应。
目前常见的通道名称包括
"u", "v":图像的行列
"rgb":uint8(R, G, B),共24bits;
"intensity":激光或者像素密度
"distance":距离
通道名称应该给出通道具体的语义,如 "intensity密度" 而不是 "value值".
string name
float32[] values
#这是一个从IMU(惯性测量单元)保存数据的消息
#加速度应该是m/s^2(不是g’s),旋转速度应该是rad/sec
#如果测量的协方差是已知的,它应该被填写(如果你所知道的只是每次测量的方差,例如从数据表中,只需将它们沿对角线放置)
#一个全为0的协方差矩阵将被解释为“协方差未知”,并要使用这个协方差数据,那么必须假设或从其他来源获得。
#如果你没有对其中一个数据元素的估计(例如,你的IMU没有产生一个方向估计),请将相关协方差矩阵的元素0设置为-1
#如果您正在解释此消息,请检查每个协方差矩阵的第一个元素的值是否为-1,并忽略相关的估计。
std_msgs/Header header
geometry_msgs/Quaternion orientation
float64[9] orientation_covariance
geometry_msgs/Vector3 angular_velocity
float64[9] angular_velocity_covariance
geometry_msgs/Vector3 linear_acceleration
float64[9] linear_acceleration_covariance
#平面激光测距仪单次扫描
#如果你有另一个具有不同行为的测距设备(例如声纳# array),请找到或创建一个不同的消息,因为应用程序将对这些数据做出相当精确的假设
std_msgs/Header header#头部的时间戳是扫描中第一条射线的获取时间。
float32 angle_min#扫描起始角度[rad]
float32 angle_max#扫描结束角度[rad]
float32 angle_increment#测量之间的角度步长[rad]
float32 time_increment#测量间隔时间步长[秒]-如果您的扫描仪正在移动,这将用于3d点的插值位置
float32 scan_time#扫描间隔时间[秒]
float32 range_min#最小范围[m]
float32 range_max#最大范围[m]
float32[] ranges#范围数据[m](注意:值< range_min或> range_max应被丢弃)
float32[] intensities#密度数据[设备特定的单位]。如果你的设备不提供密度,请离开空数组。(这个具体不太清楚)
#这个消息包含一个3d点的集合,加上可选的附加关于每个点的信息。
#传感器数据采集时间,坐标帧ID。
# 3d点数组每个Point32应该被解释为一个3d点(在头文件中给定的帧中)。
#每个通道应该有相同数量的元素点数组,每个通道中的数据应与每个点1:1对应。常用的通道名称在ChannelFloat32.msg中列出。
std_msgs/Header header
geometry_msgs/Point32[] points
sensor_msgs/ChannelFloat32[] channels
#该消息包含一个n维点的集合,其中可能包含额外的信息,如法线、强度等。点数据存储为二进制blob,其布局由“fields”数组的内容描述。
点云数据可以被组织为2d(类似图像)或1d(无序)。组织为2d图像的点云可以由相机深度传感器如立体声或飞行时间产生。
#传感器数据采集时间,坐标帧ID (3d点)。
std_msgs/Header header
#点云的2D结构。如果云是无序的,高度为1,宽度为点云的长度。
uint32 height
uint32 width
#描述通道及其在二进制数据blob中的布局。
sensor_msgs/PointField[] fields
bool is_bigendian#这个数据是双端数据吗?
uint32 point_step#点的长度(以字节为单位)
uint32 row_step#一行长度(以字节为单位)
uint8[] data#实际的点数据,大小为(row_step*height)
bool is_dense如果没有无效点则为True

#该消息以PointCloud2消息格式保存了一个点条目的描述。
uint8 INT8=1
uint8 UINT8=2
uint8 INT16=3
uint8 UINT16=4
uint8 INT32=5
uint8 UINT32=6
uint8 FLOAT32=7
uint8 FLOAT64=8
string name#字段名称
uint32 offset#从点结构开始的偏移量
uint8 datatype#数据类型枚举,参见上面
uint32 count#字段中有多少元素

ROS Service Types


以上均为ROS的noetic版本所列出的基本数据类型和一些里程计、导航和传感器相关的数据类型,这里将他们罗列出来方便今后学习。

  • 3
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ROS中,你可以通过自定义消息类型来定义自己的消息结构。以下是一些创建自定义消息类型的步骤: 1. 在ROS工作空间的`src`目录中创建一个新的包(如果还没有): ``` $ cd ~/catkin_ws/src $ catkin_create_pkg my_custom_msgs std_msgs rospy roscpp ``` 这个命令将在`src`目录中创建一个名为`my_custom_msgs`的新包,并将其依赖于`std_msgs`、`rospy`和`roscpp`。 2. 在`my_custom_msgs`包的目录中创建一个名为`msg`的文件夹: ``` $ cd my_custom_msgs $ mkdir msg ``` 3. 在`msg`文件夹中创建一个`.msg`文件,用于定义你的自定义消息类型。例如,创建一个名为`MyCustomMessage.msg`的文件: ``` $ touch MyCustomMessage.msg ``` 4. 在`MyCustomMessage.msg`文件中定义你的消息结构。例如: ``` float32 value string name uint32[] data ``` 这个例子定义了一个包含一个浮点数、一个字符串和一个无符号整数数组的消息。 5. 编译你的包: ``` $ cd ~/catkin_ws $ catkin_make ``` 6. 在ROS中使用你的自定义消息类型。在你的ROS节点代码中,包含自动生成的消息头文件,并使用`<包名>/<消息类型>`的格式引用你的消息类型。例如,在Python中使用自定义消息类型: ```python from my_custom_msgs.msg import MyCustomMessage # 创建一个自定义消息类型的实例 my_message = MyCustomMessage() my_message.value = 1.23 my_message.name = "custom_message" my_message.data = [1, 2, 3, 4, 5] ``` 这样,你就可以在ROS中定义和使用自己的自定义消息类型了。记得在修改完消息类型后重新编译你的包。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值