让动作听指挥:Kimodo全身关键帧/末端执行器/2D路径约束全解析
【免费下载链接】kimodoOfficial implementation of Kimodo, a kinematic motion diffusion model for high-quality human(oid) motion generation.项目地址: https://gitcode.com/gh_mirrors/ki/kimodo
Kimodo 是一款开源的运动扩散模型,能根据文字提示生成高质量 3D 人体与机器人动作。而真正让生成结果"听指挥"的,是它的约束系统:全身关键帧、末端执行器、2D 路径与路径点。本文将带你快速搞懂这 4 类约束的原理、JSON 格式和实操技巧,配合后处理与 CFG 权重,让生成动作精准落在你想要的位置和姿态上。
一、为什么约束比纯文字提示更"可控"
Kimodo 在 700 小时光学动捕数据上训练,支持 SOMA、G1 机器人、SMPL-X 三类骨架,核心能力是文字驱动 + 运动学约束驱动的双通道控制。
纯文字提示擅长描述"做什么"(走路、挥手、跳舞),但无法保证:
- 第 60 帧手必须恰好碰到某个物体
- 角色的移动路线必须经过某几个点
- 某一帧必须保持一个特定姿势
约束就是为此设计的——它们是带时间定位的信号,把动作在特定帧"钉"到目标空间位置上,其余部分仍由模型自由补全,保证动作自然。
二、四类约束速览:一张图看懂
官方文档用一张总览图概括了约束类型与时间轴的关系,建议新手先建立整体印象:
| 约束类型 | JSONtype | 控制内容 | 典型场景 |
|---|---|---|---|
| 全身关键帧 | fullbody | 指定帧的全部关节位置 + 根节点位置 | 定格某个姿势、动作衔接 |
| 末端执行器 | left-hand/right-hand/left-foot/right-foot/end-effector | 手腕/脚跟位置与朝向 | 抓握、触碰、落脚步 |
| 2D 路径点(稀疏) | root2d | 地面上的若干引导点 | 控制行走路线大方向 |
| 2D 路径(密集) | root2d | 连续稠密地面轨迹 | 精确贴合一条完整路径 |
| 脚部接触 | 训练已支持 | 脚尖/脚跟接触模式 | 目前演示与 Python API 暂未开放 |
前两者属于关键帧式约束(作用于单个帧或稀疏帧),后两者属于根节点轨迹约束(作用于 2D 地面平面上的根位置)。
三、全身关键帧约束:把一整帧姿势"钉死"
fullbody约束在指定帧上同时约束平滑根位置 + 全部关节位置。你在 JSON 中提供的是每个关节的轴角旋转local_joints_rot和根(臀部)位置root_positions,模型内部通过正向运动学(FK)算出关节位置,再对这些位置施加约束。
一个最小示例长这样:
[ { "type": "fullbody", "frame_indices": [60], "root_positions": [[0.0, 0.96, 1.5]], "local_joints_rot": [[[0.0, 0.0, 0.0], "... 每个关节一个 [3] ..."]] } ]root_positions中 Y 是绝对臀高(站立约 0.9 m,蹲下更低),XZ 相对原点- 仓库里可直接参考带完整数据的示例:03_full_body_keyframes/constraints.json,它在第 59、106、148 帧各钉了一个全身姿势
📌实操技巧:不必手写旋转数组。在交互演示(kimodo_demo)中开启编辑模式,直接在 3D 视图里拖关节调整姿势,约束会自动写回时间轴:
四、末端执行器约束:手和脚的精确落点
全身关键帧太重手?end-effector类约束只"管"手或脚,身体其余部分保持自由,这是做接触类动作(握手、按按钮、踩点)的最佳选择。
- 手部:约束手腕位置与旋转 + 手掌末端位置
- 脚部:约束脚跟位置与旋转 + 脚尖位置
left-hand/right-hand/left-foot/right-foot都是end-effector的快捷写法- 通用写法
end-effector可加joint_names字段,任意组合骨骼上可用的末端
仓库中 02_multi_text_ee_constraint/constraints.json 展示了"多段文字 + 左手在第 40、155 帧触碰目标"的组合用法:文字负责动作风格,末端执行器约束负责落点精度,两者叠加后控制力远超单一提示词。
五、2D 路径与路径点约束:给角色铺设行走路线
root2d类型同时承载两种模式,区别只在frame_indices的密度:
1. 稀疏路径点(Waypoints)
[ { "type": "root2d", "frame_indices": [0, 87, 169, 240], "smooth_root_2d": [[0.0, 0.0], [0.5, 0.3], [-0.4, 1.2], [0.0, 2.0]] } ]在几个帧上给出[x, z]地面坐标,模型自行规划中间的走法。参考 06_root_waypoints/constraints.json。
2. 稠密 2D 路径(Path)
逐帧给出轨迹,适合需要严格贴合路线的场景(如沿地形走、绕开障碍)。参考 05_root_path/constraints.json。
约束作用于 Kimodo 生成的平滑根表示的 2D 分量,因此路径天然是平滑的:
📌实操技巧:在演示界面的 "Root 2D Options" 中勾选Make Smooth Path,已布好的路径点会自动转成稠密平滑路径(首尾帧没有路径点时会自动补上)。还可以选填global_root_heading([cos θ, sin θ]方向向量)来同时约束朝向。
六、实操流程:从演示界面到命令行
第一步:在时间轴上布置约束。启动kimodo_demo(本地 http://127.0.0.1:7860),时间轴上可添加文字提示和多个约束轨道,约束支持单帧或区间两种定位方式:
第二步:保存约束。点击Save Constraints即可导出标准 JSON,避免手写格式出错。
第三步:命令行生成。用kimodo_gen加载约束文件:
kimodo_gen --prompt "A person walks forward" --constraints my_constraints.json --model somarp --duration 5关键参数速查:
| 参数 | 作用 |
|---|---|
--constraints | 约束 JSON 文件路径 |
--cfg_type/--cfg_weight | CFG 引导:separated模式可分别调节文字与约束权重 |
--no-postprocess | 关闭后处理(默认开启,建议保持开启) |
完整的字段定义(含坐标系、smooth_root_2d、root_positions、local_joints_rot等)见 docs/source/user_guide/constraints.md,概念解释见 docs/source/key_concepts/constraints.md 对应的 constraints.md。
⚠️坐标系要点:所有约束值为Y 向上、单位米;第 0 帧根节点默认在地面原点(0, 0);初始朝向由生成参数first_heading_angle控制(默认 0,面向 +Z)。约束不要求从第 0 帧开始,从第 45 帧开始约束完全合法,只要从起始姿态可达即可。
七、两个关键调优开关:CFG 权重与后处理
1. CFG 分离权重:--cfg_type separated允许为文字和约束设置不同的引导强度。当约束和文字"打架"时(比如约束要求站立、文字要求奔跑),优先调整这个权重而不是硬改约束。
2. 后处理(Post-Processing):神经网络很难 100% 精确命中约束,Kimodo 默认会在生成后跑一次轻量优化,平滑微调关节,使动作精确命中约束并清理滑步。对脚部接触和约束精度要求高的场景务必保持开启(实现见 kimodo/postprocess.py)。注意:该优化目前对 G1 机器人骨架效果欠佳。
最终动作可导出并渲染验证,例如在 MuJoCo 中查看 G1 机器人动作:
八、新手最佳实践清单
来自官方 docs/source/key_concepts/limitations.md 的实战经验:
- ✅ 每条约束受约束帧数少于 20时效果最佳(密集根路径除外)——Kimodo 主要按稀疏关键帧训练
- ✅ 约束不要与文字提示互相矛盾,冲突会导致伪影或约束被忽略
- ✅ 文字提示以 "A person..." 开头,每条提示聚焦 1~2 个动作
- ✅ 多提示拼接时,每条提示要能独立成立(包含上下文信息)
- ⏱️ 每条提示最长生成10 秒
- ✅ 追求约束精度时开启后处理(G1 骨架除外)
总结
Kimodo 的约束体系可以概括为一句话:全身关键帧定姿势、末端执行器定手脚、2D 路径定路线。三者与文字提示自由组合,再配合 CFG 分离权重和后处理优化,就能让生成动作从"大概像"进化为"精确到位"。建议从交互演示的 Examples 面板加载 内置示例 入手——每个示例都附带约束 JSON,是最直观的学习材料。
【免费下载链接】kimodoOfficial implementation of Kimodo, a kinematic motion diffusion model for high-quality human(oid) motion generation.项目地址: https://gitcode.com/gh_mirrors/ki/kimodo
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考