持续更新

灵巧手小问题大全

读代码时碰到的小问题,每条只讲重点。

  1. 1. 世界模型预测变化量,不预测下一状态
  2. 2. 策略拆成编码器和解码器
  3. 3. 朝向变化用轴角,所以输出 70 维而不是 71 维
  4. 4. 世界模型输入用 245 维特征,不用 71 维原始状态
  5. 5. 网络只输出相对基准的小偏移
  6. 6. sim.step() 里发生了什么
  7. 7. 策略不直接预测力,握力来自"目标压进物体"

1. 世界模型预测变化量,不预测下一状态

网络只输出这一步变了多少,再解析地加回当前状态。

\[\hat s_{t+1}=s_t+f_\phi(s_t,a_t)\tag{1}\]
状态自身的波动 ÷ 一步变化的波动,条长按对数刻度。LAFAN1,40 条动作,50 Hz。

证据:公开复现的选择,没有对比实验。图是我算的参考动作统计。

2. 策略拆成编码器和解码器

编码器管"做什么",解码器管"怎么做"。换任务只换编码器。

\[z=\tanh\big(E(g)\big),\qquad a=D(z,\ o)\tag{2}\]

\(g\) 是目标,\(o\) 是观测,\(z\) 是 32 维潜变量。

证据:设计来自 SuperMimic 论文,但论文和公开复现都没有做"拆 vs 不拆"的对比。

3. 朝向变化用轴角,所以输出 70 维而不是 71 维

状态里朝向是 4 维四元数,变化量里换成 3 维轴角,所以少 1 维。其余 67 维一一对应。

\[R_{t+1}=R_t\exp(\Delta_R),\qquad \Delta_R\in\mathbb R^3\tag{3}\]

证据:公开复现的选择,没有对比实验。

4. 世界模型输入用 245 维特征,不用 71 维原始状态

特征全部由 71 维状态算出,没有新信息,只是让网络更好学。

\[\begin{aligned}x=\big[\,&p_z,\ \operatorname{rot6d}(H^\top R),\\ &H^\top v,\ R^\top\omega,\ q-q_0,\ \dot q,\\ &H^\top(P_i-p),\ H^\top V_i\,\big]\end{aligned}\tag{4}\]

\(H\) 是偏航旋转,\(P_i\)、\(V_i\) 是 29 节连杆的位置和速度。共 245 维:高度 1、倾斜 6、根部速度 3 + 3、关节 29 + 29、连杆 87 + 87。

证据:公开复现的选择,论文没写输入是什么,也没有对比实验。

5. 网络只输出相对基准的小偏移

让输出 0 本身就是合理行为,网络只学修正量。

\[\begin{aligned}\text{策略:}\ &q_{\text{target}}=q_0+\text{scale}\cdot a\\ \text{世界模型:}\ &\hat s_{t+1}=s_t+\Delta\end{aligned}\tag{5}\]

证据:公开复现的做法,没有对比实验。PD 目标比力矩好学,见 Peng 和 van de Panne 2017 年的动作空间比较。

6. sim.step() 里发生了什么

一个物理步按顺序从几何算到力,再算到运动。

  1. 正运动学:由 \(q\) 算出连杆位姿。
  2. 碰撞检测:找出接触点。
  3. 算力:PD 力矩、重力、科氏力等。
  4. 解约束:求接触力、摩擦力、关节限位力。
  5. 求加速度:\(\ddot q=M^{-1}(\tau+\text{其他力})\)。
  6. 积分:更新速度,再更新位置。

证据:MuJoCo 的标准计算流程。

7. 策略不直接预测力,握力来自"目标压进物体"

PD 不知道物体。策略把目标角设在物体里面,手指被挡住,误差不消失,PD 就持续出力。

\[\tau=k_p\,(q_{\text{target}}-q)-k_d\,\dot q\tag{6}\]

证据:PD 和接触的一般机理,不是某个对比实验的结论。