Docker 环境

仓库的 docker/ 目录提供了基于 Ubuntu 20.04、ROS Noetic、PX4 v1.15.0 与 Gazebo Classic 的构建模板。Docker 可以隔离依赖,但图形显示、显卡权限和主机网络仍需按本机环境配置。

构建前检查

进入 Docker 目录:

cd ~/swiftwing_ws/src/docker

当前模板中有两项需要按实际环境确认:

  1. dockfile-swiftwing 中的代理地址只是示例。无需代理时删除对应 ENV 行;需要代理时填写容器可访问的代理地址。
  2. Dockerfile 使用 COPY files/requirements.txt,而仓库目录名为 docker_files。构建前将该行改为:
COPY docker_files/requirements.txt ./PX4-Autopilot/Tools/setup/requirements.txt

构建镜像

sudo docker build --network=host \
  -f dockfile-swiftwing \
  -t swiftwing-simulation:latest .

如果基础镜像下载中断,可以先单独拉取:

sudo docker pull px4io/px4-dev-simulation-focal:2024-05-18

启动带图形界面的容器

允许本机 X Server 接受本地 Docker 连接:

xhost +local:docker

启动容器并映射当前源码:

sudo docker run --rm -it \
  --device=/dev/dri \
  --group-add video \
  --network=host \
  --volume=/tmp/.X11-unix:/tmp/.X11-unix \
  --volume=~/swiftwing_ws/src:/workspace/swiftwing/src \
  --env="DISPLAY=$DISPLAY" \
  swiftwing-simulation:latest /bin/bash

进入容器后编译工作空间:

cd /workspace/swiftwing
catkin_make
source devel/setup.bash
cp src/px4_launch/*.launch /workspace/PX4-Autopilot/launch/

随后可以按照快速开始运行示例。

网络与 QGroundControl

使用 --network=host 时,宿主机上的 QGroundControl 通常可以接收 SITL 的 UDP 数据。如果不使用主机网络,需要自行映射相关 UDP 端口,并检查 launch 文件中的 fcu_url 与 GCS 连接配置。

Note

Docker 模板负责安装基础仿真环境,不会把 SwiftWing 源码固化进镜像。上面的运行命令把宿主机源码挂载到容器中,便于编辑代码后直接重新编译。