1.命令
docker pull ros:noetic进入docker镜像
创建docker容器
docker run -it -v /home/railbot/orb_slam/:/home/orb_slam/ --name=orbslam3 -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --device /dev/video0 --privileged ros:noetic /bin/bash
docker start orbslam3进入docker exec -it orbslam3 /bin/bash
将主机文件移到容器命令 docker cp MH_01_easy orbslam33:/root
这段命令是使用 docker run 启动一个 Docker 容器的命令。下面是它的逐部分解释:
docker run -it \
-v /home/railbot/orb_slam/:/home/orb_slam/ \
--name=orb_slam3 \
-e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
--device /dev/video0 \
--privileged \
ros:noetic /bin/bash
1. docker run -it
docker run:用于运行一个新的 Docker 容器。
-it:这两个选项合起来表示以交互模式启动容器:
-i:表示以交互模式运行容器(保持容器的标准输入流打开)。
-t:表示分配一个伪终端,使得你可以像在本地终端一样与容器交互。
2. -v /home/railbot/orb_slam/:/home/orb_slam/
-v:表示挂载本地目录到容器中,形式是 -v [本地路径]:[容器内路径]。这表示将主机 /home/railbot/orb_slam/ 目录挂载到容器的 /home/orb_slam/ 目录。这样,容器内就可以访问主机上的数据和文件。
3. --name=orb_slam3
--name=orb_slam3:给容器指定一个名字。在这个例子中,容器的名字是 orb_slam3。这样可以通过名字来管理容器,比如停止、启动等,而不用每次使用容器的 ID。
4. -e DISPLAY=$DISPLAY
-e:用于设置环境变量。
DISPLAY=$DISPLAY:将主机的 DISPLAY 环境变量传递到容器中。这个环境变量通常用于图形界面的应用程序,在 Linux 系统中,它决定了哪些显示器显示图形界面。通过传递这个变量,容器内的程序可以使用主机的显示环境来渲染图形界面。
5. -v /tmp/.X11-unix:/tmp/.X11-unix
这个挂载命令允许容器访问主机的 X11 Unix 套接字文件夹,实际上是使得容器内的应用程序能够显示图形界面(GUI)到主机的显示器上。这对于需要 GUI 的应用程序(例如图形界面程序)非常有用。
6. --device /dev/video0
--device /dev/video0:将主机的 /dev/video0 设备(通常是第一个视频捕捉设备,比如摄像头)传递到容器中。这使得容器可以直接访问并使用主机的摄像头设备,常用于需要视频流的应用(如计算机视觉、视频处理等)。
7. --privileged
--privileged:以特权模式运行容器。这给容器更多的权限,使得它可以访问主机上的更多资源。特权模式允许容器执行通常受限的操作,如访问硬件设备、加载内核模块等。一般情况下,特权模式会提供更高的权限,适用于一些需要访问主机硬件或系统资源的应用。
8. ros:noetic
ros:noetic:指定使用的 Docker 镜像名称和标签。在这个例子中,使用的是 ros:noetic 镜像,它是 ROS(Robot Operating System) Noetic 版本的官方镜像。这个版本的 ROS 是适用于 Ubuntu 20.04 的,并且是 ROS 1 的最后一个版本。
9. /bin/bash
/bin/bash:容器启动后执行的命令。在这个例子中,容器启动后会打开一个 bash 终端,你可以在这个终端中与容器交互,执行命令等。
总结
这条命令的作用是:
启动一个基于 ros:noetic 镜像的 Docker 容器。
容器将以交互模式运行,并打开一个 Bash 终端。
容器与主机共享某些资源,例如:
主机上的文件夹 /home/railbot/orb_slam/ 会挂载到容器中对应的路径。
允许容器访问主机的 X11 图形界面,以便在容器内运行需要 GUI 的应用程序。
允许容器访问主机的摄像头设备。
容器将具有较高权限,可以执行某些通常被限制的操作(如访问硬件设备)。
此命令通常用于运行需要与硬件(如摄像头)交互,并且需要图形界面的 ROS 应用程序。
#############################################################################
查看版本号
lsb_release -a
3.换源
sudo nano /etc/docker/
cd /etc/docker/
sudo vim daemon.json
docker ps -a
docker start orb_slam3
E: You don't have enough free space in /var/cache/apt/archives/.问题解决
1. 清理 APT 缓存
sudo apt-get clean
这会删除/var/cache/apt/archives/
目录下的所有已下载的包文件。清理完成后,您可以再次尝试安装libeigen3-dev
:sudo apt-get install libeigen3-dev
2. 检查磁盘空间
如果问题仍然存在,您可以检查系统的磁盘空间使用情况,特别是
/
或/var
分区是否已满。执行以下命令查看磁盘使用情况:df -h
3. 移除不必要的软件包和依赖sudo apt-get autoremove
sudo apt-get autoclean
E: Package ‘xxx‘ has no installation candidate 
make j16就死定啦,make j8就行
2.配置环境
一键安装ros
wget http://fishros.com/install -O fishros && bash fishros
(1)安装git,g++
sudo apt-get install git
sudo apt install g++
(2)安装cv_bridge库
sudo apt-get install libopencv-dev
sudo apt-get install ros-noekit-cv-bridge
(3)安装Opencv
①安装依赖项
sudo apt-get install build-essential libgtk2.0-dev libgtk-3-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev
sudo apt install python3-dev python3-numpy
sudo apt install libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev
sudo apt install libpng-dev libopenexr-dev libtiff-dev libwebp-dev
②下载Opencv源文件
git clone https://gitcode.com/gh_mirrors/opencv31/opencv.git
③安装OpenCV
cd opencv
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=YES ..
make
sudo make install
④查看版本号
pkg-config --modversion opencv4
安装EIGEN库
sudo apt-get install libeigen3-dev
安装Pangolin库
①下载Pangolin 0.6
git clone https://gitcode.com/gh_mirrors/pangol/pangolin.git
②安装依赖项
sudo apt-get install libglew-dev libboost-dev libboost-thread-dev libboost-filesystem-dev
sudo apt-get install ffmpeg libavcodec-dev libavutil-dev libavformat-dev libswscale-dev libpng-dev
③编译安装
cd Pangolin
mkdir build && cd build
cmake -DCPP11_NO_BOOST=1 ..
make
sudo make install
④验证
cd ../examples/HelloPangolin
mkdir build && cd build
cmake ..
make
./HelloPangolin
error: XDG_RUNTIME_DIR not set in the environment.
libEGL warning: DRI2: failed to authenticate
railbot@RADXA-CM5:~$ xhost +
access control disabled, clients can connect from any host
停止正在运行的容器
docker ps -a这将显示所有容器,包括正在运行的和已停止的。找到您想要删除的容器的ID或名称。
使用以下命令停止容器:
docker stop <容器ID或名称>
删除容器
docker rm <容器ID或名称>
强制删除容器
docker rm -f <容器ID或名称>
删除所有已停止的容器
docker container prune