ubuntu20.04開發ros2,使用docker安裝部署的詳細教程

?學習docker的教程:可以直接在菜鳥教程上學習即可

?階段 0:系統檢查

| 內容 | 建議 |
|------|------|
| 操作系統 | Ubuntu 22.04(與 ROS2 Humble 最匹配) |
| 用戶權限 | 能執行 sudo |

🧩 階段 1:在 Ubuntu 上安裝 Docker(官方推薦方式)

?1.1 卸載舊版本(若有)

sudo apt remove docker docker-engine docker.io containerd runc

?作用:避免沖突。

1.2 更新 apt 包索引 & 裝依賴


sudo apt update
sudo apt install \ca-certificates \curl \gnupg \lsb-release


作用:curl 用來下載 GPG key,lsb-release 用來識別系統版本。

1.3 添加 Docker 官方 GPG key

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

作用:驗證軟件包來源,防止被篡改。

1.4 添加倉庫源

echo \"deb [arch=$(dpkg --print-architecture) \signed-by=/etc/apt/keyrings/docker.gpg] \https://download.docker.com/linux/ubuntu \$(lsb_release -cs) stable" | \sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

作用:告訴 apt 去哪里下載 Docker 最新版。

1.5 更新并安裝 Docker Engine + CLI + containerd

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin

作用:一次性裝好核心組件。

1.6 驗證安裝成功

sudo docker run hello-world

看到 “Hello from Docker!” 字樣就成功了。

?1.7(可選)讓當前用戶免 sudo 用 Docker

sudo usermod -aG docker $USER
newgrp docker

作用:避免每次命令前都寫 sudo,提升開發體驗。

🧱 階段 2:拉取 ROS2 鏡像(回顧 + 補充)

docker pull osrf/ros:humble-desktop-full

> 作用:一次性把 ROS2 Humble 桌面完整版(ROS + RViz + Gazebo)下載到本地。鏡像約 4 GB,耐心等待。

🐳 階段 3:啟動 ROS2 容器(帶 GUI 支持)

3.1 允許宿主機顯示 GUI

xhost +local:docker

> 作用:讓容器里的 GUI 程序能把窗口投射到宿主機。

3.2 創建并進入容器

docker run -it \--name ros2_dev \--env="DISPLAY=$DISPLAY" \--env="QT_X11_NO_MITSHM=1" \--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \--volume="$HOME/ros2_ws:/root/ros2_ws" \osrf/ros:humble-desktop-full \bash

指令解析

| 參數         | 作用                    |
| ---------- | --------------------- |
| `-it`      | 交互模式,允許你進入容器內部        |
| `--name`   | 給容器起個名字,方便管理          |
| `--env`    | 設置環境變量,支持 GUI(如 RViz) |
| `--volume` | 掛載宿主機目錄到容器里,方便代碼共享    |
| `bash`     | 容器啟動后執行的命令,進入 shell   |

> 作用:把宿主機目錄 `$HOME/ros2_ws` 掛載到容器 `/root/ros2_ws`,實現**代碼持久化**;同時打通 X11,讓 RViz/Gazebo 能彈出窗口。

🧑?💻 階段 4:在容器內測試 ROS2

source /opt/ros/humble/setup.bash
ros2 run turtlesim turtlesim_node

看到小烏龜窗口 = ? GUI 正常。

🛠? 階段 5:創建并編譯 C++ ROS2 功能包(回顧 + 詳細)

`bash
在容器里操作

cd /root/ros2_ws
source /opt/ros/humble/setup.bash
ros2 pkg create --build-type ament_cmake my_cpp_pkg --dependencies rclcpp std_msgs

5.1 寫節點代碼

vim my_cpp_pkg/src/my_node.cpp

粘貼:

#include "rclcpp/rclcpp.hpp"int main(int argc, char **argv)
{rclcpp::init(argc, argv);auto node = std::make_shared<rclcpp::Node>("my_first_node");RCLCPP_INFO(node->get_logger(), "Hello from Docker + ROS2 + C++!");rclcpp::spin(node);rclcpp::shutdown();return 0;
}

?5.2 修改 CMakeLists.txt(讓可執行文件被編譯)

在 `my_cpp_pkg/CMakeLists.txt` 末尾追加:

```cmake
add_executable(my_node src/my_node.cpp)
ament_target_dependencies(my_node rclcpp)install(TARGETSmy_nodeDESTINATION lib/${PROJECT_NAME})
```

5.3 編譯

cd /root/ros2_ws
colcon build --packages-select my_cpp_pkg
source install/setup.bash
ros2 run my_cpp_pkg my_node

🧰 階段 6:用 VS Code 遠程開發(可選但強烈推薦)

?6.1 宿主機安裝 VS Code 插件

- Remote-Containers  #安裝這個插件
- Docker

?6.2 連接容器

1. 打開 VS Code
2. F1 → `Dev Containers: Attach to Running Container`
3. 選 `ros2_dev`
4. 打開 `/root/ros2_ws` 目錄
5. 安裝 C++ 擴展、ROS 擴展,即可補全、調試

📦 階段 7:把環境固化成鏡像(可選)

如果你團隊其他人也想用同樣環境,可以寫個 Dockerfile:

```Dockerfile
FROM osrf/ros:humble-desktop-full

# 安裝常用工具

RUN apt-get update && apt-get install -y \vim \git \gdb \&& rm -rf /var/lib/apt/lists/*

把源碼也放進去(演示)
COPY ./src /root/ros2_ws/src
WORKDIR /root/ros2_ws
RUN /bin/bash -c "source /opt/ros/humble/setup.bash && colcon build"

構建并推送:

docker build -t my_ros2_cpp:latest .
docker tag my_ros2_cpp:latest your_dockerhub_user/my_ros2_cpp:latest
docker push your_dockerhub_user/my_ros2_cpp:latest

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/96850.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/96850.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/96850.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SQL Server縮小日志文件.ldf的方法(適用于開發環境)

SQL Server縮小日志文件.ldf的方法&#xff08;適用于開發環境&#xff09; 核心概念&#xff1a;為什么日志文件會變大&#xff1f; 首先&#xff0c;理解原因至關重要。事務日志文件在以下情況下會增長&#xff1a; 大量操作&#xff1a;執行了大批量插入、更新或刪除操作&am…

2.3零基礎玩轉uni-app輪播圖:從入門到精通 (咸蝦米總結)

還在uni-app中的輪播圖組件頭疼嗎&#xff1f;看完這篇&#xff0c;讓你輕松掌握swiper的所有秘密&#xff01;輪播圖的重要性 在現代移動應用開發中&#xff0c;輪播圖&#xff08;Swiper&#xff09;已成為展示焦點內容、廣告推廣和產品展示的首選組件。無論是電商平臺的商品…

FPGA學習筆記——AHT20溫濕度讀取并在串口顯示(IIC協議)

目錄 一、任務 二、分析 1.需要了解的 2.需要用到的模塊 3.流程分析 三、Visio圖 四、代碼 五、實驗現象 一、任務 使用IIC協議通信的AHT20&#xff0c;將溫濕度數據讀取出來&#xff0c;并在串口助手上顯示。 二、分析 1.需要了解的 需要了解IIC協議簡介 也可以看看E…

Pycharm SSH連接

添加遠程服務器文件——>設置——>項目下的Python解釋器——>添加解釋器——>SSH在彈出的彈窗中&#xff0c;輸入遠程的主機、端口和用戶名、一直下一步&#xff0c;得到如下圖所示的結果&#xff1a;選擇Conda 環境&#xff1a;第一步選擇Conda環境&#xff1b;第…

c# 讀取xml文件內的數據

好多大型的項目&#xff0c;把一些固定的參數都存在 xml文件里。創建c# winfom 項目&#xff0c;test_xml創建resources文件夾存放xml文件創建parameters.xml文件<root><test_xml><param name "threshold" value "128"/><param name …

Legion Y7000P IRX9 DriveList

Legion Y7000P IRX9 DriveList 聯想Y7000P驅動列表 驅動列表 intelwlan-TYY5057FK6MQBRF0.exe NVVGA-TYY5057F3M0H9RF0.exe RTKwlan-TYY5077FFSNECRF0.exe audio-TYY5057F4N1JARF0.exe chipset-TYY5037FB10X3RF0.exe hdr-TYY5027FXNF9AWF0.exe intelVGA-TYY5057F5R9J7RF…

編程與數學 02-017 Python 面向對象編程 23課題、測試面向對象的程序

編程與數學 02-017 Python 面向對象編程 23課題、測試面向對象的程序一、單元測試&#xff08;Unit Testing&#xff09;使用 unittest 模塊使用 pytest二、集成測試&#xff08;Integration Testing&#xff09;三、模擬對象&#xff08;Mocking&#xff09;四、測試驅動開發&…

[React]Antd Cascader組件地區選擇

前言表單中添加一個地區選擇功能&#xff0c;要求支持增刪改查功能。Cascader 使用Cascader組件動態加載地區選項。使用 loadData 實現動態加載選項&#xff0c;&#xff08;loadData 與 showSearch 無法一起使用&#xff09;。 這里使用了Form.Item組件。 <Form.Itemlabel{…

深度學習-----《PyTorch神經網絡高效訓練與測試:優化器對比、激活函數優化及實戰技巧》

一、訓練過程并行批量訓練機制一次性輸入64個批次數據&#xff0c;創建64個獨立神經網絡并行訓練。所有網絡共享參數&#xff08;Ω&#xff09;&#xff0c;更新時計算64個批次的平均損失&#xff0c;統一更新全局參數。梯度更新策略使用torch.no_grad()上下文管理器清理反向傳…

Matplotlib 可視化大師系列(五):plt.pie() - 展示組成部分的餅圖

目錄Matplotlib 可視化大師系列博客總覽Matplotlib 可視化大師系列&#xff08;五&#xff09;&#xff1a;plt.pie() - 展示組成部分的餅圖一、 餅圖是什么&#xff1f;何時使用&#xff08;何時避免&#xff09;&#xff1f;二、 函數原型與核心參數三、 從入門到精通&#x…

C++ Core Guidelines 核心理念

引言 C 是一門功能強大但復雜性極高的編程語言。為了幫助開發者更高效、安全地使用現代 C&#xff0c;C 核心指南&#xff08;CppCoreGuidelines&#xff09;應運而生。這份由 C 之父 Bjarne Stroustrup 等人主導的指南&#xff0c;提供了大量關于 C 編碼的規則、最佳實踐和設…

vue3 - 組件間的傳值

組件間傳參 父傳子v-on/props 父組件使用v-on:綁定要傳的參數:parentData"parentData"&#xff1a; <template><div><Child1 :parentData"parentData"></Child1></div> </template> <script setup lang"ts…

Kafka 在 6 大典型用例的落地實踐架構、參數與避坑清單

一、選型速查表場景關鍵目標推薦清單&#xff08;示例&#xff09;消息&#xff08;Messaging&#xff09;解耦、低延遲、可靠投遞acksall、enable.idempotencetrue、retries>0、min.insync.replicas2、合理分區鍵、DLT網站活動追蹤吞吐極高、可回放主題按類型拆分&#xff…

Node.js(1)—— Node.js介紹與入門

前面我們談到一些前端開發的內容&#xff0c;學習了HTML、css和JavaScript&#xff0c;已經掌握了如何編寫一些簡單功能的網頁。但是只屬于前端部分&#xff0c;我們只能在本地打開文件進行瀏覽&#xff0c;不能讓其他人打開我們編寫的網站&#xff1b;這時就需要后端部分上場了…

Python辦公——爬蟲百度翻譯網頁版(自制翻譯小工具——進階更新版)

目錄 專欄導讀 前言 項目概述 功能特點 技術棧 核心架構設計 類結構設計 界面布局設計 核心功能實現 1. 智能語言檢測 2. 異步翻譯處理 3. HTTP請求處理 4. 結果解析與顯示 界面設計亮點 1. 響應式布局 2. 用戶體驗優化 3. 現代化組件 技術難點與解決方案 1. 跨線程UI更新 2. U…

CentOS7 + Docker 部署 Dify 超詳細圖文教程

如今Agent在互聯網上大行其道&#xff0c;網上吵得火熱&#xff0c;各個企業也都想搭建自己的Agent。COZE的開源還有最近新出的JoyAgent也都讓大家躍躍欲試&#xff0c;今天為大家帶來的是Dify的部署方式&#xff0c;相比其他工作流平臺&#xff0c;Dify對于整個Agent制作的流程…

vscode(MSVC)進行c++開發的時,在debug時查看一個eigen數組內部的數值

vscode進行c開發的時&#xff0c;在debug時查看一個eigen數組內部的數值問題描述解決方案拓展其他可視化使用visual studio時的可視化使用別的編譯器的可視化問題描述 使用vscode進行c開發&#xff0c;編譯器是MSVC&#xff0c;在debug的時候想查看一個eigen數組的數值&#x…

【51單片機】【protues仿真】基于51單片機八路搶答器數碼管系統

目錄 一、主要功能 二、使用步驟 三、硬件資源 四、軟件設計 五、實驗現象 一、主要功能 1、數碼管顯示 2、主持人按下開始&#xff0c;8位選手開始搶答 3、第一次使用要設置搶答時間&#xff0c;支持掉電存儲 4、選手搶答成功&#xff0c;數碼管會顯示其號碼 5、按下主…

深度學習:CUDA、PyTorch下載安裝

目錄 一、安裝準備 二、安裝CUDA 2.1 查看本機支持的 CUDA 版本及相關信息 2.2 卸載CUDA(可選) 2.3 下載cuda安裝包 2.4 安裝 2.5 配置環境變量 三、安裝PyTorch 3.1 版本選擇 3.2 下載安裝 方法一&#xff1a;直接安裝&#xff08;不建議&#xff0c;網差的話會死機…