一、镜像制作
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/xxx/Share:/mnt/Share \
--privileged=true -it --network host -d --ipc=host \
--name mviz rocker:latest # 映射路径改成自己的
二、问题记录
1、Unable to create the rendering window after 100 tries
原因:容器中默认使用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的核显)
解决方案2 在容器中使用NVIDIA显卡渲染rviz
- 安装NVIDIA驱动
打开附件驱动(Additional Drivers),选一个NVIDIA的驱动
或者
sudo ubuntu-drivers autoinstall
- 安装 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/xxx/Share:/mnt/Share \
--privileged=true -it --network host -d --ipc=host --gpus all\
--name mviz_nv rocker:latest
- 到容器内验证是否能打开rviz
解决方案3
换驱动,选最后一个,解决。(慎重,选了之后可能不能使用cuda)
参考这个没解决
换驱动,选最后一个,解决。
2、Could not connect to any X display.
在宿主机终端执行:
xhost +