- 无人机
- 智能硬件
【免费下载链接】qgroundcontrol
Cross-platform ground control station for drones (Android, iOS, Mac OS, Linux, Windows)
本文基于 QGroundControl 用户指南中的 ArduCopter Tuning 文档,系统讲解 QGroundControl 车辆配置视图(Vehicle Setup)中Tuning页面的三大功能:Basic Tuning 滑块调参、AutoTune 自动调参的完整飞行流程,以及基于遥控拨码/旋钮的 In-Flight Tuning 飞行中调参,并结合开源仓库中的源码与配置定义,剖析每个滑块背后对应的飞控参数、AutoTune 的 MAVLink 命令链路和进度反馈机制,帮助多旋翼飞行开发者在实飞前安全、可控地优化 ArduCopter 的飞行特性。
Tuning 页面定位:QGroundControl 车辆配置中的调参入口
Tuning 页面位于 QGroundControl 左侧Vehicle Setup(车辆配置)边栏中,与 Summary、Firmware、Airframe、Radio、Flight Modes、Sensors、Power、Safety、Camera、Parameters 等页面并列。官方用户指南 setup_view.md 说明:该视图用于首飞前配置新飞行器,以及对已配置好的飞行器进行调参。从源码结构看,ArduPilot 插件通过 APMAutoPilotPlugin.cc 创建APMTuningComponent组件,并将其注册为车辆配置的一个页面;组件名即 "Tuning",描述为 "Configure flight performance and controller parameters.",见 APMTuningComponent.h。
对于多旋翼机型(MAV_TYPE_QUADROTOR、MAV_TYPE_HEXAROTOR、MAV_TYPE_OCTOROTOR等),APMTuningComponent会加载 ArduCopter 专用的调参页面 QML,见 APMTuningComponent.cc:
QUrl APMTuningComponent::setupSource() const { switch (_vehicle->vehicleType()) { case MAV_TYPE_QUADROTOR: case MAV_TYPE_COAXIAL: case MAV_TYPE_HELICOPTER: case MAV_TYPE_HEXAROTOR: case MAV_TYPE_OCTOROTOR: case MAV_TYPE_TRICOPTER: // Generated from APMTuningCopter.VehicleConfig.json return QUrl::fromUserInput("qrc:/qml/QGroundControl/AutoPilotPlugins/APM/APMTuningCopterComponent.qml"); default: return QUrl::fromUserInput(QString()); } }值得说明的是:APMTuningCopterComponent.qml并不是手写的 QML 源文件,而是构建期由tools/generators/config_qml生成器根据 JSON 声明APMTuningCopter.VehicleConfig.json自动生成的页面,CMake 中的代码生成目标见 CMakeLists.txt。这意味着页面上的每一项控件都可以直接追溯到 JSON 中的参数声明,后文对每个滑块与参数名的对应关系即来源于此。
Basic Tuning:用滑块调整飞行特性
用户指南给出的基础操作非常直接:将想要的滑块向左或向右移动,以设定飞行特性。页面上方的Flight Response区块包含若干滑块,每个滑块实际绑定的是一个或一组 ArduPilot 参数。根据 APMTuningCopter.VehicleConfig.json 的声明,各滑块与参数的对应关系如下:
| 滑块(界面标签) | 主参数 | 滑块范围 | 联动参数 | 说明(界面提示原文) |
|---|---|---|---|---|
| Roll/Pitch Sensitivity | ATC_RAT_RLL_P | 0.08 ~ 0.4,步长 0.02,3 位小数 | ATC_RAT_RLL_I、ATC_RAT_PIT_P、ATC_RAT_PIT_I(同值联动) | 飞行器反应迟钝时向右滑,抖动时向左滑 |
| Climb Sensitivity | PSC_D_ACC_P | 0.03 ~ 1.0,步长 0.05,3 位小数 | PSC_D_ACC_I = value × 2 | 向右滑爬升更激进,向左滑爬升更平缓 |
| RC Roll/Pitch Feel | ATC_INPUT_TC | 参数自身范围(optional 控件) | 无 | 向左软操控感,向右干脆利落 |
| Spin While Armed | MOT_SPIN_ARM | 0 ~ 0.3,步长 0.1,1 位小数 | 无 | 上锁(armed)时电机空转程度,应低于 Minimum Thrust |
| Minimum Thrust | MOT_SPIN_MIN | 0 ~ 0.3,步长 0.1,1 位小数 | 无 | 飞行器产生位移所需的最小推力,应高于 Spin While Armed |
从源码声明可以看到两个值得注意的实现细节:
- Roll/Pitch 滑块采用"一键四改":拖动
ATC_RAT_RLL_P时,linkedParams中的ATC_RAT_RLL_I、ATC_RAT_PIT_P、ATC_RAT_PIT_I会按相同数值同步写入,保证横滚与俯仰轴的比例/积分增益保持一致,这是典型的"手感型"调参简化设计; - Climb 滑块的 I 项是 P 项的 2 倍:
"PSC_D_ACC_I": "value * 2",即爬升加速度环的积分增益由滑块值自动推导,用户不需要单独处理 I 项。
这两个联动规则意味着:滑块不是简单地改一个参数,而是成组地重写姿态/爬升回路的一组增益。因此在界面上左右微调时,实际下发到飞控的是 3~4 个参数的批量更新。
AutoTune:自动调整速率回路的完整操作流
用户指南对 AutoTune 的定义是:自动调整速率(rate)参数,使飞行器在无明显过冲(overshoot)的前提下获得最高响应。这是 ArduCopter 的自动增益辨识功能:飞行器在空中对指定轴施加激励,飞控据此辨识出合适的 P/I/D 增益。
AutoTune 参数配置
在 Tuning 页面的AutoTune区块中,根据 JSON 声明 与仓库内参数文件 Copter.OfflineEditing.params,涉及以下参数:
| 参数 | 界面控件 | 含义 |
|---|---|---|
AUTOTUNE_AXES | 位掩码(bitmask)复选框:Roll / Pitch / Yaw | 选择参与自动调参的轴 |
| (RC7~RC12 通道选择) | 下拉框Channel for AutoTune switch | 把 AutoTune 分配给遥控器哪个开关通道 |
AUTOTUNE_AGGR | 数值(optional,默认 0.075) | 激进程度(aggressiveness) |
AUTOTUNE_MIN_D | 数值(optional,默认 0.0005) | 允许的 D 增益下限 |
其中AUTOTUNE_AXES = 7(即二进制 111,Roll+Pitch+Yaw 全选)是仓库参数文件中的默认值。通道选择由专用组件 APMAutoTuneChannelSelector.qml 实现,其逻辑是:
- 遍历
RC7_OPTION~RC12_OPTION共 6 个通道选项参数; - 找到值为17(
_autoTuneOption = 17,即 ArduPilot 中 RC 通道选项 "Autotune")的通道作为当前 AutoTune 开关; - 用户在界面下拉框选择新通道时,先把所有通道中的 17 清零,再向目标通道写入 17,见 setChannelAutoTuneOption。
也就是说,QGroundControl 并不是让飞行员手动去 Parameters 页翻参数,而是直接代写RCx_OPTION参数来完成"把 AutoTune 分配到某遥控器开关"这一动作。
执行 AutoTune 的标准流程
用户指南给出的完整操作步骤(务必按序执行):
- 选择要调参的轴。
提示:一次调全部轴可能耗时很久,甚至导致电量耗尽。为防止这种情况,建议一次只调一个轴。
- 把 AutoTune 分配到遥控器某个开关,起飞前确认该开关处于低(low)位置。
- 起飞,并将多旋翼切换到AltHold(定高)模式。
- 用遥控器开关打开 AutoTune。
- 飞机会围绕指定轴抽搐抖动数分钟(激励辨识过程的正常表现)。
- AutoTune 完成后,飞机会先回退到原参数继续飞行。
- 把 AutoTune 开关拨回低位置、再拨回高位置,即可用新参数测试飞行特性。
- 把开关拨到低位置可切回旧参数对比。
- 确认采用新参数:在开关保持高位置的状态下落地并解锁(disarm)——参数才会被写入保存。
指南给出的两条重要注意事项:
- AutoTune 在 AltHold 中执行,因此飞行器必须已具备在 AltHold 中最小可飞的调参水平;随时把 AutoTune 开关拨回低位置即可中止过程。
- AutoTune 执行期间,随时可以用遥控器移动飞行器位置,避免偏离安全空域。
源码层:AutoTune 的 MAVLink 链路与进度反馈
QGroundControl 侧的 AutoTune 由 Autotune.h / Autotune.cpp 实现(挂在Vehicle上、供 QML 调用的 QML_ELEMENT 对象),对外暴露三个状态属性:
autotuneInProgress:是否正在进行;autotuneProgress:进度(0.0~1.0);autotuneStatus:状态文本(初始为 "Autotune: Not performed")。
QML 端的启动界面 AutotuneUI.qml 提供 "Start AutoTune" 按钮,仅在飞行器处于flying && !landing且无 AutoTune 进程时可点击;点击后先弹出警告对话框(提示需先稳定飞行、随时准备用摇杆中止),确认后调用_autotuneManager.autotuneRequest()。
autotuneRequest() 的底层动作是向飞控发送 MAVLink 命令:
_vehicle->sendMavCommandWithHandler( &handlerInfo, MAV_COMP_ID_AUTOPILOT1, // the ID of the autopilot MAV_CMD_DO_AUTOTUNE_ENABLE, // the mavlink command 1, // request autotune ...);同时启动一个1 秒间隔的轮询定时器(_pollTimer.setInterval(1000)),持续查询进度。进度与状态的映射关系在 handleAckStatus() 中:
| 飞控上报进度 | QGC 状态文本 |
|---|---|
| < 20 | "Autotune: initializing" |
| 20~39 | "Autotune: roll" |
| 40~59 | "Autotune: pitch" |
| 60~79 | "Autotune: yaw" |
| 95 | "Wait for disarm",并弹出提示 "Land and disarm the vehicle in order to apply the parameters." |
| 80~99 | "Autotune: in progress" |
| 100 | "Autotune: Success"(弹提示 "Autotune successful.") |
| 失败/错误 | "Autotune: Failed" / "Autotune: Ack error %1" |
可以看到,进度区间与指南中"围绕指定轴抽搐几分钟"的过程一一对应:初始化和辨识按 roll → pitch → yaw 顺序推进,95 时进入"等待落地解锁"阶段——这正好对应指南最后一步"开关保持高位置时落地并解锁以保存新参数"的协议语义。
事后验证:在日志中检查 AutoTune 结果
调参完成后,可以通过 QGroundControl 的日志回放功能核对 AutoTune 全过程。仓库的 DataFlash 日志解析器已内置 AutoTune 相关的消息码,见 LogViewerDataFlashParser.cc:
| 消息码 | 含义 |
|---|---|
| 30 | AutoTune Initialised |
| 31 | AutoTune Off |
| 32 | AutoTune Restart |
| 33 | AutoTune Success |
| 34 | AutoTune Failed |
| 35 | AutoTune Reached Limit |
| 36 | AutoTune Pilot Testing |
| 37 | AutoTune Saved Gains |
日志中出现 33(Success)与 37(Saved Gains)即可确认辨识与参数落盘均已完成;若看到 35(Reached Limit)或 34(Failed),则说明增益触及下限或流程失败,需要回退旧参数重新检查飞行器状态。
In-Flight Tuning:用遥控器旋钮/拨码在线调参
用户指南将 In-Flight Tuning 定义为高级选项:使用遥控器某个拨码/旋钮通道在飞行中调整某个飞控参数。操作方式是:在下拉框中选择要控制的参数(control option),再指定该旋钮映射的最小值(Min)与最大值(Max)。
界面区块In Flight Tuning由 JSON 声明 驱动,包含三项:
| 参数 | 控件 | 说明 |
|---|---|---|
TUNE | 下拉框(combobox),标签RC Channel 6 Option (Tuning) | 选择第 6 通道旋钮要映射的调参选项(None 或某个具体参数) |
TUNE_MIN | 数值输入 | 旋钮最小值对应的参数值(界面示例默认 0) |
TUNE_MAX | 数值输入 | 旋钮最大值对应的参数值(界面示例默认 1000) |
需要注意一个固件版本兼容细节:ArduCopterFirmwarePlugin.cc 中存在参数重映射TUNE_MIN → TUNE_LOW、TUNE_MAX → TUNE_HIGH。这表明不同 ArduPilot 固件版本对同一语义使用了不同参数名,QGC 在按固件版本下发时会做自动换算,用户在界面上始终面对的是统一的TUNE_MIN/TUNE_MAX标签。
小结
- Basic Tuning 滑块是"手感级"调参:每个滑块背后绑定一组 ArduPilot 参数(如 Roll/Pitch 滑块一次改写
ATC_RAT_RLL_P/I、ATC_RAT_PIT_P/I四个参数;Climb 滑块联动PSC_D_ACC_I = 2 × P),拖动方向与飞行现象(迟钝/抖动、爬升缓急)一一对应。 - AutoTune是"空中辨识":选好轴(建议一次一轴)、把 AutoTune 分配到遥控器开关(QGC 代写
RC7~RC12_OPTION = 17)、AltHold 中触发,飞机会按 roll → pitch → yaw 激励辨识数分钟;完成后参数先回退旧值,确认新参数满意后在开关高位落地解锁才真正保存。 - In-Flight Tuning通过
TUNE/TUNE_MIN/TUNE_MAX三参数把遥控器旋钮变成在线调参器,适合高阶用户在飞行中细调。 - 整个过程可通过 Autotune 状态机 的进度/状态文本在 QGC 界面实时跟踪,并在飞行日志中用 30~37 号 AutoTune 消息码做事后审计。
安全提醒:AutoTune 与飞行中调参都要求飞行器当前调参"至少能在 AltHold 中稳定飞行",且随时可用摇杆或开关中止;操作前务必在空旷安全空域进行,并保持对飞行器的完全可操控性。
- 无人机
- 智能硬件
【免费下载链接】qgroundcontrol
Cross-platform ground control station for drones (Android, iOS, Mac OS, Linux, Windows)
相关推荐
QGroundControl ArduCopter 调参完全指南:Basic Tuning、AutoTune 与 In-Flight Tuning 实战
QGroundControl ArduCopter 调参完全指南:Basic Tuning、AutoTune 与 In Flight Tuning 实战 QGr
无人机智能硬件QGroundControl PX4 调参实战指南:自动调参与手动 PID 调优
QGroundControl PX4 调参实战指南:自动调参与手动 PID 调优 本篇技术指南以 QGroundControl(QGC)的 Vehicle se
无人机智能硬件QGroundControl 调参(Tuning)完全指南:PX4 与 ArduPilot 的 PID 调参、自动调参与源码实现解析
QGroundControl 调参(Tuning)完全指南:PX4 与 ArduPilot 的 PID 调参、自动调参与源码实现解析 QGroundContro
无人机智能硬件
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考