4、MAVProxy入门:安装、启动与常用命令

说实话,MAVProxy 是我个人非常喜欢的一个工具。它不像 QGroundControl 那样有花哨的界面,但胜在轻量、灵活,特别适合做自动化测试和脚本控制。我刚开始接触 ArduPilot 时,就是靠 MAVProxy 一点点把飞控的脾气摸透的。

这一章,我们把它装好、跑起来,再试试几个最常用的命令。你很快就会发现,命令行操作其实比点鼠标更高效。

4.1 安装 MAVProxy

MAVProxy 是 Python 写的,所以安装方式很简单。我个人建议用 pip 装,干净利落。

pip install mavproxy

如果你用的是 Ubuntu 系统,也可以从 apt 源装:

sudo apt install mavproxy

装完之后,验证一下:

mavproxy.py --version

能看到版本号,就说明装好了。

小提示: 如果你在 Windows 上装,记得先装好 Python 3.8 以上版本,并且把 Python 和 Scripts 目录加到环境变量里。我遇到过好几次装完找不到命令的情况,其实就是路径没配好。

4.2 启动 MAVProxy 并连接 SITL

我们先启动 SITL,再让 MAVProxy 连上去。这是最标准的联调流程。

第一步:启动 SITL

sim_vehicle.py -v ArduCopter --map --console

这条命令会启动一个四旋翼的仿真,同时打开地图和调试控制台。等它输出类似这样的信息:

APM: ArduCopter V4.5.0 (e1f2c3d4)
APM: Frame: QUAD
APM: PreArm: RC not calibrated
...
Waiting for connection...

嗯,这时候 SITL 就在 tcp:127.0.0.1:5760 上等着了。

第二步:启动 MAVProxy 并连接

新开一个终端,输入:

mavproxy.py --master tcp:127.0.0.1:5760 --out udp:127.0.0.1:14550

解释一下这两个参数:

  • --master:指定 MAVProxy 连接谁。这里连的是本地的 SITL。
  • --out:指定 MAVProxy 把数据转发给谁。这里转发到 UDP 14550 端口,方便 QGC 或 Mission Planner 同时连接。

连接成功后,你会看到 MAVProxy 的交互提示符:

MAV>

到了这一步,恭喜你,MAVProxy 已经和 SITL 成功握手了。

核心概念: MAVProxy 本质上是一个 MAVLink 消息的中继和解释器。它从 SITL 收消息,然后你可以通过命令行发指令回去。所有操作都是实时的。

4.3 常用命令:mode、arm、takeoff

现在我们来点真格的。在 MAV> 提示符下,试试这几个命令。

4.3.1 切换飞行模式(mode)

先把飞机切到 GUIDED 模式,这个模式允许我们通过指令控制飞机。

MAV> mode GUIDED

你会看到类似这样的反馈:

GUIDED

如果模式切换成功,SITL 的控制台里也会同步显示模式变化。

常用的模式还有:

模式名 说明 典型用途
STABILIZE 增稳模式 手动飞行,飞控辅助稳定
ALT_HOLD 定高模式 保持当前高度,水平可手动控制
LOITER 悬停模式 自动保持位置和高度
GUIDED 引导模式 接受外部指令(起飞、航点、降落)
RTL 返航模式 自动飞回起飞点并降落
注意: 在仿真里随便切模式没关系。但真机上,从 STABILIZE 直接切到 GUIDED 可能会触发预arm检查失败。我曾经在真机上遇到过这个问题,后来养成习惯:切模式前先看一眼状态。

4.3.2 解锁电机(arm)

解锁前,先确认模式是 GUIDED。然后输入:

MAV> arm throttle

如果一切正常,你会看到:

ARMED

这时候 SITL 里的电机应该开始旋转了(在仿真里是模拟的)。

如果解锁失败,MAVProxy 会告诉你原因。最常见的是:

  • PreArm: RC not calibrated —— 仿真里可以忽略,真机必须校准遥控器。
  • PreArm: 3D acceleration unhealthy —— 传感器未就绪,等几秒再试。

4.3.3 起飞(takeoff)

解锁成功后,就可以起飞了:

MAV> takeoff 10

这个命令的意思是:起飞到 10 米高度。你会看到飞机缓缓上升,SITL 的地图里也会显示高度变化。

起飞过程中,你可以随时用 mode LOITER 让它悬停,或者用 mode RTL 让它返航。

我的习惯: 每次起飞前,我都会先看一眼高度和GPS状态。在仿真里无所谓,但真机上,GPS 没锁好就起飞,飞机可能会飘走。别问我怎么知道的……

4.4 查看消息流

MAVProxy 最强大的地方,就是能实时看到 MAVLink 消息流。这对调试来说太重要了。

4.4.1 查看所有消息

输入:

MAV> messages

你会看到当前所有活跃的消息类型列表,比如:

GLOBAL_POSITION_INT
ATTITUDE
VFR_HUD
SYS_STATUS
BATTERY_STATUS
...

4.4.2 查看特定消息

想看某个消息的具体内容,用 watch 命令:

MAV> watch GLOBAL_POSITION_INT

然后 MAVProxy 会持续刷新显示这条消息的字段:

GLOBAL_POSITION_INT:
  time_boot_ms: 123456
  lat: 372345678
  lon: -122123456
  alt: 10.25
  relative_alt: 10.25
  vx: 0.01
  vy: -0.02
  vz: -0.05

想停止查看,按 Ctrl+C 就行。

4.4.3 设置消息频率

有时候某些消息默认频率太低,你可以手动调高:

MAV> set_rate ATTITUDE 10

这条命令把姿态消息的频率设为 10 Hz。频率越高,数据越密,但也会增加通信负载。仿真里无所谓,真机上要悠着点。

调试技巧: 我排查问题时,习惯同时 watch 三个消息:GLOBAL_POSITION_INT(位置)、ATTITUDE(姿态)、VFR_HUD(空速/地速)。这三个基本能覆盖 90% 的异常场景。

4.5 本章知识体系

下面这张图,帮你把 MAVProxy 的核心逻辑串起来:

MAVProxy 核心工作流 SITL 仿真 tcp:127.0.0.1:5760 MAVProxy 消息中继 + 命令解释 QGC / MP udp:127.0.0.1:14550 MAVLink 转发 用户命令行 mode / arm / takeoff 输入命令 消息流查看 watch / messages / set_rate 订阅消息 关键流程说明 1. SITL 生成仿真数据,通过 TCP 发送 MAVLink 消息 2. MAVProxy 接收消息,同时等待用户输入命令 3. 用户通过 mode/arm/takeoff 等命令控制飞机 4. MAVProxy 将命令封装为 MAVLink 指令发回 SITL 5. 同时 MAVProxy 将消息转发到 UDP 端口,供 QGC 等地面站使用 6. 用户可用 watch 命令实时查看任意消息的详细字段

这张图把 MAVProxy 的定位说得很清楚:它站在 SITL 和地面站中间,既当消息中继,又当命令解释器。你通过命令行发的每一条指令,都会经过它转换成 MAVLink 协议,再发给 SITL。

4.6 本章小结

到这儿,你已经掌握了 MAVProxy 最核心的操作:安装、连接、切模式、解锁、起飞、看消息。这些是后续所有联调操作的基础。

我个人觉得,MAVProxy 最大的价值不在于它本身,而在于它让你能直接和 MAVLink 协议打交道。你想想看,当你学会用命令行控制飞机之后,再去做自动化测试、脚本化飞行,就水到渠成了。