环境信息

系统版本:Ubuntu 24.04
Docker版本:28.0.1
显卡类型:Nvidia RTX4060

检查gazebo使用的渲染器

  1. 检查渲染使用的是什么

gazebo使用OpenGL渲染场地,我们可以利用mesa工具查看渲染使用的是软件还是硬件(显卡)

# 进入容器(第一次先docker run运行镜像)
docker start -ai 容器名称/容器ID
# 运行 glxinfo查看渲染器
glxinfo | grep "OpenGL version"
  1. 安装mesa工具集(如果没有)

如果出现类似"OpenGL version string: xxx"的结果,则glxinfo已安装,可以跳过本步骤。
如果提示命令不存在,由于glxinfo是mesa工具集的一部分,说明mesa工具集未安装,则先运行

apt update && apt install -y mesa-utils

待安装完成后,glxinfo应当存在,此时运行

# 检查安装是否成功
glxinfo | grep "OpenGL version"
# 如成功,查看渲染器
glxinfo | grep "OpenGL renderer"

如果看到输出的是类似llvmpipe (LLVM 15.0.7, 256 bits)的信息,则说明容器内gazebo使用的是软件渲染器,这也是帧率低的原因,解决方案见下。
如果不是,比如说你的输出是OpenGL renderer string: NVIDIA GeForce RTX 4060 Laptop GPU/PCIe/SSE2,那么你的gazebo的帧率不应该很低。真的很低的话,本教程也无法解决你的问题,可以不用往下看了

安装nvidia-smi显卡驱动

  1. 检查显卡驱动

首先检查当前是否存在显卡驱动,及其版本

nvidia-smi

如果安装了显卡驱动,输出应该显示显卡驱动和版本等信息,类似于:
nvidia-smi运行结果

  1. 检查推荐驱动版本

无论输出是否正确,下一步检查合适的驱动版本:

ubuntu-drivers devices

结果类似于:
ubuntu-drivers devices运行结果
其中包含recommended字样的版本为我们将要下载的(图片中为nvidia-driver-550)
如果已有版本和推荐版本不同,请自行权衡是否更换,本教程接下来的操作都是基于使用了推荐版本的前提进行的(不同的也没试过)

  1. 安装显卡驱动

安装显卡驱动,已有的话可以跳过本步骤

sudo apt install nvidia-driver-550 # 将550替换为你合适的版本
  1. 安装nvidia容器工具集

安装nvidia-container-toolkit
参考Ubuntu 24.04 安装 NVIDIA Container Toolkit 全指南:让Docker拥抱GPU的前几步
首先添加官方仓库

# 安装依赖
sudo apt-get update
sudo apt-get install -y curl

# 添加密钥和仓库
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/stable/deb/nvidia-container-toolkit.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-container-toolkit

接着更新Docker配置

# 生成配置文件
sudo nvidia-ctk runtime configure --runtime=docker

# 重启Docker服务
sudo systemctl restart docker

至此应该安装并配置好显卡驱动和docker了

以GPU模式运行容器

  1. 启动容器时挂载GPU设备并传递NVIDIA驱动库
docker run -it --gpus all \
  --device /dev/dri:/dev/dri \
  -e DISPLAY=$DISPLAY \
  -e NVIDIA_DRIVER_CAPABILITIES=all \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  镜像名/ID

关键参数说明:(解释的有问题找DeepSeek)

--gpus all:启用所有GPU。

--device /dev/dri:/dev/dri:挂载Direct Rendering Infrastructure设备(Intel/NVIDIA可能需要)。

-e NVIDIA_DRIVER_CAPABILITIES=all:启用所有NVIDIA驱动功能。

如果要以GPU模式运行已经存在的容器,而非如上通过镜像新开容器,则可以提交容器为新镜像并重新运行:(不用可以跳过到下一节)
首先提交当前容器为新镜像

docker commit <容器ID或名称> 新名称

然后重新运行容器(带 GPU 参数)

docker run -it --gpus all \
  --device /dev/dri:/dev/dri \
  -e DISPLAY=$DISPLAY \
  -e NVIDIA_DRIVER_CAPABILITIES=all \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  新名称/ID

进入容器检查渲染器

如果没进入,先进入容器:

docker start -ai 容器名/ID

进入后,检查渲染器

glxinfo | grep "OpenGL renderer"
# 期望输出类似:OpenGL renderer string: NVIDIA GeForce RTX 4060 Ti/PCIe/SSE2

如果输出还是类似于llvmpipe,则还有一种可能(垂死挣扎),即默认mesa版本过低,无法检测到较新的显卡(如4060),以下是尝试的解决方案

容器内安装高版本mesa

以下命令均在容器内运行!!!

  1. 安装add-apt-repository
sudo apt install software-properties-common
  1. 验证add-apt-repository是否可用
add-apt-repository --help

没有错误则说明已经安装成功

  1. 然后添加PPA并安装Mesa(可能耗时较长)
sudo add-apt-repository ppa:kisak/kisak-mesa
sudo apt update
sudo apt full-upgrade
  1. 接着安装mesa-utils
sudo apt install mesa-utils
  1. 检查版本和渲染器
glxinfo | grep "OpenGL version" # 应该是较高的版本
glxinfo | grep "OpenGL render"

成果展示

期望结果:60帧,纵享丝滑
期望结果

如果上述步骤都做完了还无效,可以尝试退出、重进镜像和终端,重启等方法
如果仍然无效,很抱歉本教程浪费了你的时间,可以去找下一篇了(棒读)

Logo

立足具身智能前沿赛道,致力于搭建全球化、开源化、全栈式技术交流与实践共创平台。

更多推荐