ROS docker使用显卡驱动rviz gazebo,以及接入外设和雷达

由于我的电脑装ubuntu22.04系统,想使用ros noetic开发,使用鱼香ros一键安装docker安装。但是启动dockek中rviz无法使用显卡驱动,usb相机端口不显示,网口雷达无法使用等问题

一、ROS docker安装后运行rviz报错,或者能启动rviz但是显示OPENGL llvmpipe

显示OPENGL llvmpipe虽然也能启动rviz,但是没有使用显卡加速(核显也没有用)强行cpu软件渲染,会导致很卡。这其中主要原因是容器无法访问主机的GPU资源

解决方法

这里参考这位博主的方法实测可以解决
https://blog.csdn.net/GritYearner/article/details/133679403
这里总结步骤为
1、主机安装nvidia显卡驱动,可以在ubuntu software updater中的附加驱动选择和是的驱动安装 ,安全快捷
在这里插入图片描述安装完毕,重启电脑测试 nvidia-smi 出现类似如下打印,表示驱动正常。
在这里插入图片描述
2、 安装NVIDIA Container Runtime和 nvidia-docker2
配置存储库 并更新

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

安装nvidia-docker2

sudo apt-get install -y nvidia-docker2

使用nvidia-ctk命令配置container runtime

sudo nvidia-ctk runtime configure --runtime=docker

重启docker系统:

sudo systemctl restart docker

运行nvidia cuda 容器进行测试:
以ubuntu22为例(拉取的镜像会在运行后删除)

sudo docker run --rm --gpus all nvidia/cuda:12.4.1-base-ubuntu22.04 nvidia-smi

在这里插入图片描述
出现类似如上的打印,表示docker可以调用主机的显卡。
3. 创建新容器
使用如下指令重新创建容器,

sudo docker run -dit \--gpus all \-e NVIDIA_DRIVER_CAPABILITIES=all \--name=noetic_docker \--network=host \--privileged \-v /dev/bus/usb:/dev/bus/usb \-v /home/gxl:/home/gxl \-v /tmp/.X11-unix:/tmp/.X11-unix \-v /dev/dri:/dev/dri \--device=/dev/snd \--device=/dev/dri/renderD128 \-e DISPLAY=unix$DISPLAY \-w /home/gxl \fishros2/ros:noetic-desktop-full 

其中把/home/gxl 换成你自己的用户名
-name=noetic_docker换成你自己的容器名
fishros2/ros:noetic-desktop-full 换成你自己的镜像名,例如是fishros2/ros:melodic-desktop-full
相比鱼香ros的原安装命令 增加了如下命令允许docker使用宿主机的显卡资源

--gpus all \
-e NVIDIA_DRIVER_CAPABILITIES=all  

容器直接复用宿主机的网络,不经过 Docker 的虚拟网桥(bridge)

--network=host

把宿主机(Host)上的 /dev/bus/usb 目录挂载到容器中的相同路径 /dev/bus/usb,实现 USB 总线设备的共享。

-v /dev/bus/usb:/dev/bus/usb

构建常用指令
如果需要构建构建类似鱼香ros的快捷启动关闭指令,可以在~/.fishros/bin路径下创建一个新的文件 在里面模仿鱼香ros启动

cd ~/.fishros/bin
sudo touch noetic_docker
vi noetic_docker
xhost +local: >> /dev/null
echo "请输入指令控制neotic_docker: 重启(r) 进入(e) 启动(s) 关闭(c) 删除(d) 测试(t):"
read choose
case $choose in
s) docker start noetic_docker;;
r) docker restart noetic_docker;;
e) docker exec -it noetic_docker /bin/bash;;
c) docker stop noetic_docker;;
d) docker stop noetic_docker && docker rm noetic_docker && sudo rm -rf /home/gxl/.fishros/bin/noetic_docker;;
t) docker exec -it noetic_docker  /bin/bash -c "source /ros_entrypoint.sh && roscore";;
esac
newgrp docker

noetic_docker这个名字换成你自己的容器名称

二、容器直接复用宿主机的网络连接雷达

主要是在创建容器时候加入–network=host 这个参数,如果安装上文中的方法创建容器,那么已经包含这个操作

三、容器读取摄像头等usb口设备

创建容器时加入如下参数,-v /dev/bus/usb:/dev/bus/usb
-v /dev/bus/usb:/dev/bus/usb 是 Docker 命令中的一个 挂载参数,意思是:
把宿主机的 /dev/bus/usb 设备目录挂载到容器的同路径下。这样让容器可以访问 USB 设备,比如:
相机(如 RealSense、工业相机)
USB 串口设备
激光雷达
USB dongle(加密狗)
USB硬盘等

四、将已有的docker容器重新创建新容器

如果机器现在已经有了容器,并且容器中已经编译或者保存了很多数据和依赖,此时有需要增加主机网络、gpu渲染或者读取usb口设备。此时创建新容器又不想丢弃已有容器内的数据,可以将已有容器打包成镜像,再 基于这个镜像创建新容器

1. 将已有容器打包成镜像

假设你已有容器叫 my_running_container:
执行

docker commit my_running_container my_custom_image:latest

这条命令的作用是:

把 my_running_container 容器的当前状态打包成一个新镜像

命名为 my_custom_image:latest
例如

docker commit noetic_docker noetic_docker_udapte:latest

此时把之前已有的noetic_docker 打包为noetic_docker_udapte

2. 用这个镜像创建新容器

使用指令重新创建容器

sudo docker run -dit \--gpus all \-e NVIDIA_DRIVER_CAPABILITIES=all \--name=noetic_docker \--network=host \--privileged \-v /dev/bus/usb:/dev/bus/usb \-v /home/gxl:/home/gxl \-v /tmp/.X11-unix:/tmp/.X11-unix \-v /dev/dri:/dev/dri \--device=/dev/snd \--device=/dev/dri/renderD128 \-e DISPLAY=unix$DISPLAY \-w /home/gxl \noetic_docker_udapte 

可选:保存成 .tar 文件(打包分发用)

docker save -o my_image.tar my_custom_image:latest

传给其他机器后:

docker load -i my_image.tar

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/85193.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/85193.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/85193.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ruoyi后端框架的mapper层复杂字段数据获取问题

背景。如下是复杂字段。需要在mapper.java类注解中声明autoResultMap true才会进行处理。前提是,创建后端程序代码没有添加mapp.xml文件。故用注解简化代替。

产品推荐|一款具有单光子级探测能力的科学相机千眼狼Gloria 1605

在生命科学超分辨率成像、量子物理单光子探测、交叉领域单分子追踪等应用场景中,具有单光子级探测能力的科学相机是科学实验的关键设备。 千眼狼Gloria 1605采用16μm16μm大像元尺寸设计,基于Gpixel科学级背照式CMOS芯片,集成千眼狼底层图像…

JS.Day2-堆选(Py)/三路快排-快速选择-215,11,560,21,128,20,121

目录 215.找第k大元素 三路的快速排序 快速选择 法2.堆选 (堆排序) 11.盛更多水的容器 代码1 代码2 560.和为K的子数组(题意!) 惯性思维 正解 21.合并生序链表 递归写法 128.最长连续序列 20.有效的括号…

第8章 处理几何图形 面向 ArcGIS的Python脚本编程

一、折点坐标(.txt 或 .xlsx 或 .xls) > 点线面图层(.shp) (一).xlsx 或 .xls > .shp 新建一个文件夹,连接到该文件夹,并将其设置为工作空间 在该文件夹下,新建一个pts.xlsx的文件,并输入下图内容 …

使用(h3.js)绘制六角网格码

今天来记录一篇关于h3.js插件库的使用,他可以很高效的计算出地球上某个经纬度坐标六边形顶点。 前段时间领导突然给我个售前功能,要求是使用h3.js插件在地球上绘制出六边形网格码,本来以为挺棘手的,结果看完文档后发现也挺简单的…

GO 1.25

Go 1.25 发布说明(草案) Go 1.25 尚未发布。 本文档是正在编写中的发布说明。Go 1.25 预计于 2025 年 8 月发布。 语言变更 Go 1.25 中没有影响 Go 程序的语法变更。然而,在语言规范中,“核心类型”(core types&…

解析Android SETUP_DATA_CALL 链路信息字段

Android 对象返回的log信息经常都不是标准的JSON字符串,排查字段不直观,比如下面的日志: 06-13 15:56:36.204 8076 8407 D RILJ : [1655]> SETUP_DATA_CALL,reason=NORMAL,accessNetworkType=EUTRAN,dataProfile=[DataProfile=[ApnSetting] IMS, 2318, 310260, ims,…

跨语言RPC:使用Java客户端调用Go服务端的HTTP-RPC服务

在构建分布式系统时,实现不同编程语言之间的无缝通信是一个常见的需求。本文将详细介绍如何使用Go语言创建一个HTTP-RPC服务,并通过Java客户端进行远程调用。我们将探索整个过程,包括服务端的实现、客户端的编写以及测试验证。 一、背景介绍…

CVPR2024迁移学习《Unified Language-driven Zero-shot Domain Adaptation》

摘要 本文提出了一个名为 Unified Language-driven Zero-shot Domain Adaptation(ULDA)的新任务设置,旨在使单一模型能够适应多种目标领域,而无需明确的领域标识(domain-ID)知识。现有语言驱动的零样本领域…

AI安全风险监测平台:全周期防护体系构建

AI安全风险监测平台通过构建全生命周期防护体系,实现对人工智能系统研发、部署、运行、迭代各阶段的安全风险动态监测。该平台融合算法审计、行为分析、合规验证等核心能力,建立覆盖模型安全、数据安全、应用安全的立体防御网络,为智能系统提…

数据集-目标检测系列- 杯子 数据集 bottle >> DataBall

数据集-目标检测系列- 杯子 数据集 bottle >> DataBall 贵在坚持! * 相关项目 1)数据集可视化项目:gitcode: https://gitcode.com/DataBall/DataBall-detections-100s/overview 2)数据集训练、推理相关…

视频点播web端AI智能大纲(自动生成视频内容大纲)的代码与演示

通过AI技术将视频课程自动生成结构化大纲和摘要,支持PPT教学视频、企业内训等场景应用。核心功能包括:自动匹配视频知识点生成文本大纲、快速内容定位、降低课程制作成本。系统采用模块化架构,包含Vue2.7前端组件、JS逻辑库和演示项目&#x…

Linux: errno: EINPROGRESS-115

在connect接口的使用说明里,有这个错误:EINPROGRESS。 The socket is nonblocking and the connection cannot be completed immediately. It is possible to select(2) or poll(2) for completion by selecting the socket for writing. After select(2…

Node.js特训专栏-基础篇:3. Node.js内置模块的使用

🔥 欢迎来到 Node.js 实战专栏!在这里,每一行代码都是解锁高性能应用的钥匙,让我们一起开启 Node.js 的奇妙开发之旅! Node.js 特训专栏主页 Node.js内置模块:强大功能的基石 在Node.js的世界里&#xff…

基于MATLAB实现的Capon、MUSIC、ESPRIT和PM算法进行DOA

使用Capon、MUSIC、ESPRIT和PM多种算法进行doa估计,通过谱峰搜索函数估计到达角,并使用蒙特卡洛方法估计各算法的RMSE。(可能计算时间较长,如需节省时间可以减小蒙特卡洛次数) PM.m , 574 RMSE.m , 274 TLS_ESPRIT.m …

某网站极验4滑块验证码逆向分析

文章目录 1. 写在前面2. 接口分析3. w逆向分析4. JSON参数分析5. 距离识别6. RSA纯算还原7. AES纯算还原【🏠作者主页】:吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于…

深入理解 C++ inline:三大语法特性 + 七大高频考点全解析

一、什么是内联函数 编译器尝试将 inline 函数的代码直接插入调用处(类似宏展开),避免函数调用的压栈、跳转、返回等额外开销。适用于短小频繁调用的函数:如简单的 getter/setter、数学运算等。inline 只是 建议,编译…

Flink 与 Hive 深度集成

引言 在大数据生态中,Flink 的流批一体化处理能力与 Hive 的数据存储分析优势结合,通过 Flink Connector for Hive 实现无缝对接,能显著提升数据处理效率。本文将系统解析 Flink 与 Hive 集成的核心操作,涵盖配置、读写、优化全流…

Axios面试常见问题详解

axios面试常问题目及其详解 以下是前端面试中关于 Axios 的常见问题及详细解答,涵盖核心原理、实战场景和进阶优化,帮助你在面试中清晰展示技术深度。 1. Axios 是什么?它与原生 Fetch API 有何区别? 回答要点: Axi…

14.2 《3小时从零搭建企业级LLaMA3语言助手:GitHub配置+私有化模型集成全实战》

3小时从零搭建企业级LLaMA3语言助手:GitHub配置私有化模型集成全实战 关键词:GitHub 仓库配置, 项目初始化, 目录结构设计, 私有化模型集成, 开发环境标准化 Fork 并配置 GitHub 项目仓库 本节将手把手完成 LanguageMentor 项目的仓库克隆、环境配置和…