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 安装后的必要操作
装完系统别急着高兴,先做三件事:
- 换源——把apt源换成国内镜像,不然下载速度会让你怀疑人生。
- 更新系统——
sudo apt update && sudo apt upgrade -y,把内核和库都升到最新。 - 安装基础工具——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这一步会下载很多第三方库,网络不好的话容易超时。我曾经在公司内网搞了一下午,最后发现是代理没配好。
submodule update可能会卡在某个库上下不来。
2.2.3 常用分支管理
ArduPilot的分支策略很清晰:
master——开发分支,每天都有新提交,不稳定Copter-X.Y——稳定版分支,比如Copter-4.5release/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应用的起点。你想想看,连上飞控后,你就能读取姿态、控制舵机、规划航线了。
ImportError,先检查一下Python版本。
2.5 环境验证与常见问题
环境搭完了,怎么知道对不对?我一般会跑一个完整的测试流程:
- 用
git clone拉一个ArduPilot仓库 - 用
waf configure检查编译环境 - 用MAVSDK的example代码连接SITL
- 用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开发。
环境搭建这件事,说白了就是一次性的体力活。但你别小看它,基础打好了,后面写代码、调参数、跑仿真都会顺风顺水。我见过太多人因为环境问题浪费大量时间,最后连飞控都没编译通过。
所以,这一章的内容,我建议你跟着做一遍。别跳步骤,别偷懒。等你把MAVSDK的example跑起来,把DroneKit的SITL连上,那种成就感会让你觉得一切都值了。