Apollo定位之NDT定位实践

实验云平台:Apollo定位之NDT定位实践_Apollo课程

实验流程

1、制作NDT地图

首先解压录制好的record包,得到激光雷达点云和姿态信息,然后再校正激光点云姿态,最后调用NDT制图工具生成NDT地图。

1.1 解压数据包

解压数据包,得到原始的激光雷达点云信息和车辆姿态信息,需要注意点云的cloud_topic要与数据包中的点云topic一 致,如果不清楚,可以通过 cyber_recorder info 命令查看数据包中的cloud_topic信息。

cyber_record_parser --bag_file=sensor_rgb.record --out_folder=/apollo/data --cloud_topic=/apollo/sensor/velodyne64/compensator/PointCloud2
1.2 校正pose信息

解压之后,再通过imu的信息对车辆的姿态进行插值,得到校正之后的车辆pose。

poses_interpolator --input_poses_path=/apollo/data/pcd/odometry_loc.txt --ref_timestamps_path=/apollo/data/pcd/pcd_timestamp.txt --extrinsic_path=modules/localization/msf/params/velodyne_params/velodyne64_novatel_extrinsics_example.yaml --output_poses_path=/apollo/data/pcd/poses.txt

注意:这里面临先有鸡、还是先有蛋的问题,上述方法通过IMU插值进行校正pose,实际上最好通过ndt进行校正,得到更准确的pose。

为了加快速度,这里我们只取前20张点云制作地图(正常制作的时候可以跳过!)

mv /apollo/data/pcd/poses.txt /apollo/data/pcd/poses_bak.txt
head -20 /apollo/data/pcd/poses_bak.txt > /apollo/data/pcd/poses.txt

完成上述步骤之后,确认 poses.txt 中是否有数据。

cat /apollo/data/pcd/poses.txt
1.3 生成NDT地图

有了激光雷达点云信息和准确的pose之后,根据这些信息就可以生成NDT地图了。注意这里采用的是NDT的强度信息,因此如果点云中缺少强度信息,则实现不了定位。

ndt_map_creator --pcd_folders=/apollo/data/pcd --pose_files=/apollo/data/pcd/poses.txt --resolution_type=single --resolution=1 --zone_id=10 --map_folder=/apollo/modules/localization/map/ndt_map/local_map

生成好的地图保存在 /apollo/modules/localization/map/ndt_map/local_map 路径下,通过 ls 命令查看该路径下是否有以下文件,如果存在,那么恭喜你!NDT地图就制作成功了!

ls /apollo/modules/localization/map/ndt_map/local_map

2、运行NDT模块

制作好NDT地图之后,接下来,我们就可以运行NDT模块进行融合定位了,以下是运行NDT定位的步骤

2.1 修改配置

首先我们需要根据车辆的情况修改以下配置修改 /apollo/modules/common/data/global_flagfile.txt 中的地图路径 --map_dir 为我们保存地图的路径

--map_dir=/apollo/modules/localization/map

设置地图的UTM zone id,修改激光雷达的外参文件和topic,要与数据包中实际发布的一致。打开 /apollo/modules/localization/conf/loc alization.conf 修改其中的值

local_utm_zone_id = 10
lidar_extrinsics_file = /apollo/modules/localization/msf/params/velodyne_params/velodyne64_novatel_extrinsics_example.yaml
lidar_topic = /apollo/sensor/velodyne64/compensator/PointCloud2
2.2 启动NDT & 播放Record 包

上述配置完成之后,启动NDT模块

cyber_launch start /apollo/modules/localization/launch/ndt_localization.launch

接着播放数据包,模拟传感器发送消息

cyber_recorder play -f sensor_rgb.record -c /apollo/sensor/gnss/odometry /apollo/sensor/velodyne64/compensator/PointCloud2 /apollo/sensor/gnss/ins_stat

最后通过cyber_monitor查看定位信息

cyber_monitor

它的输入是以下3个topic的消息,它的输出是融合之后的定位信息。

输入
/apollo/sensor/gnss/odometry # /apollo/sensor/gnss/odometry
/apollo/sensor/velodyne64/compensator/PointCloud2 # lidar_topic
/apollo/sensor/gnss/ins_stat # ins_stat_topic

输出
/apollo/localization/pose
/apollo/localization/ndt_lidar
/apollo/localization/msf_status

参考:

Apollo第五讲——Apollo定位模块_appllo定位-CSDN博客

Apollo定位之NDT定位实践作业_哔哩哔哩_bilibili

Apollo星火计划学习笔记——第五讲(Apollo自动驾驶定位技术)-CSDN博客

Apollo星火计划学习笔记——第四讲Part2 Apollo定位模块详解与实践_apollo 惯性测量单元-CSDN博客

星火第四讲 Part2—Apollo 定位模块 详解与实践_哔哩哔哩_bilibili