text-to-cad SRDF 技能深度解析:MoveIt2 机器人规划语义的编写、校验与烟雾测试

发布时间:2026/9/14 13:45:53
text-to-cad SRDF 技能深度解析:MoveIt2 机器人规划语义的编写、校验与烟雾测试 text-to-cad SRDF 技能深度解析MoveIt2 机器人规划语义的编写、校验与烟雾测试【免费下载链接】text-to-cadA library of agent skills for CAD, CAE and CAM项目地址: https://gitcode.com/GitHub_Trending/tex/text-to-cadtext-to-cad 仓库中的 SRDF 技能skills/srdf/为 Agent 提供了一套围绕 MoveIt2 语义机器人描述.srdf文件的完整工作流从已有 URDF 中提取连杆/关节表、按作者契约编写规划组与命名姿态、用仅依赖 Python 标准库的校验器做全量交叉验证再到通过 CAD Viewer 与 MoveIt2 冒烟测试完成闭环。读完本文你将掌握 SRDF 的格式边界、配对机制、黄金骨架、规划台账、禁用碰撞的证据来源规则以及校验器每条 Finding 背后的源码级实现能够在真实机器人项目上独立完成一套可审计、可复现的 SRDF 交付。一、SRDF 是规划语义问题不是 XML 问题技能入口文档 skills/srdf/SKILL.md 开篇就给出了核心判断SRDF 正确性是一个规划语义planning semantics问题。.srdf文件是唯一的真相来源source of truth应当直接编写和编辑 XML——该技能没有gen_srdf()之类的生成契约。文档指出的典型失败模式不是XML 非法而是看起来合理的 SRDF 给了 MoveIt 错误的东西错误的规划组planning group——比如把左臂当成主臂错误的工具连杆tool link / TCP错误的默认组状态default state不安全的禁用碰撞矩阵disabled-collision matrix错误的关节单位把角度写成了弧度值。技能进一步点明由于语言模型在空间与运动学推理上较弱规划组、末端执行器、组状态、禁用碰撞必须从证据推导——URDF 拓扑、MoveIt Setup Assistant 的输出、采样碰撞分析或用户显式提供的数据——而不能看着渲染图觉得哪里该碰撞就禁用哪里。更关键的一条纪律是不要凭记忆敲入任何连杆或关节名先提取 URDF 的 link/joint 表再从中复制名称。近似拼写如wrist_rollvswrist_roll_joint是 SRDF 最常见的缺陷作者契约文档 references/authoring-contract.md 明确将其称为最常见的 SRDF 缺陷。二、格式边界URDF、SRDF、SDF 各管什么SKILL.md 用一节 Format boundary 划定了三种机器人描述格式的权责边界这是防止什么都往 SRDF 里塞的第一道防线格式归属内容URDF物理机器人结构links、joints、几何、惯量、限位、mimic 关节、transmissions、机器人状态发布SRDFMoveIt 语义virtual joints、passive joints、planning groups、group states、end effectors、disabled collision pairsSDF仿真器/世界语义物理、传感器、灯光、插件、world、仿真元数据文档随后给出反向清单不要把几何、惯量、关节原点、连杆位姿、网格引用、物理关节限位、transmissions 或ros2_control接口放进 SRDF。这一边界在仓库中由校验器共同守护——SRDF 解析器 scripts/srdf/source.py 维护了robot与group下的合法子元素白名单KNOWN_ROBOT_CHILDREN、KNOWN_GROUP_CHILDREN见 source.py#L15-L27任何未知子元素都会触发unknown_element警告理由是拼错的元素会被 MoveIt 静默忽略Unknown elements are silently ignored by MoveIt; check for typos。三、编写契约文件形状与黄金骨架authoring-contract.md 规定每个交付的.srdf必须遵循固定形状与顺序XML 声明?xml version1.0?规划台账注释块planning-ledger.md 的紧凑形式唯一的robot根元素其name必须与配对 URDF 完全一致virtual_joint元素在前之后按元素类型分组排列group、group_state、end_effector、passive_joint、disable_collisions。排版要求为两空格缩进非平凡决策为什么选这个 chain tip、为什么禁用这一对碰撞用行内注释记录。契约还规定了每个元素的写法group串联机械臂优先用恰好一个chain base_link tip_link且 base 到 tip 必须是 URDF 树中真实的父→子路径夹爪/头部等非链式组用显式joint/link成员双臂或整机用group子组取并集。不要在一个组里无理由混用多种表示。group_state name group为组内每个可动的、非 mimic 的关节写一条joint name valuerevolute/continuous 用弧度prismatic 用米取值须在 URDF 限位内。end_effector name parent_link group parent_groupEE 组不得与父规划组共享连杆parent_link属于父组或紧邻 EE 组通常是安装法兰。virtual_joint name type parent_frame child_link把机器人根挂到外部坐标系world固定基座机械臂用fixed只有当规划真正需要该自由度时才用planar/floating。校验器对 type 的合法集正是这三者source.py#L13 的VIRTUAL_JOINT_TYPES {fixed, floating, planar}。passive_joint name不能被规划器驱动的非动力关节。disable_collisions link1 link2 reason仅限有证据支撑的对且不得重复或出现反向重复对。契约给出的黄金骨架是一个可直接套用的最小完整样例?xml version1.0? !-- srdf: example_arm | urdf: example_arm.urdf | task: arm IK gripper control groups: arm (chain base_link-tool0), gripper (joint members) states: home, ready (radians, within URDF limits) disabled collisions: URDF-adjacent pairs only (reason Adjacent) assumptions: tool0 is the TCP; no sampled collision matrix yet -- robot nameexample_arm virtual_joint nameworld_to_base typefixed parent_frameworld child_linkbase_footprint / group namearm chain base_linkbase_link tip_linktool0 / /group group namegripper joint namefinger_joint / /group group_state namehome grouparm joint nameshoulder_pitch value0 / joint nameelbow_pitch value0 / joint namewrist_roll value0 / /group_state end_effector namegripper_eef parent_linktool0 groupgripper parent_grouparm / disable_collisions link1base_link link2shoulder_link reasonAdjacent / /robot契约末尾还有一条实用建议相邻对列表、多关节机器人的子组并集、角度到弧度的换算表都是计算题——当机器人关节数超过几个时用一段针对 URDF 的临时脚本推导而不是手算脚本是脚手架签入仓库的.srdf才是唯一权威。四、URDF 配对同目录 同名是唯一机制SRDF 与 URDF 的配对机制是整个技能最容易被误解的部分SKILL.md 与 authoring-contract 反复强调同目录colocationrobot name相同别无其他。.srdf必须与它描述的.urdf保存在同一文件夹两个文件声明完全相同的robot name...该文件夹内恰好一个.urdf可以声明该机器人名——校验器、CAD Viewer 和 MoveIt2 server 都通过扫描目录来解析配对匹配到零个或多个都是错误基名一致so101.srdf挨着so101.urdf只是可读性约定真正配对靠的是 robot name。同一机器人可以有多个规划变体so101_dual.srdf、so101_precise.srdf全部通过与同一个 URDF 的名字匹配来配对没有任何元数据元素链接两个文件。旧文件里的tcad:urdf path.../或更早的explorer:urdf/已经退役所有消费者都忽略它校验器会以deprecated_urdf_link警告提醒你删除。源码中这一机制的实现清晰可见。scripts/srdf/cli.py 的find_paired_urdfcli.py#L151-L158对同目录下所有*.urdf逐一用iterparse只读robot根元素的name属性做流式匹配仅当恰好命中一个时才返回配对路径_resolve_paired_urdfcli.py#L172-L196则分别对零命中no_paired_urdf和多命中ambiguous_paired_urdf产生 error并附上修复提示如 rename or move the extras。而那个退役的 urdf 链接元素在解析器里有专门的特判分支会给出带 hint 的警告source.py#L392-L401。五、必选工作流13 步闭环SKILL.md 的 Required workflow 是整套流程的主干按顺序完整继承如下从有效 URDF 开始。先用$urdf技能编写或修复 URDF 并使其通过校验SRDF 与该 URDF 按同目录 机器人名配对SRDF 里出现的每个名字都必须存在于 URDF 中。提取 URDF 表。写任何 SRDF XML 之前先列出机器人名字、所有 link、所有 joint类型、parent、child、限位、mimic 标志名称只允许从这张表复制禁止凭记忆输入。细节见 srdf-workflow.md。识别规划任务。记录目标到底是臂 IK、夹爪控制、移动底盘规划、双臂规划、工具使用还是本地冒烟测试。创建或更新规划台账。写 XML 前先按 planning-ledger.md 建档并在.srdf内保留一份紧凑副本注释块。按同目录方式与 URDF 配对。同文件夹、同robot name是唯一链接机制每个机器人名每文件夹恰好一个 URDF。有意识地定义 virtual 与 passive 关节。机器人模型需要时才用。从 URDF 拓扑定义规划组。当 base/tip 在 URDF 树中构成真实父→子路径时串联机械臂优先用 chain 组校验器会验证这一点joint/link/subgroup 表示只在确属有意时使用。在确定组成员后再定义末端执行器。避免 EE 组与其父规划组重叠并记录实际的 target/TCP 连杆。用 URDF 原生单位定义组状态。revolute/continuous 为弧度prismatic 为米SRDF 中不存角度。取值必须在 URDF 限位内且不得设置 fixed 或 mimic 关节。基于证据生成禁用碰撞。使用 URDF 关节表推导的邻接关系、Setup Assistant 采样或用户显式提供的碰撞矩阵不要凭空发明大段禁用列表。见 disabled-collisions.md。对每个新建或修改的.srdf运行scripts/validate。它会针对配对 URDF 交叉验证所有名字、链、状态与配对关系修复所有 Finding 并重新校验直到干净。条件允许时运行 MoveIt 冒烟测试。直接用 MoveIt Setup Assistant 或项目 MoveIt launch。报告假设与被跳过的检查。包括未完成的验证、缺失的 MoveIt 环境、人工推理的碰撞禁用、推断得到的目标连杆。工作流参考文档 srdf-workflow.md 把上述步骤展开成Step 0 编辑循环Step 0 要求解析配对 URDF大机器人可用三行 ElementTree 脚本并写下机器人名字、全部 link、全部 joint名称/类型/父子/限位/mimic、根连杆与主串联链编辑循环则是确认 URDF 有效 → 建档 → 按契约写 XML → 推导禁用碰撞与组状态 → 校验至干净 → 交接$cad-viewer→ 冒烟测试 → 报告假设。它还给出一张按机器人类型选择组表示的速查规则串联机械臂→ 一个 chain 组base_link在挂载点、tip_link在法兰/TCP 连杆校验器会拒绝不是真实父→子路径的链夹爪/手→ 列出动力关节的 joint-member 组通常即末端执行器组双臂/整机→ 子组并集注意检查重复语义同一关节经两个子组可达与环移动底盘→ 通常是 planar/floating 虚拟关节加一个底盘组除非规划器真的消费轮子关节否则不要把轮关节建模为规划自由度。fixed 与 mimic 关节永远不是规划变量不属于组状态chain 派生的组也会自动排除它们。文档还提醒URDF 一旦被改名、改限位或改链结构SRDF 会被静默作废——任何触碰 URDF 的任务都应把 URDFSRDF 当作一个整体改完重跑 SRDF 校验器并重新核对组状态。六、规划台账把假设变成显式文档planning-ledger.md 要求在写 SRDF XML之前建档目的是让规划假设显式化、防止看起来合理但错误的 MoveIt 配置。台账由一组表格构成核心字段包括URDF 依赖表URDF 路径、SRDF 输出路径、机器人名字、URDF 是否已校验工具/检查、根连杆、主动关节、fixed 关节、mimic 关节、passive 关节、用于碰撞检查的连杆、已知的 URDF 局限规划任务表主任务IK / plan-to-pose / gripper / mobile base / dual arm / 其他、主规划组、预期的末端执行器或 TCP、所需求解器或规划器、是否仅位置 IK及理由、姿态约束及其表示虚拟关节表名称、类型fixed/planar/floating、父坐标系、子连杆、是否必需、理由——固定基座机械臂在规划需要世界挂接时用 fixedplanar/floating 仅当机器人模型确实需要该自由度Passive 关节表关节、URDF 类型、为何 passive、受影响组、备注——passive 关节不应被当作可控规划变量规划组表组名、表示方式joints/links/chain/subgroups、成员、base/tip 连杆、主动关节、排除关节、用途、求解器预期末端执行器表名称、EE 组、父组、父连杆、target/TCP 连杆、是否检查过重叠、是否邻接、备注组状态表状态名、组、关节值revolute/continuous 为弧度、prismatic 为米、单位检查、限位检查、用途禁用碰撞表Link1、Link2、理由、来源Setup Assistant / sampled / adjacency / user、证据、风险备注MoveIt 冒烟测试表测试项IK solve、plan-to-pose、named state、collision check、组、目标连杆、目标位姿、预期结果、实际结果需报告的假设清单组归属、链 base/tip、TCP 选择、虚拟关节挂接、passive 分类、组状态取值、禁用碰撞对、求解器设置、仅位置 IK 假设、被跳过的 MoveIt 验证等凡有猜测或推断之处必须列出。台账的紧凑副本随.srdf文件一起以注释块形式存在——这正是黄金骨架开头那段注释的用途它让文件可独立审计规划意图与出处都写在文件里配对 URDF 靠约定找到。七、规划组、末端执行器与组状态的校验细节链必须是真实路径对 chain 组校验器不止检查两个连杆存在还要在 URDF 树里找出真实的父→子路径。实现见_joint_path_for_chaincli.py#L501-L529从base_link出发按关节的 parent→child 关系做 DFS找不到通往tip_link的路径就报chain_not_a_patherror。这意味着把两个分属不同分支的连杆写成一条 chain 会被硬性拒绝而不是留到 MoveIt 运行时才炸。末端执行器的拓扑契约end-effectors.md 把末端执行器定义为对工具、夹爪、传感头等末端组的语义指定典型形态是夹爪组加一条 EE 声明group namegripper joint namefinger_joint/ /group end_effector namegripper_eef parent_linktool0 groupgripper parent_groupmanipulator/编写前需逐项确认EE 组存在指定了父组时父组存在父连杆在 URDF 中存在EE 组与父组不共享连杆父连杆在父组内或紧邻 EE 组当 target/TCP 连杆不同于推断的组 tip 时必须显式写出。这些检查在运行时由_validate_end_effector_topology强制执行cli.py#L632-L683分别对应 Finding 码end_effector_group_overlap共享连杆、end_effector_parent_link_outside_parent_group、end_effector_parent_link_not_adjacent。文档同时提醒TCP 选择本质是语义决策不要把对着工具中心点规划寄托在推断上。该参考文档还给出了向$cad-viewer发起可选 MoveIt2 位姿求解交接时的 JSON 协议示例srdf.solvePosepayload 内含endEffector、targetLink、frame、xyz、quat_xyzw与moveit2.planningGroup/moveit2.targetLink其中两条实操原则值得记住仅在姿态被有意解耦时才使用仅位置 IKMoveIt2 本地服务的启动与协议细节归$cad-viewer所有。组状态单位、限位与完备性组状态校验链在 cli.py 中逐关节展开关节名不存在报missing_group_state_joint设置 passive 关节报group_state_sets_passive_joint设置 fixed/mimic 关节分别报group_state_sets_fixed_joint/group_state_sets_mimic_joint见_validate_group_state_joint_kindcli.py#L686-L711数值越界由_validate_group_state_joint_valuecli.py#L714-L742对照 URDF 的 lower/upper 限位产生group_state_below_limit/group_state_above_limitcontinuous 关节豁免限位检查。若命名姿态遗漏了组内某些关节会给出incomplete_group_state警告提示里说得很直白MoveIt 会从当前状态补齐被遗漏的关节这对命名姿态几乎从不是预期行为。解析层source.py还会在值非数值invalid_group_state_value或非有限nonfinite_group_state_value时直接报 error——这正是弧度/米、URDF 原生单位纪律在代码里的落点。八、禁用碰撞证据驱动的安全数据disabled-collisions.md 的立场是一句话禁用碰撞是规划安全数据是推导出来的证据不是装饰性 XML。合法来源只有五类URDF 运动学图的相邻连杆策略、MoveIt Setup Assistant 自碰撞矩阵生成、来自已知 MoveIt 配置的采样碰撞分析、用户显式提供的碰撞矩阵、以及逐对人工审查并写有具体理由的对。从视觉主题或模糊描述推断禁用碰撞被明确禁止。XML 形态与硬性要求disable_collisions link1base_link link2shoulder_link reasonAdjacent/link1/link2必填、两个连杆都须存在于 URDF、连杆名不得相同、reason非空、不允许重复或反向重复对。reason 与出处的对应关系为AdjacentURDF 图邻接、Never/Always/DefaultSetup Assistant 采样矩阵、Manual: ...人工审查如 tool fixture is outside workspace envelope。解析器对 reason 做出处分桶实现见_disabled_collision_sourcesource.py#L442-L454文本含 adjacent 归adjacent含 never/always/sample/default 归sampled含 setup/assistant 归setup_assistant含 assum 归assumed其余一律按manual处理。校验器据此执行两条规则Adjacent 理由的真实性检查声明Adjacent的对若并非由某个 URDF 关节直接连接会触发adjacent_reason_mismatch警告提示改用诚实的理由Never/Default/Manual: ...或修正该对。邻接判定实现为_links_are_adjacentcli.py#L477-L488即两个连杆是否恰好是某个关节的 parent/child。人工对数量上限提示单文件手工理由的对数达到 25cli.py#L20 的MANUAL_PAIR_WARNING_THRESHOLD即触发many_manual_disabled_pairs警告建议改用采样/Setup Assistant 来源重新生成自碰撞矩阵。提交任何一对前的复查清单该对是否邻接或采样安全禁用它是否会掩盖规划任务中真实可能发生的碰撞采样密度是否足够几何、限位或组归属变化后该对是否仍有效人工理由是否已书面记录九、校验器一次遍历收集全部 Finding命令形态校验命令在项目或工作区的 Python 环境下运行示例中的python是解释器占位符不可用时换成python3、venv 解释器或配置好的解释器路径。校验器仅使用 Python 标准库argparse、json、xml.etree.ElementTree见 scripts/srdf/cli.py 头部导入。在技能目录下命令形态为python scripts/validate path/to/robot.srdf python scripts/validate path/to/a.srdf path/to/b.srdf python scripts/validate path/to/robot.srdf --strict python scripts/validate path/to/robot.srdf --format json入口是 scripts/validate/main.py它把scripts/目录加入sys.path后委托给srdf.cli.main。从maincli.py#L42-L75可以确认完整参数面位置参数targets一个或多个.srdf路径相对路径按当前工作目录解析、--strict把警告当作失败、--format text|json默认 textjson 输出机器可读的 findings 文档、以及--verbose仅向 stderr 追加叙述不改变 stdout 的 findings 文档便于调用方解析。退出码语义任一目标失败存在 error或--strict下存在 warning即非零退出。一次遍历检查什么校验流程是解析 SRDF → 解析配对 URDF → 交叉验证三步全部 Finding 汇入一个ValidationResult后去重findings.py 中按 severitycodemessagepath 四元组去重文本模式下每条 Finding 按severity: code at path: message Hint: ...打印到 stderr通过的目标在 stdout 打印一行摘要机器人名字、URDF 路径、组/EE/状态/碰撞对/虚拟关节数量统计见_summary_linecli.py#L141-L148。预检阶段cli.py#L89-L92目标必须是.srdf后缀且文件存在否则直接invalid_target。validation.md 按结构/链接与针对配对 URDF两层列出了全部检查项与源码逐条对应结构与链接层source.py 的_parse_srdf_root根是带非空name的robotinvalid_root/missing_robot_name配对 URDF 恰好解析出唯一一个否则no_paired_urdf/ambiguous_paired_urdf遗留的tcad:urdf/explorer:urdf以deprecated_urdf_link警告并被忽略group、end_effector、group_state、碰撞对的身份唯一性重名报duplicate_namevirtual joint 的 type 合法集、parent_frame/child_link非空group_state 的 name/group 齐备、joint value 数值化与有限性disable_collisions 的 link1/link2 非空、不相同、reason 非空robot与group下的未知元素警告拼写错误的探测网。针对配对 URDF 层cli.py 的_validate_srdf_against_urdf及其辅助函数每个组的 joint/link/subgroup 名字存在joint 查 URDF、link 查 URDF、subgroup 查 SRDF缺失报missing_name_reference等空组报empty_group每个 chain 的 base/tip 存在且是真实父→子路径missing_chain_link/chain_not_a_path子组引用无环_check_subgroup_cyclescli.py#L451-L474DFS 回溯检测报subgroup_cycle并打印环路径至少定义了一个规划组no_planning_groupsvirtual joint 的child_link存在于 URDF与 URDF 关节重名给virtual_joint_name_collision警告passive joint 存在于 URDF 且绝不被组状态设置end effector 的组/父组/父连杆存在性与拓扑重叠、父连杆归属/邻接group state 的组存在、关节属于该组、无 fixed/mimic/passive 关节、数值在 URDF revolute/prismatic 限位内、遗漏关节给incomplete_group_state警告disable_collisions 双连杆存在且不同、Adjacent理由真实性adjacent_reason_mismatch、手工对数量提示many_manual_disabled_pairs配对 URDF 不是单根树时给paired_urdf_not_a_tree警告——因为链路径与邻接检查都假设良构树此时结论不可靠应先用 URDF 技能的校验器处理 URDF。校验证明不了什么validation.md 特意单列一节 What Validation Cannot Prove边界感很强校验器无法证明规划组匹配用户任务意图左臂还是右臂、无法证明 TCP 是物理上正确的工具点、无法证明禁用在所有可达构型下安全只有 Setup Assistant 式采样能逼近、也无法证明组状态位姿无碰撞或有用。这些是语义决策写进台账在需要信心时于 Viewer 或 MoveIt 中交互式验证。单纯的可视化渲染审查不能证明规划正确性。失败处理原则当校验针对 URDF 失败时先判断哪一侧错了再动手一个缺失的名字可能是 SRDF 里的拼写错误也可能是 URDF 改名导致既有语义失效。修拥有方文件结构问题归$urdf然后对这对文件重跑校验器。十、快照工具与 Viewer 同源的渲染SKILL.md 的 Snapshot Tool 一节说明scripts/snapshot可以把机器人渲染成 PNG 静帧或 orbit GIF且使用所有渲染技能共享的同一套 CLI 与无头浏览器运行时——因此快照与 CAD Viewer 所见一致python scripts/snapshot --input path/to/robot.srdf --output review.png python scripts/snapshot --input path/to/robot.srdf --output turntable.gif --mode orbit该工具只接受.srdf。机器人位姿通过 job 字段的jointValues关节名到角度值的映射缺省为 resting 姿态设置而不是 STEP 专用的--params机器人以米为单位建模场景会自动按机器人尺度取景。主题设置统一放在--theme下默认主题是snapshot——Workbench Light 并去掉地面网格、原点坐标轴与阴影因为在静帧里它们会被误读成几何。没有--display显示设置mode、clip、exploded、edges属于 CAD 拓扑设置机器人不携带。文档还给出两条重要运维提示连杆网格相对 description 解析必须真实存在——未拉取的 Git LFS 指针会以 No link mesh loaded for robot 失败需先执行git lfs checkout mesh dir完整命令行接口以python scripts/snapshot --help为准。技能目录的 requirements.txt 只声明了cadgen0.4.10与playwright两个依赖前者支撑共享运行时、后者支撑无头浏览器渲染而校验器本身不依赖任何第三方库。十一、硬规则与 CAD Viewer 交接SKILL.md 的 Hard rules 是不可妥协清单SRDF 与 URDF 同目录且共享robot name同目录 同名匹配是唯一配对机制每机器人名每文件夹恰好一个 URDF每个 link、joint、group、subgroup 名必须来自 URDF 表或同文件定义的组组状态用 URDF 原生单位revolute/continuous 弧度、prismatic 米禁用碰撞对需要诚实的理由与出处末端执行器组不应与父规划组共享连杆$cad-viewer拥有可选的本地moveit2_server交互规划审查指引可视化渲染审查有用但不能证明规划正确性。与之配套的CAD Viewer 交接义务要求凡是创建或修改了.srdf的工作必须在$cad-viewer技能已安装时把显式文件路径交给它$cad-viewer需在 CAD Viewer 未运行时将其启动并返回相关新建/更新文件的链接仅当用户需要交互式 IK 或路径规划审查时才在交接中附上可选 MoveIt2 控件若$cad-viewer不可用或启动失败必须如实报告而不是静默省略交接。本地的 MoveIt2 控件细节在$cad-viewer技能的references/moveit2-server.md中对应仓库路径 skills/cad-viewer/references/moveit2-server.md。十二、技能资源索引SRDF 技能的所有参考文档都以仓库根目录相对路径可直接定位便于深入阅读文档内容skills/srdf/SKILL.md技能入口格式边界、13 步工作流、命令、硬规则、快照工具skills/srdf/references/authoring-contract.md编写契约文件形状、URDF 配对、元素契约、黄金骨架skills/srdf/references/srdf-workflow.mdURDF 表提取、编辑循环、按机器人类型的组设计skills/srdf/references/planning-ledger.md规划台账写 XML 前的假设显式化skills/srdf/references/validation.md校验与验证配方、校验器检查项全表、能力边界skills/srdf/references/end-effectors.md末端执行器概念、台账字段、检查项、MoveIt2 位姿交接协议skills/srdf/references/disabled-collisions.md禁用碰撞的合法来源、reason/出处对照、复查清单skills/srdf/scripts/srdf/cli.py校验器主逻辑URDF 配对解析、链路径、EE 拓扑、组状态限位skills/srdf/scripts/srdf/source.pySRDF 解析器元素白名单、重复检测、reason 出处分桶skills/srdf/scripts/srdf/findings.pyFinding 数据结构与 ValidationResult 去重这套技能的设计可以概括为一句话把看起来合理从 SRDF 生产流程里赶出去——名字必须来自 URDF 表组必须来自拓扑姿态必须来自限位内的原生单位碰撞禁用必须来自证据而每一步都有仅用标准库即可运行的校验器在关口拦截。对以 Agent 方式维护机器人描述的项目而言这正是可审计性与可复现性的来源。【免费下载链接】text-to-cadA library of agent skills for CAD, CAE and CAM项目地址: https://gitcode.com/GitHub_Trending/tex/text-to-cad创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考