本文旨在帮助读者利用自己的数据包完成3D点云地图下的定位,公开数据包NDT:自动驾驶系统进阶与项目实战(六)基于NDT的自动驾驶高精度定位和ROS项目实战,本文只讲应用。
废话不多说,直接开始!
一、安装ndt_localizer
#创建工作空间
mkdir -p ~/ndt_localizer/src
cd ~/ndt_localizer/src
catkin_init_workspace
#克隆代码
git clone https://github.com/hujiax380/ndt_loc.git
#编译
cd ..
catkin_make
二、配置文件
1. map文件
将自己的数据包所建的pcd文件放置在代码包里的map文件夹下;
将/launch/map_loader.launch中的"pcd_path"路径下的.pcd文件名改为自己的pcd文件名:xxx.pcd;
2. 点云文件
将/launch/points_downsample.launch文件中的"points_topic"下的话题名改为自己的激光雷达点云话题名,笔者使用的是velodyne16,因此改为"/velodyne_points";
将"leaf_size"的值根据自己的激光雷达线数及建图场景修改,velodyne16室内建图修改为0.25效果不错,室外场景或32线/64线大一些;
3. 坐标变换
将/launch/static_tf.launch中的"localizer_to_base_link"后的两坐标改为"0 0 0.1 0 0 0 base_link velodyne"(针对velodyne);0.1表示激光雷达坐标到base_link的z轴距离;
三、启动定位程序
启动ndt_localizer节点:
#启动ndt定位节点
source ~/ndt_localizer/devel/setup.bash
roslaunch ndt_localizer ndt_localizer.launch
等待地图加载完成后,启动rosbag:
#注意建图的bag与定位bag要一致
rosbag play xxx.bag
最后在终端和rviz中就能够看到定位结果了!