docker中可视化rviz

发布于:2024-12-08 ⋅ 阅读:(128) ⋅ 点赞:(0)

背景

华硕 x556ub电脑,使用NVIDIA GEFORCE 940M 显卡

1. 确定适合的 NVIDIA 驱动版本

运行以下命令以检查 GPU 型号和推荐的驱动版本:

ubuntu-drivers devices

在这里插入图片描述根据输出结果,安装 nvidia-driver-535:

sudo apt update
sudo apt install -y nvidia-driver-535

重启系统

sudo reboot

验证 NVIDIA 驱动是否正常

nvidia-smi

在这里插入图片描述

2. 检查 NVIDIA Container Toolkit 安装

2.1 安装 NVIDIA Container Toolkit

distribution=$(. /etc/os-release; echo $ID$VERSION_ID) && \
    curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - && \
    curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
    sudo tee /etc/apt/sources.list.d/nvidia-docker.list

sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

输入第一个命令,输出:
在这里插入图片描述

用的18.04的源,若修改源为20.04的,会发现有错误,所以就用这个试试

sudo nano /etc/apt/sources.list.d/nvidia-docker.list

源内容为

deb https://nvidia.github.io/libnvidia-container/stable/ubuntu18.04/$(ARCH) /
#deb https://nvidia.github.io/libnvidia-container/experimental/ubuntu18.04/$(ARCH) /
deb https://nvidia.github.io/nvidia-container-runtime/stable/ubuntu18.04/$(ARCH) /
#deb https://nvidia.github.io/nvidia-container-runtime/experimental/ubuntu18.04/$(ARCH) /
deb https://nvidia.github.io/nvidia-docker/ubuntu18.04/$(ARCH) /

更新

sudo apt-get update

安装 NVIDIA Container Toolkit

运行以下命令安装 nvidia-container-toolkit

sudo apt-get install -y nvidia-container-toolkit

配置 NVIDIA Runtime

运行以下命令自动配置 NVIDIA Runtime:

sudo nvidia-ctk runtime configure

输出
在这里插入图片描述

重启 Docker

重新启动 Docker 服务以应用更改:

sudo systemctl restart docker

验证 NVIDIA Docker 支持

运行一个支持gpu的镜像:

docker run -it --rm \
    --gpus all \
    -e DISPLAY=$DISPLAY \
    -v /tmp/.X11-unix:/tmp/.X11-unix \
    osrf/ros:melodic-desktop-full bash

在容器内:

nvidia-smi

输出为:
在这里插入图片描述

验证 OpenGL 和图形支持

测试 GUI 应用

安装 x11-apps 并运行 xclock 测试 GUI:

apt-get update && apt-get install -y x11-apps
xclock

如果显示一个时钟窗口,说明图形支持正常。
在这里插入图片描述

验证 OpenGL

安装 mesa-utils 并运行 glxinfo:

apt-get install -y mesa-utils
glxinfo | grep "OpenGL"

在这里插入图片描述此处报错:(但没直接解决),重启docker,后再按上面验证的步骤进行一遍又显示下面的,不清楚为什么

在这里插入图片描述
注意!!!
此处有问题,如果是下面的输出,只是rviz是可以打开的,但我运行lio_sam时则打不开rviz,如下:

lio_sam_rviz-9] process has died

在这里插入图片描述
原因是opengl使用的是cpu的核显,正确的是使用GPU

确认当前显卡的使用情况

运行以下命令查看当前显卡使用情况:

xrandr --listproviders

输出

ubuntu2004@ubuntu2004-X556UB: ~$ xrandr --listproviders
Providers: number : 2
Provider 0: id: 0x46 cap: 0x9, Source Output, Sink Offload crtcs: 3 outputs: 4 associated providers: 0 name:modesetting
Provider 1: id: 0x236 cap: 0x0 crtcs: 0 outputs: 0 associated providers: 0 name:NVIDIA-G0

从 xrandr --listproviders 的输出可以看出,你的系统使用了混合显卡配置(NVIDIA Optimus),默认情况下系统可能优先使用集成显卡(modesetting),而不是 NVIDIA GPU(NVIDIA-G0)。以下是详细的解决方法,确保系统能够正确使用 NVIDIA GPU。

1. 切换到 NVIDIA 模式

使用 prime-select 命令将系统切换到使用 NVIDIA GPU 模式:

sudo prime-select nvidia

运行完成后,重启系统:

sudo reboot
2. 验证 NVIDIA 是否成为主显卡

重启后,运行以下命令检查当前模式:

prime-select query

如果输出为 nvidia,说明 NVIDIA GPU 已被启用。

glxinfo | grep "OpenGL"

在这里插入图片描述

额外检查

检查 Docker 配置

验证 NVIDIA Runtime 是否已正确配置:

docker info | grep -i runtime

在这里插入图片描述
从 docker info | grep -i runtime 的输出可以看到以下关键点:

nvidia runtime 已注册:
输出中显示了 nvidia runtime,说明 NVIDIA Container Toolkit 已正确安装。

默认运行时是 runc:
当前默认的容器运行时是 runc,而不是 nvidia。因此,运行容器时需要手动指定 --gpus all 来启用 GPU 支持。

两条警告:
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled 这些警告与网络配置相关,但不影响 GPU 功能。

解决方法

  1. 手动指定 GPU 支持

当默认运行时为 runc 时,需要在运行容器时手动启用 GPU 支持。例如:

docker run -it --rm --gpus all \
    -e DISPLAY=$DISPLAY \
    -v /tmp/.X11-unix:/tmp/.X11-unix \
    osrf/ros:melodic-desktop-full bash


网站公告

今日签到

点亮在社区的每一天
去签到