ORBSLAM2实验记录(1)——稠密建图
近期又重新拾起ORBSLAM2的学习,换装了Ubuntu16.04,配置环境的bug比18.04少了不少,可以说是一路顺利,关于环境配置的问题,网络上可以说是众说纷纭,如果你打算使用Ubuntu16.04,可以参照我的配置经验,从18.04配置了两次的经验,转到16.04可以说是老手了,之后会记录一篇配置教程,供各位参考。...............
写在前面
近期又重新拾起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 ×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 <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
正常结果如下:
问题1:编译工作空间未修改
sudo gedit ~/.bashrc
//修改里面的工作目录。或者你直接改为你之前的文件夹名
source ~./bashrc
这个编译的时候不要忘记了
问题2:没有建图
这是因为没有修改yaml文件的缘故
修改TUM2.yaml文件,在末尾添加如下
PointCloudMapping.Resolution: 0.01
meank: 50
thresh: 2.0
问题3:三色格子
这个比较搞笑,如果你出现了这个,不要慌
滚动一下你的鼠标滚轮,你会发现,这是三个方向的坐标轴。。。。。
另外,大家尽量使用英文版ubnuntu,这样比较好搜bug....
更多推荐
所有评论(0)