gazebo配置使用显卡,解决帧率过低问题
本文详细地介绍了Ubuntu24.04下,如何通过配置使用显卡,解决gazebo仿真环境帧率过低问题,提供了详尽且几乎可以直接复制使用的引导
环境信息
系统版本:Ubuntu 24.04
Docker版本:28.0.1
显卡类型:Nvidia RTX4060
检查gazebo使用的渲染器
- 检查渲染使用的是什么
gazebo使用OpenGL渲染场地,我们可以利用mesa工具查看渲染使用的是软件还是硬件(显卡)
# 进入容器(第一次先docker run运行镜像)
docker start -ai 容器名称/容器ID
# 运行 glxinfo查看渲染器
glxinfo | grep "OpenGL version"
- 安装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显卡驱动
- 检查显卡驱动
首先检查当前是否存在显卡驱动,及其版本
nvidia-smi
如果安装了显卡驱动,输出应该显示显卡驱动和版本等信息,类似于:
- 检查推荐驱动版本
无论输出是否正确,下一步检查合适的驱动版本:
ubuntu-drivers devices
结果类似于:
其中包含recommended字样的版本为我们将要下载的(图片中为nvidia-driver-550)
如果已有版本和推荐版本不同,请自行权衡是否更换,本教程接下来的操作都是基于使用了推荐版本的前提进行的(不同的也没试过)
- 安装显卡驱动
安装显卡驱动,已有的话可以跳过本步骤
sudo apt install nvidia-driver-550 # 将550替换为你合适的版本
- 安装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模式运行容器
- 启动容器时挂载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
以下命令均在容器内运行!!!
- 安装
add-apt-repository
sudo apt install software-properties-common
- 验证
add-apt-repository是否可用
add-apt-repository --help
没有错误则说明已经安装成功
- 然后添加PPA并安装Mesa(可能耗时较长)
sudo add-apt-repository ppa:kisak/kisak-mesa
sudo apt update
sudo apt full-upgrade
- 接着安装
mesa-utils包
sudo apt install mesa-utils
- 检查版本和渲染器
glxinfo | grep "OpenGL version" # 应该是较高的版本
glxinfo | grep "OpenGL render"
成果展示
期望结果:60帧,纵享丝滑
如果上述步骤都做完了还无效,可以尝试退出、重进镜像和终端,重启等方法
如果仍然无效,很抱歉本教程浪费了你的时间,可以去找下一篇了(棒读)
更多推荐

所有评论(0)