Orbslam3
参考:https://blog.csdn.net/holly_Z_P_F/article/details/118031317
前置
# 加一条源
nano /etc/apt/sources.list
# 文件末尾添加
deb http://security.ubuntu.com/ubuntu xenial-security main
# 更新
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install python-pip git gcc g++ make cmake mlocate build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff4.dev libswscale-dev libjasper-dev libssl-dev zip libpython2.7-dev python-tk -y
pip install --upgrade evo
Pangolin
官网:https://github.com/stevenlovegrove/Pangolin
cd ~/code && git clone --recursive https://github.com/stevenlovegrove/Pangolin.git
接着我们需要手动安装一个catch2
cd ~/code && git clone https://github.com/catchorg/Catch2.git
cd Catch2 && cmake -Bbuild -H. -DBUILD_TESTING=OFF
sudo cmake --build build/ --target install
之后再去install_prerequisites.sh把PKGS_RECOMMENDED+=(libjpeg-dev libpng-dev catch2)改为PKGS_RECOMMENDED+=(libjpeg-dev libpng-dev)
cd ~/code/Pangolin && nano scripts/install_prerequisites.sh
修改完成后执行安装pangolin
./scripts/install_prerequisites.sh recommended
mkdir build && cd build
cmake ..
cmake --build .
OpenCV
官网:https://opencv.org/releases/
下载3.4.3版本的sources
cd ~/code && curl -L -o opencv-3.4.3.zip https://github.com/opencv/opencv/archive/3.4.3.zip
unzip opencv-3.4.3.zip && cd opencv-3.4.3
mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
make -j$(nproc)
sudo make install
配置环境
#添加OpenCV库路径到系统动态链接库配置文件
sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
#更新系统动态链接库
sudo ldconfig
如果sudo ldconfig 报错libcuda.so.1 is not a symbolic link,参考这个
# 首先在Windows文件资源管理器中导航到C:\Windows\System32\lxss\lib目录,并删除libcuda.so和libcuda.so.1文件
# 管理员权限打开PowerShell,然后打开WSL
cd /mnt/c/Windows/System32/lxss/lib
sudo ln -s libcuda.so.1.1 libcuda.so.1
sudo ln -s libcuda.so.1.1 libcuda.so
然后执行下面命令
# 编辑Bash配置文件
sudo nano /etc/bash.bashrc
# 在配置文件中末尾添加PKG_CONFIG_PATH变量
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
wsl里执行更新locate数据库比较慢
sudo nano /etc/updatedb.conf
# 找到PRUNEPATHS行,添加/mnt
PRUNEPATHS="/tmp /var/spool /media /home/.ecryptfs /mnt"
# 重新加载Bash配置
source /etc/bash.bashrc
# 更新locate数据库
sudo updatedb
# 检查安装的OpenCV版本
pkg-config --modversion opencv
Eigen3
#github有个mirror,版本3.3.4
cd ~/code && git clone https://github.com/eigenteam/eigen-git-mirror
#安装
cd eigen-git-mirror
mkdir build && cd build
cmake ..
sudo make install
安装后,头文件安装在/usr/local/include/eigen3/
boost
#下载boost_1_75_0.tar.gz
cd ~/code && curl -L -o boost_1_75_0.tar.gz https://boostorg.jfrog.io/artifactory/main/release/1.75.0/source/boost_1_75_0.tar.gz
tar -xzvf boost_1_75_0.tar.gz && cd boost_1_75_0
sudo ./bootstrap.sh
sudo ./b2 install
ORBSLAM3
cd ~/code && git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ORB_SLAM3
cd ORB_SLAM3 && chmod +x build.sh
修改ORB_SLAM3的CMakeLists.txt文件
# 打开文件
nano CMakeLists.txt
# 添加这行代码
add_compile_options(-std=c++14)
同时找到下面这个位置并修改
#修改前
LIST(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules)
find_package(OpenCV 4.4)
if(NOT OpenCV_FOUND)
message(FATAL_ERROR "OpenCV > 4.4 not found.")
endif()
#修改后:把(OpenCV 4.4)改为(OpenCV 3 REQUIRED)
LIST(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules)
find_package(OpenCV 3 REQUIRED)
if(NOT OpenCV_FOUND)
message(FATAL_ERROR "OpenCV > 4.4 not found.")
endif()
对EUROC数据集出现可视化界面,需要对Examples/Monocular/mono_euroc.cc这个文件第83行进行修改
nano Examples/Monocular/mono_euroc.cc
#将false改为true,这是修改后的样子
ORB_SLAM3::System SLAM(argv[1],argv[2],ORB_SLAM3::System::MONOCULAR, true);
./build.sh
同时为了加快速度可以修改build.sh代码,替换所有make -j为make -j8,这个会开启8线程
如果之后对代码有所修改,都需要重新编译一下./build.sh
数据集测试及评估
Examples/Monocular文件说明
YAML配置文件包含了相应数据集的相机内参、图像路径等配置信息。
- EuRoC.yaml: 用于配置EuRoC数据集的参数文件。
- EuRoC_TimeStamps: 包含EuRoC数据集各序列的时间戳文件。
- KITTI00-02.yaml: 用于配置KITTI数据集的序列00到02的参数文件。
- KITTI03.yaml: 用于配置KITTI数据集的序列03的参数文件。
- KITTI04-12.yaml: 用于配置KITTI数据集的序列04到12的参数文件。
- RealSense_D435i.yaml: 用于配置RealSense D435i摄像头的参数文件。
- RealSense_T265.yaml: 用于配置RealSense T265摄像头的参数文件。
- TUM1.yaml: 用于配置TUM RGB-D数据集的序列1的参数文件。
- TUM2.yaml: 用于配置TUM RGB-D数据集的序列2的参数文件。
- TUM3.yaml: 用于配置TUM RGB-D数据集的序列3的参数文件。
- TUM_VI.yaml: 用于配置TUM VI数据集的参数文件。
- TUM_TimeStamps: 包含TUM数据集各序列的时间戳文件。
C++源文件包含了处理不同数据集的主要实现代码。
- mono_euroc.cc: 用于处理EuRoC数据集的源代码文件。
- mono_kitti.cc: 用于处理KITTI数据集的源代码文件。
- mono_realsense_D435i.cc: 用于处理RealSense D435i摄像头数据的源代码文件。
- mono_realsense_t265.cc: 用于处理RealSense T265摄像头数据的源代码文件。
- mono_tum.cc: 用于处理TUM RGB-D数据集的源代码文件。
- mono_tum_vi.cc: 用于处理TUM VI数据集的源代码文件。
可执行文件是通过编译上述源文件生成的可执行文件。
- mono_euroc: 用于运行EuRoC数据集的可执行文件。
- mono_kitti: 用于运行KITTI数据集的可执行文件。
- mono_realsense_D435i: 用于运行RealSense D435i摄像头数据的可执行文件。
- mono_realsense_t265: 用于运行RealSense T265摄像头数据的可执行文件。
- mono_tum: 用于运行TUM RGB-D数据集的可执行文件。
- mono_tum_vi: 用于运行TUM VI数据集的可执行文件。
EUROC
官网下载地址:https://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets
或者下载我网盘里的:euroc | xiaoliu资源站 (liu66.cc)
以MH01为例在ORBSLAM3目录输入下面命令
mkdir -p ~/result/orbslam3/Euroc/MH01
./Examples/Monocular/mono_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular/EuRoC.yaml ~/dataset/EUROC/MH01 ./Examples/Monocular/EuRoC_TimeStamps/MH01.txt > KeyFrameTrajectory.txt
mv KeyFrameTrajectory.txt ~/result/orbslam3/Euroc/MH01/
EROUC数据集ground truth保存在MH01/mav0/state_groundtruth_estimate0/data.csv
# 使用evo工具将EuRoC数据集的ground truth转换为TUM格式
cd ~/result/orbslam3/Euroc/MH01
evo_traj euroc ~/dataset/EUROC/MH01/mav0/state_groundtruth_estimate0/data.csv --save_as_tum
结果与ground truth两者时间戳不匹配,我们需要写个python脚本进行转换,注意Ubuntu18.04的python系统版本为2.7,所以下面脚本与python3存在些不同
nano change.py
# -*- coding: utf-8 -*-
import re
# 读取KeyFrameTrajectory.txt文件
with open("KeyFrameTrajectory.txt", "r") as f:
lines = f.readlines()
# 打开或创建一个新文件result.txt用于写入转换后的内容
with open("result.txt", "w") as f:
for line in lines:
fields = line.split() # 将每一行按空格分割成多个字段
new_fields = []
for field in fields:
new_field = "{:.9e}".format(float(field)) # 将每个字段转换为科学计数法
new_fields.append(new_field)
new_line = " ".join(new_fields) + "\n" # 将转换后的字段重新组合成一行
corrected_line = re.sub(r'e\+18', 'e+09', new_line) # 替换科学计数法的指数部分
f.write(corrected_line) # 写入新文件
python change.py
转换后再进行评估
# 轨迹对比
evo_traj tum result.txt --ref=data.tum -p --plot_mode=xyz --align --correct_scale --save_plot traj_plot.pdf
# ATE
evo_ape tum data.tum result.txt -va --plot --plot_mode xyz --save_plot ape_plot.pdf --save_results ape_results.zip
# RPE
evo_rpe tum data.tum result.txt -va --plot --plot_mode xyz --save_plot rpe_plot.pdf --save_results rpe_results.zip
KITTI
下载地址:https://www.cvlibs.net/datasets/kitti/eval_odometry.php,下那个22GB的就行。
以序列00为例我们对KITTI数据集GT进行转换
# 下载转换文件
cd ~/dataset/KITTI/poses && curl -o kitti_poses_and_timestamps_to_trajectory.py https://raw.githubusercontent.com/MichaelGrupp/evo/master/contrib/kitti_poses_and_timestamps_to_trajectory.py
# 转换序列00
python kitti_poses_and_timestamps_to_trajectory.py ~/dataset/KITTI/poses/00.txt ~/dataset/KITTI/sequences/00/times.txt ~/dataset/KITTI/poses/00_tum.txt
在ORBSLAM3目录输入下面命令生成轨迹文件
mkdir -p ~/result/orbslam3/KITTI/00
./Examples/Monocular/mono_kitti ./Vocabulary/ORBvoc.txt ./Examples/Monocular/KITTI00-02.yaml ~/dataset/KITTI/sequences/00/
mv KeyFrameTrajectory.txt ~/result/orbslam3/KITTI/00
cd ~/result/orbslam3/KITTI/00
# 轨迹对比
evo_traj tum KeyFrameTrajectory.txt --ref=/root/dataset/KITTI/poses/00_tum.txt -p --plot_mode=xyz --align --correct_scale --save_plot traj_plot.pdf
# ATE
evo_ape tum ~/dataset/KITTI/poses/00_tum.txt KeyFrameTrajectory.txt -va --plot --plot_mode xyz --save_plot ape_plot.pdf --save_results ape_results.zip
# RPE
evo_rpe tum ~/dataset/KITTI/poses/00_tum.txt KeyFrameTrajectory.txt -va --plot --plot_mode xyz --save_plot rpe_plot.pdf --save_results rpe_results.zip
评论区