轮腿调参经验总结
以玺佬的六变量模型为例,整理一套从悬空到落地、从腿部到整车的轮腿参数调节思路。
基础内容
轮腿控制通常由多个控制环共同完成。本文讨论的调参流程主要包括:
- 腿长控制:单环 PID。
- 劈叉抑制:单环 PD 或 PID。
- Yaw 控制:双环 PID。
- 平衡控制:基于六变量模型的 LQR。
LQR 部分使用状态向量:
$$ \mathbf{x} = \begin{bmatrix} \theta & \dot{\theta} & x & \dot{x} & \phi & \dot{\phi} \end{bmatrix}^T $$
以及控制向量:
$$ \mathbf{u} = \begin{bmatrix} T & T_p \end{bmatrix}^T $$
其中,各变量含义通常可以理解为:
- $\theta$:腿部摆角。
- $\dot{\theta}$:腿部摆角角速度。
- $x$:轮端位移或车体位移。
- $\dot{x}$:轮端速度或车体速度。
- $\phi$:机体 pitch 角。
- $\dot{\phi}$:机体 pitch 角速度。
- $T$:轮端输出力矩。
- $T_p$:髋关节输出力矩。
实际工程中变量定义可能略有差异,应以自己的建模方式和代码实现为准。
Q 和 R 的作用
LQR 的代价函数可以写成:
$$ J = \int ( \mathbf{x}^T Q \mathbf{x} + \mathbf{u}^T R \mathbf{u} ) dt $$
离散形式则常写成:
$$ J = \sum (\mathbf{x}_k^T Q \mathbf{x}_k + \mathbf{u}_k^T R \mathbf{u}_k) $$
其中:
- $Q$ 矩阵用于惩罚状态误差,矩阵中的变量与 $\mathbf{x}$ 对应。
- $R$ 矩阵用于惩罚控制输入,矩阵中的变量与 $\mathbf{u}$ 对应。
增大某个状态对应的 $Q$ 值,控制器会更重视该状态的收敛。例如增大 $Q_{\phi}$,机体 pitch 会被更强地拉回目标角度,响应通常更快,但控制也会更激进。
增大某个控制量对应的 $R$ 值,控制器会更不愿意使用该控制量。例如增大 $R_T$,轮端力矩输出会更保守,响应更柔和,但速度和位移收敛可能变慢。
可以简单记为:
- 增大 $Q$:更重视状态收敛,响应更快,控制更激进。
- 减小 $Q$:允许状态慢慢收敛,控制更温和。
- 增大 $R$:控制输入更贵,输出更保守。
- 减小 $R$:控制输入更便宜,输出更激进。
需要注意的是,LQR 更关注 $Q$ 和 $R$ 的相对比例。在线性、无限幅的理想情况下,如果同时把 $Q$ 和 $R$ 乘以同一个倍数,反馈增益 $K$ 理论上不会改变。
调参前检查
正式上车调试之前,应先确认 $\mathbf{x}$ 和 $\mathbf{u}$ 中每个量的方向是否正确。方向错误会导致反馈变成正反馈,轻则震荡,重则直接炸车。
建议至少检查以下内容:
- $\theta$、$\phi$ 的正方向是否与建模一致。
- $\dot{\theta}$、$\dot{\phi}$ 的正方向是否与角度微分一致。
- $x$、$\dot{x}$ 的正方向是否与轮端运动方向一致。
- $T$、$T_p$ 的输出方向是否能产生预期的运动趋势。
- 电机限幅、力矩限幅、腿长限幅是否已经配置。
- 遥控器急停、保护落地、异常断使能逻辑是否可靠。
这也是仿真的重要意义:可以先在仿真中观察各状态量和控制量的运动趋势,提前发现方向、符号和量纲问题,避免在实车上造成损失。
开始调参
下面给出一套从零开始逐步调出轮腿参数的流程。
强烈建议先在仿真环境中完整跑一遍,熟悉参数变化对系统行为的影响,再上实车调试。
1. 悬空状态,先调腿长
首先将机体悬空,只关注腿长控制。
腿长控制一般是单环 PID:
- 输入:目标腿长与实际腿长的误差。
- 输出:沿杆方向的支撑力或等效力 $F_0$。
调参目标是:
- 腿长能稳定跟踪目标值。
- 阶跃响应不过度震荡。
- 左右腿表现尽量一致。
- 输出不过早打满。
这个阶段不要急着加入 LQR。先确保腿长环本身稳定,否则后面的平衡控制会叠加在一个不可靠的底层执行系统上,调参会非常困难。
2. 悬空状态,调腿部摆角
腿长稳定后,保持机体悬空,开始调腿部摆角控制。
此时可以只启用 $\theta$ 和 $\dot{\theta}$:
$$ \mathbf{x} = \begin{bmatrix} \theta & \dot{\theta} & 0 & 0 & 0 & 0 \end{bmatrix}^T $$
控制量只保留髋关节力矩 $T_p$:
$$ \mathbf{u} = \begin{bmatrix} 0 & T_p \end{bmatrix}^T $$
调参目标是让腿部摆角能够稳定、快速地跟踪目标值。
此时主要调整:
- $Q_{\theta}$:腿部摆角误差权重。
- $Q_{\dot{\theta}}$:腿部摆角角速度权重。
- $R_{T_p}$:髋关节力矩惩罚。
如果腿摆得太慢,可以适当增大 $Q_{\theta}$ 或减小 $R_{T_p}$。如果腿部抖动明显,或髋关节输出过大,可以增大 $R_{T_p}$,并适当调整 $Q_{\dot{\theta}}$。
完成这一步后,腿部在离地状态下应当已经具备基本的摆角稳定能力。
3. 落地后,保障腿的基础控制
接下来让轮腿落地,先不要加入完整状态量,而是继续围绕腿部基础控制调试。
落地后需要重新优化腿长 PID,因为悬空状态和承重状态下的负载完全不同。此时调参目标是:
- 腿长能够撑起整车。
- 静止时腿长无明显塌陷。
- 支撑力输出不过度震荡。
- 左右腿高度一致,受力接近。
同时继续调整 $Q_{\theta}$、$Q_{\dot{\theta}}$ 和 $R_{T_p}$,让腿部能在落地状态下维持竖直。这个阶段的重点不是让整车运动,而是确保腿能稳定支撑,并且不会因为地面接触引入明显震荡。
4. 加入机体 pitch 控制
腿部落地稳定后,再加入机体 pitch 控制。不要一开始就把所有状态量全部打开,应逐步增加状态量,方便定位问题。
此时启用:
$$ \mathbf{x} = \begin{bmatrix} \theta & \dot{\theta} & 0 & 0 & \phi & \dot{\phi} \end{bmatrix}^T $$
控制量使用完整形式:
$$ \mathbf{u} = \begin{bmatrix} T & T_p \end{bmatrix}^T $$
这个阶段的目标是让机体 pitch 保持水平,同时腿部摆角也能稳定收敛。
主要调整:
- $Q_{\phi}$:机体 pitch 角误差权重。
- $Q_{\dot{\phi}}$:机体 pitch 角速度权重。
- $R_T$:轮端力矩惩罚。
- $R_{T_p}$:髋关节力矩惩罚。
如果机体回正太慢,可以适当增大 $Q_{\phi}$ 或减小 $R_T$。如果车体前后抽动明显,或者轮端力矩频繁打满,则需要增大 $R_T$,同时检查 pitch 角速度反馈是否过强。
完成此阶段后,系统应当表现为:腿摆杆稳定,机体 pitch 能够回正,整车可以保持基本平衡。
5. 最后加入位移和速度
在腿部和机体 pitch 都能稳定后,再加入 $x$ 和 $\dot{x}$,构成完整状态向量:
$$ \mathbf{x} = \begin{bmatrix} \theta & \dot{\theta} & x & \dot{x} & \phi & \dot{\phi} \end{bmatrix}^T $$
此时重点调整:
- $Q_x$:位移误差权重。
- $Q_{\dot{x}}$:速度误差权重。
- $R_T$:轮端力矩惩罚。
- $R_{T_p}$:髋关节力矩惩罚。
通常建议先让速度稳定,再考虑位移回正。因为位移权重过大时,车会强烈试图回到原点,容易出现来回拉扯;速度权重合适时,车体运动会更可控。
调参目标是:
- 速度指令能平稳跟踪。
- 松杆后速度能稳定回零。
- 位移不会持续漂移。
- 轮端力矩不过早饱和。
- pitch 和腿摆角不会被位移控制明显带崩。
完成这一步后,LQR 主体参数基本就调整完毕了。
细节优化
当轮腿已经能够稳定站立和运动后,再加入细节控制。不要在主平衡参数还不稳定时过早加入太多补偿项,否则问题来源会变得很难判断。
腿部劈叉抑制
劈叉抑制用于减少左右腿角度或位置不一致带来的结构扭动。常见做法是对左右腿的摆角差、腿长差或髋关节相对误差做 PD 控制。
调参目标是:
- 左右腿不会明显向外或向内分开。
- 机体不会因为左右腿不一致产生横向扭动。
- 抑制力矩不过度干扰主 LQR 控制。
建议从较小的 P、D 开始逐步增加。P 太大容易让左右腿互相拉扯,D 太大则可能放大噪声,导致髋关节高频抖动。
Yaw 控制
Yaw 通常使用双环 PID:
- 外环:yaw 角度环。
- 内环:yaw 角速度环。
调参时建议先调角速度内环,再调角度外环。内环目标是让车体转向响应稳定、不过冲;外环目标是让车体能够回到目标朝向。
需要注意:
- Yaw 输出不要明显干扰左右腿支撑。
- 转向时轮端力矩不要长时间饱和。
- 原地转向和行进中转向要分别测试。
- 高速运动时应适当降低 yaw 响应,避免侧向不稳定。
限幅与保护
实车调参时,限幅和保护比参数本身更重要。建议至少包含:
- 腿长目标限幅。
- 腿长速度限幅。
- 支撑力 $F_0$ 限幅。
- 轮端力矩 $T$ 限幅。
- 髋关节力矩 $T_p$ 限幅。
- pitch 角过大断使能。
- 腿长异常断使能。
- 电机通信异常断使能。
- 遥控器急停。
如果系统存在明显震荡,不要只盯着 Q、R 调参,也要检查输出是否频繁饱和。执行器饱和会破坏 LQR 的线性假设,导致仿真和实车表现明显不一致。
常见现象与处理
| 现象 | 可能原因 | 处理思路 |
|---|---|---|
| 一上电就向某个方向猛冲 | 状态量或控制量方向错误 | 重新检查 $\theta$、$\phi$、$x$、$T$、$T_p$ 的正方向 |
| 腿长持续震荡 | 腿长 PID 过激或支撑力限幅不合理 | 降低 PID,检查腿长滤波和输出限幅 |
| 腿部摆角抖动 | $R_{T_p}$ 太小或角速度反馈噪声大 | 增大 $R_{T_p}$,检查 $\dot{\theta}$ 滤波 |
| 机体 pitch 回正慢 | $Q_{\phi}$ 偏小或 $R_T$ 偏大 | 增大 $Q_{\phi}$ 或减小 $R_T$ |
| 车体前后抽动 | 轮端输出过激或速度权重不合适 | 增大 $R_T$,重新调整 $Q_{\dot{x}}$ |
| 位移来回拉扯 | $Q_x$ 过大 | 先减小 $Q_x$,优先调好速度 |
| 控制仿真正常,实车异常 | 方向、量纲、延迟、饱和或滤波不一致 | 对比仿真和实车的状态量、控制量曲线 |
推荐调参顺序
整体顺序可以概括为:
- 悬空调腿长 PID。
- 悬空调腿部摆角 LQR,只启用 $\theta$ 和 $\dot{\theta}$。
- 落地重新优化腿长 PID,让腿能稳定撑车。
- 落地调腿部摆角,让腿能维持竖直。
- 加入 $\phi$ 和 $\dot{\phi}$,调机体 pitch 平衡。
- 加入 $x$ 和 $\dot{x}$,调速度与位移。
- 加入劈叉抑制。
- 加入 yaw 双环 PID。
- 完善限幅、保护和不同工况测试。
总结
轮腿调参的核心思路是分阶段降低问题复杂度。先保证底层腿长可靠,再调腿部摆角;先让机体 pitch 稳定,再加入位移和速度;最后再处理劈叉、yaw 和各种细节优化。
不要一开始就把所有状态量、控制量和补偿项全部打开。这样虽然看起来接近最终系统,但一旦出现震荡、冲车或发散,很难判断问题来自建模、方向、PID、LQR 权重、限幅还是执行器本身。
更稳妥的做法是:每次只增加一个明确的控制目标,并在仿真和实车中分别确认它的效果。这样调出来的参数更容易理解,也更容易维护。