ROS docker使用顯卡驅動rviz gazebo,以及接入外設和雷達

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 項目的倉庫克隆、環境配置和…