Docker Ros melodic Error记录

一、镜像制作

ros docker 硬件加速 官方文档
ros melodict镜像 制作

sudo docker run -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=unix$DISPLAY -e GDK_SCALE -e GDK_DPI_SCALE \
 --device=/dev/dri --group-add video \
 -v /home/nico/Share:/mnt/Share -v /home/nico/Chedao/:/mnt/Chedao  \
 --privileged=true -it --network host -d --ipc=host \
 --name mviz rocker:latest # 映射路径改成自己的

二、问题记录

1、Unable to create the rendering window after 100 tries

Docker Ros melodic Error记录_第1张图片
原因:容器中默认使用intel的核显,启动rviz时,openGL找不到渲染的显卡。

解决方案1 打开核显独显混合使用模式

戴尔笔记本打开方法
开机按F2,进入BIOS Setup
点 Dispaly
右边拖到最下面
Hybird Graphics / Advanced Optimus
选择 ON

APPLY CHANGES
exit

微星笔记本打开核显独显混合使用模式方法
开机按F2,进入BIOS
按键 左Alt+F2+右Ctrl+右Shift 同时按,把隐藏设置激活才能看到
点MSI VGA MODE 选择 MS-Hybird MODE
保存退出

验证 打开 Nvidia x server settings
选择 NVIDIA On-Demand
(Performance 只使用NVIDIA的显卡)
(NVIDIA On-Demand 混合模式)
(Power saving Mode 只使用Intel的核显)
Docker Ros melodic Error记录_第2张图片

解决方案2 在容器中使用NVIDIA显卡渲染rviz

  1. 安装NVIDIA驱动
    打开附件驱动(Additional Drivers),选一个NVIDIA的驱动
    Docker Ros melodic Error记录_第3张图片

或者

sudo ubuntu-drivers autoinstall
  1. 安装 NVIDIA Container Toolkit
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
      && curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
      && curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
            sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
            sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-docker2

注意:melodic及以后的版本无需安装opengl的依赖,之前的版本需要,详细看官方文档

sudo systemctl restart docker

验证安装是否成功

sudo docker run --rm --gpus all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 450.51.06    Driver Version: 450.51.06    CUDA Version: 11.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  Tesla T4            On   | 00000000:00:1E.0 Off |                    0 |
| N/A   34C    P8     9W /  70W |      0MiB / 15109MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

另一个在容器中使用NVIDIA显卡的方法
注: 安装NVIDIA Container Toolkit其实就是安装nvidia-docker2,且已经包括了nvidia-container-runtime。
3. docker run 改成

sudo docker run -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=unix$DISPLAY -e GDK_SCALE -e GDK_DPI_SCALE --device=/dev/dri --group-add video \
 -v /home/nico/Share:/mnt/Share \
 -v /home/nico/Chedao/:/mnt/Chedao \
 --privileged=true -it --network host -d --ipc=host --gpus all\
 --name mviz_nv rocker:latest
  1. 到容器内验证是否能打开rviz

解决方案3

换驱动,选最后一个,解决。(慎重,选了之后可能不能使用cuda)

参考这个没解决
换驱动,选最后一个,解决。
Docker Ros melodic Error记录_第4张图片

2、Could not connect to any X display.

在宿主机终端执行:

xhost +

你可能感兴趣的:(笔记,docker,容器,运维)