raspberry pi/orienge pi等arm架构硬件打包ros humble docker视觉及机器人开发镜像

本文介绍了如何为raspberry pi/orange pi等ARM架构硬件打包ROS2 humble docker镜像。内容包括:选择humble镜像、修改apt源和ROS源、编写Dockerfile、启动和管理镜像。该定制镜像适用于机器人、视觉和控制开发,预先安装了所需环境和torch CPU版。
摘要由CSDN通过智能技术生成

raspberry pi/orienge pi等arm架构硬件打包ros humble docker开发镜像

前言

这篇文章主要用于定制化打包需要的docker镜像,由于ros1提供的镜像源是国外的很多软件无法更新,所以这篇文章讲如何通过定制的方式修改源,并且提前安装好需要的环境软件等。

docker hub中提供的镜像包含下边三种架构:

docker pull时会自动根据架构拉取对应的镜像,本文选择的是humble镜像,镜像名如下:

ros:humble-perception-jammy

本文开发的基础环境:

名称内容
系统ubuntu 22.04 / debian buster
硬件raspberry pi或orange pi arm64V8(32V7理论上也是可以的)
内存8G
硬盘32GB

如果是 arm64V8可以直接拉取博主上传的镜像,根据后续docker-compose启动即可:

docker pull binglee75/humble_arm_v8:240522

准备工作

安装docker可以通过这篇文章安装《如何建立并使用docker

启动ros2 docker可以参考这篇文章《raspberry/arm 搭建ros2 docker开发环境

国内镜像加速可参考《docker使用http服务及国内镜像加速_docker http-CSDN博客

拉取镜像

本地拉取ros:humble-perception-jammy2镜像

docker pull ros:humble-perception-jammy

编写Dockerfile

Dockerfile是指导docker打包镜像的指引文件,总体文件结构如下:

.
├── Dockerfile
├── base
│   ├── base.bash
│   ├── pip.tsinghua.conf
│   ├── requirements.txt
│   ├── ros_entrypoint.sh
│   └── sources.list
└── docker-compose.yaml

下边是一份简单的文件,博主替换了现有镜像中的apt源与ros源,避免下载速度慢和连接不上的问题

FROM ros:humble-perception-jammy
LABEL Description="A Dockerfile to ros humble $RES_NAME:$TAG" Author="LinxinLi" Version="0.1"

SHELL ["/bin/bash", "-o", "pipefail", "-c"]

COPY base /app/base
WORKDIR /app/base
RUN ./base.bash

# 默认登陆用户
USER dev

ENTRYPOINT ["/ros_entrypoint.sh"]

CMD ["bash"]

sources.list 内容如下

# /etc/apt/source.list
deb http://repo.huaweicloud.com/ubuntu-ports/ jammy main restricted universe multiverse
deb http://repo.huaweicloud.com/ubuntu-ports/ jammy-security main restricted universe multiverse
deb http://repo.huaweicloud.com/ubuntu-ports/ jammy-updates main restricted universe multiverse
deb http://repo.huaweicloud.com/ubuntu-ports/ jammy-proposed main restricted universe multiverse
deb-src http://repo.huaweicloud.com/ubuntu-ports/ jammy main restricted universe multiverse
deb-src http://repo.huaweicloud.com/ubuntu-ports/ jammy-security main restricted universe multiverse
deb-src http://repo.huaweicloud.com/ubuntu-ports/ jammy-updates main restricted universe multiverse
deb-src http://repo.huaweicloud.com/ubuntu-ports/ jammy-proposed main restricted universe multiverse

base.bash 内容如下

#!/bin/bash

set -e

# Clear official mirror
rm -f /etc/apt/sources.list
touch /etc/apt/sources.list

# Add ubuntu huawei mirror
cp ./sources.list /etc/apt/sources.list.d

# Add Pip tsinghua mirron
cp ./pip.tsinghua.conf /etc/pip.conf

# reset ros entrypoint
rm -f /ros_entrypoint.sh
cp ./ros_entrypoint.sh /ros_entrypoint.sh

# Create $USER
useradd -m -s /bin/bash -u 1000 -p '$y$j9T$VgKHVyg3h4qyu.V2kBzuj0$Q2GZP1BaFXHsEN3nwid5j/LcwRzecMWWd4SlM5F/15.' dev
usermod -aG sudo dev

# Install necessary
apt-get update
apt-get install --assume-yes --no-install-recommends --quiet=2 \
        ranger \
        tmux \
        vim \
        net-tools \
        iproute2 \
        cmake \
        libtorch-dev \
        python3-pip

# Install python packages
su dev
pip3 install -r requirements.txt

编译docker镜像

docker build -t binglee75/humble_arm_v8:240522 .
[+] Building 0.3s (9/9) FINISHED                                                                                                       docker:default
 => [internal] load build definition from Dockerfile                                                                                             0.0s
 => => transferring dockerfile: 346B                                                                                                             0.0s
 => [internal] load metadata for docker.io/library/ros:humble-perception-jammy                                                                   0.0s
 => [internal] load .dockerignore                                                                                                                0.0s
 => => transferring context: 2B                                                                                                                  0.0s
 => [internal] load build context                                                                                                                0.0s
 => => transferring context: 259B                                                                                                                0.0s
 => [1/4] FROM docker.io/library/ros:humble-perception-jammy                                                                                     0.0s
 => CACHED [2/4] COPY base /app/base                                                                                                             0.0s
 => CACHED [3/4] WORKDIR /app/base                                                                                                               0.0s
 => CACHED [4/4] RUN ./base.bash                                                                                                                 0.0s
 => exporting to image                                                                                                                           0.0s
 => => exporting layers                                                                                                                          0.0s
 => => writing image sha256:cffb8cb4a411077c9559df41ce8de8bc676bfbf485f2117cb51d755dea47b3f7                                                     0.0s
 => => naming to docker.io/binglee75/humble_arm_v8:240522 

启动镜像

便捷启动可以采用docker run命令,如下直接进入容器,会在退出后自动删除:
docker run -it --rm binglee75/humble_arm_v8:240522 bash

博主使用的是docker-compose启动

docker-compose文件编写

networks: {}
services:
  core:
    command: bash
    container_name: humble_armv8_ros_core
    environment:
      DISPLAY: ${DISPLAY}
      ROS_DOMAIN_ID: 8
      TERM: xterm-256color
    hostname: humble
    image: binglee75/humble_arm_v8:240522
    logging:
      driver: json-file
      options:
        max-file: '5'
        max-size: 10m
    network_mode: host
    privileged: true
    shm_size: 2g
    stdin_open: true
    tty: true
    restart: always
    volumes:
      - /dev:/dev:rw
      - /media:/media:rw
      - /usr/share/zoneinfo/Hongkong:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
      - /tmp/.X11-unix:/tmp/.X11-unix:rw
      - /usr/bin/docker:/usr/bin/docker:rw
      - /run/docker.sock:/var/run/docker.sock:rw
      - /home/HwHiAiUser/log/.ros:/home/dev/.ros:rw
      - /home/HwHiAiUser/workspace:/home/dev/workspace:rw
    working_dir: /home/dev
version: '2.3'
volumes: {}

注意上边的本地路径换成你对应的用户地址/home/HwHiAiUser/log/.ros其中HwHiAiUser换成你的本地路径。

启动如下:

 docker-compose up -d
 docker exec -it humble_armv8_ros_core bash
 source /ros_entrypoint.sh

总结

ros2 arm架构的镜像个人定制大体如上所述,之所以整理这篇文章是机器人,视觉,控制等相关环境在ros包中都做好了选型,可以直接在内部做开发,博主这个镜像对torch cpu版也做了安装,方便开发使用。


  1. ros - Official Image | Docker Hub ↩︎

  2. ros:humble-perception-jammy ↩︎

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

机器人梦想家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值