URDF声明连接图审查
审查URDF声明link与joint的未解析引用、多父、根与环,并保留完整原件和准确字节位置。
- 1添加输入
- 2调整设置
- 3获取结果
工具输入和文件在当前浏览器处理,不会上传。
开始之前
在打开仿真器之前解释根link问题。检查整个声明父子图,包括独立根和另一个环分量;每个发现都能回到原XML。
如何使用
- 选择或粘贴一份已展开UTF-8 robot XML,运行声明图审查。
- 结合未知引用、候选根、独立分量和环分量判断问题。只有有效声明树才提供深度。
- 下载完整JSON/CSV,对照原件字节位置,再修改模型。
支持范围与限制
单份已展开UTF-8 robot XML,最多5 MiB,可含UTF-8 BOM;最多10,000个link、10,000个joint、XML深度64。含完整原件的JSON与CSV合计最多20 MiB,所有预算同时适用。
审查声明名字、父子引用、未知link、多条传入joint、候选根、强连通环、弱连通分量及有效声明树的深度。处理成功仍可能发现结构问题;仅有一个根不足以证明图是树。
重复名字、缺失或重复parent/child以及损坏XML会整批拒绝。引用未声明link、自环、普通环与多父会形成结构问题报告。名字精确且区分大小写。
DTD/实体声明、处理指令、带namespace的元素/xacro与名字中的未展开${...}或$(...)不支持。内建和数值XML字符引用可解码为惰性名字;不会打开mesh、package、URL或外部文件。
joint类型、模型版本、visual/collision/inertial/dynamics/mimic与未知XML内容均未审查,只保留原件。不提供完整URDF schema、物理或仿真校验,不修复闭环,也不保证机器人可安全运行。
完整JSON保留原UTF-8文本、文件名和hash、全部link/joint及每个parent/child标签的准确UTF-8字节跨度、分量和问题;CSV包含全部link/joint。表格预览200行,每格最多2,000个UTF-16单位;大报告复制仅为明确标注的预览,下载保持完整。
操作示例
示例输入
<robot name="declared-demo"><link name="world"/><link name="a"/><link name="b"/><link name="c"/><joint name="ab" type="fixed"><parent link="a"/><child link="b"/></joint><joint name="bc" type="fixed"><parent link="b"/><child link="c"/></joint><joint name="ca" type="fixed"><parent link="c"/><child link="a"/></joint></robot>
示例参数
{"secondary":"","params":{"spreadsheetSafe":true}}示例输出
{"source":{"name":"pasted.txt","bytes":323,"sha256":"ea213eef9dd4981b3a51565faeae2ce3d8ba278f70f4e759ff896a0bffb9eb50","encoding":"UTF-8","bomRetained":false},"sourceText":"<robot name=\"declared-demo\"><link name=\"world\"/><link name=\"a\"/><link name=\"b\"/><link name=\"c\"/><joint name=\"ab\" type=\"fixed\"><parent link=\"a\"/><child link=\"b\"/></joint><joint name=\"bc\" type=\"fixed\"><parent link=\"b\"/><child link=\"c\"/></joint><joint name=\"ca\" type=\"fixed\"><parent link=\"c\"/><child link=\"a\"/></joint></robot>","robot":{"name":"declared-demo"},"summary":{"links":4,"joints":3,"roots":1,"issues":1,"cycleComponents":1,"weakComponents":2,"validDeclaredTree":false,"status":"graph-issues-found"},"links":[{"index":0,"name":"world","source":{"utf8Start":28,"utf8Bytes":20},"incomingJointIndexes":[],"childLinkIndexes":[],"depth":null},{"index":1,"name":"a","source":{"utf8Start":48,"utf8Bytes":16},"incomingJointIndexes":[2],"childLinkIndexes":[2],"depth":null},{"index":2,"name":"b","source":{"utf8Start":64,"utf8Bytes":16},"incomingJointIndexes":[0],"childLinkIndexes":[3],"depth":null},{"index":3,"name":"c","source":{"utf8Start":80,"utf8Bytes":16},"incomingJointIndexes":[1],"childLinkIndexes":[1],"depth":null}],"joints":[{"index":0,"name":"ab","type":"fixed","parent":"a","child":"b","source":{"utf8Start":96,"utf8Bytes":73},"parentSource":{"utf8Start":126,"utf8Bytes":18},"childSource":{"utf8Start":144,"utf8Bytes":17},"parentIndex":1,"childIndex":2,"status":"resolved"},{"index":1,"name":"bc","type":"fixed","parent":"b","child":"c","source":{"utf8Start":169,"utf8Bytes":73},"parentSource":{"utf8Start":199,"utf8Bytes":18},"childSource":{"utf8Start":217,"utf8Bytes":17},"parentIndex":2,"childIndex":3,"status":"resolved"},{"index":2,"name":"ca","type":"fixed","parent":"c","child":"a","source":{"utf8Start":242,"utf8Bytes":73},"parentSource":{"utf8Start":272,"utf8Bytes":18},"childSource":{"utf8Start":290,"utf8Bytes":17},"parentIndex":3,"childIndex":1,"status":"resolved"}],"roots":[0],"issues":[{"kind":"cycles","stronglyConnectedLinkComponents":[[1,2,3]]}],"cycleComponents":[[1,2,3]],"weakComponents":[[0],[1,2,3]],"validDeclaredTree":false,"graphProfile":"declared resolved parent-child edges only; no simulator execution","unreviewed":["visual","collision","inertial","dynamics","mimic","mesh-access","joint-type","robot-version","unknown XML content"]}出现问题时
修复损坏XML、重复名字或不完整引用,明确展开模板名字。对结构发现,查看完整问题与原件位置,修改后重跑。超限时减少输入或完整报告体量;取消不会输出部分结构图。
常见问题
为什么一个world根可以与另一个环同时存在?
world可以独立成一个分量,而其它link形成有向闭环。示例显示一个根、两个弱分量和一个三link环,整个声明图仍不是树。
声明图没有问题是否代表机器人有效?
只代表该父子声明结构通过检查。joint类型、几何、惯性、mimic、版本和仿真器约束仍未审查。
会下载mesh或展开xacro吗?
不会,URL文字保持惰性。请先在可信本地流程中展开xacro;本工具拒绝xacro namespace和未展开名字。