从零到一:ORB-SLAM3室内场景实践全记录

引言

  
ORB-SLAM3作为当前最先进的视觉SLAM框架之一,支持单目、双目、RGB-D和视觉惯性传感器,广泛应用于机器人导航、AR/VR等领域。本文以Ubuntu系统为例,详细介绍如何从环境配置到最终可视化,完整运行ORB-SLAM3的室内场景Demo,并输出轨迹图与点云图。  

一、环境准备 
1. 系统与依赖项 
操作系统:Ubuntu 20.04 LTS(兼容18.04及以上)  
依赖安装:  
 


  sudo apt-get install -y build-essential cmake git libeigen3-dev \
  libpangolin-dev libopencv-dev libboost-all-dev libssl-dev \
  libsuitesparse-dev libglew-dev libpython2.7-dev ffmpeg
   

注意:  
  若需使用ROS,安装对应版本(如Noetic):  
      

sudo apt install ros-noetic-desktop-full ros-noetic-usb-cam

OpenCV推荐3.4.16或4.5.x版本,需源码编译并配置环境变量。  

二、编译ORB-SLAM3  
1. 克隆与代码调整  
 

git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git
cd ORB_SLAM3



  适配OpenCV版本:  
  修改`CMakeLists.txt`:  
 

find_package(OpenCV 3 REQUIRED)  # 若使用OpenCV 3.x


  
  修复编译错误:  
  在`src/KannalaBrandt8.cpp`中,将除法运算`1/xxx`改为`* (1.0/xxx)`。  

2. 编译主程序与ROS节点  
 

chmod +x build.sh && ./build.sh        # 编译主程序
./build_ros.sh                         # 编译ROS节点(可选)

  
编译问题排查:  
- 若内存不足,增加swap空间(建议16GB):  
  
 

sudo fallocate -l 16G /swapfile && sudo chmod 600 /swapfile
  sudo mkswap /swapfile && sudo swapon /swapfile

三、数据集准备与配置  
1. 数据集选择 
   EuRoC MAV:适合视觉惯性SLAM,包含复杂室内场景(如`MH_01_easy`)。  
   TUM RGB-D:适用于RGB-D相机,提供深度信息。  

2. 数据集下载与路径设置**  
 

wget http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/machine_hall/MH_01_easy/MH_01_easy.zip

unzip MH_01_easy.zip -d ORB_SLAM3/Datasets/


确保数据集路径不含空格或特殊字符。  

3. 配置文件修改  
编辑`Examples/Monocular/EuRoC.yaml`:  
  yaml

Camera.fps: 20                  # 与数据集帧率一致
Camera.bf: 40.0                 # 双目基线参数(单目可忽略)


四、运行与结果可视化  
1. 非ROS环境运行  
 

./Examples/Monocular/mono_euroc \
  ./Vocabulary/ORBvoc.txt \
  ./Examples/Monocular/EuRoC.yaml \
  ./Datasets/MH_01_easy \
  ./Examples/Monocular/EuRoC_TimeStamps/MH01.txt \
  output_trajectory


     输出文件:  
  - `output_trajectory.txt`:相机轨迹(时间戳+位姿)。  
  - `KeyFrameTrajectory.txt`:关键帧轨迹。  

2. ROS环境运行(以单目为例)  
 

roscore &  # 后台启动ROS
rosrun ORB_SLAM3 Mono ./Vocabulary/ORBvoc.txt ./Examples/Monocular/EuRoC.yaml
rosbag play MH_01_easy.bag /cam0/image_raw:=/camera/image_raw


  

3. 可视化工具  

使用 evo 工具(一个用于 SLAM 轨迹评估的工具)来可视化轨迹。

安装evo:

pip install evo --upgrade --no-binary evo

可视化轨迹:

evo_traj tum f_output_trajectory.txt --plot

五、结果评估与优化 
1. 轨迹精度评估
使用EVO工具对比估计轨迹与真值:  
 

evo_traj tum output_trajectory.txt --ref=ground_truth.txt -p --plot_mode=xy



输出指标:绝对轨迹误差(ATE)、相对位姿误差(RPE)。  

2. 点云后处理
MeshLab/CloudCompare:导入PLY文件,进行滤波、配准等操作。  
Python可视化:  
  
 

import open3d as o3d
  pcd = o3d.io.read_point_cloud("map_points.ply")
  o3d.visualization.draw_geometries([pcd])

六、常见问题与解决方案 
1. OpenCV版本冲突:  
   - 现象:`undefined reference to cv::imshow`。  
   - 解决:确认CMake中`OpenCV_DIR`指向正确路径,重新编译。  

2. ROS话题不匹配:  
   - 现象:ORB-SLAM3未接收图像数据。  
   - 解决:调整`rosbag play`话题名称,如`/camera/image_raw:=/orb_slam3/image`。  

3. 内存不足导致编译失败:  
   - 解决:增加swap空间或减少编译线程(`make -j4`)。  

七、进阶方向  
1. 多传感器融合:结合IMU数据运行`Examples/Monocular-Inertial/mono_inertial_euroc`。  
2. 自定义相机参数:修改YAML文件适配实际设备内参。  
3. 实时摄像头输入:通过USB摄像头或ROS驱动实时运行SLAM。  

结语  
通过本文,读者可完整掌握ORB-SLAM3的配置、运行与结果分析流程。无论是学术研究还是工业应用,ORB-SLAM3均为视觉SLAM领域的强大工具。建议进一步阅读源码与论文,探索其多线程优化、地图重用等高级特性。  

源码与参考:  
- [ORB-SLAM3 GitHub](https://github.com/UZ-SLAMLab/ORB_SLAM3)  
- [EVO轨迹评估工具](https://github.com/MichaelGrupp/evo)  

动手实践,方得真知。愿你在SLAM的探索之路上越走越远!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值