|
23 | 23 | # Global variable for the base path of the robot meshes
|
24 | 24 | _base_path = None
|
25 | 25 |
|
| 26 | +def _find_standard_joint(joint: "Joint") -> "rtb.ET | None": |
| 27 | + """ |
| 28 | + Finds a pure rtb.ET joint corresponding to the URDF joint axis. |
| 29 | +
|
| 30 | + If urdf joint is fixed, returns an empty rtb.ET.SE3. |
| 31 | + If none exists (axis is not +- 1 over x, y or z) returns None. |
| 32 | +
|
| 33 | + Attributes |
| 34 | + ---------- |
| 35 | + joint |
| 36 | + joint object read from the urdf. |
| 37 | +
|
| 38 | + Returns |
| 39 | + ------- |
| 40 | + std_joint: rtb.ET or None |
| 41 | + if a rtb.ET joint exists: |
| 42 | + Returns rtb.ET of type joint. This is rtb.ET.[SE(), Rx(), Ry(), ..., tz]. |
| 43 | + else: |
| 44 | + Returns None. |
| 45 | + """ |
| 46 | + std_joint = None |
| 47 | + if joint.joint_type in ("revolute", "continuous"): # pragma nocover # noqa |
| 48 | + if joint.axis[0] == 1: |
| 49 | + std_joint = rtb.ET.Rx() |
| 50 | + elif joint.axis[0] == -1: |
| 51 | + std_joint = rtb.ET.Rx(flip=True) |
| 52 | + elif joint.axis[1] == 1: |
| 53 | + std_joint = rtb.ET.Ry() |
| 54 | + elif joint.axis[1] == -1: |
| 55 | + std_joint = rtb.ET.Ry(flip=True) |
| 56 | + elif joint.axis[2] == 1: |
| 57 | + std_joint = rtb.ET.Rz() |
| 58 | + elif joint.axis[2] == -1: |
| 59 | + std_joint = rtb.ET.Rz(flip=True) |
| 60 | + elif joint.joint_type == "prismatic": # pragma nocover |
| 61 | + if joint.axis[0] == 1: |
| 62 | + std_joint = rtb.ET.tx() |
| 63 | + elif joint.axis[0] == -1: |
| 64 | + std_joint = rtb.ET.tx(flip=True) |
| 65 | + elif joint.axis[1] == 1: |
| 66 | + std_joint = rtb.ET.ty() |
| 67 | + elif joint.axis[1] == -1: |
| 68 | + std_joint = rtb.ET.ty(flip=True) |
| 69 | + elif joint.axis[2] == 1: |
| 70 | + std_joint = rtb.ET.tz() |
| 71 | + elif joint.axis[2] == -1: |
| 72 | + std_joint = rtb.ET.tz(flip=True) |
| 73 | + elif joint.joint_type == "fixed": |
| 74 | + std_joint = rtb.ET.SE3(SE3()) |
| 75 | + return std_joint |
26 | 76 |
|
27 | 77 | class URDFType(object):
|
28 | 78 | """Abstract base class for all URDF types.
|
@@ -1718,38 +1768,10 @@ def __init__(
|
1718 | 1768 |
|
1719 | 1769 | joint.axis = [0, 0, 1]
|
1720 | 1770 |
|
1721 |
| - # variable part of link transform |
1722 |
| - var = None |
1723 |
| - if joint.joint_type in ("revolute", "continuous"): # pragma nocover # noqa |
1724 |
| - if joint.axis[0] == 1: |
1725 |
| - var = rtb.ET.Rx() |
1726 |
| - elif joint.axis[0] == -1: |
1727 |
| - var = rtb.ET.Rx(flip=True) |
1728 |
| - elif joint.axis[1] == 1: |
1729 |
| - var = rtb.ET.Ry() |
1730 |
| - elif joint.axis[1] == -1: |
1731 |
| - var = rtb.ET.Ry(flip=True) |
1732 |
| - elif joint.axis[2] == 1: |
1733 |
| - var = rtb.ET.Rz() |
1734 |
| - elif joint.axis[2] == -1: |
1735 |
| - var = rtb.ET.Rz(flip=True) |
1736 |
| - elif joint.joint_type == "prismatic": # pragma nocover |
1737 |
| - if joint.axis[0] == 1: |
1738 |
| - var = rtb.ET.tx() |
1739 |
| - elif joint.axis[0] == -1: |
1740 |
| - var = rtb.ET.tx(flip=True) |
1741 |
| - elif joint.axis[1] == 1: |
1742 |
| - var = rtb.ET.ty() |
1743 |
| - elif joint.axis[1] == -1: |
1744 |
| - var = rtb.ET.ty(flip=True) |
1745 |
| - elif joint.axis[2] == 1: |
1746 |
| - var = rtb.ET.tz() |
1747 |
| - elif joint.axis[2] == -1: |
1748 |
| - var = rtb.ET.tz(flip=True) |
1749 |
| - elif joint.joint_type == "fixed": |
1750 |
| - var = None |
1751 |
| - |
1752 |
| - if var is not None: |
| 1771 | + var = _find_standard_joint(joint) |
| 1772 | + |
| 1773 | + is_not_fixed = joint.joint_type != "fixed" |
| 1774 | + if var is not None and is_not_fixed: |
1753 | 1775 | ets = ets * var
|
1754 | 1776 |
|
1755 | 1777 | if isinstance(ets, rtb.ET):
|
|
0 commit comments