编译安装ORB-SLAM2获得三维点云地图(搜遍全网,就这一篇能看懂)

高翔博士对ORBSLAM2修改增加了点云模块,https://github.com/gaoxiang12/ORBSLAM2_with_pointcloud_map 在编译过程中,遇到很多问题,特来记录一下。以便之后的同学可以快速上手。注意环境是ubuntu16.04。

1、下载源码

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

2、解压 orbslam2_modified.zip

解压会得到两个文件夹,分别为 g2o_with_orbslam2 和 ORB_SLAM2_modified,与原orbslam2_modified合并到同一个文件夹

3、进入g2o_with_orbslam2,对cmakelists.txt下的代码进行注释

同时对g2o文件夹下的cmakelists.txt下的代码进行注释 

4、回到g2o_with_orbslam2主文件夹,进行编译

cd g2o_with_orbslam2
mkdir build
cmake ..
make -j8
sudo make install

–遇到编译错误时,作如下修改:

(1)修改g2o/types/slam2d/edge_se2_pointxy_bearing.cpp

//t.setRotation(t.rotation().angle()+_measurement);
改为:
t.setRotation((Eigen::Rotation2Dd)(t.rotation().angle()+_measurement));  

(2)打开/g2o_with_orbslam2/g2o/solvers/eigen/linear_solver_eigen.h 

//typedef Eigen::PermutationMatrix<Eigen::Dynamic, Eigen::Dynamic, SparseMatrix::Index> PermutationMatrix;
改为:
typedef Eigen::PermutationMatrix<Eigen::Dynamic, Eigen::Dynamic, SparseMatrix::StorageIndex> PermutationMatrix;
//typedef Eigen::PermutationMatrix<Eigen::Dynamic, Eigen::Dynamic, int> PermutationMatrix;

5、编译DBoW2

cd ORB_SLAM2_modified/Thirdparty/DBoW2
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make 
#sudo make install

不出意外,应该是已经编译过了的。

6、进入/ORB_SLAM2_modified文件夹

此处可以将CMakeLists.txt进行一定的修改,避免opencv、Eigen等版本引发的错误

CMakeLists.txt

然后进行编译:

mkdir build
cd build
cmake ..
make -j8

 7、用单目/双目/rgbd来做做实验

将数据集以及associate.py,放在 ORB_SLAM2_modified目录下,运行如下命令:

python associate.py rgb.txt depth.txt > associations.txt

执行完毕后可运行示例:

./Example/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt path_to_settings path_to_sequence  path_to_association
例如:
./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yaml Data/rgbd_dataset_freiburg1_desk Data/rgbd_dataset_freiburg1_desk/associations.txt

 这里大家往往会遇到以下几个问题:

(1)无法显示点云图,只显示三色坐标,这里可以先尝试鼠标缩放一下并移动一些视角,若还未显示点云图,多半是你使用了TUM2.yaml和TUM3.yaml,相对于TUM1.yaml末尾少了一句代码(当年太傻,运行到这一步死活出不来就放弃了,哎):

PointCloudMapping.Resolution: 0.01

(2)点云未显示彩色:这套代码我也试了好多遍,缺失在颜色这一块有点问题我未能解决,先推荐另外一个版本,亲测可以显示彩色点云图。

ORB-SLAM2 rgbd稠密地图 (地图可回环)

https://github.com/tiantiandabaojian/ORB-SLAM2_RGBD_DENSE_MAP.git

 

编译的时候不推荐 build.sh 的方式,g2o、DBoW2和主文件依次编译即可。

8、ROS+ORB-SLAM2+RealsenseD435i

8.1 编译ORB-SLAM2

chmod +x build_ros.sh
./build_ros.sh

注意: 如果在编译构建的过程中出现关于boost库的错误"Undefined reference to symbol ‘_ZN5boost6system15system_categoryEv’",请参考 https://github.com/raulmur/ORB_SLAM2/issues/494

8.2 修改ros_rgbd.cc

把rgb_topic和depth_topic订阅话题修改为

 "/camera/color/image_raw";
 "/camera/aligned_depth_to_color/image_raw";
#重新编译:
source /home/hong/ROS/orbslam_map_ws/devel/setup.bash
chmod +x build.sh 
./build.sh
chmod +x build_ros.sh
./build_ros.sh

8.3 启动RGB-D相机 realsense D435i,获得内参矩阵

打开三个终端

roscore
roslaunch realsense2_camera rs_rgbd.launch 
rostopic echo /camera/color/camera_info

运行之后获得:

K就是我们得到的内参矩阵写成了向量模式。
K = [fx 0 cx 0 fy cy 0 0 1 ]
然后就是baseline,根据官方datasheet,
D435i 的baseline为

50mm,bf的值为bf = baseline (in meters) * fx。
根据相机参数得到的D435i.yaml文件

%YAML:1.0

#--------------------------------------------------------------------------------------------
# Camera Parameters. Adjust them!
#--------------------------------------------------------------------------------------------

# Camera calibration and distortion parameters (OpenCV) 
Camera.fx: 605.1199340820312
Camera.fy: 603.6488647460938
Camera.cx: 325.7075500488281
Camera.cy: 245.46426391601562

Camera.k1: 0.0
Camera.k2: 0.0
Camera.p1: 0.0
Camera.p2: 0.0
Camera.p3: 0.0

Camera.width: 640
Camera.height: 480

# Camera frames per second 
Camera.fps: 30.0

# IR projector baseline times fx (aprox.)
# bf = baseline (in meters) * fx, D435i的 baseline = 50 mm 
Camera.bf: 30.  

# Color order of the images (0: BGR, 1: RGB. It is ignored if images are grayscale)
Camera.RGB: 1

# Close/Far threshold. Baseline times.
ThDepth: 40.0

# Deptmap values factor
DepthMapFactor: 1000.0

#--------------------------------------------------------------------------------------------
# ORB Parameters
#--------------------------------------------------------------------------------------------

# ORB Extractor: Number of features per image
ORBextractor.nFeatures: 1000

# ORB Extractor: Scale factor between levels in the scale pyramid 	
ORBextractor.scaleFactor: 1.2

# ORB Extractor: Number of levels in the scale pyramid	
ORBextractor.nLevels: 8

# ORB Extractor: Fast threshold
# Image is divided in a grid. At each cell FAST are extracted imposing a minimum response.
# Firstly we impose iniThFAST. If no corners are detected we impose a lower value minThFAST
# You can lower these values if your images have low contrast			
ORBextractor.iniThFAST: 20
ORBextractor.minThFAST: 7

#--------------------------------------------------------------------------------------------
# Viewer Parameters
#--------------------------------------------------------------------------------------------
Viewer.KeyFrameSize: 0.05
Viewer.KeyFrameLineWidth: 1
Viewer.GraphLineWidth: 0.9
Viewer.PointSize:2
Viewer.CameraSize: 0.08
Viewer.CameraLineWidth: 3
Viewer.ViewpointX: 0
Viewer.ViewpointY: -0.7
Viewer.ViewpointZ: -1.8
Viewer.ViewpointF: 500

PointCloudMapping.Resolution: 0.01
meank: 50
thresh: 2.0

8.4 运行SLAM

roscore
roslaunch realsense2_camera rs_rgbd.launch
rosrun ORB_SLAM21 RGBD Vocabulary/ORBvoc.txt Examples/ROS/ORB_SLAM21/D435i.yaml

注意:这里有一点小细节值得注意,当本地安装有多个ORB-SLAM版本时,记得把 /Examples/ROS 目录下 ORB-SLAM2文件夹重命名,用于区别各版本,这样rosrun的时候,便于区分。

export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/jinrui/ORB-SLAM2_RGBD_DENSE_MAP/Examples/ROS/ORB_SLAM21
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/jinrui/ORBSLAM2_with_pointcloud_map/orbslam2_modified/ORB_SLAM2_modified/Examples/ROS/ORB_SLAM20


 

 

 

 

 

### 回答1: OrbSLAM3是一个单目视觉的实时空间里程计系统。它使用基于极线的特征对相邻帧进行匹配,并利用一个稠密的闭环检测器,检测图像中的循环,以进行重定位和地图更新。OrbSLAM3的主要内容是利用计算机视觉技术来实现实时的三维地图构建和机器人位置估计。 ### 回答2ORB-SLAM3是一种实时视觉定位与建图(SLAM)系统。它是ORB-SLAM系列的最新版本,主要用于无人机、智能车辆、增强现实等领域的定位与建图任务。 ORB-SLAM3的主要内容涵盖了三个关键方面:视觉定位、稠密建图和语义建图。 首先,ORB-SLAM3通过使用摄像头获取的视觉信息,可以进行实时的相机定位。它采用了ORB特征描述符和FAST角点检测算法,快速地提取并匹配图像特征,从而实现相机的位置和姿态的准确估计。 其次,ORB-SLAM3能够进行稠密建图。它利用稀疏的ORB特征点和稠密的深度图像,结合光束法平差(BA)和稠密地图优化算法,生成精确的三维环境地图。 最后,ORB-SLAM3还实现了语义建图的功能。它通过使用深度学习技术,能够对场景中的物体进行识别和分割,从而将语义信息与三维地图进行关联。这样,在定位和导航时,系统可以更好地识别环境中的目标物体,提供更准确的定位和路径规划。 综上所述,ORB-SLAM3主要内容涵盖了实时视觉定位、稠密建图和语义建图。通过这些功能的结合,它能够在不同应用领域中实现高精度的定位与建图任务,为无人机、智能车辆以及增强现实等领域的应用提供了强大的技术支持。 ### 回答3: ORB-SLAM3是一种实时单目视觉SLAM(Simultaneous Localization and Mapping)系统。SLAM是指在未知环境中,通过同时估计相机的位置和构建环境的地图ORB-SLAM3致力于在计算要求较低的设备上实现高质量的SLAM性能。 ORB-SLAM3的主要内容包括特征提取、特征描述、特征匹配、姿态估计、地图更新和闭环检测等步骤。首先,ORB-SLAM3通过使用归一化八叉树(Normalized 8-point Octree)和FAST特征提取算法来提取图像的特征点。然后,通过ORB特征描述子对特征点进行描述,使其能够在后续的特征匹配中进行对应。 在特征匹配阶段,ORB-SLAM3使用最小汉明距离(Hamming distance)来计算特征点之间的相似度,并选择最佳的匹配。接下来,使用RANSAC(Random Sample Consensus)算法对匹配点进行姿态估计,确定相机在三维空间中的位置和姿态。 在地图更新阶段,ORB-SLAM3将新的特征点与已有的地图进行匹配,并更新地图的拓扑结构和地图点位置。同时,ORB-SLAM3还实现了闭环检测功能,通过在不同时间步骤中检测到的相似场景进行匹配,从而检测并纠正可能的漂移误差。 总而言之,ORB-SLAM3是一种基于单目相机实时运行的SLAM系统,通过特征提取、特征描述、特征匹配、姿态估计、地图更新和闭环检测等步骤来同时实现相机定位和地图构建的功能。其主要目标是在计算资源有限的设备上实现高性能的SLAM应用。
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值