学习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;网差的话会死机…