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 .
典型工作流¶
- 在 WSL2 中开发算法:使用 ROS + Python/C++ 完成感知/控制算法
- 编写 Dockerfile:封装算法及其所有依赖
- 构建 ARM64 镜像:使用 Docker Buildx 跨架构编译
- 推送镜像:上传到 Docker Hub 或私有镜像仓库
- 机载端拉取并运行:在 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\ |