Files
RoboGauge/assets/docs/zmp_margin.md
2026-03-23 11:24:00 +08:00

2.6 KiB
Raw Blame History

zmp_margin

参考论文:ZERO-MOMENT POINT -- THIRTY FIVE YEARS OF ITS LIFE

基本定义

  • Zero Moment PointZMP零矩点机械系统的惯性力和重力的净力矩在该点沿水平轴分量为零。
  • Support Polygon支撑多边形机械系统所有与地面接触点构成的凸包。
  • FZMPfictitious ZMP虚拟零矩点当 ZMP 落在支撑多边形外时,称 ZMP 为 FZMP此时系统可能处于非平衡状态。
  • Virtual Horizontal Plane虚拟水平投影面机械系统所有与地面接触点的几何中心记为 $O'$,将世界坐标系平移到 $O'$,得到的 xy 平面。

MuJoCo 中的符号约定

设机器人总共包含 N 个刚体。对于第 i 个刚体,在当前时刻具有如下量:

  • 质量:m_i
  • 质心位置:\boldsymbol{p}_i 这里相对于当前 base_link 在世界坐标系 z 轴方向上平移到虚拟水平投影面的点。
  • 质心线加速度:\boldsymbol{\ddot{p}}_i
  • 角速度:\boldsymbol{\omega}_i
  • 角加速度:\boldsymbol{\dot{\omega}}_i
  • 惯性张量:\boldsymbol{I}_i

上述量均相对于世界坐标系,保持相对于惯性参考系表达;本体坐标系不一定是参考系。计算 \boldsymbol{I}_i 时需要确保其已经转换到世界坐标系下。

总力与总力矩

整个系统的总力与总力矩定义为:


\boldsymbol{F}_{\text{total}} = \sum_{i=1}^{N} m_i \left(\boldsymbol{g} - \boldsymbol{\ddot{p}}_i\right)

\boldsymbol{M}_{\text{total}} =
\sum_{i=1}^{N}
\left[
\left(\boldsymbol{p}_i \times m_i \left(\boldsymbol{g} - \boldsymbol{\ddot{p}}_i\right)\right)
- \left(\boldsymbol{I}_i \boldsymbol{\dot{\omega}}_i + \boldsymbol{\omega}_i \times \left(\boldsymbol{I}_i \boldsymbol{\omega}_i\right)\right)
\right]

ZMP 坐标


\boldsymbol{M} = \boldsymbol{r} \times \boldsymbol{F}

可得


\begin{cases}
\boldsymbol{M}_y = -x_{\text{zmp}} \boldsymbol{F}_z + z_{\text{zmp}} \boldsymbol{F}_x \\
\boldsymbol{M}_x = \phantom{-}y_{\text{zmp}} \boldsymbol{F}_z + z_{\text{zmp}} \boldsymbol{F}_y
\end{cases}

z_{\text{zmp}} = 0 时,有


\begin{cases}
x_{\text{zmp}} = -\dfrac{\boldsymbol{M}_y}{\boldsymbol{F}_z} \\
y_{\text{zmp}} = \phantom{-}\dfrac{\boldsymbol{M}_x}{\boldsymbol{F}_z}
\end{cases}

最终指标

令默认状态下的对角足端距离为 $D_{\text{norm}}$,则总的 zmp_margin 定义为:


m_{\text{zmp_margin}} =
\max \left(
0,
1 - \dfrac{\left\| (x_{\text{zmp}}, y_{\text{zmp}}) \right\|_2}{D_{\text{norm}}}
\right)