Skip to content

Commit 348c558

Browse files
authored
Convert links and joints to USD (#25)
Converts the robot structure (links and joints) and physical properties, but not the meshes/materials Also implemented a planar joint define function. We may want to contibute this back to usd-exchange at some point. URDF transmission elements are now considered undefined as the XML for them schema is unstable/unsupported.
1 parent a0cffa1 commit 348c558

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+2725
-285
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ license = {text = "Apache-2.0"}
77
readme = "README.md"
88
requires-python = ">=3.10,<3.13"
99
dependencies = [
10-
"usd-exchange>=2.1.0a3", # locked to USD 25.05
10+
"usd-exchange>=2.2.0a1", # locked to USD 25.05
1111
"numpy-stl>=3.2",
1212
"tinyobjloader>=2.0.0rc13",
1313
]

tests/data/assets/box.stl

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
solid stdin
2+
facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00
3+
outer loop
4+
vertex -5.000000000e-01 5.000000000e-01 5.000000000e-01
5+
vertex 5.000000000e-01 5.000000000e-01 5.000000000e-01
6+
vertex 5.000000000e-01 -5.000000000e-01 5.000000000e-01
7+
endloop
8+
endfacet
9+
facet normal 0.000000000e+00 0.000000000e+00 -1.000000000e+00
10+
outer loop
11+
vertex 5.000000000e-01 5.000000000e-01 -5.000000000e-01
12+
vertex -5.000000000e-01 5.000000000e-01 -5.000000000e-01
13+
vertex -5.000000000e-01 -5.000000000e-01 -5.000000000e-01
14+
endloop
15+
endfacet
16+
facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00
17+
outer loop
18+
vertex 5.000000000e-01 5.000000000e-01 5.000000000e-01
19+
vertex -5.000000000e-01 5.000000000e-01 5.000000000e-01
20+
vertex -5.000000000e-01 5.000000000e-01 -5.000000000e-01
21+
endloop
22+
endfacet
23+
facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00
24+
outer loop
25+
vertex -5.000000000e-01 -5.000000000e-01 5.000000000e-01
26+
vertex 5.000000000e-01 -5.000000000e-01 5.000000000e-01
27+
vertex 5.000000000e-01 -5.000000000e-01 -5.000000000e-01
28+
endloop
29+
endfacet
30+
facet normal 1.000000000e+00 0.000000000e+00 0.000000000e+00
31+
outer loop
32+
vertex 5.000000000e-01 5.000000000e-01 5.000000000e-01
33+
vertex 5.000000000e-01 5.000000000e-01 -5.000000000e-01
34+
vertex 5.000000000e-01 -5.000000000e-01 -5.000000000e-01
35+
endloop
36+
endfacet
37+
facet normal -1.000000000e+00 0.000000000e+00 0.000000000e+00
38+
outer loop
39+
vertex -5.000000000e-01 5.000000000e-01 -5.000000000e-01
40+
vertex -5.000000000e-01 5.000000000e-01 5.000000000e-01
41+
vertex -5.000000000e-01 -5.000000000e-01 5.000000000e-01
42+
endloop
43+
endfacet
44+
facet normal -1.000000000e+00 0.000000000e+00 0.000000000e+00
45+
outer loop
46+
vertex -5.000000000e-01 -5.000000000e-01 5.000000000e-01
47+
vertex -5.000000000e-01 -5.000000000e-01 -5.000000000e-01
48+
vertex -5.000000000e-01 5.000000000e-01 -5.000000000e-01
49+
endloop
50+
endfacet
51+
facet normal 1.000000000e+00 0.000000000e+00 0.000000000e+00
52+
outer loop
53+
vertex 5.000000000e-01 -5.000000000e-01 -5.000000000e-01
54+
vertex 5.000000000e-01 -5.000000000e-01 5.000000000e-01
55+
vertex 5.000000000e-01 5.000000000e-01 5.000000000e-01
56+
endloop
57+
endfacet
58+
facet normal 0.000000000e+00 -1.000000000e+00 0.000000000e+00
59+
outer loop
60+
vertex 5.000000000e-01 -5.000000000e-01 -5.000000000e-01
61+
vertex -5.000000000e-01 -5.000000000e-01 -5.000000000e-01
62+
vertex -5.000000000e-01 -5.000000000e-01 5.000000000e-01
63+
endloop
64+
endfacet
65+
facet normal 0.000000000e+00 1.000000000e+00 0.000000000e+00
66+
outer loop
67+
vertex -5.000000000e-01 5.000000000e-01 -5.000000000e-01
68+
vertex 5.000000000e-01 5.000000000e-01 -5.000000000e-01
69+
vertex 5.000000000e-01 5.000000000e-01 5.000000000e-01
70+
endloop
71+
endfacet
72+
facet normal 0.000000000e+00 0.000000000e+00 -1.000000000e+00
73+
outer loop
74+
vertex -5.000000000e-01 -5.000000000e-01 -5.000000000e-01
75+
vertex 5.000000000e-01 -5.000000000e-01 -5.000000000e-01
76+
vertex 5.000000000e-01 5.000000000e-01 -5.000000000e-01
77+
endloop
78+
endfacet
79+
facet normal 0.000000000e+00 0.000000000e+00 1.000000000e+00
80+
outer loop
81+
vertex 5.000000000e-01 -5.000000000e-01 5.000000000e-01
82+
vertex -5.000000000e-01 -5.000000000e-01 5.000000000e-01
83+
vertex -5.000000000e-01 5.000000000e-01 5.000000000e-01
84+
endloop
85+
endfacet
86+
endsolid

tests/data/change_joint_order.urdf

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?xml version="1.0"?>
2+
<robot name="change_joint_order">
3+
<link name="link_box">
4+
<visual>
5+
<geometry>
6+
<box size="0.5 0.5 0.5"/>
7+
</geometry>
8+
</visual>
9+
</link>
10+
<link name="link_box2">
11+
<visual>
12+
<geometry>
13+
<box size="0.5 0.5 0.5"/>
14+
</geometry>
15+
</visual>
16+
</link>
17+
<link name="link_box3">
18+
<visual>
19+
<geometry>
20+
<box size="0.5 0.5 0.5"/>
21+
</geometry>
22+
</visual>
23+
</link>
24+
25+
<joint name="joint_box" type="fixed">
26+
<origin rpy="0 0 0" xyz="1 0 0"/>
27+
<parent link="link_box2"/>
28+
<child link="link_box3"/>
29+
</joint>
30+
31+
<!-- Change the joint order to verify root joint detection. -->
32+
<joint name="joint_root" type="fixed">
33+
<origin rpy="0 0 0" xyz="1 0 0"/>
34+
<parent link="link_box"/>
35+
<child link="link_box2"/>
36+
</joint>
37+
</robot>
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?xml version="1.0"?>
2+
<robot name="error_convert_loop_joint_structure">
3+
<link name="link1">
4+
<visual>
5+
<geometry>
6+
<box size="0.5 0.5 0.5"/>
7+
</geometry>
8+
</visual>
9+
</link>
10+
<link name="link2">
11+
<visual>
12+
<geometry>
13+
<box size="0.5 0.5 0.5"/>
14+
</geometry>
15+
</visual>
16+
</link>
17+
<link name="link3">
18+
<visual>
19+
<geometry>
20+
<box size="0.5 0.5 0.5"/>
21+
</geometry>
22+
</visual>
23+
</link>
24+
25+
<joint name="joint_1" type="fixed">
26+
<origin rpy="0 0 0" xyz="0 0 0"/>
27+
<parent link="link1"/>
28+
<child link="link2"/>
29+
</joint>
30+
<joint name="joint_2" type="fixed">
31+
<origin rpy="0 0 0" xyz="0 0 0"/>
32+
<parent link="link2"/>
33+
<child link="link3"/>
34+
</joint>
35+
36+
<!-- This is a loop joint structure. -->
37+
<!-- In this case, an error will occur when converting from URDF to USD. -->
38+
<joint name="joint_3" type="fixed">
39+
<origin rpy="0 0 0" xyz="0 0 0"/>
40+
<parent link="link3"/>
41+
<child link="link1"/>
42+
</joint>
43+
</robot>

tests/data/error_duplicate_transmission_names.urdf

Lines changed: 0 additions & 11 deletions
This file was deleted.

tests/data/error_joint_axis_0.urdf

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<robot name="joint_axis_0">
2+
<link name="BaseLink">
3+
<visual>
4+
<origin rpy="0 0 0" xyz="-2 0 0.5"/>
5+
<geometry>
6+
<box size="1 1 1"/>
7+
</geometry>
8+
</visual>
9+
</link>
10+
11+
<link name="link2">
12+
<visual>
13+
<origin rpy="0 0 0" xyz="0 0 0.5"/>
14+
<geometry>
15+
<box size="0.5 0.5 0.5"/>
16+
</geometry>
17+
</visual>
18+
</link>
19+
20+
<!-- This is a deliberate mistake. -->
21+
<!-- The axis xyz is (0, 0, 0). -->
22+
<joint name="JointA" type="revolute">
23+
<parent link="BaseLink"/>
24+
<child link="link2" />
25+
<axis xyz="0 0 0"/>
26+
<limit lower="-20" upper="20"/>
27+
</joint>
28+
</robot>

tests/data/error_no_urdf_xml.urdf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<?xml verison="1.0"?>
1+
<?xml version="1.0"?>
22
<test name="test">
33
<info name="item1">
44
<color rgb="0.0 1.0 0.0"/>
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?xml version="1.0"?>
2+
<robot name="fixed_continuous_joints">
3+
<link name="BaseLink">
4+
<visual>
5+
<origin rpy="0 0 0" xyz="0.0 0 0"/>
6+
<geometry>
7+
<box size="0.2 0.2 0.2"/>
8+
</geometry>
9+
</visual>
10+
</link>
11+
<link name="Arm_1">
12+
<visual>
13+
<origin rpy="0 0 0" xyz="0.55 0 0"/>
14+
<geometry>
15+
<box size="1.0 0.2 0.2"/>
16+
</geometry>
17+
</visual>
18+
</link>
19+
<link name="Arm_2">
20+
<visual>
21+
<origin rpy="0 1.570 0" xyz="0.15 0 0"/>
22+
<geometry>
23+
<box size="1.0 0.2 0.2"/>
24+
</geometry>
25+
</visual>
26+
</link>
27+
28+
<joint name="joint_root" type="fixed">
29+
<origin rpy="0 0 0" xyz="0.15 0 0.0"/>
30+
<parent link="BaseLink"/>
31+
<child link="Arm_1"/>
32+
</joint>
33+
<joint name="joint_arm_1" type="continuous">
34+
<origin rpy="0 0 0" xyz="1.1 0 0.0"/>
35+
<parent link="Arm_1"/>
36+
<child link="Arm_2"/>
37+
<axis xyz="1 0 0"/>
38+
</joint>
39+
</robot>
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?xml version="1.0"?>
2+
<robot name="fixed_floating_joints">
3+
<link name="BaseLink">
4+
<visual>
5+
<origin rpy="0 0 0" xyz="0.0 0 0"/>
6+
<geometry>
7+
<box size="0.2 0.2 0.2"/>
8+
</geometry>
9+
</visual>
10+
</link>
11+
<link name="Arm_1">
12+
<visual>
13+
<origin rpy="0 0 0" xyz="0.55 0 0"/>
14+
<geometry>
15+
<box size="1.0 0.2 0.2"/>
16+
</geometry>
17+
</visual>
18+
</link>
19+
<link name="Arm_2">
20+
<visual>
21+
<origin rpy="0 0 0" xyz="0.55 0 0"/>
22+
<geometry>
23+
<box size="1.0 0.2 0.2"/>
24+
</geometry>
25+
</visual>
26+
</link>
27+
28+
<joint name="joint_root" type="fixed">
29+
<origin rpy="0 0 0" xyz="0.15 0 0.0"/>
30+
<parent link="BaseLink"/>
31+
<child link="Arm_1"/>
32+
</joint>
33+
<joint name="joint_arm_1" type="floating">
34+
<origin rpy="0 0 0" xyz="1.1 0 0.0"/>
35+
<parent link="Arm_1"/>
36+
<child link="Arm_2"/>
37+
</joint>
38+
</robot>

0 commit comments

Comments
 (0)