ORB-SLAM2实时彩色点云地图构建及保存

ORB-SLAM2实时点云地图构建

https://github.com/gaoxiang12/ORBSLAM2_with_pointcloud_map是高翔博士基于ORB-SLAM2改的,可以进行实时点云地图构建,先按照高翔博士的改ORB_SLAM2,改好之后如何编译如下:

首先要安装PCL

复制代码
sudo apt install libpcl-dev

编译

有几处需要改动:

CMakeLists.txt中 "-march=native"

cmake 复制代码
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}  -Wall  -O3 -march=native")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall   -O3 -march=native")

Thirdparty/g2o/CMakeLists.txt 中 "-march=native"

cmake 复制代码
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -march=native") 
SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3 -march=native") 

在CMakeLists.txt中以下修改

cmake 复制代码
# Check C++11 or C++0x support
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX11)
   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
   add_definitions(-DCOMPILEDWITHC11)
   message(STATUS "Using flag -std=c++11.")
elseif(COMPILER_SUPPORTS_CXX0X)
   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
   add_definitions(-DCOMPILEDWITHC0X)
   message(STATUS "Using flag -std=c++0x.")
else()
   message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
endif()

# 添加下面一行(如果不添加c++11可以成功编译则不需要)
set(CMAKE_CXX_STANDARD 14)
...
...
...

之后将ORB_SLAM2目录下的build、/Thirdparty/DBoW2/build及Thirdparty/g2o/build文件夹删除,然后就可以编译了

bash 复制代码
sudo chmod +x .build.sh
./build.sh

不出意外的话,至此就可以成功运行程序了

bash 复制代码
./bin/rgbd_tum ./Vocabulary/ORBvoc.txt ./Examples/RGB-D/TUM1.yaml ../../../slam_data/rgbd_dataset_freiburg1_desk ../../../slam_data/rgbd_dataset_freiburg1_desk/associations.txt

至于vocabulary文件用txt或是bin都可以,高翔博士在这里有读取bin文件的改动

如何是完全按照高翔博士的改法,TUM1.yaml多了

复制代码
PointCloudMapping.Resolution: 0.01

在System.cc中有读取此值

复制代码
float resolution = fsSettings["PointCloudMapping.Resolution"];
...
mpPointCloudMapping = make_shared<PointCloudMapping>( resolution );

如果TUM1.yaml中没有PointCloudMapping.Resolution: 0.01,上面两行也可以直接改为,完全是可以的

复制代码
mpPointCloudMapping = make_shared<PointCloudMapping>(0.01);

后面的数据集和rgb-depth关联文件路径改为自己的就可以了

此时得到的是黑白点云地图,并且没有保存

改善

将点云地图改为彩色,并保存

需进行以下修改:

1.Tracking.h

c++ 复制代码
// Current Frame
Frame mCurrentFrame;
cv::Mat mImRGB; //<added>添加这一行!
cv::Mat mImGray;
cv::Mat mImDepth; // adding mImDepth member to realize pointcloud view

2.Tracking.cc

c++ 复制代码
cv::Mat Tracking::GrabImageRGBD(const cv::Mat &imRGB,const cv::Mat &imD, const double &timestamp)
{
    mImRGB = imRGB;//<added>添加这一行
    mImGray = imRGB;
    mImDepth = imD;
    ...
}
void Tracking::CreateNewKeyFrame()
{
    ...
    // insert Key Frame into point cloud viewer
    // mpPointCloudMapping->insertKeyFrame( pKF, this->mImGray, this->mImDepth );
    mpPointCloudMapping->insertKeyFrame( pKF, this->mImRGB, this->mImDepth ); //将上面一行改为这一行
    ...
}

3.pointcloudmapping.cc

这里是保存点云地图的改动

首先是加入头文件

复制代码
#include <pcl/io/pcd_io.h>

然后是调用地图保存函数

c++ 复制代码
void PointCloudMapping::viewer()
{
    ...
    for ( size_t i=lastKeyframeSize; i<N ; i++ )
    {
        PointCloud::Ptr p = generatePointCloud( keyframes[i], colorImgs[i], depthImgs[i] );
        *globalMap += *p;
    }
    //保存地图,这里为了管理,新建了pcd文件夹,将所有保存的pcd放入里面	
	pcl::io::savePCDFileBinary("/pcd/vslam.pcd", *globalMap); 
    ...
}

参考:https://github.com/gaoxiang12/ORBSLAM2_with_pointcloud_map/issues

相关推荐
点云SLAM3 天前
点云数据分割算法之-聚合层次聚类(AHC)平面识别
聚类·slam·点云数据处理·点云分割·平面识别·聚合层次聚类·有序点云数据
点云SLAM4 天前
MAP(最大后验)估计理论(2)以及相关应用
机器人·slam·卡尔曼滤波算法·map估计理论·lm算法·非线性最小二乘问题线性化
点云SLAM10 天前
SLAM文献之-A Quick Guide for the Iterated Extended Kalman Filter on Manifolds
人工智能·机器人·slam·三维重建·fast-lio·卡尔曼滤波算法·iekf
大鹅同志11 天前
Ubuntu 20.04使用MB-System分析与可视化EM3000数据
数据库·3d·ros·slam·mb-system
点云SLAM12 天前
C++ 静态初始化顺序问题(SIOF)和SLAM / ROS 工程实战问题
开发语言·c++·slam·静态初始化顺序问题·工程实战技术·c++static 关键字
雨幕丶17 天前
激光SLAM 回环检测---STD(A Stable Triangle Descriptor for 3D place recognition)
slam
点云SLAM19 天前
凸优化(Convex Optimization)理论(1)
人工智能·算法·slam·数学原理·凸优化·数值优化理论·机器人应用
点云SLAM20 天前
凸优化(Convex Optimization) 理论(2)
机器人·slam·最小二乘法·数值优化·凸优化·拉格朗日-牛顿法·二次规划(qp)
WWZZ202521 天前
SLAM进阶——数据集
人工智能·计算机视觉·机器人·大模型·slam·具身智能
WWZZ202522 天前
SLAM进阶——特征提取
人工智能·大模型·slam·orb·具身智能·特征提取