Skip to content

Commit 1ad4594

Browse files
authored
For fixed joints, axis error checking was skipped. (#58)
1 parent 68de997 commit 1ad4594

File tree

3 files changed

+45
-1
lines changed

3 files changed

+45
-1
lines changed

tests/data/fixed_joint_axis_0.urdf

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<robot name="fixed_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+
<!-- The axis xyz is (0, 0, 0). For fixed joints, the axis is ignored. -->
21+
<joint name="JointA" type="fixed">
22+
<parent link="BaseLink"/>
23+
<child link="link2" />
24+
<axis xyz="0 0 0"/>
25+
<limit lower="-20" upper="20"/>
26+
</joint>
27+
</robot>

tests/test_parser.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -655,3 +655,19 @@ def test_get_undefined_elements(self):
655655
self.assertEqual(element.undefined_element, False)
656656
self.assertEqual(element.undefined_attributes, {"data": "custom_data"})
657657
self.assertEqual(element.line_number, 42)
658+
659+
def test_fixed_joint_axis_0(self):
660+
# In the case of a fixed joint, the axis (0, 0, 0) is skipped without causing an error.
661+
model_path = pathlib.Path("tests/data/fixed_joint_axis_0.urdf")
662+
parser = URDFParser(model_path)
663+
parser.parse()
664+
665+
root_element = parser.get_root_element()
666+
self.assertEqual(len(root_element.joints), 1)
667+
joint = root_element.joints[0]
668+
self.assertEqual(joint.name, "JointA")
669+
self.assertEqual(joint.type, "fixed")
670+
self.assertTrue(joint.parent)
671+
self.assertEqual(joint.parent.link, "BaseLink")
672+
self.assertTrue(joint.child)
673+
self.assertEqual(joint.child.link, "link2")

urdf_usd_converter/_impl/urdf_parser/parser.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,8 @@ def _parse_xml_elements(self, node: ET.Element, prev_element: ElementBase = None
353353

354354
elif isinstance(element, ElementAxis):
355355
element.xyz = self._convert_attribute_float3(node, "xyz")
356-
if element.xyz == (0, 0, 0):
356+
# If the axis xyz is (0, 0, 0) and the joint type is not fixed, an error occurs.
357+
if element.xyz == (0, 0, 0) and prev_element_type == ElementJoint and prev_element.type != "fixed":
357358
raise ValueError(self._get_error_message("Axis xyz cannot be (0, 0, 0)", node))
358359

359360
elif isinstance(element, ElementVerbose):

0 commit comments

Comments
 (0)