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博客