srdflisted
Install: claude install-skill baibai2013/build123d-cad
# SRDF — MoveIt2 语义层
> SRDF 不是 URDF 的替代,是它的语义补丁。URDF 描述「机器人长什么样、怎么动」,
> SRDF 描述「为了规划运动,我们怎么把它分组、哪些位姿叫得出名字、哪些碰撞可以忽略」。
---
## 核心规则
1. **URDF 先稳**:SRDF 引用 URDF 中的 `link` / `joint` 名字,URDF 改名 → SRDF 同步改;
URDF 还在改尺寸 / 关节顺序 → 不要急着写 SRDF。
2. **三大支柱**:`<group>`(规划组)、`<group_state>`(命名虚位姿)、`<disable_collisions>`
(碰撞白名单)。其它元素 (`virtual_joint` / `end_effector` / `passive_joint`) 按需补。
3. **disable_collisions 只关四类**:
① `Adjacent` 相邻链接(URDF joint 直连)、② `Never` 几何上永远不可能碰、
③ `Always` 在所有姿态下都重叠(冗余几何)、④ `Default` 在 home 位姿下重叠。
不要为了消 setup_assistant 红字盲关 — 删掉一对真实存在的碰撞,planner 会
生成穿模轨迹。
4. **virtual_joint 给移动底座**:四足 / 移动机器人必须有 `virtual_joint` 把 `world`
连到 `base_link`(`type="floating"`),否则 MoveIt 把整机当固定基座,IK / 规划群组
全部失效。
5. **group_state 用于"调出来一个姿态"**:home / stand / sit 之类。值是关节角,
不是 link 位姿。每个 group_state 必须显式列出该 group 内**所有**关节。
6. **链 (chain) vs 关节集 (joints)**:腿 / 臂这种串联结构用 `<chain base_link tip_link>`,
非串联(整机、双手协同)用 `<joints>` 列举或 `<group>` 嵌套。
7. **生成顺序**:authoring 先手写关键骨架(group + group_state) → moveit_setup_assistant
交互式补 disable_collisions(几何采样需要它) → 回头人工审 Always 类(防过松)。
8. **跨子技能边界**:URDF 是 SRDF 的**唯一上游**;不要让 SRDF 直接读 STEP / 关节
原始数据,统一通过 URDF 的 link / joint 名字面对。
---
## SRDF vs URDF 一句话对照
| 维度 | URDF | SRDF |
|---|---|---|
| 关心 | 几何 / 惯量 / 关节物理参数 | 语义分组 / 命名位姿 / 碰撞白名单 |
| 文件根 | `<robot name>` | `<robot name>` (同名,SRDF 必须与 URDF 同名) |
| 引用关系 | 自闭包 | **引用** URDF 中的 link / joint 名字 |
| 谁消费 | RViz / robot_state_publisher / Gazebo / MoveIt | **MoveIt2 主用