跳转至

Docker — 容器化跨平台部署


Docker 在 RflySim 工具链中用于实现机载算法的容器化打包与跨架构部署,是从仿真环境到真实机载计算机部署的关键桥梁。


为什么需要 Docker?

在无人系统开发中,算法通常在 x86 个人计算机上开发,但最终需要部署到 ARM 架构的机载计算机(如 Jetson Orin NX、RK3588)。Docker 解决了以下问题:

问题 Docker 的解决方案
依赖冲突 容器内封装完整的运行环境,不影响宿主系统
跨平台部署 使用 Docker Buildx 生成 ARM64 镜像
环境一致性 开发 → 仿真 → 部署使用相同的容器镜像
快速迭代 修改算法后只需重新构建镜像,无需重配环境

环境要求

  • WSL2 环境(Docker 需要完整 Linux 内核)
  • Docker Desktop for Windows 或在 WSL2 内安装 Docker Engine

WSL2 必需

Docker 不支持 WSL1。如果当前使用 WSL1,需要先切换到 WSL2。切换方法请参阅 WinWSL


跨架构镜像生成

RflySim 支持在 x86 个人计算机上直接生成 ARM64 架构的机载计算机算法镜像:

graph LR
    A[x86 开发机<br>Windows + WSL2] --> B[Docker Buildx<br>多架构构建]
    B --> C[ARM64 镜像]
    C --> D[推送到镜像仓库]
    D --> E[Jetson Orin NX<br>ARM64 机载计算机]
    E --> F[docker pull & run]

构建示例

# 在 WSL2 环境中执行
# 启用 QEMU 多架构支持
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes

# 创建跨架构构建器
docker buildx create --name multiarch --driver docker-container --use

# 构建 ARM64 镜像并推送
docker buildx build --platform linux/arm64 -t myregistry/my-uav-app:latest --push .

典型工作流

  1. 在 WSL2 中开发算法:使用 ROS + Python/C++ 完成感知/控制算法
  2. 编写 Dockerfile:封装算法及其所有依赖
  3. 构建 ARM64 镜像:使用 Docker Buildx 跨架构编译
  4. 推送镜像:上传到 Docker Hub 或私有镜像仓库
  5. 机载端拉取并运行:在 Jetson 等平台上 docker pull 后即可运行

与 RflySim 仿真的集成

在仿真阶段,也可以将算法容器化运行在 WSL2 的 Docker 中,通过网络与 CopterSim / RflySim3D 通信,实现"容器化机载系统在环仿真":

组件 运行位置
CopterSim / RflySim3D Windows 原生
PX4 SITL WSL2 或 Docker
感知/决策算法 WSL2 Docker 容器

相关例程

例程 路径
WSL2 + Docker 环境 RflySimAPIs\1.RflySimIntro\2.AdvExps\e13.WinWSL2-GPU
Docker 算法部署 RflySimAPIs\2.RflySimUsage\2.AdvExps\