Skip to content

Latest commit

 

History

History
151 lines (100 loc) · 7.18 KB

File metadata and controls

151 lines (100 loc) · 7.18 KB

Qmini 执行器参数学习笔记

本文档解释 source/Qmini/robots/qmini.pyDelayedPDActuatorCfg 的五个核心参数: stiffnessdampingarmatureeffort_limit_simvelocity_limit_sim

每个关节在 PhysX 中都按以下离散动力学方程仿真:

τ_applied = stiffness · (q_target − q) − damping · q̇      ← PD 控制器
τ_motor   = clip(τ_applied, ±effort_limit_sim)              ← 力矩饱和
(I_link + armature) · q̈ = τ_motor + 其他外力矩              ← 关节运动方程
|q̇| ≤ velocity_limit_sim                                    ← 速度饱和

了解这五个参数的物理含义,是把策略从仿真迁移到真机(Sim2Real)的关键。


1. stiffness(刚度,单位 N·m/rad)

含义: PD 控制器中的 P 项增益。关节目标位置与当前位置每偏差 1 弧度,电机会输出多少 N·m 的力矩去拉回来。

为什么这样设?

  • 太小 → 机器人"软绵绵",跟不上目标轨迹,站不稳;
  • 太大 → 高频抖动、积分发散,PhysX 在大步长下会爆炸(除非配合更大的 armature);
  • 要与真机匹配 → 真实 Robstride 电机有自己的电流环带宽,过高的仿真刚度对应不了的真机增益,迁移就会失败。

当前配置:

关节 stiffness
joint1..joint4(髋 + 膝) 78.957
joint5(踝) 16.581

踝部刚度显著低于髋膝,原因是踝电机更小、转矩上限更低,给它太大的 P 增益反而会饱和力矩、引发抖动。


2. damping(阻尼,单位 N·m·s/rad)

含义: PD 控制器中的 D 项增益。关节角速度每 1 rad/s,会产生多少 N·m 的反向力矩用于抑制运动。

为什么这样设?

  • 阻尼是 PD 控制器的"减震器"。stiffness 提供恢复力,damping 消耗能量、抑制振荡;
  • 临界阻尼比 ζ = damping / (2·√(stiffness · I_eff))。在本项目中 damping/stiffness ≈ 0.064,对应轻度欠阻尼,既能快速响应又不会震荡;
  • 太小 → 关节像弹簧一样来回弹;
  • 太大 → 关节反应迟钝,机器人感觉"粘"。

当前配置:

关节 damping
joint1..joint4 5.027
joint5(踝) 1.056

stiffnessdamping 的比例在所有关节都相同(约 15.7:1),保持了一致的阻尼比。


3. armature(电枢惯量 / 反射转子惯量,单位 kg·m²)

含义: 电机转子和减速器输出端的等效旋转惯量,会被直接加到 PhysX 关节质量矩阵的对角线上。数学上等于 N² · I_rotorN 为减速比)。

为什么这样设?

  • 数值稳定性 —— 高 stiffness 配低惯量时,隐式积分器会震荡甚至发散。armature 抬高等效惯量,让高刚度 PD 在大步长下依然稳定;
  • Sim2Real 一致性 —— 真实 Robstride 电机的转子惯量并不可忽略。如果不加 armature,仿真中的连杆比真机加速更快,策略迁移就会"飘"、抖动甚至失控;
  • 隐藏好处 —— 在做关节位置控制时,armature 也会让电机"感觉"更像真机:响应更平滑,过冲更少。

当前配置:

关节 armature
joint1..joint4 0.02
joint5(踝) 0.0042

这个比例(约 4.76:1)和 effort_limit_sim 的比例(42:11.9 ≈ 3.53:1)相近,反映了大号 vs 小号 Robstride 电机的真实物理差异。


4. effort_limit_sim(仿真力矩上限,单位 N·m)

含义: PD 控制器输出的力矩在送进物理仿真之前会先被裁剪到 ±effort_limit_sim,模拟真实电机的转矩饱和。

为什么这样设?

  • 真实电机不可能输出无限大力矩。如果不限制,PD 控制器在大误差下会要求几百 N·m,仿真里能做到但真机做不到 —— 策略一旦学到这种"超人力矩",迁移到真机就直接失败;
  • 应该匹配真机的连续/峰值力矩。一般设为电机峰值力矩,给策略留出加速、起跳、防摔的余量;
  • 配合 stiffness 一起看:stiffness · max_position_error 应该接近但不超过 effort_limit_sim,否则 PD 项永远饱和、D 项失效。

当前配置:

关节 effort_limit_sim
joint1..joint4 42.0
joint5(踝) 11.9

对应大号 Robstride(约 42 N·m 峰值)和小号 Robstride(约 12 N·m 峰值)。


5. velocity_limit_sim(仿真速度上限,单位 rad/s)

含义: 关节角速度的硬限位。超过这个值后 PhysX 会通过力矩反作用把速度压回来,模拟电机的反电动势(back-EMF)饱和特性。

为什么这样设?

  • 真实电机有最高转速(由母线电压和反电动势常数决定),超过这个速度电机就再也加不上电流了;
  • 如果仿真里允许无限转速,策略会学到"快速甩腿"这种真机做不到的动作;
  • 通常设为电机额定空载转速的 1.1–1.5 倍,给策略一点裕量;
  • 注意:踝关节通常设得 比髋膝更高,因为减速比小、空载转速高(与 effort_limit_sim 反相关 —— 这是减速器的物理本质:高转速换低力矩,低转速换高力矩)。

当前配置:

关节 velocity_limit_sim
joint1..joint4 18.849
joint5(踝) 37.699

踝的速度上限正好是髋膝的 2 倍,对应小号电机更高的转速能力。effort × velocity 的乘积大致代表电机功率:

  • 髋膝:42 × 18.849 ≈ 791 W
  • 踝:11.9 × 37.699 ≈ 449 W

总览表

参数 单位 joint1–4(髋+膝) joint5(踝) 比值
stiffness N·m/rad 78.957 16.581 4.76
damping N·m·s/rad 5.027 1.056 4.76
armature kg·m² 0.02 0.0042 4.76
effort_limit_sim N·m 42.0 11.9 3.53
velocity_limit_sim rad/s 18.849 37.699 0.50

注意到前四个参数(控制响应特性 + 反射惯量)的比例几乎一致(4.76),但 effortvelocity 的比例与之不同 —— 这是因为:

  • 前者反映控制器设计 + 转子惯量,按电机机械尺寸缩放;
  • effort_limit_sim 反映峰值转矩,受电流环和电压限制;
  • velocity_limit_sim 反映最高空载转速,与 effort 在功率上守恒(高速换低矩)。

调参经验建议

  1. 从真机数据出发 —— 这些数字不要凭空拍。先量出真实电机的力矩-速度曲线、转子惯量、电流环带宽,然后再选 stiffnessdamping
  2. armature 是稳定性安全网 —— 如果训练时发现关节"抽搐"或仿真发散,先尝试增大 armature,再考虑降低 stiffness
  3. effort_limit_sim 不要给太大 —— 给得太宽松,策略会学到"作弊"动作,Sim2Real 必然失败。宁可让策略学得保守一点。
  4. 保持 stiffness:damping 比例一致 —— 这样所有关节的阻尼比(ζ)相同,整机动力学特性更一致,策略也更容易学。
  5. 检查能耗合理性 —— effort × velocity 应该接近电机的额定功率。如果某关节的乘积远超电机规格,说明参数设错了。