麦轮底盘后腿VMC建模

1. 坐标系定义策略 (Coordinate System Strategy)

为了应对未来可能的坐标系变动,将 “物理安装角度”“数学计算角度” 彻底分离。

1.1 全局数学坐标系 (Global Math Frame)

为了保证三角函数导数(\(\sin' = \cos\), \(\cos' = -\sin\))的符号正确性,核心解算层必须遵守标准定义:

  • 原点 \(A\):关节转轴中心 \((0,0)\)

  • X 轴:水平向右(或其他你定义的绝对参考方向)。

  • Y 轴:垂直向上(符合右手定则)。

  • 角度 \(\theta\):以 X 轴正方向为 \(0\)逆时针 (CCW) 为正方向。

1.2 映射函数 (Mapping Function)

需要一个输入适配器,将电机的原始读数转换为上述数学角度。

\[\theta_{global} = \text{Dir} \cdot (\alpha_{raw} - \alpha_{offset}) + \theta_{bias}\]

  • raw: 编码器原始值。

  • offset: 机械零位(例如腿完全水平向后的编码器值)。

  • Dir: 旋转方向修正 (\(1\)\(-1\))。

  • bias: 机械零位在数学坐标系中的角度(例如水平向后对应 \(\pi\))。


2. 几何参数定义

符号说明备注
\(l_2\)曲柄 AD 长度主动臂
\(l_{23}\)连杆 DC 长度
\(l_3\)摇杆 BC 长度
\(l_4\)机架 AB 长度定点距离
\(l_1\)延长段 DE 长度
\(\alpha_{offset}\)结构偏置角D-E 连线相对于 C-D 连线的夹角
\(B\)定点 B 坐标固定值 \((x_B, y_B)\)

3. 正运动学解算 (Forward Kinematics)

输入:数学角度 \(\theta\) (对应 \(A\) 点主动臂角度)。

输出:末端坐标 \(E(x_E, y_E)\) 及中间点状态。

3.1 关键点坐标

  1. 主动点 D (标准极坐标公式):

    \[x_D = l_2 \cos\theta\]

    \[y_D = l_2 \sin\theta\]

  2. 从动点 C (双圆交点法):

    • 计算 \(D \to B\) 的向量及距离:

      \[d^2 = (x_B - x_D)^2 + (y_B - y_D)^2\]

      \[d = \sqrt{d^2}\]

    • 计算投影几何量:

      \[a = \frac{l_{23}^2 - l_3^2 + d^2}{2d}\]

      \[h = \sqrt{l_{23}^2 - a^2}\]

      (代码提示:计算 \(h\) 时需做 sqrt(max(0, …)) 保护)

    • 计算 C 点(向量旋转):

      \[x_C = x_D + a \frac{x_B - x_D}{d} \pm h \frac{y_B - y_D}{d}\]

      \[y_C = y_D + a \frac{y_B - y_D}{d} \mp h \frac{x_B - x_D}{d}\]

      (符号选取 \(\pm\) 取决于机构的肘部朝向,需根据实际装配选定一组)

  3. 末端点 E (刚体偏置外推):

    • 计算 C 点到 D 点的向量绝对偏角 \(\phi_{CD}\)

      \[\phi_{CD} = \text{atan2}(y_D - y_C, x_D - x_C)\]

    • 叠加刚体偏置角得到 DE 向量的绝对偏角 \(\phi_{DE}\)

      \[\phi_{DE} = \phi_{CD} + \alpha_{offset}\]

    • 利用极坐标基于 D 点推算 E 点坐标:

      \[x_E = x_D + l_1 \cos(\phi_{DE})\]

      \[y_E = y_D + l_1 \sin(\phi_{DE})\]


4. 雅可比矩阵推导 (Jacobian Derivation)

由于是单自由度系统,\(J\)\(2 \times 1\) 向量。采用速度投影法刚体运动学结合计算。

4.1 D 点 Jacobian (\(J_D\))

\[J_{Dx} = \frac{\partial x_D}{\partial \theta} = -l_2 \sin\theta\]

\[J_{Dy} = \frac{\partial y_D}{\partial \theta} = l_2 \cos\theta\]

4.2 C 点 Jacobian (\(J_C\))

构建速度约束方程组:

\[\begin{cases} (\vec{C} - \vec{B}) \cdot \vec{v}_C = 0 \\ (\vec{C} - \vec{D}) \cdot (\vec{v}_C - \vec{v}_D) = 0 \end{cases}\]

利用 Cramer 法则求解线性方程组 \(A \cdot J_C = b\)

  • 系数行列式

    \[det = (x_C - x_B)(y_C - y_D) - (y_C - y_B)(x_C - x_D)\]

  • 右侧常数项

    \[R = (x_C - x_D)J_{Dx} + (y_C - y_D)J_{Dy}\]

  • 求解结果

    \[J_{Cx} = \frac{-(y_C - y_B) \cdot R}{det}\]

    \[J_{Cy} = \frac{(x_C - x_B) \cdot R}{det}\]

4.3 E 点 Jacobian (\(J_E\))

由于 C-D-E 是一个刚体,我们首先需要求出连杆 CD 的角速度标量 \(\omega_{CD}\),然后利用刚体速度公式 \(\vec{v}_E = \vec{v}_D + \vec{\omega}_{CD} \times \vec{r}_{DE}\) 进行求解。

  • 计算连杆 CD 的角速度

    \(\vec{r}_{DC} = \begin{bmatrix} x_C - x_D \\ y_C - y_D \end{bmatrix}\),相对速度 \(\vec{v}_{DC} = \begin{bmatrix} J_{Cx} - J_{Dx} \\ J_{Cy} - J_{Dy} \end{bmatrix}\)

    \[\omega_{CD} = \frac{(x_C - x_D)(J_{Cy} - J_{Dy}) - (y_C - y_D)(J_{Cx} - J_{Dx})}{(x_C - x_D)^2 + (y_C - y_D)^2}\]

  • 计算 E 点速度 (雅可比)

    \(\vec{r}_{DE} = \begin{bmatrix} x_E - x_D \\ y_E - y_D \end{bmatrix}\)

    \[J_{Ex} = J_{Dx} - \omega_{CD} \cdot (y_E - y_D)\]

    \[J_{Ey} = J_{Dy} + \omega_{CD} \cdot (x_E - x_D)\]


5. VMC 力控模型 (Force Control)

极坐标系下定义虚拟力,以便直观调整参数。

5.1 定义虚拟力

  1. 腿长方向 (\(L\)):模拟弹簧阻尼 (Spring-Damper)。

    \[F_{radial} = K_p (L_{des} - L_{curr}) + K_d (\dot{L}_{des} - \dot{L}_{curr})\]

    • 注:\(L_{curr} = \sqrt{x_E^2 + y_E^2}\)
  2. 摆动方向 (\(\phi\)):模拟扭簧或 PD 控制。

    \[T_{swing} = K_{p\phi} (\phi_{des} - \phi_{curr}) + K_{d\phi} (\dot{\phi}_{des} - \dot{\phi}_{curr})\]

5.2 映射到笛卡尔空间 (\(F_{cartesian}\))

构建变换矩阵 \(M\),将 \([F_{radial}, T_{swing}]^T\) 映射为 \([F_x, F_y]^T\)

\[\begin{bmatrix} F_x \\ F_y \end{bmatrix} = \begin{bmatrix} \frac{x_E}{L} & -\frac{y_E}{L^2} \\ \frac{y_E}{L} & \frac{x_E}{L^2} \end{bmatrix} \begin{bmatrix} F_{radial} \\ T_{swing} \end{bmatrix}\]

代数展开形式 (代码用):

\[F_x = F_{radial} \cdot \frac{x_E}{L} - T_{swing} \cdot \frac{y_E}{L^2}\]

\[F_y = F_{radial} \cdot \frac{y_E}{L} + T_{swing} \cdot \frac{x_E}{L^2}\]

注意:此处 \(T_{swing}\) 的正方向定义为逆时针。如果 \(T_{swing}\) 定义相反,需调整第二项符号。


6. 最终力矩计算 (Torque Calculation)

利用虚功原理将笛卡尔力映射回电机力矩:

\[\tau_{motor} = J_{E}^T \cdot F_{cartesian}\]

\[\tau_{motor} = J_{Ex} \cdot F_x + J_{Ey} \cdot F_y\]