环境:VMware 17.3Pro Ubuntu22.04
一、配置ORB-SLAM3:
流程记录:
1.更换阿里云 APT 软件源,之后效果快得起飞
-
第一阶段,有一条命令优化(某个apt库需要下载)
-
编译安装Opencv:优化了命令配置 make -j4
-
ORB-SLAM3的编译,使用了12GB的分配+make -j2
参考:此博客
二、下载数据集,运行算法
-
TUM-VI数据集,我是通过WSL2终端命令下载的,之后复制到VMware。运行的时候需要修改源码来可视化,参考:此博客
-
完整12GB的Euro数据集已经下载,同样是终端下载。这个数据集的运行效果不佳。
-
命令:
进入项目根目录
cd ~/Dev/ORB_SLAM3
确保程序有执行权限
chmod +x ./Examples/Stereo/stereo_euroc
Euroc MH01_easy 数据集:
运行双目(完整运行)
./Examples/Stereo/stereo_euroc
./Vocabulary/ORBvoc.txt
./Examples/Stereo/EuRoC.yaml
~/Datasets/EuRoc/MH01
./Examples/Stereo/EuRoC_TimeStamps/MH01.txt
dataset-MH01_stereo运行单目(无画面)
./Examples/Monocular/mono_euroc
./Vocabulary/ORBvoc.txt
./Examples/Monocular/EuRoC.yaml
~/Datasets/EuRoc/MH01
./Examples/Monocular/EuRoC_TimeStamps/MH01.txt
dataset-MH01_mono运行单目+惯性传感器(初始化失败、卡顿)
./Examples/Monocular-Inertial/mono_inertial_euroc
./Vocabulary/ORBvoc.txt
./Examples/Monocular-Inertial/EuRoC.yaml
~/Datasets/EuRoc/MH01
./Examples/Monocular-Inertial/EuRoC_TimeStamps/MH01.txt
dataset-MH01_monoi运行双目+惯性传感器(无画面)
赋予执行权限
chmod +x ./Examples/Stereo-Inertial/stereo_inertial_euroc
运行命令
./Examples/Stereo-Inertial/stereo_inertial_euroc
./Vocabulary/ORBvoc.txt
./Examples/Stereo-Inertial/EuRoC.yaml
~/Datasets/EuRoc/MH01
./Examples/Stereo-Inertial/EuRoC_TimeStamps/MH01.txt
dataset-MH01_stereoiTUM-VI数据集
1. room1_512数据集
单目:正常跑通
chmod +x ./Examples/Monocular/mono_tum_vi
./Examples/Monocular/mono_tum_vi
./Vocabulary/ORBvoc.txt
./Examples/Monocular/TUM-VI.yaml
~/Datasets/TUM_VI/dataset-room1_512_16/mav0/cam0/data
./Examples/Monocular/TUM_TimeStamps/dataset-room1_512.txt
dataset-room1_512_mono2. corridor1_512数据集
单目:正常跑通
./Examples/Monocular/mono_tum_vi
Vocabulary/ORBvoc.txt
Examples/Monocular/TUM-VI.yaml
~/Datasets/TUM_VI/dataset-corridor1_512_16/mav0/cam0/data
Examples/Monocular/TUM_TimeStamps/dataset-corridor1_512.txt
dataset-corridor1_512_mono单目+惯性器:正常跑通
./Examples/Monocular-Inertial/mono_inertial_tum_vi
Vocabulary/ORBvoc.txt
Examples/Monocular-Inertial/TUM-VI.yaml
~/Datasets/TUM_VI/dataset-corridor1_512_16/mav0/cam0/data
Examples/Monocular-Inertial/TUM_TimeStamps/dataset-corridor1_512.txt
Examples/Monocular-Inertial/TUM_IMU/dataset-corridor1_512.txt
dataset-corridor1_512_monoi双目+惯性:正常跑通
./Examples/Stereo-Inertial/stereo_inertial_tum_vi
./Vocabulary/ORBvoc.txt
./Examples/Stereo-Inertial/TUM-VI.yaml
~/Datasets/TUM_VI/dataset-corridor1_512_16/mav0/cam0/data
~/Datasets/TUM_VI/dataset-corridor1_512_16/mav0/cam1/data
./Examples/Stereo-Inertial/TUM_TimeStamps/dataset-corridor1_512.txt
./Examples/Stereo-Inertial/TUM_IMU/dataset-corridor1_512.txt
dataset-corridor1_512_stereoi
三、EVO评估算法性能
-
安装,参考:此博客
-
评估:
(1) 这一部分我主要评估TUM-VI 的corridor1数据集的运行结果。
参考:此博客,也是遇到了同样的问题。
首先是安装缺失的包;
关闭纳秒解析:
evo_config set euroc_use_nanoseconds false
然后因为ORB-SLAM3 输出是 TUM 格式 (t, x, y, z, qx, qy, qz, qw),TUM-VI data.csv 是 EuRoC 格式 (t, x, y, z, qw, qx, qy, qz),编写脚本转化数据,转为秒、TUM格式:
import numpy as np
def fix_gt():
with open('corridor_gt_raw.csv', 'r') as f:
lines = f.readlines()
with open('gt_final.tum', 'w') as f:
for line in lines:
if line.startswith('#'): continue
p = line.replace(',', ' ').split()
if len(p) < 8: continue
# 将纳秒转为秒,保留 9 位小数
ts = float(p[0]) / 1e9
f.write(f"{ts:.9f} {p[1]} {p[2]} {p[3]} {p[5]} {p[6]} {p[7]} {p[4]}\n")
def fix_res():
with open('f_dataset-corridor1_512_stereoi.txt', 'r') as f:
lines = f.readlines()
with open('res_final.tum', 'w') as f:
for line in lines:
p = line.split()
if len(p) < 8: continue
# 将纳秒转为秒,保留 9 位小数
ts = float(p[0]) / 1e9
f.write(f"{ts:.9f} {p[1]} {p[2]} {p[3]} {p[4]} {p[5]} {p[6]} {p[7]}\n")
if __name__ == "__main__":
fix_gt()
fix_res()
print("转换完成:时间戳已转为秒(TUM标准格式)")
(2) 运行命令
# 绘制轨迹
evo_traj tum res_final.tum --ref=gt_final.tum -p --plot_mode xyz
# 计算APE
evo_ape tum gt_final.tum res_final.tum -va -p --align --t_max_diff 0.1
# 保存轨迹png
evo_traj tum res_final.tum --ref=gt_final.tum --align -p --save_plot ~/Datasets/Output/trajectory_comparison.png
# 保存APE结果图像
evo_ape tum gt_final.tum res_final.tum -va --align --t_max_diff 0.1 --save_plot ~/Datasets/Output/my_ape_result.png
# 保存RPE结果图像
evo_rpe tum gt_final.tum res_final.tum -va -p --align --t_max_diff 0.1 -d 1.0 -u m --save_plot ./rpe_result.png
# 保存APE的评估数据到zip
evo_ape tum gt_final.tum res_final.tum -va --align --t_max_diff 0.1 --save_results ~/Datasets/Output/stereo_inertial.zip
# 评估 RPE 并保存结果到 zip
evo_rpe tum gt_final.tum res_final.tum -va --align --t_max_diff 0.1 -d 1.0 -u m --save_results ~/Datasets/Output/stereo_inertial_rpe.zip