工作中利用velodyne点云及GNSS信息构建高清三位地图(能进行从小到大地图的精确拼接),并实现实时准确定位(SLAM),在此记录下自己的学习实现过程:
相关算法:HDL+GNSS+NDT
一、录制相关区域带有GNSS信息的bag(一个或多个)
二、hdl_slam slam 构图
1、rosparam set use_sim_time true
2、roslaunch hdl_graph_slam hdl_graph_slam_ford.launch points_topic:=/points_raw enable_gps:=false
roslaunch hdl_graph_slam hdl_graph_slam_ford.launch points_topic:=/points_raw enable_gps:=true
3、watch(optional)
roscd hdl_graph_slam/rviz
rviz -d hdl_graph_slam.rviz
4、play bag
rosbag play --clock hdl_400.bag
rosrun hdl_graph_slam bag_player.py /media/huafy/workdisk/home/huafy/Download_Bags/2019-06-28-14-27-21_NO_GPS.bag
5、save map
rosservice call /hdl_graph_slam/save_map "resolution: 0.05
destination: '/home/huafy/.ros/generate_map/graph_slam_submap_2019-xx-xx_xxxxxx.pcd'"
(分两行输入,中间加回车)
三、后期处理
1 把map绕x轴旋转180,同时z轴方向提高2m(依据采集数据的雷达与地面的距离而定)
2 把map绕z轴旋转90,使车头与朝向地图上前进的方向(依据车头与地图上车前进的方向而定)
3 经过上述3步,map已经可以进行ndt定位,运行bag及ndt定位生成ndt与gnss的对应点表(xyz值),点的轨迹必须是一条折线,直线不可
4 利用生成的点表(ndt\gnss)进行再次转换,使地图方位与gps完全结合且方位一致
通过上述操作,可以把地图转换到gps坐标系下(如果选择本次bag第一帧gps作为原点,则地图的ndt原点与gps原点重合,
如果选择某一给定gps坐标作为原点,如第一个bag第一帧的gps,则转换完成后,则本地图在第一个bag第一帧的gps为原点的坐标系下,如果所有的submap都选择同一gps原点,则所有的submap在同一坐标系下,从而完成地图拼接)
四、效果图