文章目录
0.上一篇
LT-mapper,LT-SLAM代码运行与学习:添加链接描述
1.配置参数
参考下面修改xx/LT_mapper_ws/src/lt-mapper/ltremovert/config/params_ltmapper.yaml
中的5处路径与pcd文件起始和终止索引
路径,由于01数据段时间在前,故将其作为中心段central,作为参考;将02数据段作为查询段query。
# 修改前
# save_pcd_directory: "/home/user/Desktop/ltslam-tutorial-kitti/data_ltmapper_mulran/riverside-rs/out/" # replace to your path (please use an absolute path)
# 修改后
save_pcd_directory: "/media/meng/T7/dataset/LT_mapper/data_removert/0102/" ##hxz
# 修改前----------------------
# central_sess_scan_dir: "/home/user/Desktop/ltslam-tutorial-kitti/data_scaloam_mulran/riverside/01/Scans/"
# central_sess_pose_path: "/home/user/Desktop/ltslam-tutorial-kitti/data_ltslam_mulran/riverside0102rs/01_central_aft_intersession_loops.txt"
# query_sess_scan_dir: "/home/user/Desktop/ltslam-tutorial-kitti/data_scaloam_mulran/riverside/02/Scans/"
# query_sess_pose_path: "/home/user/Desktop/ltslam-tutorial-kitti/data_ltslam_mulran/riverside0102rs/02_central_aft_intersession_loops.txt"
# 修改后-------------
central_sess_scan_dir: "/media/meng/T7/dataset/LT_mapper/data_parsed/01/Scans/" ##hxz
central_sess_pose_path: "/media/meng/T7/dataset/LT_mapper/data_parsed/01/01_central_aft_intersession_loops.txt" ##hxz
query_sess_scan_dir: "/media/meng/T7/dataset/LT_mapper/data_parsed/02/Scans/" ##hxz
query_sess_pose_path: "/media/meng/T7/dataset/LT_mapper/data_parsed/02/02_central_aft_intersession_loops.txt" ##hxz
pcd文件索引,注意这这个索引不要超过/media/meng/T7/dataset/LT_mapper/data_parsed/01/Scans/
和/media/meng/T7/dataset/LT_mapper/data_parsed/02/Scans/
里面文件的索引,否则会报错。
# start_idx: 1100 # change this // for 0103
# end_idx: 1200 # change this // for 0103
start_idx: 100 # change this // for 0103 //hxz
end_idx: 200 # change this // for 0103 //hxz
2.代码运行
cd xx/LT_mapper_ws
source devel/setup.bash
roslaunch removert run_ltmapper.launch
运行效果:
下面根据终端打印输出了解LT-removert的思路。
(1)Removert 主程序启动–Removert Main Started
依次执行:读取数据、为[100,200]之间的数据生成101个节点、结合地图感兴趣区域生成153个关键帧、展示读取进来的pcd文件、对中心数据(01数据)进行降采样,保存原始点云到OriginalNoisyCentralMapGlobal.pcd
、对查询数据(02数据)进行降采样,,保存原始点云到OriginalNoisyQueryMapGlobal.pcd
这里可以使用cloudcompare进行查看,这里可以看出,在上一篇(https://blog.csdn.net/BIT_HXZ/article/details/127334097)里面,LT-mapper对地图进行了较好的对齐:
(2)开始自移除–Self-removing starts
依次执行:生成深度图像(range image)、分辨出高动态(high dynamic maps)地图/点云、通过knn解析低动态差异low dynamic diff(包括:parse low dynamic diff via knn: Central to Query 和 parse low dynamic diff via knn: Query to Central )
(3)识别出强/弱 负变化/正变化点
注:负变化:disappeared points (negative difference (ND))、正变化newly appeared points (positive difference (PD))
因为Central 对应的数据是01数据,时间比较早,于是查找负变化点即消失的点,进行三次查找和消除模糊点,如下:
因为Central 对应的数据是02数据,时间比较晚,于是查找正变化点即新出现的点,进行三次查找和消除非体积拓展的正变化(non-volume-extending PD),效果如下。
同时分别将Union、PD、ND地图进行保存。
进行比较:
nd_map.pcd(左)与strong_nd_map.pcd(右):发现nd即消失点主要是车辆等可能会移动的物体。
pd_map.pcd(左)与strong_pd_map.pcd(右):发现与strong_pd_map比pd_map数据量小很多,但看不出其他区别了。
strong_nd_map.pcd、updated_map_strong.pcd、strong_pd_map.pcd
(4)更新扫描Scan
注:low dynamic (LD)
下面三句话的意思应该是在Central对应的Scan上进行更新(应该是因为central对应的01数据是过去的时间,变化是发生在01到02,所以在01对应的central上进行更新),并将静态(static points)数据点保存在pcd文件中。
[ INFO] [1665817038.792333793]: parse updated scans via projection(通过投影解析更新的扫描): Central
[ INFO] [1665817048.600099379]: parse LD scans via projection(通过投射解析LD扫描): Central
[ INFO] [1665817066.454952078]: final update scans(最终更新扫描): Central
保存到scans_updated文件夹:
保存到scans_updated_strong文件夹:
保存到scans_pd文件夹:
保存到scans_pd_strong文件夹:
保存到scans_nd_strong文件夹:
查看scans_nd_strong文件夹
:
发现pcd对应的点云好像车辆,这里应该是因为在01数据到02数据这段时间内,这些道路上或道路侧边停放的车辆离开了
注:批量读取pcd文件脚本:read_current_pcd.bash
folder="."
softfiles=$(ls $folder)
for sfile in ${softfiles}
do
#echo "soft: ${sfile}"
pcl_viewer ${sfile}
done
查看scans_pd_strong文件夹
:
基本上pcd viewer里面基本上全是静态环境要素(意思是车辆等可能会运动的环境要素出现的很少),所以第一眼好像看不出pd即新出现这个词用在此处的意义
查看scans_updated_strong文件夹
:
这个文件夹里面应该保存的是更新后的一帧点云数据,可以看出scans_updated_strong文件夹
总体上比scans_pd_strong文件夹
具有更多的信息(比如说有地面),也更能比较全面地表示环境;但同时也会缺少一些位置的点云数据