Docker 环境¶
仓库的 docker/ 目录提供了基于 Ubuntu 20.04、ROS Noetic、PX4 v1.15.0 与 Gazebo Classic 的构建模板。Docker 可以隔离依赖,但图形显示、显卡权限和主机网络仍需按本机环境配置。
构建前检查¶
进入 Docker 目录:
cd ~/swiftwing_ws/src/docker
当前模板中有两项需要按实际环境确认:
dockfile-swiftwing中的代理地址只是示例。无需代理时删除对应ENV行;需要代理时填写容器可访问的代理地址。- 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 源码固化进镜像。上面的运行命令把宿主机源码挂载到容器中,便于编辑代码后直接重新编译。