写在前面

 

        近期又重新拾起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稠密建图

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 &timestamp)
{
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 <pcl/io/pcd_io.h>

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

 while(1)
    {
        .... // 省略
        for ( size_t i=lastKeyframeSize; i<N ; i++ )
        {
            PointCloud::Ptr p = generatePointCloud( keyframes[i], colorImgs[i], depthImgs[i] );
            *globalMap += *p;
        }


        PointCloud::Ptr tmp(new PointCloud());
        voxel.setInputCloud( globalMap );
        voxel.filter( *tmp );
        globalMap->swap( *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博客

boost编译的一个bug:undefined reference to `boost::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

正常结果如下:

feaa2f7720cc478687fd6d594b66f847.png

 

 

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

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

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

问题2:没有建图

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

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

PointCloudMapping.Resolution: 0.01
meank: 50
thresh: 2.0

问题3:三色格子

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

413bb1fdb77c4f4b883e0669a207d53f.png

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

 

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

 

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐