激光雷达是现今机器人尤其是无人车领域及最重要、最关键也是最常见的传感器之一,是机器人感知外界的一种重要手段。
概念
激光雷达(LiDAR),英文全称为:Light Detection And Ranging,即光探测与测量。
原理
激光雷达可以发射激光束,光束照射到物体上,再反射回激光雷达,可以通过三角法测距或TOF测距计算出激光雷达与物体的距离。甚至也可以通过测量反射回来的信号中的某些特性而确定物体特征,比如:物体的材质。
注意:如果物体表面光滑(比如镜子),光束照射后产生镜面反射,可能无法捕获返回的激光而出现识别失误的情况。
优点
激光雷达在测距方面精准(激光雷达的测量精度可达厘米级)、高效,是机器人测距的不二之选。
具有极高的分辨率:激光雷达工作于光学波段,频率比微波高2~3个数量级以上,因此,与微波雷达相比,激光雷达具有极高的距离分辨率、角分辨率和速度分辨率;
抗干扰能力强:激光波长短,可发射发散角非常小(μrad量级)的激光束,多路径效应小(不会形成定向发射与微波或者毫米波产生多路径效应),可探测低空/超低空目标;
获取的信息量丰富:可直接获取目标的距离、角度、反射强度、速度等信息,生成目标多维度图像;
可全天时工作:激光主动探测,不依赖于外界光照条件或目标本身的辐射特性。它只需发射自己的激光束,通过探测发射激光束的回波信号来获取目标信息。
缺点
激光雷达虽然优点多多,但也存在一些局限性:
成本:居高不下
环境:易受天气影响(大雾、雨天、烟尘)
属性识别能力弱:激光雷达的点云数据是物体的几何外形呈现,无法如同人类视觉一样,分辨物体的物理特征,比如:颜色、纹理...
分类
根据线束数量的多少,激光雷达可分为单线束激光雷达与多线束(4线、8线、16线、32线、64线)激光雷达。单线激光雷达扫描一次只产生一条扫描线, 其所获得的数据为2D数据,因此无法区别有关目标物体的3D信息。多线束激光雷达就是将多个横向扫描结果纵向叠加,从而获得3D数据,当然,线束越多,纵向的垂直视野角度越大。
思岚A1激光雷达(下图)是一款性价比较高的单线激光雷达。
使用流程如下:
硬件准备;
软件安装;
启动并测试。
1.硬件准备
1.雷达连接上位机
当前直接连接树莓派即可,如果连接的是虚拟机,注意VirtualBox或VMware的相关设置。
2.确认当前的 USB 转串口终端并修改权限
USB查看命令:
ll /dev/ttyUSB*
授权(将当前用户添加进dialout组,与arduino类似):
sudo usermod -a -G dialout your_user_name
不要忘记重启,重启之后才可以生效。
进入工作空间的src目录,下载相关雷达驱动包,下载命令如下:
git clone https://github.com/slamtec/rplidar_ros
返回工作空间,调用catkin_make编译,并source ./devel/setup.bash,为端口设置别名(将端口 ttyUSBX 映射到 rplidar):
cd src/rplidar_ros/scripts/
./create_udev_rules.sh
3.启动并测试
1.rplidar.launch文件准备
首先确认端口,编辑 rplidar.launch 文件
<launch>
<node name="rplidarNode" pkg="rplidar_ros" type="rplidarNode" output="screen">
<param name="serial_port" type="string" value="/dev/rplidar"/>
<param name="serial_baudrate" type="int" value="115200"/><!--A1/A2 -->
<!--param name="serial_baudrate" type="int" value="256000"--><!--A3 -->
<param name="frame_id" type="string" value="laser"/>
<param name="inverted" type="bool" value="false"/>
<param name="angle_compensate" type="bool" value="true"/>
</node>
</launch>
frame_id 也可以修改,当使用URDF显示机器人模型时,需要与 URDF 中雷达 id 一致
2.终端中执行 launch 文件
终端工作空间下输入命令:
roslaunch rplidar_ros rplidar.launch
如果异常,雷达开始旋转
3.rviz中订阅雷达相关消息
启动 rviz,添加 LaserScan 插件:
注意: Fixed Frame 设置需要参考 rplidar.launch 中设置的 frame_id,Topic 一般设置为 /scan,Size 可以自由调整。