You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/concept_mapping.md
+92Lines changed: 92 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -231,6 +231,98 @@ The advantage of this approach is compatibility throughout the USD Ecosystem, pa
231
231
232
232
The disadvantage is that the kinematic hierarchy remains obfuscated (though it is in URDF as well) and that the child body frame needs to be computed into world (robot) space (in addition to the unit transformation).
233
233
234
+
#### A link with no elements
235
+
236
+
A URDF link may omit [inertial](#linkinertial), [visual](#linkvisual), and [collision](#linkcollision) elements entirely.
237
+
We call a link that has no inertial, visual, or collision child elements a Ghost Link.
238
+
URDF does not assign a special type name to such links; the term is used here for clarity.
239
+
240
+
In URDF, a Ghost Link looks like this:
241
+
242
+
```xml
243
+
<linkname="GhostLink" />
244
+
```
245
+
246
+
##### Physics simplification (Ghost Links on Fixed chains)
247
+
248
+
When a subtree satisfies the rules below, ghost links in that subtree need not act as separate rigid bodies for simulation.
249
+
The converter can omit assigning a rigid body to those links while still keeping their place in the kinematic hierarchy, and it can skip authoring physics joints whose child side would not be a rigid body (including joints that only connect ghost segments on such chains).
250
+
251
+
That simplification applies only to maximal subtrees for which every link meets all of the following:
252
+
253
+
1. The link is a Ghost Link (as defined above).
254
+
2. The joint from its parent link to this link is Fixed.
255
+
3. Every child link satisfies the same three conditions recursively; if a link has several children, each branch is checked separately.
256
+
257
+
If any child is not a Ghost Link, connects with a non-Fixed joint, or heads into a subtree that fails these rules, links on the path above that point keep rigid bodies and the corresponding physics joints are still emitted.
258
+
A different child branch that does satisfy the rules end-to-end may still be simplified on its own, omitting rigid bodies and internal Fixed joints along that branch—for example, a side branch of only Ghost Links on Fixed joints to the tips while another branch continues to articulated, non-Ghost links.
259
+
260
+
The nested Geometry Xform hierarchy is not removed; only rigid-body assignment and redundant physics joints change.
261
+
262
+
263
+
Consider the following URDF:
264
+
265
+
```
266
+
<robot>
267
+
<link name="BaseLink">
268
+
...
269
+
</link>
270
+
<link name="BoxLink">
271
+
...
272
+
</link>
273
+
<link name="GhostLink1" />
274
+
<link name="GhostLink2" />
275
+
276
+
<joint name="joint1" type="fixed">
277
+
<origin ... />
278
+
<parent link="BaseLink"/>
279
+
<child link="BoxLink"/>
280
+
</joint>
281
+
<joint name="joint2" type="fixed">
282
+
<origin ... />
283
+
<parent link="BoxLink"/>
284
+
<child link="GhostLink1"/>
285
+
</joint>
286
+
<joint name="joint3" type="fixed">
287
+
<origin ... />
288
+
<parent link="GhostLink1"/>
289
+
<child link="GhostLink2"/>
290
+
</joint>
291
+
</robot>
292
+
```
293
+
294
+
Converting this to USD using [Nested Bodies](#nested-bodies) might initially produce a layout like the following:
Because `GhostLink1` and `GhostLink2` are Ghost Links and the chain from `BoxLink` to the leaves is only Fixed joints between Ghost Links, rigid bodies need not be assigned to `GhostLink1` or `GhostLink2`.
310
+
The Fixed joints whose child is a Ghost Link without a rigid body (`joint2`, `joint3`) are not authored in Physics.
311
+
The USD content can then be simplified to:
312
+
313
+
```
314
+
/Robot (Xform)
315
+
/Geometry (Scope)
316
+
/BaseLink (Xform) (with rigid body)
317
+
/BoxLink (Xform) (with rigid body)
318
+
/GhostLink1 (Xform)
319
+
/GhostLink2 (Xform)
320
+
/Physics (Scope)
321
+
/Joint1 (Joint) (parent=BaseLink, child=BoxLink)
322
+
```
323
+
324
+
In Physics, only the joint with `parent=BaseLink` and `child=BoxLink` remains (in addition to any world/root joint policy used elsewhere in this converter).
325
+
234
326
### link/inertial
235
327
236
328
The inertial element within a link defines the link’s mass, center of mass, and its central inertia properties. When not defined, it indicates zero mass and zero inertia.
0 commit comments