引言
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的探索之路上越走越远!