公司做网站公司,桂林网站制作报价,在工商局网站做变更需要多久,2015网站备案教程文章目录 保存地图方法一#xff1a;使用ORB-SLAM3自带的保存方法#xff08;oea后缀文件#xff09;保存地图方法二#xff1a;使用PCL库保存为PCD类型地图文件安装PCL库#xff1a;取巧方法#xff1a;CMakeLists.txt 文件修改内容#xff1a;#xff08;向该文件内添… 文章目录 保存地图方法一使用ORB-SLAM3自带的保存方法oea后缀文件保存地图方法二使用PCL库保存为PCD类型地图文件安装PCL库取巧方法CMakeLists.txt 文件修改内容向该文件内添加PCL库src目录下的MapDrawer.cc 文件修改内容 在前一篇文章的Ubuntu18.04版本下配置ORB-SLAM3和数据集测试方法中Ubuntu18.04的系统下成功配置完成了ORB-SLAM3在ORB_SLAM3目录下输入命令
./Examples/Monocular-Inertial/mono_inertial_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular-Inertial/EuRoC.yaml ./dataset/V102 ./Examples/Monocular-Inertial/EuRoC_TimeStamps/V102.txt dataset-V102_monoi即可在线构建地图但是即使程序运行完成也看不见地图文件它在哪里
原因ORB-SLAM3并不会自己保存构建的点云地图文件。
若是想要将其构建的点云地图文件保存下来则需要自己修改一些文件 保存地图方法一使用ORB-SLAM3自带的保存方法oea后缀文件
仔细观察之前运行测试集的命令中有一个EuRoc.yaml出现这是运行ORB-SLAM3必要的配置文件内含一些相机的内参数据等资料必不可少。
若是需要使用ORB-SLAM3自带的保存方法我们则需要修改类似的运行调用配置文件。 在yaml文件末尾加入以下语句即可保存地图文件
System.LoadAtlasFromFile: map地图文件后缀为osa文件名为“map”文件名这个部分可以根据需求自行更改 生成的地图文件在ORB_SLAM3的主目录下
暂时不知道osa后缀的文件能否用在其他地方但是我目前只在ORB-SLAM3中遇到过这种后缀类型的文件所以我更推荐使用第二种保存为PCD类型的地图文件
若是需要在ORB-SLAM3运行时加载osa后缀的地图文件可以在yaml文件末尾加上
System.LoadAtlasFromFile: map需要存在名为“map”的后缀为osa的地图文件才能成功加载地图
注意同时使用会报错需要使用哪个时另一个记得删除或者注释 修改yaml后缀的配置文件无需进行重新编译改完即可直接使用运行指令运行
保存地图方法二使用PCL库保存为PCD类型地图文件
若要了解PCD类型文件可以查看PCD点云数据文件格式这篇文章
安装PCL库
sudo apt-get install libpcl-dev pcl-tools取巧方法
如果没有对ORB-SLAM3的 CMakeLists.txt 文件和 src目录下的MapDrawer.cc 文件进行修改则可以采取一些取巧的方法下载上传至github项目中的 CMakeLists.txt 文件和 MapDrawer.cc 文件直接进行覆盖即可
CMakeLists.txt 文件修改内容向该文件内添加PCL库
find_package(PCL REQUIRED)include_directories(
${PROJECT_SOURCE_DIR}
${PROJECT_SOURCE_DIR}/include
${PROJECT_SOURCE_DIR}/include/CameraModels
${PROJECT_SOURCE_DIR}/Thirdparty/Sophus
${EIGEN3_INCLUDE_DIR}
${Pangolin_INCLUDE_DIRS}
${PCL_INCLUDE_DIRS}
)target_link_libraries(${PROJECT_NAME}
${OpenCV_LIBS}
${EIGEN3_LIBS}
${Pangolin_LIBRARIES}
${PCL_LIBRARIES}
${PROJECT_SOURCE_DIR}/Thirdparty/DBoW2/lib/libDBoW2.so
${PROJECT_SOURCE_DIR}/Thirdparty/g2o/lib/libg2o.so
-lboost_serialization
-lcrypto
)src目录下的MapDrawer.cc 文件修改内容
1、添加头文件
#include pcl/point_types.h
#include pcl/point_cloud.h
#include pcl/io/pcd_io.h2、找到 DrawMapPoints 函数中的如下代码
for(setMapPoint*::iterator sitspRefMPs.begin(), sendspRefMPs.end(); sit!send; sit)
{if((*sit)-isBad())continue;Eigen::Matrixfloat,3,1 pos (*sit)-GetWorldPos();glVertex3f(pos(0),pos(1),pos(2));}将其修改为如下代码
pcl::PointCloudpcl::PointXYZ::Ptr cloud_saved(new pcl::PointCloudpcl::PointXYZ());
for(setMapPoint*::iterator sitspRefMPs.begin(), sendspRefMPs.end(); sit!send; sit)
{if((*sit)-isBad())continue;Eigen::Matrixfloat,3,1 pos (*sit)-GetWorldPos();glVertex3f(pos(0),pos(1),pos(2));//modified by Aweipcl::PointXYZ p;p.x pos(0);p.y pos(1);p.z pos(2);cloud_saved-points.push_back(p);
}
if (cloud_saved-points.size())pcl::io::savePCDFileBinary(map.pcd, *cloud_saved);3、 找到以下代码段
for(size_t i0, iendvpMPs.size(); iiend;i)
{if(vpMPs[i]-isBad() || spRefMPs.count(vpMPs[i]))continue;Eigen::Matrixfloat,3,1 pos vpMPs[i]-GetWorldPos();glVertex3f(pos(0),pos(1),pos(2));
}将其修改为
pcl::PointCloudpcl::PointXYZ::Ptr cloud_saved(new pcl::PointCloudpcl::PointXYZ());
for(size_t i0, iendvpMPs.size(); iiend;i)
{if(vpMPs[i]-isBad() || spRefMPs.count(vpMPs[i]))continue;Eigen::Matrixfloat,3,1 pos vpMPs[i]-GetWorldPos();glVertex3f(pos(0),pos(1),pos(2));//modified by Aweipcl::PointXYZ p;p.x pos(0);p.y pos(1);p.z pos(2);cloud_saved-points.push_back(p);
}
if (cloud_saved-points.size() pre_num)
{pcl::io::savePCDFileBinary(map.pcd, *cloud_saved);pre_num cloud_saved-points.size();
}并在 MapDrawer.cc 开头加入全局变量 pre_num
extern int pre_num 0;在修改完之后再次运行数据集命令构建点云地图即可在ORB_SLAM3目录下生成map.pcd文件
在ORB_SLAM3目录下启动终端输入下列命令即可查看地图文件
pcl_viewer map.pcd若是在虚拟机中想把地图文件转移至宿主机中但是无法自由移动文件或是vmware-tools无效可以参考这篇文章
若是想把pcd文件修改为其他后缀类型的地图文件可以查看视觉学习笔记4——ORB-SLAM3的地图保存与使用这篇文章中地图调用这一部分 至此结束 参考链接 orb_slam3实现保存/加载地图功能and发布位姿功能 ORB SLAM3 点云地图保存