前言
ROS應用中,使用到雷達、相機等傳感器。與單線雷達不同的是,多線雷達與深度相機的應用都會涉及到多維問題。3D視覺處理的主要是點云,點云,是很多點的集合。在處理點云數(shù)據(jù)之前需了解點云數(shù)據(jù)類型sensor_msgs/PointCloud2,所以記錄一下學習過程。
一、什么是點云?
點云是某個坐標系下的點的集合。(就像天上的白云,顏色是白色,并且是由許多小水滴、小晶體等混合物組成的,每個組成該混合物的小個體便是“白云”的“點”)
點包含了數(shù)據(jù)信息,包括三維坐標 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
官方網(wǎng)址:
http://docs.ros.org/en/jade/api/sensor_msgs/html/msg/PointCloud2.html文章來源:http://www.zghlxwxcb.cn/news/detail-453932.html
例如文章來源地址http://www.zghlxwxcb.cn/news/detail-453932.html
---
//這個消息保存了一個n維點的集合point數(shù)據(jù)存儲為二進制blob,其布局由fields數(shù)組的內(nèi)容。
//點云數(shù)據(jù)可以是二維(像圖像一樣)或一維的(無序)
header:
seq: 240 //序列ID
stamp:
secs: 107
nsecs: 930000000
frame_id: "base_laser_link"
height: 1 //點云的二維結(jié)構。如果云是無序的,則height為1,width為點云的長度。
width: 178
fields: //描述二進制數(shù)據(jù)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 //數(shù)據(jù)類型枚舉
count: 1 //字段中有多少個元素
is_bigendian: False //是否為大端格式?
point_step: 16 //點長度(單位為字節(jié))
row_step: 2848 //行長度(單位為字節(jié))
data: [...........................] //很多數(shù)據(jù),此處省略,實際點數(shù)據(jù),大小為(row_step*height)
is_dense: False //如果沒有無效點,則為真,否則為假
到了這里,關于點云數(shù)據(jù)類型分析 sensor_msgs/PointCloud2的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!