保姆级教程:在Ubuntu 20.04上用Docker容器搞定PX4开发环境(附Java报错解决)
保姆级教程:Ubuntu 20.04下用Docker容器快速构建PX4开发环境
在无人机开发领域,环境配置一直是新手面临的第一道门槛。传统方式需要手动安装数十个依赖项,不仅耗时费力,还容易因系统环境差异导致各种兼容性问题。本文将带你用Docker容器这一现代化工具,在Ubuntu 20.04系统上快速搭建一个隔离、可复现的PX4开发环境,彻底告别"在我的机器上能运行"的经典难题。
1. 环境准备与基础配置
1.1 系统要求与Docker安装
推荐使用Ubuntu 20.04 LTS作为宿主系统,这个版本不仅长期支持,也与PX4官方Docker镜像保持最佳兼容。首先确保系统已更新:
sudo apt update && sudo apt upgrade -y
安装Docker引擎是第一步,官方提供的一键安装脚本最为可靠:
curl -fsSL https://get.docker.com | sudo sh
验证安装是否成功:
sudo docker run hello-world
提示:将当前用户加入docker组可避免每次使用sudo:
sudo usermod -aG docker $USER,执行后需注销重新登录生效
1.2 配置Docker加速镜像
国内用户常遇到镜像拉取缓慢的问题,可通过配置镜像加速解决。创建或修改
/etc/docker/daemon.json
:
{
"registry-mirrors": [
"https://mirror.iscas.ac.cn",
"https://docker.1ms.run"
]
}
重启服务使配置生效:
sudo systemctl restart docker
2. PX4开发环境容器化方案
2.1 官方镜像选择策略
PX4团队维护了多个不同用途的Docker镜像,主要分为几个层级:
| 镜像名称 | 包含组件 | 适用场景 |
|---|---|---|
| px4io/px4-dev-base-focal | 基础编译环境 | 最小化安装 |
| px4io/px4-dev-nuttx-focal | 基础+Nuttx OS工具链 | 飞控固件编译 |
| px4io/px4-dev-simulation-focal | 基础+Gazebo/jMAVSim等模拟器 | 软件在环仿真(SITL) |
| px4io/px4-dev-ros2-foxy | 基础+ROS2 Foxy框架 | ROS2集成开发 |
对于大多数开发者,
px4io/px4-dev-simulation-focal
是最平衡的选择,它同时包含编译和仿真所需的所有工具。
2.2 源码获取与容器启动
创建工作目录并克隆PX4源码:
mkdir -p ~/px4_ws/src && cd ~/px4_ws/src
git clone https://github.com/PX4/PX4-Autopilot.git --recursive
拉取仿真开发镜像:
docker pull px4io/px4-dev-simulation-focal
启动容器时需特别注意目录映射和显示设置:
xhost +local:docker
docker run -it --privileged \
-v ~/px4_ws/src:/src \
-v /tmp/.X11-unix:/tmp/.X11-unix:ro \
-e DISPLAY=$DISPLAY \
--name px4_dev \
--network host \
px4io/px4-dev-simulation-focal
注意:
--privileged参数赋予容器访问宿主设备的权限,这对硬件调试是必要的
3. 常见问题深度解决
3.1 Java版本冲突问题
当使用jMAVSim仿真时,可能遇到Java版本不兼容的错误:
Unrecognized option: --add-exports
Error: Could not create the Java Virtual Machine.
这是因为旧版Java(如1.8)不支持新语法。容器内执行以下命令解决:
apt update && apt install -y openjdk-11-jdk
update-alternatives --config java # 选择Java 11
验证版本:
java -version # 应显示"11.x.x"
3.2 仿真加速技巧
默认仿真速度较慢,可通过环境变量提升10倍速:
export PX4_SIM_SPEED_FACTOR=10
make px4_sitl jmavsim
对于性能要求更高的场景,推荐使用Gazebo Classic:
make px4_sitl gazebo-classic
3.3 多容器协作方案
当需要同时进行固件编译和仿真时,可采用多容器方案:
# 编译容器
docker run -itd --name px4_build -v ~/px4_ws/src:/src px4io/px4-dev-nuttx-focal
# 仿真容器
docker run -itd --name px4_sim -v ~/px4_ws/src:/src --network host px4io/px4-dev-simulation-focal
通过
docker exec
在容器间切换:
docker exec -it px4_build make px4_fmu-v3_default
docker exec -it px4_sim make px4_sitl gazebo
4. 进阶开发技巧
4.1 地面站集成
QGroundControl(QGC)是PX4的官方地面站,下载地址:
wget https://d176tv9ibo4jno.cloudfront.net/latest/QGroundControl.AppImage
chmod +x QGroundControl.AppImage
./QGroundControl.AppImage
配置MAVLink通信:
mavlink start -p -u 14556 -o 14550
4.2 自定义镜像构建
当需要添加特殊依赖时,可基于官方镜像构建自定义镜像。创建
Dockerfile
:
FROM px4io/px4-dev-simulation-focal
# 安装额外工具
RUN apt update && apt install -y \
python3-pip \
ros-noetic-mavros
# 配置工作环境
WORKDIR /src
构建并运行:
docker build -t px4-custom .
docker run -it --rm px4-custom
4.3 硬件调试技巧
烧录固件到Pixhawk硬件时,确保设备权限正确:
sudo usermod -a -G dialout $USER
sudo apt install modemmanager
常用烧录命令:
make px4_fmu-v5_default upload # 针对不同硬件修改目标名称
遇到烧录失败时,尝试复位Bootloader:按住飞控板上的复位按钮同时连接USB。
更多推荐


所有评论(0)