具身智能的轨迹到动作映射:逆运动学与逆动力学模型的机制分析
扩散模型做机器人规划时,一个很常见的设计是:不要直接生成动作序列,而是先生成某种“未来轨迹”,再用另一个模块把轨迹翻译成可执行动作。
这件事听起来很自然。因为长 horizon 规划里,动作序列往往很细碎、噪声大、不稳定;而状态轨迹、物体轨迹、末端执行器轨迹通常更平滑,也更容易被扩散模型生成。
但问题马上来了:
扩散模型生成了“路径”之后,机器人到底怎么执行?
目前常见有两类方案:
方案一:外部 IK 求解器
方案二:学习型逆动力学模型 IDM
这两种方法表面上很像,都是“把规划结果变成动作”。但它们解决的问题其实不一样。
先说最核心的区别
一句话:
IK 是把“末端位置/姿态”变成“关节角”;IDM 是把“状态变化”变成“环境动作”。也就是:
IK:
end-effector pose -> joint configuration
IDM:
current state + next state -> action
更直观一点:如果你告诉机器人:
夹爪要到这个 3D 位置,并且朝这个方向。
那你需要 IK。
如果你告诉机器人:
当前世界状态是 A,我希望下一步变成状态 B。
那你需要 IDM。
这就是两者最根本的区别。
1.IK:逆运动学解算器
IK,全称 inverse kinematics,逆运动学,更像底层几何求解器
它解决的是一个几何问题:
我希望机械臂末端到达某个位置和姿态
那么各个关节应该是多少角度?
所以 IK 的典型输入不是单纯一个位置点,而是完整的末端执行器位姿:
position: x, y, z
orientation: quaternion 或 roll/pitch/yaw
再加上一些额外条件:
当前关节角
机器人运动学模型
关节限位
碰撞约束
求解初值
输出通常是:
joint angles / joint positions
所以 IK 的控制链路一般是:
扩散模型生成夹爪轨迹
↓
IK 求每一帧对应的关节角
↓
关节控制器执行
这种方案在机械臂任务里很常见,因为很多 manipulation 任务天然可以用“夹爪应该去哪”来描述。
比如:
夹爪移动到杯子上方
夹爪对齐抽屉把手
夹爪移动到按钮前面
让模型预测末端执行器轨迹,比直接预测所有关节动作更直观。但 IK 的问题也很明显,IK 只知道几何,不知道任务。它可以回答:
手要到这里,关节怎么摆?
但它不能回答:
这样抓会不会滑?
两个机械臂会不会互相干扰?
物体会不会掉?
接触点是不是合理?
未来几步是否稳定?
这就是为什么单纯“扩散模型预测末端轨迹 + IK”会遇到很多问题。比如:
预测的末端位置超出工作空间
预测的姿态四元数不合法
某一帧 IK 无解
关节角发生跳变
违反关节限位
轨迹局部可达,但连续执行不可行
没有考虑碰撞和接触
尤其是长路径规划,只要中间某一帧 IK 失败,整条轨迹就可能崩掉。
所以很多新的机器人扩散规划论文,不再满足于“最后接一个 IK solver”。它们会尝试把运动学约束放进模型里,比如同时预测末端 pose 和 joint configuration,或者用 forward kinematics / differentiable kinematics 约束生成结果。
也就是说,IK 本身通常不是创新点,如何让扩散模型生成 IK 可解、物理可执行的轨迹,才更可能成为创新点。
2.IDM:逆动力学解算器
IDM,全称 inverse dynamics model,逆动力学模型,更像学习出来的动作解码器
但在这些扩散规划论文里,IDM 不一定是传统机器人学里严格意义上的“逆动力学求 torque”。它更像一个学习型动作解码器:
给定当前状态 s_t 和目标下一状态 s_{t+1}
预测应该执行什么动作 a_t
形式上就是:
a_t = IDM(s_t, s_{t+1})
如果扩散模型生成的是未来状态序列:
s_t, s_{t+1}, s_{t+2}, ...
那么 IDM 就负责把相邻状态之间的变化翻译成动作:
(s_t, s_{t+1}) -> a_t
(s_{t+1}, s_{t+2}) -> a_{t+1}
实际执行时通常只执行第一个动作,然后重新规划。
为什么 D4RL 里经常用 IDM?
因为 D4RL 这类环境的数据天然长这样:
当前状态 s_t
动作 a_t
下一个状态 s_{t+1}
例如 HalfCheetah、Hopper、Walker2d 这类 MuJoCo 环境里,动作通常是:
关节 torque
关节控制量
actuator command
这不是“夹爪末端位置”,而是环境底层 action。所以如果扩散模型生成状态轨迹,最自然的问题就是:
要让系统从 s_t 变成 s_{t+1},应该施加什么动作?
这正好可以用 IDM 学出来。而且训练非常直接:
输入:(s_t, s_{t+1})
标签:a_t
损失:预测动作和真实动作之间的 MSE
这也是 Decision Diffuser、Trajectory Diffuser 这类方法选择 IDM 的主要原因。它们并不是因为“不知道 IK”,而是因为在 D4RL 里 IK 根本不是合适的问题。HalfCheetah 没有什么“夹爪末端要到某个 pose”,它的问题是身体动力学控制。
3.机械臂任务为什么也会用 IDM?
这是最容易混淆的地方。
很多人会以为:
机械臂任务 -> 一定用 IK
D4RL locomotion -> 一定用 IDM
这个理解不够准确。更准确的说法是:看扩散模型生成的是什么。如果扩散模型生成的是:
末端执行器 pose
那后面通常接 IK。如果扩散模型生成的是:
未来世界状态 / 物体状态 / 机器人状态
那后面更可能接 IDM。
比如 Learning Coordinated Bimanual Manipulation Policies using State Diffusion and Inverse Dynamics Models,虽然它是双臂 manipulation,但它不是简单预测“左手去哪、右手去哪”。
它更关心的是:
物体未来应该怎么移动
场景状态应该怎么变化
两只机械臂如何协调造成这个状态变化
这时候 IK 就不够了。
IK 只能把目标末端位姿变成关节角,但它不知道两个机械臂如何通过接触让物体移动,也不知道柔性物体会不会掉、接触点是否合理、双手是否协调。
所以这篇论文用 state diffusion 预测未来状态,再用 IDM 学:
为了让世界从当前状态变成预测的未来状态,双臂应该执行什么动作?
这就是为什么机械臂任务里也可以用 IDM。
关键不是数据集名字,而是 action representation
前面讨论到最后,其实可以压缩成一个判断标准:
数据集里的 action 是什么?
如果数据里的 action 是:
joint position
joint velocity
torque
gripper command
那么 IDM 可以直接学:
状态变化 -> joint action
这时后面不一定需要 IK。
如果数据里的 action 是:
end-effector pose
end-effector delta
夹爪目标位置
那么即使用 IDM 预测出了 action,这个 action 后面也可能还要经过 IK,才能变成真正的关节控制量。
所以你之前的直觉是对的:
IK 确实更底层。
但 IDM 输出的动作是否还需要 IK,取决于这个“动作”到底是什么。
4.三种常见执行链路
第一种是纯 IK 路线:
任务目标
↓
扩散模型生成末端执行器轨迹
↓
IK: end-effector pose -> joint angles
↓
低层控制器执行
这适合末端位姿规划,比如抓取、按按钮、打开抽屉。
第二种是 IDM 直接输出 joint action:
任务目标
↓
扩散模型生成未来状态
↓
IDM: state transition -> joint action
↓
低层控制器执行
这适合 D4RL、MuJoCo、或者 action 本身就是 joint-level command 的机器人数据。
第三种是 IDM 输出末端动作,然后再接 IK:
任务目标
↓
扩散模型生成未来状态
↓
IDM: state transition -> end-effector action
↓
IK: end-effector action -> joint action
↓
低层控制器执行
这也完全可能出现。
所以 IK 和 IDM 不是绝对互斥的。它们可以在不同层级上同时存在。
5.选取原则
如果你的任务重点是:
末端执行器到达某个空间目标
轨迹比较短
接触关系不复杂
环境支持 pose control
那 IK 路线很合适。它简单、直接、工程上容易落地。
但如果你的任务重点是:
长 horizon 状态规划
复杂接触
物体状态变化
双臂协调
从离线数据中学习动作
那 IDM 往往更合适。
因为 IDM 学的不是简单几何,而是:
什么动作会导致什么状态变化
这对 manipulation、locomotion、object-centric planning 都很重要。
我觉得最清楚的区分方式是:
IK 解决“身体怎么摆”的问题。
IDM 解决“为了造成这个变化,该怎么动”的问题。
IK 是几何求解器。
IDM 是动作生成器。
IK 更底层,但 IDM 可以直接输出底层动作,也可以输出还需要 IK 的高层动作。
所以不要简单地说:
机械臂用 IK,D4RL 用 IDM
而应该看三个东西:
1. 扩散模型生成的变量是什么?
2. 数据集里的 action 是什么?
3. 环境最终能执行什么控制接口?
如果扩散模型生成的是末端 pose,那么 IK 很自然。
如果扩散模型生成的是状态变化,那么 IDM 很自然。
如果 IDM 输出的 action 已经是 joint command,就不需要 IK。
如果 IDM 输出的 action 还是 end-effector command,那后面仍然可能需要 IK。这才是 IK 和 IDM 在扩散式动作规划里真正的关系。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)