文章目录
0 废话先行
人生苦短,我用python!如果所有事都像python那么简单易上手,这个世界的人将有狸花猫的一丢丢可爱!
基于某些原因,对C++
和SLAM
一窃不通的牛马不得不和ORB-SLAM2
干上了,通常是白天
在公司当牛马,晚上+凌晨+周末
再给**
当牛马搞ORB-SLAM2
,放假也不得闲,搞得好几次都差点崩溃了。特别是某次夜里两点多重装双系统,装完身心俱疲的睡觉去,第二天醒来时突然发现,天塌了,拿错移动硬盘了,盘里将近4T
的东西全部没了,什么都没了,那一刻的恨真如江水滔滔不绝…
后面终于发现,不需要折腾双系统,也不用vmware
或virtualbox
虚拟机,直接使用docker
即可搞定,妈妈再不用担心我格式化错盘,重新搞个新环境也是分分钟的事,不用再折腾老半天,何宝荣的不如由头来过
的梦想也终可实现,牛棚里似乎也有那么一点点光亮…也希望这篇文章给折腾ORB-SLAM2
的小白们节省一点点可贵的时间!
1 Prepare
- 本文基于
win11
- 需安装
Docker Desktop
Docker Desktop
可以配置国内源,不然image
要么下老半天,要么根本下不了。下面这两个国内源,目前还能正常使用。"registry-mirrors": [ "https://docker.1ms.run", "https://docker.xuanyuan.me" ]
- 需开启
WSL
,并在Docker Desktop
中开启Use the WSL 2 based engine
,以便于可以在WSL
操作docker
。
2 Container
以下操作都是在WSL中进行
2.1 下载image
docker pull nvidia/cuda:11.0.3-devel-ubuntu18.04
2.2 允许访问X11
临时允许本地 root 用户(包括 Docker 容器内的进程)访问宿主机的 X11 显示服务(图形界面)
# 在宿主机上执行
sudo apt install x11-xserver-utils
xhost +local:root
# 还应该设置以下参数,以支持容器内的GUI应用能在宿主机上弹出可视化窗口
# -v /tmp/.X11-unix:/tmp/.X11-unix
# -e DISPLAY=$DISPLAY
# -e QT_X11_NO_MITSHM=1
# --ipc=host
2.3 运行Container
docker run -d \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v /mnt/e/docker-ws/shared/:/shared \
-e DISPLAY=$DISPLAY \
-e QT_X11_NO_MITSHM=1 \
--ipc=host \
--name ub18-orb-slam2 \
nvidia/cuda:11.0.3-devel-ubuntu18.04 \
tail -f /dev/null
-v /mnt/e/docker-ws/shared/:/shared
在宿主机
上的E盘
上创建/docker-ws/shared
目录,挂载到container
中,便于文件交互
2.4 进入container
docker exec -it ub18-orb-slam2 /bin/bash
2.5 查看、启动、停止container
docker ps -a
docker statr <container-name>
docker stop <container-name>
3 配置
3.1 更换国内源
# 备份
cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 换源
sed -i 's|http://.*archive.ubuntu.com|https://mirrors.aliyun.com|g' /etc/apt/sources.list
sed -i 's|http://.*security.ubuntu.com|https://mirrors.aliyun.com|g' /etc/apt/sources.list
# 更新软件列表
apt update
3.2 安装依赖
apt install -y vim wget git cmake pkg-config build-essential unzip sudo
4 安装eigen3
sudo apt install libeigen3-dev -y
pkg-config --modversion eigen3
3.3.4
5 安装Pangolin 0.6
# 安装依赖
sudo apt-get install \
libgl1-mesa-dev \
libglew-dev \
libboost-dev \
libboost-thread-dev \
libboost-filesystem-dev -y
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin/
# 切换到v0.6版本
git checkout v0.6
git branch
- (HEAD detached at v0.6)
master
# 编译安装
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j$(($(nproc) - 2))
sudo make install
# 测试
cd ../examples/HelloPangolin/
mkdir build
cd build/
cmake ..
make
# 运行弹出图形化界面
./HelloPangolin
6 安装opencv 3.4.15
sudo apt-get update
sudo apt-get install -y software-properties-common
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt-get update
# 2. 安装基础编译工具
apt-get install -y \
build-essential \
cmake \
git \
pkg-config
# 3. 安装图像I/O依赖库
apt-get install -y \
libjpeg-dev \
libpng-dev \
libtiff-dev \
libjasper1 \
libjasper-dev
# 4. 安装视频I/O和编解码库
apt-get install -y \
libavcodec-dev \
libavformat-dev \
libswscale-dev \
libv4l-dev \
libx264-dev \
libxvidcore-dev
#5. 安装GUI依赖(OpenCV 3.x默认使用GTK2)
apt-get install -y \
libgtk2.0-dev \
gtk2-engines-pixbuf
#6. 安装Python3支持
apt-get install -y \
python3-dev \
python3-numpy
#7. 安装并行计算和优化库
apt-get install -y \
libtbb-dev \
libeigen3-dev
#8. 安装其他功能模块依赖
apt-get install -y \
libdc1394-22-dev \
libglew-dev \
libopenexr-dev
wget -O opencv-3.4.15.zip https://github.com/opencv/opencv/archive/refs/tags/3.4.15.zip
unzip opencv-3.4.15.zip
cd opencv-3.4.15
# mkdir -p .cache/ippicv
# cp ~/ws/7421de0095c7a39162ae13a6098782f9-ippicv_2020_lnx_intel64_20191018_general.tgz ~/ws/opencv-3.4.15/.cache/ippicv/
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE ..
make -j$(($(nproc) - 2)) # 使用多线程加速
sudo make install
sudo ldconfig
pkg-config --modversion opencv
cd ../samples/cpp/example_cmake
cmake .
make
./opencv_example # 弹出窗口
7 下载RGB与Depth图像相关联的python脚本
7.1 下载
wget https://svncvpr.in.tum.de/cvpr-ros-pkg/trunk/rgbd_benchmark/rgbd_benchmark_tools/src/rgbd_benchmark_tools/associate.py
7.2 安装pip和numpy,选择python2或python3
7.2.1 python2
sudo apt install python-pip -y
pip --version
pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
7.2.2 python3
sudo apt install python3-pip -y
pip3 --version
pip3 install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
7.3 python3修改associate.py代码
86 # first_keys = first_list.keys()
87 # second_keys = second_list.keys()
# 修改成以下内容
86 first_keys = list(first_list.keys())
87 second_keys = list(second_list.keys())
7.4 关联rgb和depth
cd rgbd_dataset_freiburg3_walking_xyz
# python2
# python ../associate.py rgb.txt depth.txt > ass.txt
# python3
python3 ../associate.py rgb.txt depth.txt > ass.txt
8 编译安装ORB-SLAM2
8.1 下载
cd ~/ws
git clone https://github.com/raulmur/ORB_SLAM2.git
8.2 修改配置
进入到ORB_SLAM2
目录下
cd ORB_SLAM2
8.2.1 去掉-march=native
,关闭所有编译警告
sed -i 's/-march=native//g' CMakeLists.txt
sed -i 's/-march=native//g' Thirdparty/DBoW2/CMakeLists.txt
sed -i 's/-march=native//g' Thirdparty/g2o/CMakeLists.txt
sed -i '1 a\add_definitions(-w)' CMakeLists.txt
sed -i '1 a\add_definitions(-w)' Thirdparty/DBoW2/CMakeLists.txt
sed -i '1 a\add_definitions(-w)' Thirdparty/g2o/CMakeLists.txt
8.2.2 去掉版本号
vim CMakeLists.txt
# 最终结果
find_package(OpenCV QUIET)
find_package(Eigen3 REQUIRED)
8.2.3 编译若报'usleep' was not declared in this scope
// vim include/System.h
#include<unistd.h> // 增加
#include<string>
8.3 编译
bash build.sh
8.4 运行TUM数据
8.4.1 TUM数据集下载
- https://cvg.cit.tum.de/data/datasets/rgbd-dataset/download
- 将数据集放到
~/ws/
下并解压
8.4.2 运行单目相机图像
-
解压:
cd ~/ws tar -zxvf rgbd_dataset_freiburg1_xyz.tgz
-
运行
cd ~/ws/ORB_SLAM2 Examples/Monocular/mono_tum \ Vocabulary/ORBvoc.txt \ Examples/Monocular/TUM1.yaml \ ~/ws/rgbd_dataset_freiburg1_xyz
8.4.3 运行深度相机图像
cd ~/ws/ORB_SLAM2
Examples/RGB-D/rgbd_tum \
Vocabulary/ORBvoc.txt \
Examples/RGB-D/TUM1.yaml \
~/ws/rgbd_dataset_freiburg1_xyz \
Examples/RGB-D/associations/fr1_xyz.txt