2、开发环境搭建:搭建PX4固件编译环境、配置Eclipse/VSCode调试环境、安装QGroundControl地面站

好,咱们正式开始动手。这一章说白了就是「把家伙事儿备齐」。我见过太多人卡在环境搭建这一步,一卡就是一整天。其实没那么玄乎,跟着我一步步来,半小时内你就能把PX4固件编译出来。

2.1 搭建PX4固件编译环境

PX4的编译环境,我推荐直接用Ubuntu 20.04 LTS。为什么?因为官方支持最稳,踩坑最少。我自己试过22.04,也能跑,但有些依赖包需要手动处理,麻烦。

2.1.1 安装基础依赖

打开终端,先更新一下包列表:

sudo apt update
sudo apt upgrade -y

然后安装PX4官方推荐的依赖包。嗯,这里有个坑——千万别漏掉python3-pip和ninja-build,少了它们后面编译会报一些莫名其妙的错。

sudo apt install -y \
    git zip cmake build-essential \
    ninja-build \
    python3-pip python3-dev python3-venv \
    libxml2-dev libxslt1-dev \
    libgstreamer1.0-dev \
    libgstreamer-plugins-base1.0-dev \
    libqt5gui5 libqt5core5a libqt5widgets5 \
    libsdl2-dev \
    ccache
小提示: 我个人习惯装完依赖后跑一遍 ccache -s 检查缓存是否启用。ccache能让你第二次编译快3倍以上,尤其是改了一点点代码后重新编译,体验差距巨大。

2.1.2 安装ARM交叉编译工具链

PX4飞控的芯片大多是ARM Cortex-M或Cortex-R系列,所以我们需要ARM的gcc编译器。官方推荐的是gcc-arm-none-eabi。

sudo apt install -y gcc-arm-none-eabi

装完后验证一下:

arm-none-eabi-gcc --version

你应该能看到类似 arm-none-eabi-gcc (GNU Arm Embedded Toolchain) 10.3-2021.10 这样的输出。如果版本太低,我建议去ARM官网手动下载最新版。我在项目中遇到过因为编译器版本太旧,导致某些C++17特性编译不过的情况。

2.1.3 克隆PX4源码并编译

找个你喜欢的目录,比如 ~/workspace

cd ~/workspace
git clone https://github.com/PX4/PX4-Autopilot.git --recursive
cd PX4-Autopilot

注意 --recursive 参数,它会一并拉取所有子模块。如果你忘了加,后面编译时会报 Firmware 目录缺失的错误。我曾经因为这个浪费了半小时。

拉完后,先试试编译一个固件看看环境通不通:

make px4_fmu-v5_default

第一次编译会比较慢,大概10-20分钟,取决于你的机器。如果一切顺利,你会看到类似这样的输出:

-- Build files have been written to: /home/user/workspace/PX4-Autopilot/build/px4_fmu-v5_default
[100%] Linking CXX executable px4_fmu-v5_default.elf
重要: 如果你用的是Windows或macOS,我强烈建议你装个虚拟机或者WSL2。原生Windows编译PX4?我试过,坑多到怀疑人生。老老实实用Linux吧。

2.2 配置VSCode调试环境

我个人更偏爱VSCode,轻量、插件生态好。Eclipse我也用过,但说实话,配置起来太啰嗦了。咱们这里重点讲VSCode。

2.2.1 安装必要插件

打开VSCode,在扩展市场里搜这几个插件,装上:

  • C/C++(微软官方)—— 提供代码补全和调试支持
  • CMake Tools —— 方便管理CMake构建
  • Python —— PX4的一些工具脚本用Python写的
  • GitLens —— 看代码历史很方便

2.2.2 配置launch.json

在VSCode中打开PX4源码目录,按 Ctrl+Shift+D 进入调试面板,点击「创建launch.json」。选C++ (GDB/LLDB)。然后把下面这段配置贴进去:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "PX4 Debug",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/build/px4_fmu-v5_default/src/firmware/px4_fmu-v5_default.elf",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "/usr/bin/arm-none-eabi-gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "build"
        }
    ]
}
注意: miDebuggerPath 要指向你实际的arm-none-eabi-gdb路径。如果你是用apt安装的,一般就在 /usr/bin/arm-none-eabi-gdb。如果你手动装了别的版本,记得改路径。

2.2.3 配置tasks.json

为了让调试前自动编译,我们还需要一个构建任务。按 Ctrl+Shift+P,搜「Tasks: Configure Task」,选「Create tasks.json file from template」,然后选「Others」。把下面内容贴进去:

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "type": "shell",
            "command": "make px4_fmu-v5_default",
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "problemMatcher": []
        }
    ]
}

好了,现在你按 F5,VSCode会自动编译固件,然后启动GDB调试。我第一次配通的时候,心里那个爽啊——终于不用在终端和编辑器之间来回切了。

2.3 安装QGroundControl地面站

QGC是PX4最常用的地面站,用来调参、看日志、刷固件。安装其实很简单。

2.3.1 下载并安装

去QGC的GitHub Releases页面下载最新的AppImage文件。或者直接用命令行:

wget https://github.com/mavlink/qgroundcontrol/releases/latest/download/QGroundControl.AppImage
chmod +x QGroundControl.AppImage
./QGroundControl.AppImage

第一次启动时,它会提示你安装一些依赖。按提示装就行。如果你用的是Ubuntu 20.04,可能需要装这个:

sudo apt install libfuse2
小技巧: 我习惯把QGC固定到任务栏上,或者写个别名到 .bashrc 里:alias qgc='~/workspace/QGroundControl.AppImage'。这样每次启动只要敲 qgc 就行。

2.3.2 连接飞控

用USB线把飞控连到电脑上。QGC会自动识别串口设备。如果没识别到,点右上角的「齿轮」图标 -> 「Comm Links」,手动添加一个串口连接。波特率一般选115200或921600,具体看你的飞控固件配置。

连接成功后,你会看到飞控的姿态数据在3D视图里实时更新。嗯,看到那个小飞机动起来的时候,还是挺有成就感的。

2.4 本章知识体系总览

下面这张图帮你理清整个开发环境的逻辑关系:

开发环境搭建知识体系 PX4编译环境 Ubuntu 20.04 + 依赖 VSCode调试环境 插件 + launch.json QGroundControl 地面站 + 串口连接 git clone + make编译 ARM交叉编译工具链 C/C++ + CMake插件 GDB调试配置 AppImage安装 串口连接与调参 三者配合:编译 → 调试 → 地面站验证

2.5 常见问题与避坑

环境搭建过程中,有几个地方特别容易出问题。我把自己踩过的坑列出来,你遇到了直接对照着看。

问题现象 原因 解决办法
make 报错找不到 px4_fmu-v5_default 子模块未拉取完整 执行 git submodule update --init --recursive
编译时提示 Python module not found 缺少 numpyjinja2 pip3 install numpy jinja2
QGC无法识别飞控串口 用户不在 dialout sudo usermod -a -G dialout $USER 然后注销重登
VSCode调试时GDB连接失败 miDebuggerPath 路径不对 which arm-none-eabi-gdb 确认路径
我曾经踩过的坑: 有一次我编译完固件,烧录到飞控上,结果飞控死活不启动。查了半天,发现是编译时用了错误的板子配置——我明明用的是FMUv5,却编译了v3的固件。所以,编译前一定确认好 make 后面的目标名称对不对。

好了,环境搭好了,下一章咱们就开始写第一个PX4驱动模块。到时候你会看到,代码写起来其实比搭环境还简单。


专注资料整理