基于激光雷达构建高精度点云地图及其感知定位
目前,前期大多数自动驾驶公司采用高精度惯导(imu+gnss+rtk)来实现高精度定位,但存在应用场景缺陷,无法应用隧道、高楼、林阴路等非开阔场景。所以感知定位方式应运而生,感知定位方式大多分为两种:视觉定位、激光雷达定位,本文将采用激光雷达定位方式。
硬件
现在市面上激光雷达很多种:velodyne、速腾、禾赛、北科天绘。低成本考虑,本文将采用velodyne vlp-16 激光雷达作为本次方案选择。计算单元最好用工控机或性能比较好的笔记本。
系统
不多说,采用基于ubuntu16.04系统,装上ROS(kinetic)系统,网上有相关教程。
获取点云数据
安装激光雷达驱动。
https://github.com/ros-drivers/velodyne
http://wiki.ros.org/velodyne
用ROS下的rviz可视化点云数据如下
运动补偿
一般选择激光雷达扫描频率为10Hz(20Hz、5Hz可选),360度持续扫描,所以完成一帧环境数据需要0.1s,车辆静止时雷达扫描到地上的线束是闭合的。但当车辆高速运动时,观察到的线速没有闭合,当车速为10m/s(36km/h,并不快啊!!!),扫描周期为0.1s,当完成一帧扫描时车辆已经行走1m远了,可见对后面影响多大。
为了简单可见,采用匀速模型,补偿车辆纵向距离和产生的横摆角差,一般车辆也不会产生横向漂移。。
P(t) = αR x βT x P(t-1)
P(t-1)为一个周期内(100ms)所生成的点云数据,车辆当前相对于上一时刻发生了车姿变换,R、T分别为旋转矩阵和偏移矩阵,α、β为当前点云的位置比例。
构建本地地图
比较常见的点云匹配算法有icp算法、ndt算法 ,为了运行效率,本文采用ndt算法。点云库PCL有丰富的资料,下载源码,编译之后可直接调用。
感知定位
构建道路高精度点云地图之后,输入车辆的初始位置,ndt算法对位置的误差有较好的收敛性,耗时也比较稳定。
构建全局地图
在理想情况下,室外开阔,gps信号接收良好,gps+rtk有着绝对的定位精度。车辆装备激光雷达、惯导设备(差分服务,千寻或自己架基站都可行),标定两者之间的相对位置(tf之间的变换)。惯导获取大地绝对坐标,激光雷达获取的局部点云信息通过坐标变换可将转换至大地绝对坐标中,然后通过下采样处理,降低点云密度以便降低存储空间。
构建全局高精度点云地图之后,自动驾驶车辆可实现全局的高精度定位。gsp初始定位后激光雷达精确定位。
reference:
https://blog.****.net/adamshan/article/details/79230612
https://www.cnblogs.com/sddai/p/6129446.html