Ubuntu18.04:ORB-SLAM3使用数据集构建地图和保存点云地图

本文介绍了如何在ORB-SLAM3中保存地图,包括使用ORB-SLAM3自带的保存方法(osa文件)和通过PCL库转换为PCD文件。详细步骤包括配置yaml文件和CMakeLists.txt以及MapDrawer.cc中的代码修改。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


在前一篇文章的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.h>

2、找到 DrawMapPoints 函数中的如下代码:

for(set<MapPoint*>::iterator sit=spRefMPs.begin(), send=spRefMPs.end(); sit!=send; sit++)
{
    if((*sit)->isBad())
        continue;
    Eigen::Matrix<float,3,1> pos = (*sit)->GetWorldPos();
    glVertex3f(pos(0),pos(1),pos(2));
 
}

将其修改为如下代码:

pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_saved(new pcl::PointCloud<pcl::PointXYZ>());
for(set<MapPoint*>::iterator sit=spRefMPs.begin(), send=spRefMPs.end(); sit!=send; sit++)
{
    if((*sit)->isBad())
        continue;
    Eigen::Matrix<float,3,1> pos = (*sit)->GetWorldPos();
    glVertex3f(pos(0),pos(1),pos(2));
 
    //modified by Awei
    pcl::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 i=0, iend=vpMPs.size(); i<iend;i++)
{
    if(vpMPs[i]->isBad() || spRefMPs.count(vpMPs[i]))
        continue;
    Eigen::Matrix<float,3,1> pos = vpMPs[i]->GetWorldPos();
    glVertex3f(pos(0),pos(1),pos(2));
}

将其修改为

pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_saved(new pcl::PointCloud<pcl::PointXYZ>());
for(size_t i=0, iend=vpMPs.size(); i<iend;i++)
{
    if(vpMPs[i]->isBad() || spRefMPs.count(vpMPs[i]))
        continue;
    Eigen::Matrix<float,3,1> pos = vpMPs[i]->GetWorldPos();
    glVertex3f(pos(0),pos(1),pos(2));
        
    //modified by Awei
    pcl::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 点云地图保存

### 回答1: 要在Ubuntu 18.04上安装ORB-SLAM3,您可以按照以下步骤进行操作: 1. 安装依赖项:ORB-SLAM3需要一些依赖项,包括Eigen、OpenCV、Pangoling2o。您可以使用以下命令安装它们: ``` sudo apt-get install libeigen3-dev libopencv-dev libpangolin-dev libglew-dev libboost-dev libboost-filesystem-dev libboost-serialization-dev libboost-system-dev libboost-thread-dev libg2o-dev ``` 2. 克隆ORB-SLAM3存储库:使用以下命令从GitHub上克隆ORB-SLAM3存储库: ``` git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ORB_SLAM3 ``` 3. 编译ORB-SLAM3:进入ORB-SLAM3目录,使用以下命令编译ORB-SLAM3: ``` cd ORB_SLAM3 chmod +x build.sh ./build.sh ``` 4. 运行ORB-SLAM3使用以下命令运行ORB-SLAM3: ``` ./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml /path/to/dataset/sequence/ ``` 其中,/path/to/dataset/sequence/是您要运行ORB-SLAM3数据集路径。 希望这可以帮助您安装ORB-SLAM3。 ### 回答2: Orb-slam3是实时三维SLAM(Simultaneous Localization and Mapping)系统,可以同时进行环境三维建模自主移动机器人的定位。如果你希望在ubuntu18.04上安装orb-slam3,你可以按照以下步骤进行操作: 1. 安装必要的软件依赖项 打开终端并输入以下命令: ``` sudo apt-get update sudo apt-get install git libglew-dev cmake libopencv-dev ``` 2. 克隆Orb-slam3代码 使用Git工具将Orb-slam3代码克隆到本地目录。在终端中输入以下命令: ``` cd ~ git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ORB_SLAM3 ``` 此命令将Orb-slam3源代码克隆到~/ORB_SLAM3目录中。 3. 编译Orb-slam3代码 进入ORB_SLAM3目录,然后创建build目录并进入该目录: ``` cd ORB_SLAM3 mkdir build cd build ``` 现在,使用CMake编译Orb-slam3代码。在终端中输入以下命令: ``` cmake .. -DOpenCV_DIR=/usr/share/OpenCV/ make -j4 ``` 使用-DOpenCV_DIR标志指定OpenCV库的路径,其中/usr/share/OpenCV/是OpenCV库的默认路径。-j4选项表示使用4个核心并行编译。 4. 运行示例 一旦编译完成,您可以运行示例程序。首先,下载一个示例地图: ``` cd .. ./ORB_SLAM3 Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml Examples/Stereo/EuRoC_mono_left.mp4 ``` 上述命令将使用ORBvoc.txt词汇表对EuRoC/MH_01_easy地图进行三维重建。您可以尝试其他设置选项,其中.yaml文件指定ORB-SLAM3的参数,.mp4是用于测试的视频文件。 这就是在ubuntu18.04上安装Orb-slam3的步骤。如果您遇到任何问题,请查看Orb-slam3的官方文档以获取更多信息。 ### 回答3ORB-SLAM3是一个基于视觉的定位地图构建系统,它能够使用单个RGB-D相机或单目摄像机进行定位地图构建。在Ubuntu18.04系统上,ORB-SLAM3的安装可以分为以下几步。 1. 下载ORB-SLAM3 在终端中输入以下命令以下载ORB-SLAM3: ``` git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ``` 2. 安装必要的依赖项 安装ORB-SLAM3需要一些必要的依赖项,包括ROSPCL。在终端中输入以下命令以安装这些依赖项: ``` sudo apt-get update sudo apt-get install ros-melodic-desktop-full sudo apt-get install libpcl-dev ``` 3. 编译ORB-SLAM3 在终端中输入以下命令以编译ORB-SLAM3: ``` cd ORB_SLAM3 chmod +x build.sh ./build.sh ``` 这将编译ORB-SLAM3其依赖项。编译完成后,可以通过输入以下命令运行ORB-SLAM3: ``` ./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml PATH_TO_DATASET_FOLDER ``` 其中,PATH_TO_DATASET_FOLDER需要替换为您的数据集的路径。 4. 调整相机参数 在运行ORB-SLAM3之前,需要根据摄像机的参数调整yaml文件中的相机参数。在ORB-SLAM3的Examples/Monocular文件夹中有一个名为TUM1.yaml的示例文件,您可以将其复制并进行更改以符合您的摄像机参数。 以上就是在Ubuntu18.04上安装ORB-SLAM3的步骤。有关ORB-SLAM3的更多详细信息,请参阅ORB-SLAM3的官方文档。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值