原生的Docker并不直接支持可视化,需使用x11进行可视化。
-
安装x11
sudo apt-get install x11-xserver-utils
#下面这个命令每次电脑重启都要运行一次
xhost +
#创建完容器后可以在容器内安装一个时钟测试
apt install xarclock
#运行时钟
xarclock
-
下载ORB-SLAM2源码
#下载ORB-SLAM2
git clone https://github.com/electech6/ORB_SLAM2_detailed_comments.git
-
在ORB-SLAM2文件夹中新建文件夹 3rdparty 存放第三方库
# 在3rdparty目录下载Pangolin(v0.6版本)
cd ORB_SLAM2/3rdparty
git clone https://github.com/stevenlovegrove/Pangolin.git
# 下载eigen
wget https://gitlab.com/libeigen/eigen/-/archive/3.3.8/eigen-3.3.8.zip
# 下载OpenCV3.4.15
wget https://codeload.github.com/opencv/opencv/zip/3.4.15 -O opencv.zip
OpenCV编译会报ippicv错误,前往链接下载ippicv_2020_lnx_intel64_20191018_general.tgz文件,将其放入3rdparty文件夹,参考文章进行修改,重新压缩文件。
# 打开3rdparty/opencv/opencv-3.4.15/3rdparty/ippicv/ippicv.cmake文件
# 将42行的
"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}ippicv/"
# 改为手动下载的ippicv文件的本地路径(也就是将网络下载的模式改为本地文件下载的模式):
"file:/home/wu/ORB_SLAM2_Docker/3rdparty/ippicv_2020_lnx_intel64_20191018_general.tgz" #(仅供参考,根据自己的路径填写)
-
ORB_SLAM2下创建Dockerfile文件
# 镜像基于 Ubuntu 20.04 操作系统,同时包含了 CUDA 和 OpenGL 的开发环境
FROM nvidia/cudagl:11.2.1-devel-ubuntu20.04
# 设置系统将以非交互模式运行
ARG DEBIAN_FRONTEND=noninteractive
# 设置时区
ENV TZ=Asia/Shanghai
RUN apt-get update
RUN apt-get install -y cmake git libgtk2.0-dev \
libgtk-3-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev python-dev python-numpy \
libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev wget gdb vim zip \
libglu1-mesa-dev freeglut3-dev mesa-common-dev libgl1-mesa-dev libglew-dev
# Pangolin
COPY 3rdparty/Pangolin-0.6 /tmp/Pangolin
RUN cd /tmp/Pangolin && mkdir build && cd build && cmake .. \
&& make -j$(nproc) && make install \
&& cd / && rm -rf /tmp/Pangolin
# Eigen
COPY 3rdparty/eigen-3.3.8.zip /opt/eigen-3.3.8.zip
RUN cd /opt && unzip eigen-3.3.8.zip && cd eigen-3.3.8 && mkdir build && cd build \
&& cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=RELEASE .. \
&& make install
# OpenCV
ENV OPENCV 3.4.15
COPY 3rdparty/opencv.zip /opt/opencv.zip
RUN cd /opt && unzip opencv.zip \
&& cd opencv-$OPENCV && mkdir build && cd build \
&& cmake -D CMAKE_BUILD_TYPE=RELEASE -D WITH_CUDA=OFF -D WITH_OPENGL=OFF .. \
&& make -j$(nproc) && make install \
&& rm -rf /opt/* && ldconfig
-
在ORB_SLAM2下打开终端,编译镜像
sudo docker build -t orbslam2 .
编译完成
-
利用编译好的镜像创建容器并运行 (ORB-SLAM2文件夹终端下)
docker run --gpus all -it --rm\ -v /tmp/.X11-unix:/tmp/.X11-unix:rw \ -e DISPLAY=$DISPLAY \ -v ${PWD}:${PWD} \ -v ${HOME}/Dataset:${HOME}/Dataset \ -w ${PWD} \ --name orbslam2 \ orbslam2
-
--gpus all
:使用 NVIDIA GPU 支持。这表明容器将访问所有可用的 GPU。 -
-it
:以交互式模式运行容器。 -
--rm
:当容器停止时自动删除容器实例。 -
-v /tmp/.X11-unix:/tmp/.X11-unix:rw
:将 X11 UNIX 套接字映射到容器内,允许 GUI 应用程序显示到主机的 X11 服务器。 -
-e DISPLAY=$DISPLAY
:设置 DISPLAY 环境变量,使容器内的应用程序能够连接到主机的 X11 服务器。 -
-v ${PWD}:${PWD}
:将当前工作目录映射到容器内相同的路径。 -
-v ${HOME}/Dataset:${HOME}/Dataset
:将主机上的数据集目录映射到容器内相同的路径。 -
-w ${PWD}
:设置容器的工作目录为当前工作目录。 -
--name orbslam2
:为容器指定名称为 "orbslam2"。 -
orbslam2gl
:指定要运行的镜像名称。
-
注意,${HOME}/Dataset
为数据集文件,要换成自己电脑上的。
进入运行的容器
-
在容器中对ORB-SLAM2源码进行编译
chmod +x build.sh
./build.sh
编译时会报错,参考 orbslam2编译错误 - Ubuntu 20.04 ros noetic 进行修改,再次编译,成功!
-
使用Kitti数据集测试
./Examples/Monocular/mono_kitti Vocabulary/ORBvoc.txt Examples/Monocular/KITTI00-02.yaml ../Dataset/Kitta/data_odometry_gray/dataset/sequences/00
参考
ORB-SLAM2 docker file编译
使用Docker安装ORB_SLAM2
[[gpu]]问题记录解决
关于Docker文件
docker存放镜像路径(docker镜像默认存放位置)
docker的overlay2
【容器文件系统】文章来源:https://www.toymoban.com/news/detail-829530.html
docker 的/var/lib/docker/overlay2文件干啥的 文章来源地址https://www.toymoban.com/news/detail-829530.html
到了这里,关于Ubuntu20.04 + Docker + ORB-SLAM2的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!