4、MAVProxy入门:安装与基本操作
好,咱们进入第四章。前面几章我们把仿真环境搭起来了,SITL 也能跑了。但你会发现——光有仿真器,你没法跟它交互。你没法切模式、没法看参数、没法发指令。这时候就需要一个「翻译官」。
MAVProxy 就是这个角色。它是个轻量级的地面站,更准确地说,它是一个 MAVLink 协议的转发与命令行工具。我个人习惯把它叫做「管道工」——它把仿真器、地面站、甚至多个外部设备串在一起。
核心理解: MAVProxy 不是用来替代 QGroundControl 或 Mission Planner 的。它是用来做底层调试、自动化脚本、多链路转发的。说白了,它是给开发者用的,不是给飞手用的。
4.1 安装 MAVProxy
安装其实很简单。MAVProxy 是 Python 包,直接用 pip 装就行。但我建议你装在 Python 虚拟环境里,别污染系统 Python。
# 创建虚拟环境(如果你还没做)
python3 -m venv ~/ardupilot_env
source ~/ardupilot_env/bin/activate
# 安装 MAVProxy
pip install mavproxy
# 验证安装
mavproxy.py --version
嗯,这里有个坑。我第一次装的时候直接 pip install mavproxy,结果发现缺了 pyserial 和 numpy。后来我习惯加一句:
pip install mavproxy pyserial numpy
装完之后,你可以在终端里敲 mavproxy.py 试试。如果看到类似 Ready to connect 的提示,说明装好了。
小提示: 如果你在 Windows 上用 WSL,记得把 USB 设备透传进去。不过咱们做仿真联调,不涉及真实硬件,所以问题不大。
4.2 MAVProxy 的桥梁作用
为什么说它是桥梁?你看这张图就明白了。
你看,SITL 仿真器跑在 UDP 14550 端口上,MAVProxy 连上去之后,可以再开一个端口给 QGC。这样你就能同时用命令行和图形界面操作同一架飞机。我在项目里经常这么干——命令行调参数,QGC 看地图,两边互不干扰。
4.3 基本命令:连接与启动
启动 MAVProxy 并连接到 SITL 是最基本的操作。假设你已经启动了 SITL(上一章的内容),在另一个终端里执行:
# 先激活虚拟环境
source ~/ardupilot_env/bin/activate
# 连接 SITL
mavproxy.py --master=tcp:127.0.0.1:5760 --out=udp:127.0.0.1:14550
参数说明:
| 参数 | 含义 | 我的习惯 |
|---|---|---|
--master |
指定 MAVLink 数据源(SITL 或串口) | 仿真用 tcp,真机用串口 |
--out |
指定输出端口(给地面站用) | 习惯用 14550,跟 QGC 默认一致 |
--aircraft |
指定日志/参数存储目录 | 每个机型建一个目录,方便管理 |
连接成功后,你会看到类似这样的输出:
Connect tcp:127.0.0.1:5760 source_system=255
Logging to mav.tlog
MAV>
看到 MAV> 提示符,说明你已经连上了。这时候你可以开始敲命令了。
注意: 如果你同时开了多个 MAVProxy 实例,记得用 --source-system 参数区分,否则会冲突。我曾经在调试多机编队时踩过这个坑,两台飞机的消息混在一起,排查了半天。
4.4 模式切换
模式切换是飞控调试的日常操作。在 MAVProxy 里,切模式非常简单:
# 切换到 GUIDED 模式
MAV> mode guided
# 切换到 STABILIZE 模式
MAV> mode stabilize
# 切换到 LOITER 模式
MAV> mode loiter
每次切换后,MAVProxy 会返回当前模式确认:
GUIDED> Mode GUIDED
注意提示符变了——它会显示当前模式。这样你一眼就知道飞机在什么状态。
常用的模式有这些:
| 模式 | 用途 | 仿真中常用吗? |
|---|---|---|
| STABILIZE | 手动增稳,飞手控制姿态 | 是,基础调试 |
| ALT_HOLD | 定高模式 | 是,高度控制测试 |
| LOITER | 悬停模式 | 是,位置控制测试 |
| GUIDED | 外部指令控制(航点、起飞、降落) | 非常常用,自动化测试必备 |
| AUTO | 自动执行任务 | 是,任务规划验证 |
| RTL | 自动返航 | 是,安全机制测试 |
我个人建议:刚开始仿真时,先在 STABILIZE 模式下观察飞机响应,确认舵面、电机方向正确后,再切到 GUIDED 做自动化测试。别一上来就切 AUTO,万一任务写错了,飞机可能直接飞走。
4.5 参数查看与修改
ArduPilot 有上千个参数,MAVProxy 提供了高效的参数操作命令。
查看参数
# 查看单个参数
MAV> param show ARMING_CHECK
# 查看所有参数(慎用,会刷屏)
MAV> param show
# 按关键字搜索
MAV> param show *RATE*
# 查看参数默认值
MAV> param show ARMING_CHECK 1
输出示例:
ARMING_CHECK = 1.0 (0:Disabled, 1:Enabled)
修改参数
# 设置参数
MAV> param set ARMING_CHECK 0
# 设置后最好再查看确认
MAV> param show ARMING_CHECK
经验之谈: 仿真时我经常把 ARMING_CHECK 设为 0,省去各种前置检查。但真机千万别这么干——安全第一。另外,改完参数后记得 param save,否则重启后参数会丢失。
参数对比
有时候你需要对比当前参数和默认参数。MAVProxy 提供了 param diff 命令:
MAV> param diff
它会列出所有跟默认值不同的参数。这个命令我在调 PID 时经常用——改了一堆参数后,用 diff 看看自己到底动了哪些。
4.6 其他常用命令
除了连接、模式、参数,还有几个命令你几乎每天都会用到:
| 命令 | 作用 | 使用场景 |
|---|---|---|
arm throttle |
解锁电机 | 仿真起飞前必须执行 |
disarm |
锁定电机 | 测试结束后安全操作 |
rc 3 1500 |
设置遥控器通道值 | 模拟遥控器输入 |
status |
查看飞控状态 | 快速检查连接、GPS、电池等 |
module load |
加载扩展模块 | 加载 map、console 等 |
script |
运行 Python 脚本 | 自动化测试 |
举个例子,仿真起飞的标准流程:
MAV> mode guided
MAV> arm throttle
MAV> takeoff 10
这三条命令就能让飞机解锁、起飞到 10 米高度。是不是很简单?
关键点: MAVProxy 的所有命令都可以写成脚本。你想想看,把一整套测试流程写成 .py 文件,每次跑仿真时一键执行——这才是开发效率的体现。
4.7 避坑指南
最后,分享几个我踩过的坑:
- 连接超时: 如果 MAVProxy 连不上 SITL,先确认 SITL 是否在运行,端口是否被占用。用
netstat -tuln | grep 5760检查。 - 参数不生效: 改完参数后,有些参数需要重启飞控才能生效。仿真中可以用
reboot命令重启 SITL。 - 模式切换失败: 如果切模式报错
Mode not available,检查一下当前飞行阶段是否允许该模式。比如还没解锁时,有些模式切不了。 - 日志文件过大: MAVProxy 默认会记录所有 MAVLink 消息。长时间仿真后,
mav.tlog文件可能几个 G。我习惯在启动时加--logfile=指定日志路径,或者定期清理。
嗯,MAVProxy 的基本操作就这些。别小看这个命令行工具——它是我日常开发中使用频率最高的工具,没有之一。熟练了之后,你会发现它比任何图形界面都高效。