前言
ROS应用中,使用到雷达、相机等传感器。与单线雷达不同的是,多线雷达与深度相机的应用都会涉及到多维问题。3D视觉处理的主要是点云,点云,是很多点的集合。在处理点云数据之前需了解点云数据类型sensor_msgs/PointCloud2,所以记录一下学习过程。
一、什么是点云?
点云是某个坐标系下的点的集合。(就像天上的白云,颜色是白色,并且是由许多小水滴、小晶体等混合物组成的,每个组成该混合物的小个体便是“白云”的“点”)
点包含了数据信息,包括三维坐标 X,Y,Z、颜色、强度值等等。
点云在组成特点上分为两种,一种是有序点云,一种是无序点云。
有序点云:一般由深度图还原的点云,有序点云按照图方阵一行一行排列,从左上角到右下角。不过这其中会存在一些无效点,在很多情况下是无法获取有序点云的。
无序点云:无序点云就是其中的点的集合,点排列之间没有任何顺序,点的顺序交换后没有任何影响。是比较普遍的点云形式,有序点云也可看做无序点云来处理。处理无序点云只考量空间坐标和颜色值。
二、sensor_msgs/PointCloud2
1.查看ROS中的消息类型
~$ rosmsg list
下拉找到s开头的类型输出,如下:
sensor_msgs/LaserEcho
sensor_msgs/LaserScan
sensor_msgs/MagneticField
sensor_msgs/MultiDOFJointState
sensor_msgs/MultiEchoLaserScan
sensor_msgs/NavSatFix
sensor_msgs/NavSatStatus
sensor_msgs/PointCloud
sensor_msgs/PointCloud2
sensor_msgs/PointField
显示消息描述:
~$ rosmsg show sensor_msgs/PointCloud2
std_msgs/Header header
uint32 seq
time stamp
string frame_id
uint32 height
uint32 width
sensor_msgs/PointField[] fields
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
bool is_bigendian
uint32 point_step
uint32 row_step
uint8[] data
bool is_dense
官方网址:
http://docs.ros.org/en/jade/api/sensor_msgs/html/msg/PointCloud2.html文章来源:https://www.toymoban.com/news/detail-453932.html
例如文章来源地址https://www.toymoban.com/news/detail-453932.html
---
//这个消息保存了一个n维点的集合point数据存储为二进制blob,其布局由fields数组的内容。
//点云数据可以是二维(像图像一样)或一维的(无序)
header:
seq: 240 //序列ID
stamp:
secs: 107
nsecs: 930000000
frame_id: "base_laser_link"
height: 1 //点云的二维结构。如果云是无序的,则height为1,width为点云的长度。
width: 178
fields: //描述二进制数据blob中的通道及其布局
-
name: "x"
offset: 0
datatype: 7 //uint8 INT8 = 1
count: 1 //uint8 UINT8 = 2
//uint8 INT16 = 3
//uint8 UINT16 = 4
//uint8 INT32 = 5
//uint8 UINT32 = 6
//uint8 FLOAT32 = 7 datatype:7
- //uint8 FLOAT64 = 8
name: "y"
offset: 4
datatype: 7
count: 1
-
name: "z"
offset: 8
datatype: 7
count: 1
-
name: "index" //字段名
offset: 12 //偏移量
datatype: 5 //数据类型枚举
count: 1 //字段中有多少个元素
is_bigendian: False //是否为大端格式?
point_step: 16 //点长度(单位为字节)
row_step: 2848 //行长度(单位为字节)
data: [...........................] //很多数据,此处省略,实际点数据,大小为(row_step*height)
is_dense: False //如果没有无效点,则为真,否则为假
到了这里,关于点云数据类型分析 sensor_msgs/PointCloud2的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!