
---
title: "机器人动力学：面向具身智能的理论与仿真实践"
subtitle: "从关节动作到接触操作｜MuJoCo 与 NVIDIA Isaac Sim / Isaac Lab｜无代码版"
date: "2026 年 10 月 · 修订版"
lang: zh-CN
---

# 机器人动力学：面向具身智能的理论与仿真实践

<!-- course-meta:start -->
[课程首页](https://github.com/zengxiong111/Foundation_of_Embodied_AI/blob/main/README.zh-CN.md) · [English](https://github.com/zengxiong111/Foundation_of_Embodied_AI/blob/main/md/Robot_Dynamics_Embodied_EN.md) · [PDF](https://zengxiong111.github.io/zengxiong.github.io/files/Robot_Dynamics_Embodied_CN.pdf)

| 项目 | 说明 |
|---|---|
| 适用范围 | 刚体动力学理论；MuJoCo 与 Isaac 示例为概念说明，非已测试的跨引擎组合 |
| 文档核验日期 | 2026-10-18 |
| 许可 | CC BY 4.0 · Xiong Zeng and contributors |

<!-- course-meta:end -->

<!-- course-toc:start -->
## 目录

- [阅读指南：先理解物理链，再学习公式](#course-section-01)
- [第一章 从一个具身任务看动力学](#course-section-02)
  - [1.1 运动学告诉你“在哪里”，动力学告诉你“为什么动”](#course-section-03)
  - [1.2 状态、动作与观测不能混为一谈](#course-section-04)
  - [1.3 一条必须掌握的核心方程](#course-section-05)
- [第二章 只学动力学需要的运动学](#course-section-06)
  - [2.1 为什么需要关节坐标与末端坐标](#course-section-07)
  - [2.2 Jacobian 是从运动通向力的桥梁](#course-section-08)
  - [2.3 为什么 IK 不能代替动力学](#course-section-09)
- [第三章 从一根杆理解质量、惯量与重力](#course-section-10)
  - [3.1 平移：质量抵抗加速度](#course-section-11)
  - [3.2 旋转：惯量不仅取决于质量](#course-section-12)
  - [3.3 单关节摆：最简单的机器人动力学](#course-section-13)
  - [3.4 刚体旋转中的速度耦合](#course-section-14)
- [第四章 从单关节推广到整台机器人](#course-section-15)
  - [4.1 为什么会出现质量矩阵](#course-section-16)
  - [4.2 从能量得到标准方程](#course-section-17)
  - [4.3 正向动力学与逆动力学](#course-section-18)
  - [4.4 能量解释为什么模型值得信任](#course-section-19)
- [第五章 二连杆机械臂：一遍算懂 M、速度项和重力](#course-section-20)
  - [5.1 几何与约定](#course-section-21)
  - [5.2 从动能看关节耦合](#course-section-22)
  - [5.3 速度项与重力项](#course-section-23)
  - [5.4 四种典型动力学情形](#course-section-24)
- [第六章 复杂机器人如何快速计算动力学](#course-section-25)
  - [6.1 机器人为什么不用手工推导所有连杆](#course-section-26)
  - [6.2 重力补偿是逆动力学的特例](#course-section-27)
- [第七章 执行器：策略动作如何真正作用于机器人](#course-section-28)
  - [7.1 位置动作不等于立即到达目标位置](#course-section-29)
  - [7.2 必须考虑的非理想因素](#course-section-30)
  - [7.3 强化学习动作空间与物理接口对应关系](#course-section-31)
- [第八章 接触动力学：抓住、推动、滑动和掉落](#course-section-32)
  - [8.1 运动受限时，接触力从哪里来](#course-section-33)
  - [8.2 为什么接触是单边约束](#course-section-34)
  - [8.3 摩擦锥决定物体能不能被握住](#course-section-35)
  - [8.4 碰撞是速度的快速变化](#course-section-36)
  - [8.5 抓取中要区分四种接触模式](#course-section-37)
- [第十章 人形机器人：从固定基座到浮动基座](#course-section-42)
  - [10.1 为什么人形机器人的身体不能像关节一样直接控制](#course-section-43)
  - [10.2 站稳需要外部支持力](#course-section-44)
  - [10.3 质心动力学与全身控制只保留最重要部分](#course-section-45)
- [第十一章 动力学控制：哪些方法对具身智能最有用](#course-section-46)
  - [11.1 PD 与重力补偿](#course-section-47)
  - [11.2 计算力矩控制](#course-section-48)
  - [11.3 阻抗控制用于柔顺接触](#course-section-49)
  - [11.4 MPC/WBC 的位置](#course-section-50)
- [第十二章 MuJoCo 与 Isaac Sim / Isaac Lab：如何理解差异](#course-section-51)
  - [12.1 两套软件分别承担什么角色](#course-section-52)
  - [12.2 不能只对齐 URDF 文件名](#course-section-53)
  - [12.3 必须区分三个时间尺度](#course-section-54)
- [第十五章 从仿真走向真实机器人：检查清单](#course-section-68)
  - [15.1 模型首先要物理自洽](#course-section-69)
  - [15.2 Sim2Real 优先随机化什么](#course-section-70)
  - [15.3 四个常见误区](#course-section-71)
  - [15.4 一页公式速查](#course-section-72)
- [附录 A：课程知识点与本教程的取舍](#course-section-73)
- [附录 B：符号、阅读建议与参考资料](#course-section-74)
<!-- course-toc:end -->

<!-- course-visual:start -->
**本章知识地图**

```mermaid
flowchart LR
  A0["机器人动作"]
  A1["执行器"]
  A2["刚体动力学"]
  A3["接触与摩擦"]
  A4["状态反馈"]
  A0 --> A1 --> A2 --> A3 --> A4
```
<!-- course-visual:end -->

<a id="course-section-01"></a>

## 阅读指南：先理解物理链，再学习公式

机器人动力学不是一套孤立的数学公式，它解决的是具身智能中最直接的问题：**策略输出一个动作以后，机器人和环境为什么会这样运动？** 一个人形机器人站立并伸手抓物体，也服从同样的物理规律，只是多了浮动基座与足底接触。

本教程参考张巍教授的 [MEE5114 Advanced Control for Robotics][r1] 中刚体运动、动力学与控制的教学顺序，但**不是原课程讲义的翻译**；同时吸收 *Modern Robotics*、Featherstone 以及 MuJoCo / Isaac Lab 官方文档中与机器人学习直接相关的知识。[1–8]

**学习主线**：动作命令 $a$ $\rightarrow$ 执行器产生关节力矩 $\tau$ $\rightarrow$ 刚体动力学决定加速度 $\ddot q$ $\rightarrow$ 接触决定机器人与物体的相互作用 $\rightarrow$ 积分得到下一状态 $\rightarrow$ 相机、编码器等产生新的观测 $o$ $\rightarrow$ 策略更新动作。

$$
\boxed{a_t\ \longrightarrow\ \tau_t\ \longrightarrow\ (\ddot q_t,\lambda_t)\ \longrightarrow\ s_{t+1}\ \longrightarrow\ o_{t+1}.}
$$

**保留的内容**：最必要的坐标与 Jacobian、质量/惯量、标准机器人动力学、正逆动力学、接触与摩擦、执行器、浮动基座、控制、仿真与 Sim2Real。

**有意略去的内容**：Lie 群证明、完整螺旋理论和 POE 展开、空间向量叉乘算子的详细矩阵推导、复杂 RNEA/ABA 的逐行实现、通用最优控制与 SDP 理论，以及软件安装命令和任何代码。需要研究级算法推导时，可直接查阅文末参考资料。

**使用方式**：第 1–6 章建立动力学直觉，第 7–11 章解释接触和控制，第 12 章比较 MuJoCo 与 Isaac Sim / Isaac Lab，第 15 章联系真实机器人。公式属于可验证的物理模型。

<a id="course-section-02"></a>

## 第一章 从一个具身任务看动力学

<a id="course-section-03"></a>

### 1.1 运动学告诉你“在哪里”，动力学告诉你“为什么动”

设机械臂关节位置为 $q\in\mathbb R^n$，关节速度为 $\dot q$。运动学回答：已知 $q$，末端手掌的位姿在哪里？已知 $\dot q$，手指运动有多快？它**不需要**质量、惯量或电机力矩。

动力学回答：施加指定力矩后，关节加速度是多少？接触桌面后，支持力如何改变运动？物体脱离手指后，为什么会自由下落？因此动力学的输入不只是位置，而是**当前状态、驱动力及外力**。

| 任务中的问题 | 主要理论 | 为什么需要 |
|:--|:--|:--|
| 手指应该移动到哪里？ | 正/逆运动学 | 将物体位姿转成目标关节位姿 |
| 电机到底如何推动手指？ | 执行器 + 刚体动力学 | 解释力矩、加速度和控制延迟 |
| 螺丝刀为什么不滑落？ | 接触 + 摩擦 | 判断接触力是否处于摩擦锥内 |
| 人形机器人为什么需要脚下支持力？ | 浮动基座 + 质心动力学 | 内部关节力不能直接悬停整个身体 |

<a id="course-section-04"></a>

### 1.2 状态、动作与观测不能混为一谈

真实物理状态通常包括机器人和物体的位姿、速度及接触模式，可抽象为 $s=(q,\dot q,x_o,v_o,\text{contacts},\ldots)$。策略只获得观测 $o$，如 RGB-D、关节编码器、手指电流估计；相机中没有直接出现质量矩阵或真实摩擦系数。

动作 $a$ 的物理含义取决于控制接口：它可能是目标关节位置、目标关节速度、力矩，也可能是手部目标位姿。**同一个动作向量，经过不同低层伺服控制器，会产生不同的物理行为**。这是理解机器人学习论文中 action space 的首要前提。

<a id="course-section-05"></a>

### 1.3 一条必须掌握的核心方程

对固定基座、完全驱动且关节坐标独立的刚性机械臂，常用模型为

$$
\boxed{M(q)\ddot q+C(q,\dot q)\dot q+g(q)=\tau+J_c(q)^T\lambda.}
$$

其中 $M$ 表示构型相关的惯性，$C\dot q$ 表示速度耦合，$g$ 表示抵消重力所需的广义力，$\tau$ 是关节驱动力，$\lambda$ 是环境对机器人的接触力，$J_c^T\lambda$ 将接触力换算为广义力。

记 $h(q,\dot q)=C(q,\dot q)\dot q+g(q)$，便得到更紧凑的形式：

$$M(q)\ddot q+h(q,\dot q)=\tau+J_c^T\lambda.$$

真实设备还可能存在摩擦、传动弹性、力矩饱和与延迟；这些效应必须在解释实验差异时重新加入。

<a id="course-section-06"></a>

## 第二章 只学动力学需要的运动学

<a id="course-section-07"></a>

### 2.1 为什么需要关节坐标与末端坐标

对于 $n$ 个关节，$q=(q_1,\ldots,q_n)$ 表示关节配置。末端位置可写为 $p=f(q)$；若需表示物体或夹具的完整六自由度位姿，则使用

$$T=\begin{bmatrix}R&p\\0&1\end{bmatrix},\qquad R^TR=I,\ \det R=1.$$

$R$ 表示朝向，$p$ 表示位置。坐标系必须明确，例如 $T_{AB}$ 把在坐标系 $B$ 中表示的点转换到 $A$。对于具身学习，更重要的是**保证相机、机械臂、物体、桌面使用一致的坐标系**，而不是证明 $SO(3)$ 或 $SE(3)$ 的全部代数性质。

<a id="course-section-08"></a>

### 2.2 Jacobian 是从运动通向力的桥梁

若末端位置是 $p(q)$，则

$$\boxed{\dot p=J_p(q)\dot q,\qquad \ddot p=J_p(q)\ddot q+\dot J_p(q,\dot q)\dot q.}$$

这个 Jacobian 首先告诉我们关节速度如何转成末端速度。更关键的是：末端所受的力 $f$ 可映射成关节广义力

$$\boxed{\tau_{\mathrm{ext}}=J_p(q)^Tf.}$$

证明只需用**虚功相等**：$f^T\delta p=f^TJ_p\delta q=\tau_{\mathrm{ext}}^T\delta q$。接触桌面时，桌面对指尖的力就是沿着这个通道影响每个关节。

对于六自由度手掌运动，可使用包含角速度与线速度的六维速度（Twist）及其六维 Jacobian。此处只需记住：**速度表示、参考点和力矩表示必须配对一致**，不必先掌握空间伴随变换的完整推导。

<a id="course-section-09"></a>

### 2.3 为什么 IK 不能代替动力学

IK 将目标末端位姿转成关节目标，但不会自动考虑物体重量、关节惯性或接触力。轨迹看起来“几何上可达”，不等于执行器在给定时间内能够实现。例如，抓起重物后，目标位置不变，维持姿态所需的力矩也可能明显改变。

<a id="course-section-10"></a>

## 第三章 从一根杆理解质量、惯量与重力

<a id="course-section-11"></a>

### 3.1 平移：质量抵抗加速度

刚体质心遵循牛顿第二定律：

$$\boxed{f=ma_C.}$$

同样大小的外力，质量更大的物体通常产生更小的质心加速度。这个直觉在抓取中很直接：同一抓取力策略面对不同重量的螺丝刀，会出现不同的加速与滑落表现。

<a id="course-section-12"></a>

### 3.2 旋转：惯量不仅取决于质量

对于绕固定轴旋转的刚体，可写成 $\tau=I_O\ddot q$（不计其他力矩）。转动惯量 $I_O$ 取决于**质量相对于轴的位置**。若质心距关节轴为 $r$，则平行轴定理给出

$$\boxed{I_O=I_C+mr^2.}$$

这解释了“只是换了末端工具，却改变整条机械臂的动态响应”。

<a id="course-section-13"></a>

### 3.3 单关节摆：最简单的机器人动力学

考虑在竖直平面内转动的均匀刚性杆，$q$ 从水平方向向上计正，质心距轴 $r$，绕关节轴惯量为 $I_O$。忽略摩擦，其动力学为

$$\boxed{I_O\ddot q+mgr\cos q=\tau.}$$

这一个方程已经包含三个关键概念：惯性项 $I_O\ddot q$，重力项 $mgr\cos q$，驱动力矩 $\tau$。当杆水平且静止时，所需重力补偿力矩为 $mgr$；杆竖直时，静态重力力矩为零。

**重要区分**：机器人所谓“重力补偿”，补的是构型决定的重力力矩，不是简单给每个关节加一个常数。静止不代表力矩为零。

<a id="course-section-14"></a>

### 3.4 刚体旋转中的速度耦合

三维刚体旋转更一般地满足（在刚体固连坐标系内）

$$\tau_C=I_C\dot\omega+\omega\times(I_C\omega).$$

第二项说明旋转会改变角动量方向。理解其存在即可；在具身学习实践中，更常直接让多刚体求解器计算这类速度耦合项，而不手动展开每根连杆的三维方程。

<a id="course-section-15"></a>

## 第四章 从单关节推广到整台机器人

<a id="course-section-16"></a>

### 4.1 为什么会出现质量矩阵

机械臂上某个关节运动时，可能带动整条下游连杆，因此每个关节的等效惯量取决于全身构型。把所有连杆平动与转动动能相加，总动能必定可以写成

$$\boxed{K(q,\dot q)=\tfrac12\dot q^TM(q)\dot q.}$$

$M(q)$ 是**广义质量矩阵**，一般不是对角矩阵。非对角项表示一个关节的加速度会影响另一个关节所需力矩。对独立广义坐标、非退化的刚性系统，$M(q)$ 对称正定。

<a id="course-section-17"></a>

### 4.2 从能量得到标准方程

将重力势能记作 $U(q)$，定义拉格朗日函数 $L=K-U$。欧拉—拉格朗日方程为

$$\frac{d}{dt}\frac{\partial L}{\partial\dot q_i}-\frac{\partial L}{\partial q_i}=\tau_i.$$

代入二次型动能，整理得

$$\boxed{M(q)\ddot q+C(q,\dot q)\dot q+g(q)=\tau,\qquad g(q)=\nabla_q U(q).}$$

$C\dot q$ 中出现的是不同关节速度的乘积和平方。它不是接触力，也不是人为设置的阻尼，而是刚体运动本身带来的惯性耦合。通常直接使用 $h=C\dot q+g$；$C$ 矩阵的具体表示并不唯一。

<a id="course-section-18"></a>

### 4.3 正向动力学与逆动力学

**正向动力学**：给定当前位置、速度和力矩，求下一个加速度：

$$\boxed{\ddot q=M(q)^{-1}[\tau-h(q,\dot q)]\quad(\text{无接触}).}$$

**逆动力学**：给定期望加速度，求需要的力矩：

$$\boxed{\tau=M(q)\ddot q+h(q,\dot q).}$$

物理仿真更频繁地使用正向问题；重力补偿、轨迹前馈与某些全身控制会使用逆向问题。这里的逆矩阵是数学表达，实际实现通常求解线性系统而不直接显式求逆。

<a id="course-section-19"></a>

### 4.4 能量解释为什么模型值得信任

无摩擦、无外接触时，总机械能 $E=K+U$ 的变化满足

$$\boxed{\dot E=\tau^T\dot q.}$$

即“电机输出的机械功率改变系统机械能”。当加上耗散性摩擦时，部分功率变为热；当有外部接触且接触点运动时，还要计入接触做功。这是分析仿真能量漂移、调试控制器和理解柔顺性的基本工具，不必在本教程中深入 Lyapunov 定理证明。

<a id="course-section-20"></a>

## 第五章 二连杆机械臂：一遍算懂 M、速度项和重力

<a id="course-section-21"></a>

### 5.1 几何与约定

考虑竖直平面内的两关节旋转臂：$q_1$ 从水平向上计正，$q_2$ 是第二杆相对第一杆的角度；第一杆长 $l_1$，质量 $m_1$，质心距第一关节 $r_1$，惯量 $I_1$；第二杆的对应参数为 $m_2,r_2,I_2$。第二杆相对世界的方向角为 $q_1+q_2$。

质心坐标为

$$
\begin{aligned}
p_1&=(r_1\cos q_1,\ r_1\sin q_1)^T,\\
p_2&=(l_1\cos q_1+r_2\cos(q_1+q_2),\\
&\hspace{1.6em}l_1\sin q_1+r_2\sin(q_1+q_2))^T.
\end{aligned}
$$

这里的 $I_1,I_2$ 是各连杆绕质心、垂直运动平面的惯量。

<a id="course-section-22"></a>

### 5.2 从动能看关节耦合

总动能为

$$
K=\frac12m_1\|\dot p_1\|^2+\frac12I_1\dot q_1^2+
\frac12m_2\|\dot p_2\|^2+\frac12I_2(\dot q_1+\dot q_2)^2.
$$

整理成 $K=\frac12\dot q^TM(q)\dot q$，得到

$$
\begin{aligned}
M_{11}&=I_1+I_2+m_1r_1^2+m_2(l_1^2+r_2^2+2l_1r_2\cos q_2),\\
M_{12}&=M_{21}=I_2+m_2(r_2^2+l_1r_2\cos q_2),\\
M_{22}&=I_2+m_2r_2^2.
\end{aligned}
$$

**读懂这个矩阵**：$M_{11}$ 随 $q_2$ 改变；$M_{12}$ 通常非零。这分别对应构型相关惯量与关节之间的惯性耦合。

<a id="course-section-23"></a>

### 5.3 速度项与重力项

令 $b=m_2l_1r_2$，速度相关项是

$$
C(q,\dot q)\dot q=
\begin{bmatrix}
-b\sin q_2(2\dot q_1\dot q_2+\dot q_2^2)\\
b\sin q_2\dot q_1^2
\end{bmatrix}.
$$

重力势能为

$$U=m_1gr_1\sin q_1+m_2g[l_1\sin q_1+r_2\sin(q_1+q_2)],$$

因此

$$
 g(q)=\begin{bmatrix}
(m_1r_1+m_2l_1)g\cos q_1+m_2r_2g\cos(q_1+q_2)\\
m_2r_2g\cos(q_1+q_2)
\end{bmatrix}.
$$

最终得到 $\tau=M(q)\ddot q+C(q,\dot q)\dot q+g(q)$。这个例子展示了从质心位置 $\rightarrow$ 质心速度 $\rightarrow$ 动能与势能 $\rightarrow$ 质量矩阵与重力项的完整逻辑，不需要深入更复杂的三维符号计算，就足以理解实际机器人的多体动力学结构。

<a id="course-section-24"></a>

### 5.4 四种典型动力学情形

1. **静止、无接触**：令 $\dot q=\ddot q=0$，关节力矩必须满足 $\tau=g(q)$。
2. **低速运动**：速度项相对较小，惯性与重力是主要影响。
3. **高速摆动**：速度乘积项增大，忽略 $C\dot q$ 会出现预测偏差。
4. **换更重的第二杆**：$M$ 与 $g$ 都发生变化；同一套位置伺服参数可能需要重新整定。

<a id="course-section-25"></a>

## 第六章 复杂机器人如何快速计算动力学

<a id="course-section-26"></a>

### 6.1 机器人为什么不用手工推导所有连杆

对于几十个关节的系统，逐项符号展开 $M,C,g$ 成本高、容易出错。现代动力学库通常基于机械结构树递归计算。需要认识三种算法**分别解决什么问题**，但不需要先背熟空间向量递归公式。

| 算法 | 输入 | 输出 | 机器人学习中的用途 |
|:--|:--|:--|:--|
| RNEA（递归 Newton–Euler） | $q,\dot q,\ddot q$ | 逆动力学广义力 | 重力补偿、力矩前馈 |
| CRBA（复合刚体算法） | $q$ | $M(q)$ | 分析关节耦合、模型控制 |
| ABA（关节化刚体算法） | $q,\dot q,\tau$ | $\ddot q$ | 正向动力学、物理仿真中的基础计算 |

RNEA 先由基座向末端传播速度和加速度，再由末端向基座回传力；ABA 利用关节化刚体惯量求解加速度；CRBA 组合下游连杆惯性得到质量矩阵。在无接触、统一模型和一致坐标约定下，正向与逆向结果应当互相验证。

<a id="course-section-27"></a>

### 6.2 重力补偿是逆动力学的特例

将目标速度、加速度设为零，理想刚性机械臂满足

$$\boxed{g(q)=\operatorname{RNEA}(q,0,0).}$$

这比“为每个关节设固定力矩”更符合真实机器人随姿态变化的负载需求。对于有负载的机械臂，必须先保证手和物体的质量、质心、惯量进入模型；否则算法即使计算正确，预测仍会不准确。

<a id="course-section-28"></a>

## 第七章 执行器：策略动作如何真正作用于机器人

<a id="course-section-29"></a>

### 7.1 位置动作不等于立即到达目标位置

机器人学习策略经常输出 $q_{\mathrm{target}}$，但真实电机不是瞬间把机器人“传送”到这个位置。在一个典型的关节 PD 执行器模型中，

$$\boxed{\tau_{\mathrm{servo}}=K_p(q_{\mathrm{target}}-q)+K_d(\dot q_{\mathrm{target}}-\dot q).}$$

然后由动力学方程决定 $\ddot q$。因此系统实际是“目标位置 $\rightarrow$ 伺服力矩 $\rightarrow$ 加速度 $\rightarrow$ 速度 $\rightarrow$ 位置”。有些机器人将此闭环隐藏在驱动器内部，策略只看到位置接口。

<a id="course-section-30"></a>

### 7.2 必须考虑的非理想因素

| 因素 | 真实效果 | 常见训练后果 |
|:--|:--|:--|
| 力矩/电流限幅 | 目标过大也无法无限加速 | 策略要求的动作实际执行不到 |
| 速度限制 | 快速动作被约束 | 跟踪滞后与接触时序偏差 |
| 摩擦与齿隙 | 小力矩不一定带来运动 | 低速精细操作不准 |
| 延迟与滤波 | 命令晚于观测生效 | 闭环出现振荡或超调 |
| 电机/负载惯量 | 换手或拿物体后惯性变化 | 同样控制增益表现不同 |
| 传动柔顺 | 手指或关节存在弹性 | 接触力响应与刚性模型不同 |

对于减速比为 $N$ 的理想传动，电机转子惯量 $I_m$ 反射到关节侧近似为 $N^2I_m$；这说明只看连杆质量并不足以确定执行器动态。实际装置还可能有电流环、速度环、位置环和电机温度保护。

<a id="course-section-31"></a>

### 7.3 强化学习动作空间与物理接口对应关系

| 策略输出 | 优点 | 关键风险 |
|:--|:--|:--|
| 关节目标位置 | 稳定、易用，常用于模仿学习 | 结果依赖 PD 增益与命令周期 |
| 关节位置增量 | 适合残差或跟踪型策略 | 积分漂移、限位处理 |
| 关节目标速度 | 可直接描述运动方向 | 积分误差、执行器低层差异 |
| 关节力矩 | 可显式探索动力学交互 | 训练难、饱和和安全要求高 |
| 末端位姿增量 | 任务含义直观 | 需要 IK / Jacobian 与接触处理 |

**结论**：比较两个强化学习方法时，必须同时报告低层执行器模型，否则对同一个 action 的物理解释可能不一致。

<a id="course-section-32"></a>

## 第八章 接触动力学：抓住、推动、滑动和掉落

<a id="course-section-33"></a>

### 8.1 运动受限时，接触力从哪里来

假设指尖与桌面保持固定接触，接触点速度为零：

$$J_c(q)\dot q=0,\qquad J_c(q)\ddot q+\dot J_c(q,\dot q)\dot q=0.$$

动力学需要同时满足接触产生的广义力：

$$\boxed{M(q)\ddot q+h(q,\dot q)=\tau+J_c(q)^T\lambda.}$$

因此加速度和接触力**相互耦合**：机器人试图往桌面内部移动时，桌面通过法向支持力阻止穿透；关节所需的实际力矩随之变化。上述“接触点不动”的模型仅适用于持续粘着、无相对滑动的接触模式。

<a id="course-section-34"></a>

### 8.2 为什么接触是单边约束

定义物体之间的法向间隙 $\phi(q)\ge0$、法向接触力 $\lambda_n\ge0$，理想刚性单边接触满足

$$\boxed{\phi(q)\lambda_n=0.}$$

它表达：**要么分离且无接触力，要么接触且允许压力**。普通桌面不会在螺丝刀离开后继续“拉住”它。物体粘接、吸盘和磁吸是另行建模的情况。

<a id="course-section-35"></a>

### 8.3 摩擦锥决定物体能不能被握住

对于库仑摩擦，切向接触力 $\lambda_t$ 与法向力 $\lambda_n$ 必须满足

$$\boxed{\|\lambda_t\|\le\mu\lambda_n.}$$

$\mu$ 是摩擦系数。用更大法向夹持力，一般能够提供更大的最大静摩擦力，但也受到手指结构、驱动能力、物体变形和安全限制。物体滑落可能是夹持法向力不足、摩擦不足、重力方向改变，或动态惯性载荷突然增大。

<a id="course-section-36"></a>

### 8.4 碰撞是速度的快速变化

当手指快速触碰物体，接触力可能在极短时间内很大。采用冲量 $P$，碰撞前后广义速度近似满足

$$\boxed{M(q)(v^+-v^-)=J_c(q)^TP.}$$

接触求解器不仅处理持续支持力，也处理碰撞时的速度更新。不同仿真器可能在接触柔顺、离散步长、摩擦近似和约束求解方式上不同，因此相同的质量与摩擦系数不保证完全相同的碰撞曲线。

<a id="course-section-37"></a>

### 8.5 抓取中要区分四种接触模式

| 模式 | 可观测现象 | 对策略的意义 |
|:--|:--|:--|
| 无接触 | 指尖与物体有间隙 | 应继续靠近而不是施加抓力 |
| 接触且粘着 | 接触点相对速度接近零 | 可以建立稳定的操作约束 |
| 接触且滑动 | 接触点沿切向相对运动 | 需调整夹持、轨迹或重新规划 |
| 分离/掉落 | 接触力消失，物体独立运动 | 需要重新定位、接近与抓取 |



<a id="course-section-42"></a>

## 第十章 人形机器人：从固定基座到浮动基座

<a id="course-section-43"></a>

### 10.1 为什么人形机器人的身体不能像关节一样直接控制

固定在桌面的机械臂基座不动；人形机器人的躯干有六个自由运动维度，却通常没有直接驱动“世界坐标下身体平移和旋转”的电机。若关节数为 $n$，浮动基座广义速度维度为 $n+6$；采用四元数表示姿态时，配置变量维度通常为 $n+7$，二者不能直接混用。

动力学写成

$$\boxed{M(q)\dot v+h(q,v)=S^T\tau+J_c(q)^T\lambda,}$$

其中 $S$ 仅将可驱动关节的力矩放入完整广义力向量。基座运动依赖关节与环境接触之间的耦合。

<a id="course-section-44"></a>

### 10.2 站稳需要外部支持力

对于整个机器人质心 $c$，外部合力满足

$$\boxed{m\ddot c=m\mathbf g+\sum_i f_i.}$$

站立时 $\ddot c\approx0$，足底接触力之和必须近似抵消重力。若脚离地，机器人不能单靠内部关节力矩维持质心在空中不下落。手部抓物、人形走路和四足行走在物理上都需要处理**接触力与可驱动自由度的关系**。

<a id="course-section-45"></a>

### 10.3 质心动力学与全身控制只保留最重要部分

质心角动量变化由外部接触力矩决定：

$$\dot L_c=\sum_i(r_i-c)\times f_i+\sum_i m_i^{\mathrm{ext}}.$$

Whole-Body Control（WBC）把全身任务和约束放在一起考虑：末端位置、躯干平衡、足底固定、力矩限幅、摩擦锥以及关节限位。基于模型的 WBC 可显式优化加速度与接触力；强化学习 locomotion policy 则可通过仿真和奖励学到相应行为。**两者都依赖同一套底层物理**，但学习到的策略不一定在部署时显式求解逆动力学或 QP。

<a id="course-section-46"></a>

## 第十一章 动力学控制：哪些方法对具身智能最有用

<a id="course-section-47"></a>

### 11.1 PD 与重力补偿

给定目标关节位置 $q_d$ 和速度 $\dot q_d$，典型力矩控制为

$$\tau=K_p(q_d-q)+K_d(\dot q_d-\dot q).$$

加入模型重力补偿得到

$$\boxed{\tau=K_p(q_d-q)+K_d(\dot q_d-\dot q)+g(q).}$$

它适合解释位置动作的低层闭环，也有助于分析机器人换负载后为何需要更新参数。若接触较复杂，重力补偿不足以自动保证接触稳定。

<a id="course-section-48"></a>

### 11.2 计算力矩控制

在自由空间、模型较准确、力矩可控时，定义 $e=q_d-q$ 和

$$\ddot q^*=\ddot q_d+K_d\dot e+K_pe,$$

令

$$\boxed{\tau=M(q)\ddot q^*+h(q,\dot q),}$$

则理想情况下误差满足 $\ddot e+K_d\dot e+K_pe=0$。这一推导说明动力学模型如何把非线性运动补偿为简单的跟踪误差动力学。真实机器人仍受饱和、摩擦、建模误差和接触扰动影响。

<a id="course-section-49"></a>

### 11.3 阻抗控制用于柔顺接触

简化的笛卡尔阻抗目标力为

$$F_d=K_x(x_d-x)+D_x(\dot x_d-\dot x),$$

通过 Jacobian 映射到关节力矩，再结合重力与必要的动力学补偿。与刚性位置跟踪相比，阻抗控制允许末端在接触力作用下适度偏移，更容易实现安全柔顺的物理交互。

<a id="course-section-50"></a>

### 11.4 MPC/WBC 的位置

MPC 用动力学预测未来若干步并优化控制输入；WBC 则更侧重同时满足全身任务和接触约束。对于本教程的目标，无需详细展开非线性优化求解器；需要理解的是：**物理约束决定哪些目标加速度、力矩和接触力可同时实现**。高层 VLA 发出的目标不一定天然满足这些约束。

<a id="course-section-51"></a>

## 第十二章 MuJoCo 与 Isaac Sim / Isaac Lab：如何理解差异

<a id="course-section-52"></a>

### 12.1 两套软件分别承担什么角色

**MuJoCo** 适合做动力学直觉验证、参数敏感性分析、接触行为分析、较轻量的机械臂实验。它以多刚体、执行器与约束求解为核心，不应因为它有快速仿真能力，就忽视接触模型和求解器设置。

**Isaac Sim** 提供机器人与场景仿真能力；**Isaac Lab** 在其仿真能力之上组织机器人学习环境、批量训练、动作/观测/奖励与随机化。二者不是彼此独立的两个物理引擎。具体使用的物理后端、版本及执行器模型，应以本地版本对应的官方文档为准。[4–7]

| 研究问题 | MuJoCo 重点 | Isaac Sim / Isaac Lab 重点 |
|:--|:--|:--|
| 为什么杆会下落？ | 最小模型、逐项理解力矩 | 验证物理属性和关节驱动配置 |
| 为什么抓取时会滑动？ | 接触几何、摩擦与数值参数 | 多接触、并行环境、随机化 |
| 为什么策略真机表现下降？ | 精简参数对照与诊断 | 批量 DR、强化学习训练与迁移 |
| 怎样评价同一个控制器？ | 可解释的单环境基线 | 完整机器人和任务规模扩展 |

<a id="course-section-53"></a>

### 12.2 不能只对齐 URDF 文件名

真正公平的跨平台对照，需要对齐：连杆质量及质心、惯量张量及惯量坐标系、关节轴和限位、基座是否固定、碰撞几何、重力方向、执行器增益和限幅、物理积分步长、控制周期、初始条件、接触与摩擦设置。

即使这些条件尽可能一致，两个物理后端的约束求解、接触柔顺和数值积分仍可能不同，所以**先比较无接触自由空间，再逐渐加入接触**。不要把某个引擎当作另一引擎的“真值”。

<a id="course-section-54"></a>

### 12.3 必须区分三个时间尺度

物理仿真步长 $\Delta t_{\mathrm{phys}}$、执行器或控制器更新间隔 $\Delta t_{\mathrm{ctrl}}$、策略输出周期 $\Delta t_{\pi}$ 可能不同。若策略以较低频率输出位置目标，底层 PD 可以在两次策略动作之间持续更新，物理求解器还会执行多个更小的积分步。

比较策略时必须说明三个频率以及动作保持方式，否则看似相同的策略可能遭遇完全不同的接触响应与延迟。

<a id="course-section-68"></a>

## 第十五章 从仿真走向真实机器人：检查清单

<a id="course-section-69"></a>

### 15.1 模型首先要物理自洽

动力学参数不要完全独立地随意随机化。质量、质心、转动惯量之间存在物理关联；如果修改负载位置，转动惯量也通常需要相应改变。惯量矩阵应对称并满足物理可实现性。碰撞几何、惯性参考系和可视化网格也应保持清楚的对应关系。

<a id="course-section-70"></a>

### 15.2 Sim2Real 优先随机化什么

建议按实际误差来源排序：末端负载质量/质心、关节摩擦、执行器增益和饱和、延迟、指尖—物体摩擦、接触几何误差，以及物体初始位姿。物理随机化的目标是覆盖**合理真实分布**，并非范围越宽越好。

当观察来源包括 RGB-D 时，还需独立考虑视觉噪声、标定误差和遮挡：视觉误差改变策略对状态的估计；动力学误差改变动作后的真实运动。这两类误差都重要，但不应混为一谈。

<a id="course-section-71"></a>

### 15.3 四个常见误区

- **“URDF 正确，动力学一定正确。”** 错。碰撞、执行器、摩擦和数值求解器同样影响运动。
- **“策略输出位置，所以不需要动力学。”** 错。位置目标仍经由执行器力矩实现。
- **“重力补偿可以解决抓取不稳定。”** 不充分。接触摩擦、负载变化和动态扰动仍起作用。
- **“两个仿真器结果不同，必有一个错误。”** 不一定。不同接触模型与离散求解方法可能产生不同的有效物理响应。

<a id="course-section-72"></a>

### 15.4 一页公式速查

| 场景 | 核心关系 | 物理含义 |
|:--|:--|:--|
| 末端运动 | $\dot p=J_p\dot q$ | 关节速度决定末端速度 |
| 末端受力 | $\tau_{\mathrm{ext}}=J_p^Tf$ | 笛卡尔接触力映射为关节力 |
| 无接触机械臂 | $M\ddot q+h=\tau$ | 力矩决定关节加速度 |
| 含接触机械臂 | $M\ddot q+h=\tau+J_c^T\lambda$ | 接触力改变运动 |
| 关节重力补偿 | $\tau=g(q)$（静止且无接触） | 姿态决定保持力矩 |
| 摩擦锥 | $\|\lambda_t\|\le\mu\lambda_n$ | 限制无滑动接触 |
| 浮动基座 | $M\dot v+h=S^T\tau+J_c^T\lambda$ | 基座欠驱动，依赖外力 |
| 质心平动 | $m\ddot c=m\mathbf g+\sum f_i$ | 站立和抓取受外部支持力支配 |

<a id="course-section-73"></a>

## 附录 A：课程知识点与本教程的取舍

| MEE5114 对应内容 | 本教程位置 | 处理原则 |
|:--|:--|:--|
| Lecture 2–7：位姿、Twist、POE、Jacobian | 第 2 章 | 保留坐标系与 Jacobian，省略 POE 详细推导 |
| Lecture 8：Rigid Body Dynamics | 第 3–4 章 | 保留刚体惯量与受力直觉，省略空间算子细节 |
| Lecture 9：Dynamics of Open Chains | 第 4–6 章 | 保留多体方程及 RNEA / CRBA / ABA 作用 |
| Lecture 14：Robot Motion Control | 第 7、11 章 | 保留伺服、重力补偿、计算力矩及阻抗 |
| 额外扩展：接触与操作 | 第 8–9 章 | 具身任务必需，重点保留 |
| 额外扩展：浮动基座 | 第 10 章 | 面向人形和腿式机器人 |
| 额外扩展：仿真平台与 Sim2Real | 第 12、15 章 | 平台差异与模型一致性 |

<a id="course-section-74"></a>

## 附录 B：符号、阅读建议与参考资料

**基本符号**：$q,\dot q,\ddot q$：关节位置/速度/加速度；$M$：关节空间质量矩阵；$C\dot q$：科氏和离心速度项；$g(q)$：重力广义力；$h=C\dot q+g$：非线性偏置项；$\tau$：驱动广义力；$J$：Jacobian；$\lambda$：环境接触力；$\mu$：摩擦系数；$v$：浮动基座广义速度；$S$：关节驱动选择矩阵。

**推荐最短路径**：先理解第 1–5 章，再学习第 7–9 章；如果研究人形或四足机器人，再扩展第 10 章。第 12、15 章介绍平台差异与 Sim2Real 模型一致性。

1. [MEE5114 — Advanced Control for Robotics，Wei Zhang][r1]：课程总体结构；重点阅读 Lecture 8、9、14。
2. [Modern Robotics — Chapter 8: Dynamics of Open Chains][r2]：拉格朗日动力学、正逆动力学、约束与执行器。
3. [Modern Robotics — Chapter 11: Robot Control][r3]：关节和任务空间控制。
4. [Featherstone — Rigid Body Dynamics Algorithms / Spatial Vector Resources][r4]：理解 RNEA、CRBA、ABA 的进一步材料。
5. [MuJoCo — Computation][r5]：多刚体、执行器、接触和约束求解。
6. [Isaac Lab — Articulations][r6]：固定基座与浮动基座、多体结构、动作接口。
7. [Isaac Lab — Actuators][r7]：显式/隐式执行器与模型差异；以实际安装版本为准。
8. [MIT — Underactuated Robotics: Multibody Dynamics][r8]：复杂多体与欠驱动系统的拓展阅读。

[r1]: https://www.wzhanglab.site/teaching/mee-5114-advanced-control-for-robotics/
[r2]: https://modernrobotics.northwestern.edu/chapters/chapter8/
[r3]: https://modernrobotics.northwestern.edu/chapters/chapter11/
[r4]: https://royfeatherstone.org/spatial/index.html
[r5]: https://mujoco.readthedocs.io/en/stable/computation/
[r6]: https://isaac-sim.github.io/IsaacLab/main/source/api/lab/isaaclab.assets.html
[r7]: https://isaac-sim.github.io/IsaacLab/develop/source/concepts/actuators.html
[r8]: https://underactuated.mit.edu/multibody.html
