当前位置: 首页 > news >正文

记录RK3588的docker中启动rviz2报错

安装好rk3588 的docker,pull了ros的完整镜像后,想要启动rviz但是报错,下面是我的踩坑记录

0.原始的启动镜像的脚本:

sudo docker run -it  --rm --privileged --net=host -e DISPLAY=$DISPLAY  --name=my_image_name \-e DISPLAY=$DISPLAY \-v /tmp/.X11-unix/:/tmp/.X11-unix \-v /dev/shm:/dev/shm \-v /home/$USER/ros:/ros_pro \$ARM_IMAGE

1.挂载路径 /usr/lib/aarch64-linux-gnu、/dev/dri 和 XDG_RUNTIME_DIR等,挂载的原因是因为要使用宿主机的gpu进行渲染。(下面的是错误的)

sudo docker run -it  --rm --privileged --net=host -e DISPLAY=$DISPLAY  --name=my_image_name \-e DISPLAY=$DISPLAY \-v /tmp/.X11-unix/:/tmp/.X11-unix \-v /dev/shm:/dev/shm \-v /home/$USER/ros:/ros_pro \--device=/dev/dri:/dev/dri \-e XDG_RUNTIME_DIR=/run/user/$(id -u) \-v /run/user/$(id -u):/run/user/$(id -u) \-v /usr/lib/aarch64-linux-gnu:/usr/lib/aarch64-linux-gnu \$ARM_IMAGE

其中/usr/lib/aarch64-linux-gnu的挂载是错误的,后面会遇到相关的问题

2.docker环境内运行rviz2显示缺少如下文件

缺少libtinyxml.so.2.6.2
缺少libtinyxml2.so.6
缺少libassimp.so.5
缺少libspdlog.so.1

在宿主机上安装如下软件包

sudo apt-get install libtinyxml2.6.2v5 libtinyxml2-6 libassimp5  libspdlog

3.在docker中启动还是报错如下

QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root
arm_release_ver:g13p0-0leac0,rk_so_ver: 10
Segmentation fault (core dumped)

4.在宿主机上面的错误,显示驱动没有安装好

运行指令glxinfo | grep "OpenGL" 报错如下

Error: couldn't find RGB GLX visual or fbconfig

解决方案

sudo apt-get install --reinstall libgl1-mesa-dri libgl1-mesa-glx libglx-mesa0 mesa-utils

然后重启!重启!重启!

5.重启后,在宿主机上重新运行glxinfo | grep "OpenGL"还是报错:

libGL error:failed to create dri screen
libGL error : failed to load driver:rockchip
libGL error:failed to create dri screen
libGL error : failed to load driver:rockchip
但是后面是有一些正确的信息

6.在启动docker的命令中如果挂在了 /usr/lib/aarch64-linux-gnu:/usr/lib/aarch64-linux-gnu 是无法启动rviz的

容器里原本的 /usr/lib/aarch64-linux-gnu 是和它自己安装的系统、ROS、RViz 依赖配套的。
你一挂载,就把它换成了宿主机的版本(Mesa、GL、Qt、OGRE 等版本全换了)。
容器的 ROS2/RViz 可能和宿主机的动态库版本不兼容 → 程序直接崩溃

所以选择挂载gpu有关的即可
-v /usr/lib/aarch64-linux-gnu/dri:/usr/lib/aarch64-linux-gnu/dri

正确的启动容器指令如下

sudo docker run -it  --rm --privileged --net=host -e DISPLAY=$DISPLAY  --name=my_image_name \-e DISPLAY=$DISPLAY \-v /tmp/.X11-unix/:/tmp/.X11-unix \-v /dev/shm:/dev/shm \-v /home/$USER/ros:/ros_pro \--device=/dev/dri:/dev/dri \-e XDG_RUNTIME_DIR=/run/user/$(id -u) \-v /run/user/$(id -u):/run/user/$(id -u) \-v /usr/lib/aarch64-linux-gnu/dri:/usr/lib/aarch64-linux-gnu/dri \$ARM_IMAGE
http://www.dtcms.com/a/328960.html

相关文章:

  • C++11新特性详解:从列表初始化到线程库
  • Linux系统编程Day13 -- 程序地址空间(进阶)
  • uniapp组件的开关选择器可以这个携带多参数
  • CVPR2025敲门砖丨机器人结合多模态+时空Transformer直冲高分,让你的论文不再灌水
  • docker network 与host的区别
  • Uni-app + Vue3+editor富文本编辑器完整实现指南
  • 学习STM32 脉冲计数实验
  • MySQL相关概念和易错知识点(6)(视图、用户管理)
  • Java 大视界 -- 基于 Java 的大数据可视化在能源互联网全景展示与能源调度决策支持中的应用
  • 深度学习与遥感入门(七)|CNN vs CNN+形态学属性(MP):特征工程到底值不值?
  • 一键自动化:Kickstart无人值守安装指南
  • 【unitrix数间混合计算】2.20 比较计算(cmp.rs)
  • Spring Boot (v3.2.12) + application.yml + jasypt 数据源加密连接设置实例
  • 25个自动化办公脚本合集(覆盖人工智能、数据处理、文档管理、图片处理、文件操作等)
  • 【电气】NPN与PNP
  • [C语言]第二章-从Hello World到头文件
  • 四分位数与箱线图
  • Redis持久化机制详解:RDB与AOF的全面对比与实践指南
  • 动静态库
  • FPGA的PS基础1
  • 【FPGA】初始Verilog HDL
  • c++编程题-笔记
  • kali linux 2025.2安装Matlab的详细教程
  • 通过限制网络访问来降低服务器被攻击风险的方法
  • 服务器如何应对SYN Flood攻击?
  • FluxApi - 使用Spring进行调用Flux接口
  • Gradle(三)创建一个 SpringBoot 项目
  • 深度学习(3):全连接神经网络构建
  • mysql的快照读与当前读的区别
  • 11G RAC数据文件创建到本地如何处理