ORBSLAM2实验记录(1)——稠密建图

写在前面

近期又重新拾起ORBSLAM2的学习,换装了Ubuntu16.04,配置环境的bug比18.04少了不少,可以说是一路顺利,关于环境配置的问题,网络上可以说是众说纷纭,如果你打算使用Ubuntu16.04,可以参照我的配置经验,从18.04配置了两次的经验,转到16.04可以说是老手了,之后会记录一篇配置教程,供各位参考

实验环境

许多博客和教程并没有说明环境,导致许多bug出现,如果你的配置与我的环境相同,那么你可以参考我的博客,如果不同,可以尝试配置,有bug欢迎留言交流

电脑配置:

Processor:AMD Ryzen 7 4800H

Graphics:NVIDIA GEFORCE GTX 1650Ti

Memory: 16GB

OS Details: Ubuntu 16.04 LTS 64-bit

依赖配置:

Pangolin 0.7

opencv 3.4.15

eigen3

boost1.68 (这个bug特别多)

ros

编译过程参考如下博客,在过程中本人遇到众多bug,希望有所参考价值

编译ORB-SLAM2 rgbd稠密地图 (地图可回环)整个过程_berry丶的博客-CSDN博客

[从零开始Ubuntu16.04+ORBSLAM2+ROS实验实录(五):稠密点云建图_Mr.Winter的博客-CSDN博客_orbslam稠密建图](https://blog.csdn.net/FRIGIDWINTER/article/details/119986760?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165849769916781685315139%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165849769916781685315139&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-119986760-null-null.142%5Ev33%5Econtrol,185%5Ev2%5Econtrol&utm_term=orbslam2%E7%A8%A0%E5%AF%86%E5%BB%BA%E5%9B%BE&spm=1018.2226.3001.4187 "从零开始Ubuntu16.04+ORBSLAM2+ROS实验实录(五):稠密点云建图_Mr.Winter的博客-CSDN博客_orbslam稠密建图”)

ORB_SLAM2新增稠密建图代码笔记_好好仔仔的博客-CSDN博客_orbslam 稠密点云

源码下载

首先要有一份已经能够跑通的原版ORB_SLAM2

然后可以克隆如下带有建图的ORB_SLAM2

git clone https://github.com/gaoxiang12/ORBSLAM2_with_pointcloud_map.git

下载源码后

①将原ORB_SLAM2中的Vocabulary文件夹包括里面的内容拷贝到ORB_SLAM2_modified文件夹下

②如下路径如果有build文件夹,将其删除:

ORB_SLAM2_modified/

ORB_SLAM2_modified/Thirdparty/DBoW2

ORB_SLAM2_modified/Thirdparty/g2o

③修改CmakeList.txt

修改的CmakeList.txt为

ORB_SLAM2_modified/

ORB_SLAM2_modified/Thirdparty/DBoW2

ORB_SLAM2_modified/Thirdparty/g2o

将其中的-march=native删除掉

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}  -Wall  -O3 -march=native ")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall   -O3 -march=native")

这个可能会引起运行slam的过程中产生段错误:核心功能已转储(segment error)

[可选]如果出现问题无法解决了,可以尝试如下措施

将OpenCV3.0改为3.4.15


find_package(OpenCV 3.0 QUIET)    #将3.0改为3.4.15
if(NOT OpenCV_FOUND)
   find_package(OpenCV 2.4.3 QUIET)
   if(NOT OpenCV_FOUND)
      message(FATAL_ERROR "OpenCV > 2.4.3 not found.")
   endif()
endif()

[可选] PCL版本问题

将其中的PCL 1.7 REQUIRED中的1.7删掉

find_package( PCL REQUIRED )

修改源码

如果不进行修改源码只会生成灰度稠密点云

①修改include/Tracking.h

Frame mCurrentFrame;
cv::Mat mImRGB;     //new add
cv::Mat mImGray;

②修改src/Tracking.cc定义RGB矩阵

cv::Mat Tracking::GrabImageRGBD(const cv::Mat &imRGB,const cv::Mat &imD, const double ×tamp)
{
mImRGB = imRGB;     // new add
mImGray = imRGB;
......

mpPointCloudMapping->insertKeyFrame( pKF, this->mImGray, this->mImDepth );
//change the mImGray to mImRGB as next row
mpPointCloudMapping->insertKeyFrame( pKF, this->mImRGB, this->mImDepth );// new

③修改src/pointcloudmapping.cc

增加头文件

#include

在void PointCloudMapping::viewer()函数中加入保存地图的指令:

 while(1)
    {
        .... // 省略
        for ( size_t i=lastKeyframeSize; iswap( *tmp );
        viewer.showCloud( globalMap );
        cout << "show global map, size=" << globalMap->points.size() << endl;
        lastKeyframeSize = N;
    }

      pcl::io::savePCDFileBinary("vslam.pcd", *globalMap); //new add 加在while循环外面

如何查看生成的.pcd文件

sudo apt get install pcl tools
pcl_viewer vslam.pcd

编译工程

cd ORB_SLAM2_modified
./build.sh

问题:编译出现undefined reference to `boost::system::generic_category()

我遇到的解决方案

如果在/usr/local/include和/usr/include下各有一个boost文件夹,将/usr/local/include下的boost剪切到别的文件夹下(留作备份,万一还有用)去除掉该目录下的boost编译成功

其他方案

在CmakeList.txt中添加-lboost_system,或者将boost相关.so文件拷贝到slam文件夹下的/lib中

我参考的博客:

[ROS编译提示undefined reference to boost::system::generic_category()_fightforglory的博客-CSDN博客](https://blog.csdn.net/fightforglory/article/details/123474621?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165846920716781683952197%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=165846920716781683952197&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-2-123474621-null-null.142%5Ev33%5Epc_search_result_control_group,185%5Ev2%5Econtrol&utm_term=boost%3A%3Asystem%3A%3Adetail%3A%3Ageneric_category&spm=1018.2226.3001.4187 "ROS编译提示undefined reference toboost::system::generic_category()_fightforglory的博客-CSDN博客”)

[boost编译的一个bug:undefined reference to boost::system::generic_category()'_gx_1983的博客-CSDN博客](https://blog.csdn.net/gx_1983/article/details/77962938?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165850340916781790752439%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165850340916781790752439&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-77962938-null-null.142%5Ev33%5Epc_search_result_control_group,185%5Ev2%5Econtrol&utm_term=undefined%20reference%20to%20%60boost%3A%3Asystem%3A%3Ageneric_category%28%29&spm=1018.2226.3001.4187 "boost编译的一个bug:undefined reference toboost::system::generic_category()’_gx_1983的博客-CSDN博客”)

测试运行

先下载测试集

Computer Vision Group – Dataset Download

下载fr2/pioneer_360测试集

解压测试集文件在ORB_SLAM2的文件夹下即可

然后在Examples/RGB-D目录下

执行其中的associate.py文件

associate.py 数据集目录/rgb.txt 数据集目录/depth.txt > my.txt
//这个my.txt可自定义名字

此时在RGB-D文件夹下会生成my.txt文件

运行测试程序

cd ORB_SLAM2_modified
./bin/rgbd_tum Vocabulary/ORBvoc.bin Examples/RGB-D/TUM2.yaml rgbd_dataset_freiburg2_pioneer_360 Examples/RGB-D/my.txt

正常结果如下:

ORBSLAM2实验记录(1)——稠密建图

问题1:编译工作空间未修改

sudo gedit ~/.bashrc
//修改里面的工作目录。或者你直接改为你之前的文件夹名
source ~./bashrc

这个编译的时候不要忘记了

问题2:没有建图

这是因为没有修改yaml文件的缘故

修改TUM2.yaml文件,在末尾添加如下

PointCloudMapping.Resolution: 0.01
meank: 50
thresh: 2.0

问题3:三色格子

这个比较搞笑,如果你出现了这个,不要慌

ORBSLAM2实验记录(1)——稠密建图

滚动一下你的鼠标滚轮,你会发现,这是三个方向的坐标轴。。。。。

另外,大家尽量使用英文版ubnuntu,这样比较好搜bug….

Original: https://blog.csdn.net/weixin_52379562/article/details/125940140
Author: Chourain Soong
Title: ORBSLAM2实验记录(1)——稠密建图

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/636591/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球