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

如何用Docker部署ROS2

自身电脑ubuntu20.04

由于工作需要humble,遂采用docker安装

安装之前可以先用鱼香ROS的一键安装代码,里面又一键安装docker以及ROS docker版

但是一键安装过程中有人可能出现报错,无法下载(比如我),所以整理一下安装的全过程

Error response from daemon: Get "https://registry-1.docker.io/v2/": 
net/http: request canceled while waiting for connection(Client.Timeout exceeded while awaiting headers)
​

一 安装docker

安装docker这一步采用鱼香ROS的一键安装,比起网上很多帖子都好用。

安装好之后可以使用下面命令检验是否安装成功

docker --version #查询版本docker run hello-world # 下载测试镜像并输出欢迎信息

如果能成功输出 “hello-world" 即为安装成功

二 安装docker后部署ROS2

2.1安装docker后先更换源

2.1.1 新建文件 /etc/docker/daemon.json

这个etc在计算机文件夹下,在主目录下是找不到的

2.1.2 输入国内docker hub地址。我推荐使用VS code 编辑(因为Vim不是很熟练)

{"registry-mirrors": ["https://docker.m.daocloud.io","https://dockerproxy.com","https://docker.mirrors.ustc.edu.cn","https://docker.nju.edu.cn"]
}

2.1.3 修改/etc/resolv.conf (VS code)

nameserver 114.114.114.114
nameserver 8.8.8.8

 2.1.4 保存之后在终端运行命令生效修改

sudo systemctl daemon-reload
sudo systemctl restart docker

    在运行过程中,需要加入docker用户组,否则会出现下面的报错(如果出现报错的请看2.2)
    (没出现报错请移步2.3)

    (base) hdr@hdr:~$ sudo systemctl daemon-reload
    (base) hdr@hdr:~$ sudo systemctl restart docker
    (base) hdr@hdr:~$ docker pull ros:humble
    permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.49/images/create?fromImage=docker.io%2Flibrary%2Fros&tag=humble": dial unix /var/run/docker.sock: connect: permission denied

    2.2 创建 docker 用户组(若已加入可以跳过此步骤)

    创建用户组

    sudo groupadd docker  # 如果提示组已存在可忽略

     加入用户组

    sudo usermod -aG docker $USER  # 将用户 hdr 加入 docker 组

     刷新用户组权限

    newgrp docker  # 立即激活组权限变更(无需重启系统)

    测试 

    docker run hello-world  # 测试非 root 权限运行容器

    2.3 安装ROS2 humble版本

    以下是安装 ROS2 Humble 版本的完整整理流程,结合 Docker 环境进行优化说明:

    2.3.1 拉取 ROS2 Humble 镜像

    docker pull ros:humble  # 从官方仓库下载基础镜像
    • 镜像大小约 1.2GB,耐心等待下载完成

    2.3.2 创建并启动容器

    docker run -it --network=host -d \-v /dev:/dev \  -v /tmp/.X11-unix:/tmp/.X11-unix \  # 允许 GUI 显示--name humble \-e DISPLAY=${DISPLAY} \  # 传递显示变量--restart=always \  # 自动重启ros:humble \/bin/bash  # 启动 Bash Shell
    • 关键参数说明​:
      • --network=host:容器共享宿主机网络,避免端口映射问题
      • -v /tmp/.X11-unix:必需用于 RViz/RQT 等 GUI 工具

    2.3.3 配置 X11 权限

    xhost +local:  # 安全模式:仅允许本地用户访问 X Server

    2.3.4 进入容器环境

    docker ps -a  # 查看容器 ID(我的是 e06329ced499)
    docker exec -it e06329ced499 /bin/bash  # 进入容器 这个e06329ced499是容器ID,需要换成自己的
    #注意e06329ced499后面有个空格 这个命令接收两个参数 e06329ced499 和 /bin/bash

    2.3.​5 创建 用户

    useradd -m -s /bin/bash ubuntu  # 创建用户
    passwd ubuntu  # 设置密码(输入两次)
    usermod -aG sudo ubuntu  # 赋予 sudo 权限

    2.3.6. 更新系统及安装依赖

    apt-get update -y && apt-get upgrade -y  # 更新软件包
    apt-get install vim -y  # 安装文本编辑器
    apt-get install ros-humble-desktop-full -y  # 安装完整桌面版
    • ros-humble-desktop-full 包含 RViz、Gazebo 等可视化工具

    2.3.7 配置环境变量

    echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc  # 永久生效
    source ~/.bashrc  # 立即加载环境

    2.3.8. 验证安装

    ros2 run turtlesim turtlesim_node #ROS2最最熟悉的小海龟
    

     

     

    如果能出现一只可爱的小海龟,那么说明你成功了!

     

    好了,这些就是我这两天遇到的坑。

    http://www.dtcms.com/a/307037.html

    相关文章:

  • (C++)C++类和类的方法(基础教程)(与Python类的区别)
  • c++之基础B之sort排序(第三个参数没有)(第二课)
  • Fiddler中文教程 从入门到进阶的网络抓包与接口调试实战指南
  • Python Pandas.merge_asof函数解析与实战教程
  • VUE前端
  • [Agent开发平台] API网关 | 业务领域 | DTO格式 | 分页令牌
  • React 服务端渲染(SSR)详解
  • 使用 cron 配合 Docker 实现定时任务
  • 神经网络的并行计算与加速技术
  • 模型相关类代码回顾理解 | BatchNorm2d\fc.in_features\nn.Linear\torchsummary
  • Haproxy 七层代理深度解析
  • Ubuntu 本地部署和使用 n8n 指南and ai almost anything
  • REST、GraphQL、gRPC、tRPC深度对比
  • Python Day19 时间模块 和 json模块 及例题分析
  • Dify案例2:基于Workflow的小红书笔记AI智能体以及AI绘图过程中遇到的问题
  • USRP捕获手机/路由器数据传输信号波形(上)
  • Vue面试
  • HTML基础P2 | JS基础讲解
  • 《汇编语言:基于X86处理器》第10章 复习题和练习
  • HTTPS基本工作过程:基本加密过程
  • 谈谈毕业工作一年后的变化
  • c#_文件的读写 IO
  • 关系型数据库架构最优选择:基于落霞归雁思维框架的分析
  • 7月30日作业
  • Spring Boot 数据源配置中为什么可以不用写 driver-class-name
  • 第六章第一节 TIM 定时中断
  • vue2中的过滤器filter
  • 1+1>2!特征融合如何让目标检测更懂 “场景”?
  • 深入理解数据库事务:从概念到实践
  • 防止飞书重复回调通知分布式锁