一.概念
LIDAR,全称Light Detection And Ranging,即激光检测和测距,通常称为激光雷达。其功能是利用激光检测物体以及测量与物体之间的距离。
二.分类
不同的分类标准,有不同的分类结果。通常有两类分类标准,按照线束可分为两类:一是单线激光雷达,二是多线激光雷达。单线激光雷达的数据可以看做是一定高度的一排点阵,多线激光雷达的数据包含高度信息,可以看做是一个面。按照机械性质又可分为机械激光雷达和固态激光雷达,目前主流市场以机械激光雷达为主。
三.原理
机械激光雷达原理可以简化理解为一个发射器,一个接收器和一个旋转镜面,发射器周期向旋转镜面发射光束,由镜面折射出去,此光束经过障碍物反射后,由接收器接收,统计时间,然后根据光速,计算距离。镜面不停旋转,镜面旋转一周,相当于激光雷达扫描一周,可以获取一帧激光雷达数据。
四.输出
激光雷达的直接输出主要包含两部分:一是距离点,代表物体与激光雷达之间的距离;二是反射强度,不同的物体其反射强度不同,在特定场景下,利用反射强度,可以识别物体,例如车道线检测。
五.作用
激光雷达与IMU和GPS在作用上有一个显著差异点,IMU与GPS测量自身信息,激光雷达测量的是环境信息,并可以根据环境信息,反推自身信息。在自动驾驶或者机器人领域,测量自身信息,在称之为定位,测量环境信息,称之为感知,建图本质上属于感知。
六.数据特性
在机器人和自动驾驶领域,基于激光雷达的方案比较成熟,这与其优势的数据特性有关。具体如下:
- 测量信息比较多:物体三维信息,包括位置和速度,形状,材料等。
- 不受光线影响:这点决定其可以全天候工作。其缺陷是易受天气影响,还有一点是相对于其他传感器,激光雷达成本比较高,不利于产品商业化量产,不过近几年,随着激光雷达技术的发展,其成本也逐渐降低。
七.ROS中LIDAR数据表示
1. sensor_msgs/LaserScan
sensor_msgs/LaserScan
是激光雷达基本数据类型,其所描述的是一次扫描的数据,包括扫描角度、时间以及扫描距离等,执行以下命令:
rosmsg show sensor_msgs/LaserScan
执行效果:
header项同前文GPS(ROS传感器之GPS简介), angle_min
扫描起始角度, angle_max
扫描结束角度, angle_increment
两次扫描间隔的角度, time_increment
两次扫描的时间间隔, scan_time
此帧数据产生的时间,机械激光雷达数据点,是由旋转扫描产生,所以同一帧的每个点产生的时间都不一样, scan_time
要表示整帧数据的时间,一般取第一帧和最后一帧的平均时间,或者使用GPS时间,这个后续再详细介绍。range_min
最小有效距离, range_max
最大有效距离, ranges
所有扫描点的距离, intensities
所有扫描点的反射强度。
2. sensor_msgs/PointCloud2
sensor_msgs/PointCloud2
代表点云数据,pcl是点云库,专门处理点云数据,通过将 sensor_msgs/LaserScan
格式先转化为 sensor_msgs/PointCloud2
格式,然后可以调用pcl算法,处理数据。执行以下命令:
rosmsg show sensor_msgs/PointCloud2
执行效果:
header项同前文GPS(ROS传感器之GPS简介),height表示高度,width表示宽度,可以把一帧点云数据看成图像数据,一个点对应一个像素,宽和高也与之对应。is_bigendian
数据存储是否按照小端存储, point_step
表示一个点所占的字节数, row_step
表示一行点所占的字节数, is_dense
表示数据是否有效, data
实际存储点云数据, fields
表示每一个点云所包含的格式,可以按照 fields
区域把点云数据解析出来。以下是激光雷达 velodyne
的一帧点云数据,我们以此进一步说明此结构
header代表本帧时间戳、序列号, frame_id
设置为 velodyne
;height
为1, width
为55823,所以此帧点云数:height×width=1×55823=55823
, point_step
为32,代表一个点占32字节, row_step
为1786336,此数据代表一行所占的字节数:point_step×width=32×55823=1786336
;此帧总的自己数:row_step×height=1786336×1=1786336
, fields
表示一个点的结构,x、y、z代表三维坐标, intensity
代表反射强度, ring
表示圈的序列号。fields
中name代表 field name
,offset代表一个点结构内的起始地址,datatype代表field数据类型,count代表field的个数。早期还有一个结构:sensor_msgs/PointCloud
,也是表示点云数据,目前已经淘汰。
八. 小结
本篇介绍激光雷达的基本概念和原理,以及在ros系统中激光雷达数据的两种表达方式。下一篇以Velodyne为例,介绍如何获取,解析以及使用激光雷达数据。