在x86/amd64的机器上使用Docker运行arm64v8/ubuntu并安装ROS1

一、准备工作

主要是因为国内网络的问题,可能导致镜像拉取失败,解决办法参考:镜像加速

二、安装运行过程

2.1拉取镜像:

sudo docker pull arm64v8/ubuntu:20.04

这个是ubuntu的拉取指令,其他的也是类似。

2.2 运行镜像

为了在 AMD64 主机上运行 ARM64 容器,你需要安装 QEMU 并注册 binfmt 支持。以下是详细步骤:

安装 QEMU

安装 QEMU 用户模式仿真器:
sudo apt-get update
sudo apt-get install -y qemu-user-static
注册 binfmt:

Docker 提供了一个方便的镜像来注册 binfmt,可以使用以下命令:

docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
验证 QEMU 是否正确安装

你可以使用以下命令来验证:

docker run --rm --privileged multiarch/qemu-user-static:register --reset
运行 ARM64 容器

在安装和注册 QEMU 之后,你应该可以在 AMD64 主机上运行 ARM64 容器:

sudo docker run --platform linux/arm64 -it arm64v8/ubuntu:20.04

2.3 宿主机目录共享

在 Docker 中,可以通过挂载主机目录到容器内的方式实现目录共享。这通常是通过 -v 或 --mount 选项来实现的。以下是具体的步骤和示例:

使用 -v 选项挂载目录

-v 选项用于挂载主机目录到容器内的目录。格式为:-v 主机目录:容器目录。

sudo docker run --platform linux/arm64 -it -v /path/on/host:/path/in/container arm64v8/ubuntu:20.04 /bin/bash

例如,将主机的 /home/user/shared 目录挂载到容器内的/mnt/shared目录:

sudo docker run --platform linux/arm64 -it -v /home/user/shared:/mnt/shared arm64v8/ubuntu:20.04 /bin/bash

使用 --mount 选项挂载目录

例如,将主机的 /home/user/shared 目录挂载到容器内的 /mnt/shared 目录:

sudo docker run --platform linux/arm64 -it --mount type=bind,source=/home/user/shared,target=/mnt/shared arm64v8/ubuntu:20.04 /bin/bash

通过这些方法,可以在 Docker 容器和宿主机之间共享目录,从而方便地在两者之间交换文件。

2.4 启动&删除容器

列出当前的所有容器:

sudo docker ps -a

启动指定的容器:

sudo docker start -i CONTAINER ID

或者使用容器名字

sudo docker start -i 容器名字

删除所有停止运行的容器

sudo docker container prune

删除特定容器

删除特定的容器,假设容器 ID 是 e5c2c5dabc12:

sudo docker rm e5c2c5dabc12

删除所有未使用的镜像、网络和挂载

sudo docker system prune -a

三、安装ROS1

步骤1: 更新和安装基本工具

首先,在容器中更新软件包列表并安装一些基本的工具:

apt-get update
apt-get install -y curl gnupg2 lsb-release

步骤2: 添加ROS Noetic源

添加ROS源到APT源列表

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

步骤3: 添加ROS密钥并安装ROS Noetic

  • 1.添加 ROS 密钥:
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
  • 2.更新软件包索引:
apt-get update
  • 3.安装桌面完整版
apt-get install -y ros-noetic-desktop-full

步骤4: 初始化rosdep

安装完 ROS 后,需要初始化 rosdep:

echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

步骤5: 测试安装

roscore

这将启动 ROS 主节点。如果能够成功启动,说明 ROS Noetic 已经安装和配置成功。

四、遇到的问题

运行指令:

 docker run --rm --privileged multiarch/qemu-user-static:register --reset
Unable to find image 'multiarch/qemu-user-static:register' locally

是因为 multiarch/qemu-user-static:register 镜像未找到。我们可以先拉取这个镜像,然后再运行命令来注册 QEMU。
注意需要在注册QEMU之前,先运行这个指令:

sudo docker pull multiarch/qemu-user-static
### 在 ARM 架构上通过 Docker 容器部署和运行 ROS Noetic 要在 ARM 架构设备(如树莓派或其他基于 ARM 的单板计算机)上使用 Docker 部署运行 ROS Noetic,可以按照以下方法操作: #### 1. 确认硬件支持 首先确认目标 ARM 设备是否能够运行 DockerROS Noetic。通常情况下,ARM v8 (aarch64) 或更高版本的处理器支持大多数现代软件包。 #### 2. 安装 DockerARM安装 Docker 可以参考官方文档[^2]中的说明。对于 Ubuntu 基础系统,执行以下命令来完成安装: ```bash sudo apt-get update sudo apt-get install ca-certificates curl gnupg lsb-release curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io ``` #### 3. 下载适合 ARMROS Noetic 镜像 由于默认的 `osrf/ros` 镜像是针对 x86_64 平台构建的,在 ARM 架构下无法直接使用。因此需要寻找专门适配 ARM 的镜像。可以通过以下方式获取合适的镜像: - 使用社区维护的多架构镜像仓库,例如 Balena 提供的支持多种平台的 ROS 镜像。 - 替代拉取命令如下所示: ```bash docker pull balenalib/raspberrypi4-64-ubuntu:bionic-run docker pull arm64v8/ubuntu:latest ``` 随后可以在这些基础镜像之上手动安装 ROS Noetic 软件包[^5]。 或者尝试从第三方源下载预编译好的 ROS Noetic ARM 版本镜像文件,如果存在的话,则可以直接调用其地址进行pull动作[^3]。 #### 4. 创建启动容器 创建一个新的 Docker 容器实例,挂载必要的目录以便访问主机上的数据资源以及共享网络接口等特性。下面是一个例子脚本用于初始化带图形界面支持的功能性环境: ```bash xhost + docker run -it --net=host --privileged \ -e DISPLAY=$DISPLAY \ -v /tmp/.X11-unix:/tmp/.X11-unix:rw \ -v $HOME:$HOME \ -w $PWD \ your_arm_ros_noetic_image bash ``` 这里假设已经有一个名为 `your_arm_ros_noetic_image` 的定制化镜像可用;如果不是这样则需自行制作满足需求的基础映射关系表之后再提交至本地注册中心作为后续引用依据之一[^4]。 #### 5. 自动加载 ROS 环境变量 为了使每次进入新的 Bash shell 后都能立即生效对应的 ROS 设置参数,可将下列语句追加到用户的 `.bashrc` 文件当中去实现自动化处理过程: ```bash echo 'source /opt/ros/noetic/setup.bash' >> ~/.bashrc && source ~/.bashrc ``` --- ### 注意事项 尽管上述流程适用于大部分场景下的标准配置情况,但在实际应用过程中仍可能遇到某些特定问题比如依赖冲突或者是性能瓶颈等方面的影响因素都需要额外加以考虑解决办法才行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

蒙蒂锅巴

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

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

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

打赏作者

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

抵扣说明:

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

余额充值