Add LinkerHand Isaac Sim bridge and G20 assets.

Includes G20 PLAN/cmd_u8 bridge, joint mapping, dual-hand sim scripts,
and G20/L20/O6 URDF with USD payloads for Isaac Sim integration.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
sunxianghui
2026-07-27 14:13:00 +08:00
commit 0b727785c6
134 changed files with 17662 additions and 0 deletions
+664
View File
@@ -0,0 +1,664 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- This URDF was automatically created by SolidWorks to URDF Exporter! Originally created by Stephen Brawner (brawner@gmail.com)
Commit Version: 1.6.0-4-g7f85cfe Build Version: 1.6.7995.38578
For more information, please see http://wiki.ros.org/sw_urdf_exporter -->
<robot
name="linkerhand_o6_right">
<material name="silver">
<color rgba="0.5 0.5 0.52 1.0"/>
</material>
<material name="BlackAccent">
<color rgba="0.15 0.15 0.15 1.0"/>
</material>
<link
name="rh_hand_base_link">
<inertial>
<origin
xyz="-0.00160320773490556 0.000358462699237561 0.0538002704027215"
rpy="0 0 0" />
<mass
value="0.06740077960995" />
<inertia
ixx="5.22359941041901E-05"
ixy="3.0391535852764E-07"
ixz="3.88322215371643E-07"
iyy="3.33473043513648E-05"
iyz="-7.77555280794861E-07"
izz="2.28342677422006E-05" />
</inertial>
<visual>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="meshes/hand_base_link.STL" />
</geometry>
<material name="silver"/>
</visual>
<collision>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="meshes/hand_base_link.STL" />
</geometry>
</collision>
</link>
<link
name="rh_thumb_metacarpals_base2">
<inertial>
<origin
xyz="0.00162795738393507 0.00276671978336815 -0.00184227725602707"
rpy="0 0 0" />
<mass
value="0.00138591070212997" />
<inertia
ixx="5.26294625624223E-08"
ixy="-3.9288013799604E-09"
ixz="2.43766268199571E-09"
iyy="4.82623724532942E-08"
iyz="3.71867754115443E-09"
izz="2.88555522060562E-08" />
</inertial>
<visual>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="meshes/thumb_metacarpals_base2.STL" />
</geometry>
<material name="BlackAccent"/>
</visual>
<collision>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="meshes/thumb_metacarpals_base2.STL" />
</geometry>
</collision>
</link>
<joint
name="rh_thumb_cmc_yaw"
type="revolute">
<origin
xyz="0.011508 0.022975 0.032794"
rpy="0 0 0" />
<parent
link="rh_hand_base_link" />
<child
link="rh_thumb_metacarpals_base2" />
<axis
xyz="0 0 -1" />
<limit
lower="0"
upper="1.36"
effort="100"
velocity="1" />
</joint>
<link
name="rh_thumb_metacarpals">
<inertial>
<origin
xyz="4.24920612856275E-05 -1.67885666835232E-05 0.0228341522590467"
rpy="0 0 0" />
<mass
value="0.0123381607727595" />
<inertia
ixx="1.10292488693766E-06"
ixy="-6.14241939151719E-10"
ixz="1.14233108676795E-07"
iyy="1.76757658485787E-06"
iyz="-4.24576599367025E-10"
izz="9.36348143657406E-07" />
</inertial>
<visual>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="meshes/thumb_metacarpals.STL" />
</geometry>
<material name="silver"/>
</visual>
<collision>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="meshes/thumb_metacarpals.STL" />
</geometry>
</collision>
</link>
<joint
name="rh_thumb_cmc_pitch"
type="revolute">
<origin
xyz="0.0061649 0.010678 -0.004891"
rpy="0 -1.1529 -2.0944" />
<parent
link="rh_thumb_metacarpals_base2" />
<child
link="rh_thumb_metacarpals" />
<axis
xyz="0 1 0" />
<limit
lower="0"
upper="0.58"
effort="100"
velocity="1" />
</joint>
<link
name="rh_thumb_distal">
<inertial>
<origin
xyz="-0.00413690727496815 -4.54842793429222E-07 0.0230097179163771"
rpy="0 0 0" />
<mass
value="0.00763302603723749" />
<inertia
ixx="1.30546842791578E-06"
ixy="-2.61617511029467E-12"
ixz="7.19030685242407E-08"
iyy="1.22457212713176E-06"
iyz="1.66931068485225E-11"
izz="2.7729897944409E-07" />
</inertial>
<visual>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="meshes/thumb_distal.STL" />
</geometry>
<material name="silver"/>
</visual>
<collision>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="meshes/thumb_distal.STL" />
</geometry>
</collision>
</link>
<joint
name="rh_thumb_ip"
type="revolute">
<origin
xyz="0.0037776 0 0.045368"
rpy="0 0 0" />
<parent
link="rh_thumb_metacarpals" />
<child
link="rh_thumb_distal" />
<axis
xyz="0 1 0" />
<limit
lower="0"
upper="1.08"
effort="100"
velocity="1" />
<mimic
joint="rh_thumb_cmc_pitch"
multiplier="1.86"
offset="0" />
</joint>
<link
name="rh_index_proximal">
<inertial>
<origin
xyz="-0.00208665596033792 -4.8964990644329E-06 0.0172736718900068"
rpy="0 0 0" />
<mass
value="0.00253178529301663" />
<inertia
ixx="2.65990159539482E-07"
ixy="-3.55165625722842E-11"
ixz="4.31046335852167E-08"
iyy="2.72915460277804E-07"
iyz="1.75935978708959E-10"
izz="8.56026306687528E-08" />
</inertial>
<visual>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="meshes/index_proximal.STL" />
</geometry>
<material name="silver"/>
</visual>
<collision>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="meshes/index_proximal.STL" />
</geometry>
</collision>
</link>
<joint
name="rh_index_mcp_pitch"
type="revolute">
<origin
xyz="0.0024758 0.02419 0.098779"
rpy="-0.05236 0 0" />
<parent
link="rh_hand_base_link" />
<child
link="rh_index_proximal" />
<axis
xyz="0 1 0" />
<limit
lower="0"
upper="1.60"
effort="100"
velocity="1" />
</joint>
<link
name="rh_index_distal">
<inertial>
<origin
xyz="0.00658940011630532 -4.59976557022623E-06 0.0194434136420913"
rpy="0 0 0" />
<mass
value="0.00376787129082313" />
<inertia
ixx="3.22116619426455E-07"
ixy="1.03152735699049E-11"
ixz="-1.14363506430985E-07"
iyy="3.65131844686317E-07"
iyz="-1.97263639269362E-10"
izz="1.24256890612907E-07" />
</inertial>
<visual>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="meshes/index_distal.STL" />
</geometry>
<material name="silver"/>
</visual>
<collision>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="meshes/index_distal.STL" />
</geometry>
</collision>
</link>
<joint
name="rh_index_dip"
type="revolute">
<origin
xyz="-0.0052516 0 0.036625"
rpy="0 0 0" />
<parent
link="rh_index_proximal" />
<child
link="rh_index_distal" />
<axis
xyz="0 1 0" />
<limit
lower="0"
upper="1.43"
effort="100"
velocity="1" />
<mimic
joint="rh_index_mcp_pitch"
multiplier="0.89"
offset="0" />
</joint>
<link
name="rh_middle_proximal">
<inertial>
<origin
xyz="-0.00208661081773556 -4.93451838476378E-06 0.0172736805321904"
rpy="0 0 0" />
<mass
value="0.00253175497594429" />
<inertia
ixx="2.65989683690695E-07"
ixy="-3.58343951791586E-11"
ixz="4.31048601085216E-08"
iyy="2.72915006047006E-07"
iyz="1.75718024412593E-10"
izz="8.56020467202518E-08" />
</inertial>
<visual>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="meshes/middle_proximal.STL" />
</geometry>
<material name="silver"/>
</visual>
<collision>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="meshes/middle_proximal.STL" />
</geometry>
</collision>
</link>
<joint
name="rh_middle_mcp_pitch"
type="revolute">
<origin
xyz="0.00052576 0.00634 0.1027"
rpy="0 0 0" />
<parent
link="rh_hand_base_link" />
<child
link="rh_middle_proximal" />
<axis
xyz="0 1 0" />
<limit
lower="0"
upper="1.60"
effort="100"
velocity="1" />
</joint>
<link
name="rh_middle_distal">
<inertial>
<origin
xyz="0.00658940304809306 -4.5885743593238E-06 0.0194434523296449"
rpy="0 0 0" />
<mass
value="0.00376786259758948" />
<inertia
ixx="3.221153658306E-07"
ixy="1.02639617308432E-11"
ixz="-1.14363547272711E-07"
iyy="3.65130723083104E-07"
iyz="-1.96904618797577E-10"
izz="1.24256787913797E-07" />
</inertial>
<visual>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="meshes/middle_distal.STL" />
</geometry>
<material name="silver"/>
</visual>
<collision>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="meshes/middle_distal.STL" />
</geometry>
</collision>
</link>
<joint
name="rh_middle_dip"
type="revolute">
<origin
xyz="-0.0052516 0 0.036625"
rpy="0 0 0" />
<parent
link="rh_middle_proximal" />
<child
link="rh_middle_distal" />
<axis
xyz="0 1 0" />
<limit
lower="0"
upper="1.43"
effort="100"
velocity="1" />
<mimic
joint="rh_middle_mcp_pitch"
multiplier="0.89"
offset="0" />
</joint>
<link
name="rh_ring_proximal">
<inertial>
<origin
xyz="-0.00208654311325356 -4.98538564003281E-06 0.0172736743497407"
rpy="0 0 0" />
<mass
value="0.00253170963529411" />
<inertia
ixx="2.6598913795678E-07"
ixy="-3.62757108675266E-11"
ixz="4.31050611555507E-08"
iyy="2.72914417061517E-07"
iyz="1.75554984053478E-10"
izz="8.56012458677515E-08" />
</inertial>
<visual>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="meshes/ring_proximal.STL" />
</geometry>
<material name="silver"/>
</visual>
<collision>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="meshes/ring_proximal.STL" />
</geometry>
</collision>
</link>
<joint
name="rh_ring_mcp_pitch"
type="revolute">
<origin
xyz="0.0010258 -0.011135 0.098767"
rpy="0.05236 0 0" />
<parent
link="rh_hand_base_link" />
<child
link="rh_ring_proximal" />
<axis
xyz="0 1 0" />
<limit
lower="0"
upper="1.60"
effort="100"
velocity="1" />
</joint>
<link
name="rh_ring_distal">
<inertial>
<origin
xyz="0.00658940273069729 -4.56628863591824E-06 0.0194435005686854"
rpy="0 0 0" />
<mass
value="0.0037678395356105" />
<inertia
ixx="3.22112632437858E-07"
ixy="1.01848408913558E-11"
ixz="-1.1436348915342E-07"
iyy="3.65128262095686E-07"
iyz="-1.96145632992445E-10"
izz="1.24256284608064E-07" />
</inertial>
<visual>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="meshes/ring_distal.STL" />
</geometry>
<material name="silver"/>
</visual>
<collision>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="meshes/ring_distal.STL" />
</geometry>
</collision>
</link>
<joint
name="rh_ring_dip"
type="revolute">
<origin
xyz="-0.0052516 0 0.036625"
rpy="0 0 0" />
<parent
link="rh_ring_proximal" />
<child
link="rh_ring_distal" />
<axis
xyz="0 1 0" />
<limit
lower="0"
upper="1.43"
effort="100"
velocity="1" />
<mimic
joint="rh_ring_mcp_pitch"
multiplier="0.89"
offset="0" />
</joint>
<link
name="rh_pinky_proximal">
<inertial>
<origin
xyz="-0.00208649034130813 -5.02314582560837E-06 0.0172736680793697"
rpy="0 0 0" />
<mass
value="0.00253167400540778" />
<inertia
ixx="2.65988718820404E-07"
ixy="-3.66012295280295E-11"
ixz="4.31052220484445E-08"
iyy="2.72913936904813E-07"
iyz="1.75447396222308E-10"
izz="8.56006424720129E-08" />
</inertial>
<visual>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="meshes/pinky_proximal.STL" />
</geometry>
<material name="silver"/>
</visual>
<collision>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="meshes/pinky_proximal.STL" />
</geometry>
</collision>
</link>
<joint
name="rh_pinky_mcp_pitch"
type="revolute">
<origin
xyz="0.0024758 -0.028372 0.092741"
rpy="0.087266 0 0" />
<parent
link="rh_hand_base_link" />
<child
link="rh_pinky_proximal" />
<axis
xyz="0 1 0" />
<limit
lower="0"
upper="1.60"
effort="100"
velocity="1" />
</joint>
<link
name="rh_pinky_distal">
<inertial>
<origin
xyz="0.00658940431519205 -4.55268314210333E-06 0.0194435341098305"
rpy="0 0 0" />
<mass
value="0.00376782669873412" />
<inertia
ixx="3.22111112339498E-07"
ixy="1.01707985908333E-11"
ixz="-1.14363524419061E-07"
iyy="3.65126916899176E-07"
iyz="-1.95589215866356E-10"
izz="1.24256004854426E-07" />
</inertial>
<visual>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="meshes/pinky_distal.STL" />
</geometry>
<material name="silver"/>
</visual>
<collision>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="meshes/pinky_distal.STL" />
</geometry>
</collision>
</link>
<joint
name="rh_pinky_dip"
type="revolute">
<origin
xyz="-0.0052516 0 0.036625"
rpy="0 0 0" />
<parent
link="rh_pinky_proximal" />
<child
link="rh_pinky_distal" />
<axis
xyz="0 1 0" />
<limit
lower="0"
upper="1.43"
effort="100"
velocity="1" />
<mimic
joint="rh_pinky_mcp_pitch"
multiplier="0.89"
offset="0" />
</joint>
</robot>
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.