基于VSCODE,在DOCKER内运行ORBSLAM2

本文详细介绍了Docker的基本概念、安装与使用,重点讲解了如何利用Docker快速部署和管理ORBSLAM2项目,涉及常用指令、容器与镜像的区别,以及如何在VSCode中集成Docker。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、为什么要用docker安装

1.1docker是啥

自我理解:如果要运行某一个开源库前需要安装太多的依赖,一个一个安装浪费时间且麻烦,docker将相应的依赖放在一个容器里,类似虚拟机,但是虚拟机会安装一些我不需要的东西。所以docker更轻量,docker里的容器可以随便删除。

1.2docker常用指令

1.2.1首先自行百度安装docker

1.2.2docker常见命令

查看所有正在运行的容器:
docker ps
查看所有容器(包括已停止的):
docker ps -a  --size
-a 查看所有容器 --size 显示容器大小

创建并启动容器:
docker run -it 镜像名
或者指定容器的名称:
docker run --name my_container -d my_image
这里,-it 表示交互模式运行容器,并分配一个伪终端;--name 用于指定容器的名称;-d 表示在后台运行容器。

停止容器:
docker stop 容器名/容器ID
强制停止容器:
docker kill 容器名/容器ID

启动容器:
docker start 容器名/容器ID
重启容器:
docker restart 容器名/容器ID
删除容器:
docker rm 容器名/容器ID
注意,只能删除已停止的容器。

进入容器:
docker attach 容器ID
或者更常用的:
docker exec -it 容器ID /bin/bash
后者可以在正在运行的容器中启动一个新的shell。

查看所有本地镜像:
docker images
从远程仓库拉取镜像:
docker pull 镜像名
查看容器内部细节:
docker inspect 容器ID


查看容器内运行的进程:
docker top 容器ID
查看容器日志:
bash
docker logs 容器名/容器ID

1.3区分容器和镜像

Docker镜像是容器的模板或基础,而容器则是镜像的运行实例

  • Docker镜像:是一个只读的模板,包含了运行应用程序所需的所有内容,如代码、运行时、库、环境变量和配置文件等。镜像可以被视为一个独立的文件系统,包含了创建和启动容器所需的所有依赖。镜像具有轻量级和高效的特点,基于分层的文件系统构建,使得多个镜像可以共享相同的基础层,从而优化存储和传输效率。
  • Docker容器:是由Docker镜像创建的运行实例。容器完全使用沙箱机制,相互隔离,互不影响。容器启动时,Docker引擎会在镜像的基础上创建一个可读写的容器层,并将其与镜像层级联在一起,形成一个新的文件系统作为容器的文件系统。容器中的进程依赖于镜像中的文件,但容器对文件的任何修改都只会在容器层进行,不会影响到原始的镜像文件。

2、如何安装ORBSLAM2(cpu版)

2.1从网上下载好别人的安装脚本(在2.2.3安装运行)

git clone https://github.com/jike5/orbslam2-docker.git

 以下为下载好的脚本,写好了注释,不需要自己在终端添加

# UI permisions
#定义一个变量XSOCK,指向主机上的X11 Unix socket位置。这个socket通常用于X11客户端和服务器之间的通信。
XSOCK=/tmp/.X11-unix
#定义一个变量XAUTH,指定一个临时文件,用于存储X11认证信息。
XAUTH=/tmp/.docker.xauth
#创建或更新$XAUTH指向的文件
touch $XAUTH
#使用xauth命令列出当前显示(由$DISPLAY指定)的认证信息,并使用sed命令修改它,然后将修改后的认证信息合并到$XAUTH文件中。这一步是为了让Docker容器能够访问主机的X11服务器。
xauth nlist $DISPLAY | sed -e 's/^..../ffff/' | xauth -f $XAUTH nmerge -
#修改X11服务器的访问控制,允许名为docker的本地用户访问。
xhost +local:docker

# docker pull jike5/orbslam2-dev:latest

# Create a new container
#-t表示分配一个伪终端,-d表示在后台运行容器。
#--privileged: 给予容器在主机上几乎全部的权限。
#--net=host: 使容器使用主机的网络栈,这样容器内的应用就可以直接看到和使用主机的网络接口。
#--ipc=host: 允许容器使用主机的IPC(进程间通信)命名空间。
docker run -td --privileged --net=host --ipc=host \
    --name="orbslam2" \
#使docker可以使用USB接口,比如你要外接相机或者雷达
    --device=/dev/bus/usb \
#-e "DISPLAY=$DISPLAY": 设置环境变量DISPLAY,这样容器内的应用就知道应该连接到哪个X11显示
    -e "DISPLAY=$DISPLAY" \
#-e "QT_X11_NO_MITSHM=1": 设置环境变量,通常用于解决某些Qt应用在Docker容器中与X11服务器通信的问题。
    -e "QT_X11_NO_MITSHM=1" \
#-v "/tmp/.X11-unix:/tmp/.X11-unix:rw": 将主机上的X11 Unix socket目录挂载到容器内,允许容器访问。
    -v "/tmp/.X11-unix:/tmp/.X11-unix:rw" \
#-e "XAUTHORITY=$XAUTH": 设置环境变量,指向前面创建的X11认证文件。
    -e "XAUTHORITY=$XAUTH" \
#: 设置ROS(机器人操作系统)的IP地址为127.0.0.1。
    -e ROS_IP=127.0.0.1 \
#为容器添加SYS_PTRACE能力,这通常用于调试。
    --cap-add=SYS_PTRACE \
#将当前目录(pwd)下的workspace目录挂载到容器内的/workspace目录。
    -v `pwd`/workspace:/workspace \
#使用jike5/orbslam2-dev镜像的最新版本。bash: 在容器内启动一个bash shell。
    jike5/orbslam2-dev:latest bash

2.2运行脚本,基于大佬的镜像建立好一个容器

具体安装参考原网站

 2.2.1拉取镜像

docker image pull jike5/orbslam2-dev

tip:docker拉取镜像超时

Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

 解决办法:

1、修改或新建/etc/docker/daemon.json文件(搜索最新的镜像地址,不要用几年前的,下方24.10找的)

{
    "registry-mirrors": [
            "https://docker.211678.top",
            "https://docker.1panel.live",
            "https://hub.rat.dev",
            "https://docker.m.daocloud.io",
            "https://do.nark.eu.org",
            "https://dockerpull.com",
            "https://dockerproxy.cn",
            "https://docker.awsl9527.cn"
      ]
}

2、

systemctl daemon-reload
systemctl restart  docker

2.2.2

在主机建立好路径并下载ORBSLAM2

mkdir -p workspace/data 
cd workspace
git clone https://github.com/jike5/ORB_SLAM2

2.2.3 运行2.1下载内容里的脚本,你则可以搭建一个容器,并且容器里有你需要要的配置

sudo ./run_container_cpu.sh

2.3在容器内运行大佬写的脚本

2.3.1进入容器

docker ps -a | grep orbslam
# you will find you container ID
docker exec -it orbslam3[or container ID] bash

2.3.2 运行两个容器内的脚本

cd /workspace/ORB_SLAM2
./build.sh
./build_ros.sh

2 ORBSLAM2-(gpu)

参考https://github.com/dongwookheo/study-ORB-SLAM2/tree/main

        1、   docker build -t orb_slam:v2.0 .

        一键安装,不过在安装opencv时花费了很久 

        如果在Dockerfile里最后一个RUN一直无法下载,

        报错停止后修改Dockerfile

        将其注释,手动下载zip文件

            

        2、生成容器

docker run -it --privileged --gpus all --net=host --ipc=host \
    -e "DISPLAY=$DISPLAY" \
     --name="orbslam2_t7" \
    -e "QT_X11_NO_MITSHM=1" \
    -e NVIDIA_DRIVER_CAPABILITIES=all \
    -v "/tmp/.X11-unix:/tmp/.X11-unix:rw" \
     -v /home/adw/Music/workspace:/workspace \
    orb_slam:v2.0

        3、把1手动下载的内容解压后移动到容器里(),运行

./build.sh

3、测试是否安装成功

 我是基于某蓝学院给的第一讲案例进行测试

参考Ubuntu18.04从0安装运行ORB_SLAM2_orb-slam2 ubuntu18.04-优快云博客文章浏览阅读1.3k次,点赞5次,收藏25次。笔者在进行ORB_SLAM2学习的过程中,经历了重重困难,走了很多弯路,所以想着写一篇总结,希望可以帮助到有需要的读者。_orb-slam2 ubuntu18.04 https://blog.youkuaiyun.com/auroraCZ/article/details/129976871

./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/T
UM1.yaml  ../data/rgbd_dataset_freiburg1_desk/

tips:运行上述命令时,路径处于STUDY-ORBSLAM2-MAN下,
数据集rgbd_dataset_freiburg1_desk/放在上层路径date文件夹下

解释各个文件

3.1 可执行文件

/Examples/Monocular/mono_tum

        这是一个,ORBSLAM2框架里面有很多文件,相当与零件                

  实际使用应该按照传感器输入分类   

3.2 词袋

Vocabulary/ORBvoc.txt

    ocabulary/ORBvoc.txt 是 ORB-SLAM2 中的词袋(Bag of Words)词汇表文件。它用于特征描述子的量化和匹配。该文件由一组视觉词汇组成,通常是通过大量图像数据训练得到的。ORB-SLAM2 使用这个词汇表来有效地进行回环检测和特征匹配。

具体内容就是一堆数字,咱也看不懂

 3.3 相机和算法参数 

Examples/Monocular/TUM1.yaml 是 ORB-SLAM2 中的配置文件,用于单目摄像头的设置。这个文件包含了与相机参数和算法相关的配置,例如镜头的内参、畸变系数、图像帧率、ORB特征提取参数等。这些参数需要根据具体的相机模型和数据集进行调整,以确保算法的准确性和效率。

3.4 数据集

 ../data/rgbd_dataset_freiburg1_desk/

  1. depth 文件夹:

    • 这个文件夹通常包含深度图像数据。深度图像是一种特殊的图像,每个像素值代表该点到相机的距离,通常用于三维重建和SLAM系统中。
  2. rgb 文件夹:

    • 这个文件夹包含彩色图像数据。这些图像用于SLAM系统中的视觉信息处理,包括特征提取、匹配和相机位姿估计。
  3. accelerometer.txt 文件:

    • 这个文件记录了加速度计的数据,通常包括三个轴(x, y, z)的加速度值。这些数据可以用于估计相机的运动,尤其是在没有视觉信息的情况下。
  4. depth.txt 文件:

    • 这个文件可能包含深度图像的元数据,例如深度图像的分辨率、相机参数等,或者是深度图像数据的索引。
  5. groundtruth.txt 文件:

    • 这个文件包含了相机轨迹的真值,即相机在每个时间点的真实位置和姿态。这些数据用于评估SLAM算法的性能,通过比较算法估计的轨迹和这个文件中的真值。
  6. rgb.txt 文件:

    • 这个文件可能包含彩色图像的元数据,例如图像的分辨率、相机参数等,或者是彩色图像数据的索引

4、在vscode上运行docker

4.1 安装vscode插件

docker ----ssh

4.2 添加配置文件

  • Host :连接的主机名称,可自定义;
  • Hostname :远程主机的 IP 地址;
  • User :用于登录远程主机的用户名;
  • Port :用于登录远程主机的端口,SSH 默认为 22 ;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值