• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

点云数据类型 sensor_msgs/PointCloud2

武飞扬头像
*William
帮助1


前言

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

例如

---
//这个消息保存了一个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		//如果没有无效点,则为真,否则为假

学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfiiiah
系列文章
更多 icon
同类精品
更多 icon
继续加载