我是在docker内运行的,此方法可行,不使用docker是否可行没有验证过,应该也可以
docker保存pcd:
1. 启用 lidar.yaml 文件中的导出选项savePCD或仅使用 ros 命令将最终的全球地图保存为 .pcd
savePCD: true
savePCDDirectory: "/home/catkin_ws/src/E-LVI-SAM/save_map/"
2. 还需要在docker内的路径中修改文件 /opt/ros/melodic/lib/python2.7/dist-packages/roslaunch/nodeprocess.py
来更改终止节点的超时阈值_TIMEOUT_SIGINT
。ROS将在 _TIMEOUT_SIGINT
秒后终止该节点。一个大地图可能需要几分钟才能保存。如果需要,可以将其更改为更大的值。
3. 修改/src/lidar_odometry/mapOptmization.cpp文件395行:
if (req.destination.empty())
//saveMapDirectory = std::getenv("HOME") + savePCDDirectory;
saveMapDirectory = savePCDDirectory;
else
aveMapDirectory = std::getenv("HOME") + req.destination;
代码中的std::getenv("HOME")
将在运行时被编译成“root”根目录,但在docker中根目录无法定位(原因未知),故此处直接使用yaml配置文件中的路径,并放在catkin_ws里(这样无论在docker内还是宿主机都可以访问到)