2. 基础知识

说实话,很多初学者一上来就急着写代码,结果环境没搭好,后面全是坑。我见过太多人花三天调一个编译错误,最后发现是系统库版本不对。所以这一章,咱们把地基打牢。

开发ArduPilot,我强烈推荐用Ubuntu。为什么?因为PX4和ArduPilot的官方工具链都是基于Linux的。你用Windows也能跑,但相信我,你会多花一倍的时间去处理兼容性问题。

2.1 Ubuntu系统安装与基础配置

我个人习惯用Ubuntu 22.04 LTS。这个版本稳定,软件源丰富,而且ArduPilot官方测试最多的就是它。

2.1.1 安装方式选择

方式 适用场景 我踩过的坑
双系统 主力开发机,需要高性能 分区时记得留至少50GB给Ubuntu,不然装完依赖就满了
虚拟机 学习测试,不想影响主系统 USB直连飞控时容易掉设备,建议用VMware
WSL2 Windows用户过渡方案 图形界面支持差,MAVSDK的串口访问有时会出问题

如果你问我,我会说:双系统最靠谱。虚拟机跑编译太慢,WSL2的USB支持还不够成熟。

2.1.2 安装后的必要操作

装完系统别急着高兴,先做三件事:

  1. 换源——把apt源换成国内镜像,不然下载速度会让你怀疑人生。
  2. 更新系统——sudo apt update && sudo apt upgrade -y,把内核和库都升到最新。
  3. 安装基础工具——gcc、g++、make、cmake、python3-pip,这些是后面所有工作的前提。
我的小技巧:装完系统后,我习惯先装一个build-essential包。它会把编译工具链一次性搞定,省得后面缺什么补什么。

2.2 Git工具使用

Git是版本控制的标配。ArduPilot的代码仓库有几十万次提交,没有Git你根本没法协作。

2.2.1 安装与配置

sudo apt install git -y
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"

这里有个细节:邮箱最好用GitHub注册的那个,不然提交记录里头像显示不出来。

2.2.2 克隆ArduPilot仓库

git clone https://github.com/ArduPilot/ardupilot.git
cd ardupilot
git submodule update --init --recursive

嗯,这里要注意。submodule update这一步会下载很多第三方库,网络不好的话容易超时。我曾经在公司内网搞了一下午,最后发现是代理没配好。

避坑指南:如果你在中国大陆,建议先配好Git代理,或者直接用Gitee的镜像仓库。否则submodule update可能会卡在某个库上下不来。

2.2.3 常用分支管理

ArduPilot的分支策略很清晰:

  • master——开发分支,每天都有新提交,不稳定
  • Copter-X.Y——稳定版分支,比如Copter-4.5
  • release/X.Y——发布候选版,适合测试新功能

我个人建议:学习阶段用稳定版分支。master分支的代码可能今天能编译,明天就报错了。

2.3 MAVSDK环境配置

MAVSDK是Dronecode基金会推出的现代MAVLink库。它比老版的MAVLink库好用太多,API设计也更人性化。

2.3.1 安装依赖

sudo apt install -y \
  cmake \
  build-essential \
  libcurl4-openssl-dev \
  libssl-dev \
  libtinyxml2-dev

这些依赖缺一不可。我遇到过有人漏了libtinyxml2-dev,结果编译到一半报错,排查了半天。

2.3.2 编译MAVSDK

git clone https://github.com/mavlink/MAVSDK.git
cd MAVSDK
cmake -B build/default -DCMAKE_BUILD_TYPE=Debug
cmake --build build/default -j4

-j4表示用4个线程编译。如果你的CPU核心多,可以改成-j8或-j16,能快不少。

核心概念:MAVSDK把MAVLink协议封装成了面向对象的API。你不需要手动拼MAVLink消息,直接调用mavsdk::Telemetry::position()就能拿到GPS坐标。说白了,它帮你把脏活累活都干了。

2.3.3 验证安装

编译完成后,可以跑一下自带的测试:

cd build/default
./src/mavsdk/tests/mavsdk_Test

如果输出一堆绿色的PASS,说明环境没问题。如果报错,多半是依赖没装全。

2.4 DroneKit环境配置

DroneKit是Python版的MAVLink库。它比MAVSDK更轻量,适合快速原型开发。我个人习惯用DroneKit做地面站脚本,用MAVSDK做嵌入式端。

2.4.1 安装DroneKit

pip3 install dronekit
pip3 install dronekit-sitl

dronekit-sitl是软件在环仿真工具,可以让你在没有飞控的情况下测试代码。这个非常实用,我写脚本时基本都先用SITL跑一遍。

2.4.2 连接SITL仿真

from dronekit import connect, VehicleMode

# 启动SITL后,连接本地模拟端口
vehicle = connect('tcp:127.0.0.1:5760', wait_ready=True)

print("GPS: %s" % vehicle.location.global_frame)
print("电池: %s" % vehicle.battery)

vehicle.close()

这段代码虽然简单,但它是所有DroneKit应用的起点。你想想看,连上飞控后,你就能读取姿态、控制舵机、规划航线了。

注意:DroneKit的Python版本兼容性有点玄学。我建议用Python 3.8或3.10,3.11以上可能会有依赖冲突。如果你遇到ImportError,先检查一下Python版本。

2.5 环境验证与常见问题

环境搭完了,怎么知道对不对?我一般会跑一个完整的测试流程:

  1. 用git clone拉一个ArduPilot仓库
  2. 用waf configure检查编译环境
  3. 用MAVSDK的example代码连接SITL
  4. 用DroneKit的脚本读取仿真数据

如果这四步都过了,你的开发环境就算搭好了。

2.5.1 常见问题速查

问题 原因 解决办法
git clone超时 网络问题 配代理或用镜像
MAVSDK编译报错 缺少依赖 检查libcurl、libssl是否安装
DroneKit连接失败 端口不对或SITL没启动 先启动SITL,再运行脚本
Python包冲突 版本不兼容 用虚拟环境隔离

我曾经在DroneKit上栽过跟头。有一次写航线规划脚本,怎么都连不上飞控,折腾了两小时才发现是SITL的端口号写错了。所以,遇到问题先检查基础配置,别一上来就怀疑代码。

2.6 本章知识体系

下面这张图把本章的核心逻辑串起来了。你可以看到,从Ubuntu系统出发,Git负责代码管理,MAVSDK和DroneKit分别提供C++和Python的MAVLink接口,最终都指向ArduPilot开发。

开发环境搭建知识体系 Ubuntu 22.04 LTS Git 版本控制 MAVSDK (C++) DroneKit (Python) clone / submodule / branch cmake / build / test pip install / SITL ArduPilot 开发环境就绪 提示:MAVSDK适合高性能C++应用,DroneKit适合快速Python原型,两者可以共存

环境搭建这件事,说白了就是一次性的体力活。但你别小看它,基础打好了,后面写代码、调参数、跑仿真都会顺风顺水。我见过太多人因为环境问题浪费大量时间,最后连飞控都没编译通过。

所以,这一章的内容,我建议你跟着做一遍。别跳步骤,别偷懒。等你把MAVSDK的example跑起来,把DroneKit的SITL连上,那种成就感会让你觉得一切都值了。