视觉学习笔记4——ORB-SLAM3的地图保存与使用

这篇具有很好参考价值的文章主要介绍了视觉学习笔记4——ORB-SLAM3的地图保存与使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ORB系列文章目录

前言:视觉学习笔记4——学习研究ORB-SLAM3



前言

ORB-SLAM3基本搭建完成,具体可以看开头的系列文章目录,接下来需要研究如何自定义自己的地图,也就是实时地图的保存与运用。


一、地图保存

方法1(使用自带OSA保存):

按照开源说明来看,地图保存与加载在V1.0已经实现了,需要修改相应的yaml文件即可,也就是相机yaml文件,例如单目测试就需要修改ORB_SLAM3/Examples_old/ROS/ORB_SLAM3/Asus.yaml文件。

  • 1、修改yaml文件
    在该文件中的末尾添加以下代码:
System.SaveAtlasToFile: "map.osa"
  • 2、ORB-SLAM3编译运行:
    重新编译后再运行单目实例,这时就会自动保存点云了,点云信息保存在.osa文件中。
sudo ./build.sh
sudo ./build_ros.sh
  • 3、加载
    按道理此时地图已经保存成功,也确实有.osa文件出现在主目录里,可是我却没有很好办法来查看和调用这个文件,所以就修改为pcd文件来使用。

方法2(保存为PCD文件):

经过查询找到这位博主的文章

  • 1、安装PCL库
sudo apt-get install libpcl-dev pcl-tools
  • 2、修改MapDrawer.cc 文件
    视觉学习笔记4——ORB-SLAM3的地图保存与使用

第一步,先加入 pcl 保存点云所需的头文件:

#include <pcl/point_types.h>
#include <pcl/point_cloud.h>
#include <pcl/io/pcd_io.h>

第二步,找到 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);

第三步在ORB-SLAM3下的 CMakeLists.txt文件中添加 PCL 库

注意每一段代码放的位置,一共三段、
1find_package(PCL REQUIRED)
 
 2include_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}
)
 
 3target_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
)
  • 4、ORB-SLAM3编译运行:
    重新编译后再运行单目实例,这时就会自动保存点云了,.pcd文件保存在主目录下。想要修改保存位置可以参考这篇博客
sudo ./build.sh
sudo ./build_ros.sh
  • 5、使用 pcl_viewer 进行查看.pcd文件
pcl_viewer map.pcd

视觉学习笔记4——ORB-SLAM3的地图保存与使用

二、地图调用

1.修改PCD文件

接下来需要把建图的点云集用meshlab导成dae格式的
MeshLab支持的输入输出格式:.ply, .stl, .obj, .qobj, off, .ptx, .vmi, .bre, .dae, .ctm, .pts, .apts, .xyz, .gts, .pdb, .tri, .asc, .txt, .x3d, .x3dv, .wrl,它不支持PLC格式,所以需要改一下代码,改成.ply。
再次魔改之前修改的MapDrawer.cc

//多加上一个头函数
#include <pcl/io/ply_io.h>


//修改之前的DrawMapPoints 函数
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);
}

 for (int i = 0; i < cloud_saved->points.size(); i++)
    {
        if (isnan(cloud_saved->points[i].x))
        {
            cloud_saved->points[i].x = 0;
            cloud_saved->points[i].y = 0;
            cloud_saved->points[i].z = 0;
        }
    }

if (cloud_saved->points.size())
    pcl::io::savePLYFileBinary("map.ply", *cloud_saved);

ORB-SLAM3重新编译

sudo ./build.sh
sudo ./build_ros.sh

再运行单目实例

第1个终端:
roscore
第2个终端:
roslaunch usb_cam-test.launch
第3个终端:
rosrun ORB_SLAM3 Mono /home/xxx/Guide_blind/ORB_SLAM3-1.0/Vocabulary/ORBvoc.txt /home/xxx/Guide_blind/ORB_SLAM3-1.0/Examples_old/ROS/ORB_SLAM3/Asus.yaml
第4个终端:
rqt_graph

这时就会自动保存点云.cly文件了。文件保存在主目录下,想要修改文件保存位置可以参考这篇博客

2.安装使用meshlab

非常简单,打开【Ubuntu软件】,右上角点击搜索,输入meshlab回车,然后点击安装,只需10s即可安装成功!

视觉学习笔记4——ORB-SLAM3的地图保存与使用

然后找到应用图标,打开meshlab,然后打开文件选择打开的保存的map.ply文件,成功显示!

视觉学习笔记4——ORB-SLAM3的地图保存与使用文章来源地址https://www.toymoban.com/news/detail-464488.html

未完待续···

到了这里,关于视觉学习笔记4——ORB-SLAM3的地图保存与使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ORB-SLAM2学习笔记7之System主类和多线程

    ORB-SLAM2是一种基于特征的视觉 SLAM ( Simultaneous Localization and Mapping )系统,它能够从单个、双目或 RBGD 相机的输入中实时地同时定位相机的位置,并构建环境的三维地图。 ORB-SLAM2 是在ORB-SLAM的基础上进行改进和扩展的版本。

    2024年02月12日
    浏览(50)
  • ORB-SLAM2学习笔记6之D435i双目IR相机运行ROS版ORB-SLAM2并发布位姿pose的rostopic

    ORB-SLAM2算法1已成功编译安装 ROS 版本 ORB-SLAM2 到本地,以及ORB-SLAM2算法5

    2024年02月14日
    浏览(46)
  • 【视觉SLAM】An Improved ORB-SLAM2 in Dynamic Scene with Instance Segmentation

    Cite: H. Qian and P. Ding.An Improved ORB-SLAM2 in Dynamic Scene with Instance Segmentation[C].2019 Workshop on Research, Education and Development of Unmanned Aerial Systems (RED UAS).Cranfield, UK. 2019:185-191. Keyword: 特征提取,图像运动分析,图像分割,移动机器人,姿势估计,机器人视觉,SLAM (机器人) 为了提高动态

    2024年02月01日
    浏览(34)
  • ORB-SLAM稠密点云地图构建(黑白+彩色)+ pcd文件以八叉树形式表示

    pcl1.8.1 VTK 7.1.1 版本一定要对好,如果安装了不符的版本如我之前安的pcl1.1.3和VTK8.2 一定要卸载干净不然会一直报错 ,不同版本的pcl和vtk是无法共存的,并且光把包删除是不够的,要去/usr下面使用命令行(先搜索再一起删掉) 使用高翔老师的源码ORB-SLAM2-modified 运行前要先把

    2024年02月07日
    浏览(64)
  • ORB SLAM3 点云地图保存

    目前 ORB_SLAM3 已经提供了地图保存功能。 方法是在 yaml 文件中以下这行配置: 保存下来的地图可以在下次运行 ORB_SLAM3 时加载。 然而,我经过搜索,没能找到关于 .osa 文件离线加载和可视化的方法,于是对 ORB_SLAM3 的代码进行了简单的修改,使其可以保存 pcd 格式的点云地图

    2024年02月06日
    浏览(67)
  • orb_slam3实现保存/加载地图功能and发布位姿功能

    先说方法:在加载的相机参数文件.yaml的最前面加上下面两行就行。 第一行表示从本地加载名为\\\"MH01_to_MH05_stereo_inertial.osa\\\"的地图文件,第二行表示保存名为\\\"MH01_to_MH05_stereo_inertial.osa\\\"的地图到本地。第一次运行建图时注释掉第一行,只使用第二行,加载地图重定位时反过来,

    2024年02月15日
    浏览(43)
  • 自学SLAM(2)---保姆教程教你如何使用自己的视频运行ORB-SLAM2

    如果你是新手入门,仅仅只会Linux的基本操作,并看了高翔老师视觉SLAM视屏的第一讲,那么你需要准备一整天的时间,可能还不一定能运行出来!运行ORB-SLAM2将会安装很多很多东西。那么,我们准备开始!! 我是默认你已经装了虚拟机和Ubuntu系统的!! 首先先展示一下成果

    2024年02月08日
    浏览(53)
  • ORB-SLAM2的布置(四)ORB-SLAM2构建点云

    高博的工作是对基本 ORB SLAM2 的扩展,基本思想是为每个关键帧构造相应的点云,然后依据从 ORB SLAM2 中获取的关键帧位置信息将所有的点云拼接起来,形成一个全局点云地图。 https://github.com/gaoxiang12/ORBSLAM2_with_pointcloud_map 具体的依赖包括: OpenCV (推荐 3.2 版本) DBoW2 和 g2o(源

    2024年02月05日
    浏览(58)
  • ORB-SLAM 论文阅读

    论文链接 ORB-SLAM 0. Abstract 本文提出了 ORB-SLAM,一种基于特征的单目同步定位和建图 (SLAM) 系统 该系统对严重的运动杂波具有鲁棒性,允许宽基线环路闭合和重新定位,并包括全自动初始化 选择重建的点和关键帧的适者生存策略具有出色的鲁棒性,并生成紧凑且可跟踪的地图

    2024年01月22日
    浏览(57)
  • Ubuntu18.04下使用安卓手机Camera和IMU信息运行ORB-SLAM2

    1、下载Android_Camera-IMU,将其中的Camera-Imu.apk文件发送至手机端进行安装。 下载命令: git clone https://github.com/hitcm/Android_Camera-IMU.git  发送至手机的文件在手机端安装以后的软件  在手机端安装好以后的软件如下:  2、安装功能依赖包:sudo apt-get install ros-melodic-imu-tools  # 修改

    2024年02月09日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包