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
@@ -0,0 +1,398 @@
#usda 1.0
(
defaultPrim = "linkerhand_g20_left"
metersPerUnit = 1
kilogramsPerUnit = 1
upAxis = "Z"
)
over "linkerhand_g20_left"
{
over "Geometry"
{
over "hand_base_link" (
prepend apiSchemas = ["PhysxRigidBodyAPI"]
)
{
float physxRigidBody:maxLinearVelocity = 3.0
float physxRigidBody:maxAngularVelocity = 360.0
float physxRigidBody:linearDamping = 6.0
float physxRigidBody:angularDamping = 6.0
}
over "hand_base_link"
{
over "thumb_metacarpals_base1" (
prepend apiSchemas = ["PhysxRigidBodyAPI"]
)
{
float physxRigidBody:maxLinearVelocity = 3.0
float physxRigidBody:maxAngularVelocity = 360.0
float physxRigidBody:linearDamping = 6.0
float physxRigidBody:angularDamping = 6.0
}
}
over "hand_base_link"
{
over "thumb_metacarpals_base1"
{
over "thumb_metacarpals_base2" (
prepend apiSchemas = ["PhysxRigidBodyAPI"]
)
{
float physxRigidBody:maxLinearVelocity = 3.0
float physxRigidBody:maxAngularVelocity = 360.0
float physxRigidBody:linearDamping = 6.0
float physxRigidBody:angularDamping = 6.0
}
}
}
over "hand_base_link"
{
over "thumb_metacarpals_base1"
{
over "thumb_metacarpals_base2"
{
over "thumb_metacarpals" (
prepend apiSchemas = ["PhysxRigidBodyAPI"]
)
{
float physxRigidBody:maxLinearVelocity = 3.0
float physxRigidBody:maxAngularVelocity = 360.0
float physxRigidBody:linearDamping = 6.0
float physxRigidBody:angularDamping = 6.0
}
}
}
}
over "hand_base_link"
{
over "thumb_metacarpals_base1"
{
over "thumb_metacarpals_base2"
{
over "thumb_metacarpals"
{
over "thumb_proximal" (
prepend apiSchemas = ["PhysxRigidBodyAPI"]
)
{
float physxRigidBody:maxLinearVelocity = 3.0
float physxRigidBody:maxAngularVelocity = 360.0
float physxRigidBody:linearDamping = 6.0
float physxRigidBody:angularDamping = 6.0
}
}
}
}
}
over "hand_base_link"
{
over "thumb_metacarpals_base1"
{
over "thumb_metacarpals_base2"
{
over "thumb_metacarpals"
{
over "thumb_proximal"
{
over "thumb_distal" (
prepend apiSchemas = ["PhysxRigidBodyAPI"]
)
{
float physxRigidBody:maxLinearVelocity = 3.0
float physxRigidBody:maxAngularVelocity = 360.0
float physxRigidBody:linearDamping = 6.0
float physxRigidBody:angularDamping = 6.0
}
}
}
}
}
}
over "hand_base_link"
{
over "index_metacarpals" (
prepend apiSchemas = ["PhysxRigidBodyAPI"]
)
{
float physxRigidBody:maxLinearVelocity = 3.0
float physxRigidBody:maxAngularVelocity = 360.0
float physxRigidBody:linearDamping = 6.0
float physxRigidBody:angularDamping = 6.0
}
}
over "hand_base_link"
{
over "index_metacarpals"
{
over "index_proximal" (
prepend apiSchemas = ["PhysxRigidBodyAPI"]
)
{
float physxRigidBody:maxLinearVelocity = 3.0
float physxRigidBody:maxAngularVelocity = 360.0
float physxRigidBody:linearDamping = 6.0
float physxRigidBody:angularDamping = 6.0
}
}
}
over "hand_base_link"
{
over "index_metacarpals"
{
over "index_proximal"
{
over "index_middle" (
prepend apiSchemas = ["PhysxRigidBodyAPI"]
)
{
float physxRigidBody:maxLinearVelocity = 3.0
float physxRigidBody:maxAngularVelocity = 360.0
float physxRigidBody:linearDamping = 6.0
float physxRigidBody:angularDamping = 6.0
}
}
}
}
over "hand_base_link"
{
over "index_metacarpals"
{
over "index_proximal"
{
over "index_middle"
{
over "index_distal" (
prepend apiSchemas = ["PhysxRigidBodyAPI"]
)
{
float physxRigidBody:maxLinearVelocity = 3.0
float physxRigidBody:maxAngularVelocity = 360.0
float physxRigidBody:linearDamping = 6.0
float physxRigidBody:angularDamping = 6.0
}
}
}
}
}
over "hand_base_link"
{
over "middle_metacarpals" (
prepend apiSchemas = ["PhysxRigidBodyAPI"]
)
{
float physxRigidBody:maxLinearVelocity = 3.0
float physxRigidBody:maxAngularVelocity = 360.0
float physxRigidBody:linearDamping = 6.0
float physxRigidBody:angularDamping = 6.0
}
}
over "hand_base_link"
{
over "middle_metacarpals"
{
over "middle_proximal" (
prepend apiSchemas = ["PhysxRigidBodyAPI"]
)
{
float physxRigidBody:maxLinearVelocity = 3.0
float physxRigidBody:maxAngularVelocity = 360.0
float physxRigidBody:linearDamping = 6.0
float physxRigidBody:angularDamping = 6.0
}
}
}
over "hand_base_link"
{
over "middle_metacarpals"
{
over "middle_proximal"
{
over "middle_middle" (
prepend apiSchemas = ["PhysxRigidBodyAPI"]
)
{
float physxRigidBody:maxLinearVelocity = 3.0
float physxRigidBody:maxAngularVelocity = 360.0
float physxRigidBody:linearDamping = 6.0
float physxRigidBody:angularDamping = 6.0
}
}
}
}
over "hand_base_link"
{
over "middle_metacarpals"
{
over "middle_proximal"
{
over "middle_middle"
{
over "middle_distal" (
prepend apiSchemas = ["PhysxRigidBodyAPI"]
)
{
float physxRigidBody:maxLinearVelocity = 3.0
float physxRigidBody:maxAngularVelocity = 360.0
float physxRigidBody:linearDamping = 6.0
float physxRigidBody:angularDamping = 6.0
}
}
}
}
}
over "hand_base_link"
{
over "ring_metacarpals" (
prepend apiSchemas = ["PhysxRigidBodyAPI"]
)
{
float physxRigidBody:maxLinearVelocity = 3.0
float physxRigidBody:maxAngularVelocity = 360.0
float physxRigidBody:linearDamping = 6.0
float physxRigidBody:angularDamping = 6.0
}
}
over "hand_base_link"
{
over "ring_metacarpals"
{
over "ring_proximal" (
prepend apiSchemas = ["PhysxRigidBodyAPI"]
)
{
float physxRigidBody:maxLinearVelocity = 3.0
float physxRigidBody:maxAngularVelocity = 360.0
float physxRigidBody:linearDamping = 6.0
float physxRigidBody:angularDamping = 6.0
}
}
}
over "hand_base_link"
{
over "ring_metacarpals"
{
over "ring_proximal"
{
over "ring_middle" (
prepend apiSchemas = ["PhysxRigidBodyAPI"]
)
{
float physxRigidBody:maxLinearVelocity = 3.0
float physxRigidBody:maxAngularVelocity = 360.0
float physxRigidBody:linearDamping = 6.0
float physxRigidBody:angularDamping = 6.0
}
}
}
}
over "hand_base_link"
{
over "ring_metacarpals"
{
over "ring_proximal"
{
over "ring_middle"
{
over "ring_distal" (
prepend apiSchemas = ["PhysxRigidBodyAPI"]
)
{
float physxRigidBody:maxLinearVelocity = 3.0
float physxRigidBody:maxAngularVelocity = 360.0
float physxRigidBody:linearDamping = 6.0
float physxRigidBody:angularDamping = 6.0
}
}
}
}
}
over "hand_base_link"
{
over "pinky_metacarpals" (
prepend apiSchemas = ["PhysxRigidBodyAPI"]
)
{
float physxRigidBody:maxLinearVelocity = 3.0
float physxRigidBody:maxAngularVelocity = 360.0
float physxRigidBody:linearDamping = 6.0
float physxRigidBody:angularDamping = 6.0
}
}
over "hand_base_link"
{
over "pinky_metacarpals"
{
over "pinky_proximal" (
prepend apiSchemas = ["PhysxRigidBodyAPI"]
)
{
float physxRigidBody:maxLinearVelocity = 3.0
float physxRigidBody:maxAngularVelocity = 360.0
float physxRigidBody:linearDamping = 6.0
float physxRigidBody:angularDamping = 6.0
}
}
}
over "hand_base_link"
{
over "pinky_metacarpals"
{
over "pinky_proximal"
{
over "pinky_middle" (
prepend apiSchemas = ["PhysxRigidBodyAPI"]
)
{
float physxRigidBody:maxLinearVelocity = 3.0
float physxRigidBody:maxAngularVelocity = 360.0
float physxRigidBody:linearDamping = 6.0
float physxRigidBody:angularDamping = 6.0
}
}
}
}
over "hand_base_link"
{
over "pinky_metacarpals"
{
over "pinky_proximal"
{
over "pinky_middle"
{
over "pinky_distal" (
prepend apiSchemas = ["PhysxRigidBodyAPI"]
)
{
float physxRigidBody:maxLinearVelocity = 3.0
float physxRigidBody:maxAngularVelocity = 360.0
float physxRigidBody:linearDamping = 6.0
float physxRigidBody:angularDamping = 6.0
}
}
}
}
}
}
}
@@ -0,0 +1,582 @@
#usda 1.0
(
customLayerData = {
string creator = "URDF USD Converter v0.1.3"
}
defaultPrim = "linkerhand_g20_left"
doc = """Generated from Composed Stage of root layer /tmp/tmp5xni4jzi/linkerhand_g20_left.usdc
Generated from Composed Stage of root layer /tmp/urdf_import_linkerhand_g20_left_9306w6un/usdex_linkerhand_g20_left/linkerhand_g20_left.usdc
Generated from Composed Stage of root layer /tmp/urdf_import_linkerhand_g20_left_9306w6un/temp_linkerhand_g20_left/linkerhand_g20_left.usd
Generated from Composed Stage of root layer /home/lxqs/isaacsim/linkerhand/urdf/g20/left/linkerhand_g20_left/payloads/base.usd
"""
kilogramsPerUnit = 1
metersPerUnit = 1
subLayers = [
@./physics.usda@
]
upAxis = "Z"
)
over "linkerhand_g20_left"
{
over "Physics"
{
def MjcActuator "thumb_cmc_roll_actuator"
{
uniform double mjc:forceRange:max = 100
uniform double mjc:forceRange:min = -100
custom rel mjc:target
prepend rel mjc:target = </linkerhand_g20_left/Physics/thumb_cmc_roll>
}
def MjcActuator "thumb_cmc_yaw_actuator"
{
uniform double mjc:forceRange:max = 100
uniform double mjc:forceRange:min = -100
custom rel mjc:target
prepend rel mjc:target = </linkerhand_g20_left/Physics/thumb_cmc_yaw>
}
def MjcActuator "thumb_cmc_pitch_actuator"
{
uniform double mjc:forceRange:max = 100
uniform double mjc:forceRange:min = -100
custom rel mjc:target
prepend rel mjc:target = </linkerhand_g20_left/Physics/thumb_cmc_pitch>
}
def MjcActuator "thumb_mcp_actuator"
{
uniform double mjc:forceRange:max = 100
uniform double mjc:forceRange:min = -100
custom rel mjc:target
prepend rel mjc:target = </linkerhand_g20_left/Physics/thumb_mcp>
}
def MjcActuator "thumb_ip_actuator"
{
uniform double mjc:forceRange:max = 100
uniform double mjc:forceRange:min = -100
custom rel mjc:target
prepend rel mjc:target = </linkerhand_g20_left/Physics/thumb_ip>
}
def MjcActuator "index_mcp_roll_actuator"
{
uniform double mjc:forceRange:max = 100
uniform double mjc:forceRange:min = -100
custom rel mjc:target
prepend rel mjc:target = </linkerhand_g20_left/Physics/index_mcp_roll>
}
def MjcActuator "index_mcp_pitch_actuator"
{
uniform double mjc:forceRange:max = 100
uniform double mjc:forceRange:min = -100
custom rel mjc:target
prepend rel mjc:target = </linkerhand_g20_left/Physics/index_mcp_pitch>
}
def MjcActuator "index_pip_actuator"
{
uniform double mjc:forceRange:max = 100
uniform double mjc:forceRange:min = -100
custom rel mjc:target
prepend rel mjc:target = </linkerhand_g20_left/Physics/index_pip>
}
def MjcActuator "index_dip_actuator"
{
uniform double mjc:forceRange:max = 100
uniform double mjc:forceRange:min = -100
custom rel mjc:target
prepend rel mjc:target = </linkerhand_g20_left/Physics/index_dip>
}
def MjcActuator "middle_mcp_roll_actuator"
{
uniform double mjc:forceRange:max = 100
uniform double mjc:forceRange:min = -100
custom rel mjc:target
prepend rel mjc:target = </linkerhand_g20_left/Physics/middle_mcp_roll>
}
def MjcActuator "middle_mcp_pitch_actuator"
{
uniform double mjc:forceRange:max = 100
uniform double mjc:forceRange:min = -100
custom rel mjc:target
prepend rel mjc:target = </linkerhand_g20_left/Physics/middle_mcp_pitch>
}
def MjcActuator "middle_pip_actuator"
{
uniform double mjc:forceRange:max = 100
uniform double mjc:forceRange:min = -100
custom rel mjc:target
prepend rel mjc:target = </linkerhand_g20_left/Physics/middle_pip>
}
def MjcActuator "middle_dip_actuator"
{
uniform double mjc:forceRange:max = 100
uniform double mjc:forceRange:min = -100
custom rel mjc:target
prepend rel mjc:target = </linkerhand_g20_left/Physics/middle_dip>
}
def MjcActuator "ring_mcp_roll_actuator"
{
uniform double mjc:forceRange:max = 100
uniform double mjc:forceRange:min = -100
custom rel mjc:target
prepend rel mjc:target = </linkerhand_g20_left/Physics/ring_mcp_roll>
}
def MjcActuator "ring_mcp_pitch_actuator"
{
uniform double mjc:forceRange:max = 100
uniform double mjc:forceRange:min = -100
custom rel mjc:target
prepend rel mjc:target = </linkerhand_g20_left/Physics/ring_mcp_pitch>
}
def MjcActuator "ring_pip_actuator"
{
uniform double mjc:forceRange:max = 100
uniform double mjc:forceRange:min = -100
custom rel mjc:target
prepend rel mjc:target = </linkerhand_g20_left/Physics/ring_pip>
}
def MjcActuator "ring_dip_actuator"
{
uniform double mjc:forceRange:max = 100
uniform double mjc:forceRange:min = -100
custom rel mjc:target
prepend rel mjc:target = </linkerhand_g20_left/Physics/ring_dip>
}
def MjcActuator "pinky_mcp_roll_actuator"
{
uniform double mjc:forceRange:max = 100
uniform double mjc:forceRange:min = -100
custom rel mjc:target
prepend rel mjc:target = </linkerhand_g20_left/Physics/pinky_mcp_roll>
}
def MjcActuator "pinky_mcp_pitch_actuator"
{
uniform double mjc:forceRange:max = 100
uniform double mjc:forceRange:min = -100
custom rel mjc:target
prepend rel mjc:target = </linkerhand_g20_left/Physics/pinky_mcp_pitch>
}
def MjcActuator "pinky_pip_actuator"
{
uniform double mjc:forceRange:max = 100
uniform double mjc:forceRange:min = -100
custom rel mjc:target
prepend rel mjc:target = </linkerhand_g20_left/Physics/pinky_pip>
}
def MjcActuator "pinky_dip_actuator"
{
uniform double mjc:forceRange:max = 100
uniform double mjc:forceRange:min = -100
custom rel mjc:target
prepend rel mjc:target = </linkerhand_g20_left/Physics/pinky_dip>
}
over "root_joint"
{
}
over "thumb_cmc_roll" (
delete apiSchemas = ["PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
}
over "thumb_cmc_yaw" (
delete apiSchemas = ["PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
}
over "thumb_cmc_pitch" (
delete apiSchemas = ["PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
}
over "thumb_mcp" (
delete apiSchemas = ["PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
}
over "thumb_ip" (
delete apiSchemas = ["PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
}
over "index_mcp_roll" (
delete apiSchemas = ["PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
}
over "index_mcp_pitch" (
delete apiSchemas = ["PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
}
over "index_pip" (
delete apiSchemas = ["PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
}
over "index_dip" (
delete apiSchemas = ["PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
}
over "middle_mcp_roll" (
delete apiSchemas = ["PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
}
over "middle_mcp_pitch" (
delete apiSchemas = ["PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
}
over "middle_pip" (
delete apiSchemas = ["PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
}
over "middle_dip" (
delete apiSchemas = ["PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
}
over "ring_mcp_roll" (
delete apiSchemas = ["PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
}
over "ring_mcp_pitch" (
delete apiSchemas = ["PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
}
over "ring_pip" (
delete apiSchemas = ["PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
}
over "ring_dip" (
delete apiSchemas = ["PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
}
over "pinky_mcp_roll" (
delete apiSchemas = ["PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
}
over "pinky_mcp_pitch" (
delete apiSchemas = ["PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
}
over "pinky_pip" (
delete apiSchemas = ["PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
}
over "pinky_dip" (
delete apiSchemas = ["PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
}
}
over "Geometry"
{
over "hand_base_link"
{
over "thumb_metacarpals_base1"
{
over "thumb_metacarpals_base2"
{
over "thumb_metacarpals"
{
over "thumb_proximal"
{
over "thumb_distal"
{
over "thumb_distal"
{
}
over "thumb_distal_1"
{
}
}
over "thumb_proximal"
{
}
over "thumb_proximal_1"
{
}
}
over "thumb_metacarpals"
{
}
over "thumb_metacarpals_1"
{
}
}
over "thumb_metacarpals_base2"
{
}
over "thumb_metacarpals_base2_1"
{
}
}
over "thumb_metacarpals_base1"
{
}
over "thumb_metacarpals_base1_1"
{
}
}
over "index_metacarpals"
{
over "index_proximal"
{
over "index_middle"
{
over "index_distal"
{
over "index_distal"
{
}
over "index_distal_1"
{
}
}
over "index_middle"
{
}
over "index_middle_1"
{
}
}
over "index_proximal"
{
}
over "index_proximal_1"
{
}
}
over "index_metacarpals"
{
}
over "index_metacarpals_1"
{
}
}
over "middle_metacarpals"
{
over "middle_proximal"
{
over "middle_middle"
{
over "middle_distal"
{
over "middle_distal"
{
}
over "middle_distal_1"
{
}
}
over "middle_middle"
{
}
over "middle_middle_1"
{
}
}
over "middle_proximal"
{
}
over "middle_proximal_1"
{
}
}
over "middle_metacarpals"
{
}
over "middle_metacarpals_1"
{
}
}
over "ring_metacarpals"
{
over "ring_proximal"
{
over "ring_middle"
{
over "ring_distal"
{
over "ring_distal"
{
}
over "ring_distal_1"
{
}
}
over "ring_middle"
{
}
over "ring_middle_1"
{
}
}
over "ring_proximal"
{
}
over "ring_proximal_1"
{
}
}
over "ring_metacarpals"
{
}
over "ring_metacarpals_1"
{
}
}
over "pinky_metacarpals"
{
over "pinky_proximal"
{
over "pinky_middle"
{
over "pinky_distal"
{
over "pinky_distal"
{
}
over "pinky_distal_1"
{
}
}
over "pinky_middle"
{
}
over "pinky_middle_1"
{
}
}
over "pinky_proximal"
{
}
over "pinky_proximal_1"
{
}
}
over "pinky_metacarpals"
{
}
over "pinky_metacarpals_1"
{
}
}
over "hand_base_link"
{
}
over "hand_base_link_1"
{
}
}
}
over "Materials"
{
}
over "VisualMaterials"
{
}
}
@@ -0,0 +1,720 @@
#usda 1.0
(
customLayerData = {
string creator = "URDF USD Converter v0.1.3"
}
defaultPrim = "linkerhand_g20_left"
doc = """Generated from Composed Stage of root layer /tmp/tmp5xni4jzi/linkerhand_g20_left.usdc
Generated from Composed Stage of root layer /tmp/urdf_import_linkerhand_g20_left_9306w6un/usdex_linkerhand_g20_left/linkerhand_g20_left.usdc
Generated from Composed Stage of root layer /tmp/urdf_import_linkerhand_g20_left_9306w6un/temp_linkerhand_g20_left/linkerhand_g20_left.usd
Generated from Composed Stage of root layer /home/lxqs/isaacsim/linkerhand/urdf/g20/left/linkerhand_g20_left/payloads/base.usd
"""
kilogramsPerUnit = 1
metersPerUnit = 1
upAxis = "Z"
)
over "linkerhand_g20_left"
{
over "Geometry" (
prepend apiSchemas = ["PhysicsArticulationRootAPI", "NewtonArticulationRootAPI"]
)
{
bool newton:selfCollisionEnabled = 1
over "hand_base_link" (
prepend apiSchemas = ["PhysicsRigidBodyAPI", "PhysicsMassAPI"]
)
{
point3f physics:centerOfMass = (-0.000986417, 0.000268049, 0.077379845)
float3 physics:diagonalInertia = (0.0005, 0.0005, 0.0005)
float physics:mass = 0.1103735
quatf physics:principalAxes = (0.70273006, 0.038762398, 0.7092034, -0.04121172)
over "thumb_metacarpals_base1" (
prepend apiSchemas = ["PhysicsRigidBodyAPI", "PhysicsMassAPI"]
)
{
point3f physics:centerOfMass = (0.011515513, 0.0039806883, 0.00027288825)
float3 physics:diagonalInertia = (0.0005, 0.0005, 0.0005)
float physics:mass = 0.02
quatf physics:principalAxes = (0.69315267, 0.09873541, 0.69662505, -0.15653834)
over "thumb_metacarpals_base2" (
prepend apiSchemas = ["PhysicsRigidBodyAPI", "PhysicsMassAPI"]
)
{
point3f physics:centerOfMass = (0.0028671462, -0.0061572655, 0.0047260527)
float3 physics:diagonalInertia = (0.0005, 0.0005, 0.0005)
float physics:mass = 0.02
quatf physics:principalAxes = (-0.4856348, 0.6328352, 0.57746726, 0.17381014)
over "thumb_metacarpals" (
prepend apiSchemas = ["PhysicsRigidBodyAPI", "PhysicsMassAPI"]
)
{
point3f physics:centerOfMass = (0.0067065787, 0.000086075896, 0.033141293)
float3 physics:diagonalInertia = (0.0005, 0.0005, 0.0005)
float physics:mass = 0.028716035
quatf physics:principalAxes = (0.5003233, 0.49646425, 0.50234294, 0.50085074)
over "thumb_proximal" (
prepend apiSchemas = ["PhysicsRigidBodyAPI", "PhysicsMassAPI"]
)
{
point3f physics:centerOfMass = (-0.002687344, 0.00056824455, 0.011850173)
float3 physics:diagonalInertia = (0.0005, 0.0005, 0.0005)
float physics:mass = 0.02
quatf physics:principalAxes = (0.4466405, 0.44347262, 0.5443941, 0.55450827)
over "thumb_distal" (
prepend apiSchemas = ["PhysicsRigidBodyAPI", "PhysicsMassAPI"]
)
{
point3f physics:centerOfMass = (-0.0007100218, -0.0026757591, 0.012476266)
float3 physics:diagonalInertia = (0.0005, 0.0005, 0.0005)
float physics:mass = 0.02
quatf physics:principalAxes = (0.7076172, 0.49610376, 0.40506423, 0.29846585)
}
}
}
}
}
over "index_metacarpals" (
prepend apiSchemas = ["PhysicsRigidBodyAPI", "PhysicsMassAPI"]
)
{
point3f physics:centerOfMass = (-0.007942997, -2.9367396e-7, 0.0022010603)
float3 physics:diagonalInertia = (0.0005, 0.0005, 0.0005)
float physics:mass = 0.02
quatf physics:principalAxes = (0.15955442, 0.6888882, 0.68885684, -0.15953577)
over "index_proximal" (
prepend apiSchemas = ["PhysicsRigidBodyAPI", "PhysicsMassAPI"]
)
{
point3f physics:centerOfMass = (-0.0011418548, 0.000034731576, 0.02289284)
float3 physics:diagonalInertia = (0.0005, 0.0005, 0.0005)
float physics:mass = 0.02
quatf physics:principalAxes = (0.5117973, 0.51168644, 0.48817277, 0.48777848)
over "index_middle" (
prepend apiSchemas = ["PhysicsRigidBodyAPI", "PhysicsMassAPI"]
)
{
point3f physics:centerOfMass = (-0.00020699194, 0.0000026061707, 0.016706534)
float3 physics:diagonalInertia = (0.0005, 0.0005, 0.0005)
float physics:mass = 0.02
quatf physics:principalAxes = (0.7445136, -0.00005444173, 0.6676073, 0.000047438436)
over "index_distal" (
prepend apiSchemas = ["PhysicsRigidBodyAPI", "PhysicsMassAPI"]
)
{
point3f physics:centerOfMass = (-0.008162465, 0.000022705892, 0.008118065)
float3 physics:diagonalInertia = (0.0005, 0.0005, 0.0005)
float physics:mass = 0.02
quatf physics:principalAxes = (0.90243715, -0.0029940915, 0.43080872, -0.0014403827)
}
}
}
}
over "middle_metacarpals" (
prepend apiSchemas = ["PhysicsRigidBodyAPI", "PhysicsMassAPI"]
)
{
point3f physics:centerOfMass = (-0.007942996, -2.9300665e-7, 0.0022010633)
float3 physics:diagonalInertia = (0.0005, 0.0005, 0.0005)
float physics:mass = 0.02
quatf physics:principalAxes = (0.1595545, 0.6888883, 0.6888567, -0.15953599)
over "middle_proximal" (
prepend apiSchemas = ["PhysicsRigidBodyAPI", "PhysicsMassAPI"]
)
{
point3f physics:centerOfMass = (-0.0011418548, 0.000034731576, 0.02289284)
float3 physics:diagonalInertia = (0.0005, 0.0005, 0.0005)
float physics:mass = 0.02
quatf physics:principalAxes = (0.5117973, 0.51168644, 0.48817277, 0.48777848)
over "middle_middle" (
prepend apiSchemas = ["PhysicsRigidBodyAPI", "PhysicsMassAPI"]
)
{
point3f physics:centerOfMass = (-0.0002069919, 0.0000026062498, 0.016706534)
float3 physics:diagonalInertia = (0.0005, 0.0005, 0.0005)
float physics:mass = 0.02
quatf physics:principalAxes = (0.7445136, -0.000054456927, 0.6676073, 0.00004744315)
over "middle_distal" (
prepend apiSchemas = ["PhysicsRigidBodyAPI", "PhysicsMassAPI"]
)
{
point3f physics:centerOfMass = (-0.008162466, 0.000022705855, 0.008118066)
float3 physics:diagonalInertia = (0.0005, 0.0005, 0.0005)
float physics:mass = 0.02
quatf physics:principalAxes = (0.90243715, -0.0029941155, 0.4308087, -0.0014403895)
}
}
}
}
over "ring_metacarpals" (
prepend apiSchemas = ["PhysicsRigidBodyAPI", "PhysicsMassAPI"]
)
{
point3f physics:centerOfMass = (-0.007942996, -2.945131e-7, 0.0022010615)
float3 physics:diagonalInertia = (0.0005, 0.0005, 0.0005)
float physics:mass = 0.02
quatf physics:principalAxes = (0.15955459, 0.6888881, 0.68885696, -0.1595357)
over "ring_proximal" (
prepend apiSchemas = ["PhysicsRigidBodyAPI", "PhysicsMassAPI"]
)
{
point3f physics:centerOfMass = (-0.0011418548, 0.00003473158, 0.02289284)
float3 physics:diagonalInertia = (0.0005, 0.0005, 0.0005)
float physics:mass = 0.02
quatf physics:principalAxes = (0.5117973, 0.51168644, 0.48817277, 0.48777848)
over "ring_middle" (
prepend apiSchemas = ["PhysicsRigidBodyAPI", "PhysicsMassAPI"]
)
{
point3f physics:centerOfMass = (-0.00020699321, 0.0000026074692, 0.016706532)
float3 physics:diagonalInertia = (0.0005, 0.0005, 0.0005)
float physics:mass = 0.02
quatf physics:principalAxes = (0.74451363, -0.000054586842, 0.6676073, 0.000047385933)
over "ring_distal" (
prepend apiSchemas = ["PhysicsRigidBodyAPI", "PhysicsMassAPI"]
)
{
point3f physics:centerOfMass = (-0.008162466, 0.000022705732, 0.008118066)
float3 physics:diagonalInertia = (0.0005, 0.0005, 0.0005)
float physics:mass = 0.02
quatf physics:principalAxes = (0.90243715, -0.0029941578, 0.43080872, -0.0014404262)
}
}
}
}
over "pinky_metacarpals" (
prepend apiSchemas = ["PhysicsRigidBodyAPI", "PhysicsMassAPI"]
)
{
point3f physics:centerOfMass = (-0.007942996, -2.9300685e-7, 0.0022010633)
float3 physics:diagonalInertia = (0.0005, 0.0005, 0.0005)
float physics:mass = 0.02
quatf physics:principalAxes = (0.1595545, 0.6888883, 0.6888567, -0.15953599)
over "pinky_proximal" (
prepend apiSchemas = ["PhysicsRigidBodyAPI", "PhysicsMassAPI"]
)
{
point3f physics:centerOfMass = (-0.0011418548, 0.00003473158, 0.02289284)
float3 physics:diagonalInertia = (0.0005, 0.0005, 0.0005)
float physics:mass = 0.02
quatf physics:principalAxes = (0.5117973, 0.51168644, 0.48817277, 0.48777848)
over "pinky_middle" (
prepend apiSchemas = ["PhysicsRigidBodyAPI", "PhysicsMassAPI"]
)
{
point3f physics:centerOfMass = (-0.00020699325, 0.00000260749, 0.016706532)
float3 physics:diagonalInertia = (0.0005, 0.0005, 0.0005)
float physics:mass = 0.02
quatf physics:principalAxes = (0.74451363, -0.0000545887, 0.6676073, 0.000047383306)
over "pinky_distal" (
prepend apiSchemas = ["PhysicsRigidBodyAPI", "PhysicsMassAPI"]
)
{
point3f physics:centerOfMass = (-0.008162466, 0.000022705419, 0.008118066)
float3 physics:diagonalInertia = (0.0005, 0.0005, 0.0005)
float physics:mass = 0.02
quatf physics:principalAxes = (0.90243715, -0.002994122, 0.43080872, -0.001440418)
}
}
}
}
}
}
over "Physics"
{
def PhysicsRevoluteJoint "thumb_cmc_roll" (
prepend apiSchemas = ["PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
float drive:angular:physics:maxForce = 10
uniform token drive:angular:physics:type = "force"
uniform token physics:axis = "X"
custom rel physics:body0
prepend rel physics:body0 = </linkerhand_g20_left/Geometry/hand_base_link>
custom rel physics:body1
prepend rel physics:body1 = </linkerhand_g20_left/Geometry/hand_base_link/thumb_metacarpals_base1>
point3f physics:localPos0 = (0.01916, -0.01, 0.0436)
point3f physics:localPos1 = (0, 0, 0)
quatf physics:localRot0 = (0, 0, -1, 0)
quatf physics:localRot1 = (0, 0, -1, 0)
float physics:lowerLimit = 0
float physics:upperLimit = 84.22480
custom float urdf:limit:effort = 100
custom float urdf:limit:velocity = 1
}
def PhysicsRevoluteJoint "thumb_cmc_yaw" (
prepend apiSchemas = ["PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
float drive:angular:physics:maxForce = 10
uniform token drive:angular:physics:type = "force"
uniform token physics:axis = "Z"
custom rel physics:body0
prepend rel physics:body0 = </linkerhand_g20_left/Geometry/hand_base_link/thumb_metacarpals_base1>
custom rel physics:body1
prepend rel physics:body1 = </linkerhand_g20_left/Geometry/hand_base_link/thumb_metacarpals_base1/thumb_metacarpals_base2>
point3f physics:localPos0 = (0.019845, 0, 0)
point3f physics:localPos1 = (0, 0, 0)
quatf physics:localRot0 = (0.9264883, 0.3763236, 0, 0)
quatf physics:localRot1 = (1, 0, 0, 0)
float physics:lowerLimit = 0
float physics:upperLimit = 89.95438
custom float urdf:limit:effort = 100
custom float urdf:limit:velocity = 1
}
def PhysicsRevoluteJoint "thumb_cmc_pitch" (
prepend apiSchemas = ["PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
float drive:angular:physics:maxForce = 10
uniform token drive:angular:physics:type = "force"
uniform token physics:axis = "Y"
custom rel physics:body0
prepend rel physics:body0 = </linkerhand_g20_left/Geometry/hand_base_link/thumb_metacarpals_base1/thumb_metacarpals_base2>
custom rel physics:body1
prepend rel physics:body1 = </linkerhand_g20_left/Geometry/hand_base_link/thumb_metacarpals_base1/thumb_metacarpals_base2/thumb_metacarpals>
point3f physics:localPos0 = (0.0088218, -0.024245, 0.0005)
point3f physics:localPos1 = (0, 0, 0)
quatf physics:localRot0 = (0.49418968, 0.41577393, -0.29111633, 0.7058044)
quatf physics:localRot1 = (1, 0, 0, 0)
float physics:lowerLimit = 0
float physics:upperLimit = 48.128456
custom float urdf:limit:effort = 100
custom float urdf:limit:velocity = 1
}
def PhysicsRevoluteJoint "thumb_mcp" (
prepend apiSchemas = ["PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
float drive:angular:physics:maxForce = 10
uniform token drive:angular:physics:type = "force"
uniform token physics:axis = "Y"
custom rel physics:body0
prepend rel physics:body0 = </linkerhand_g20_left/Geometry/hand_base_link/thumb_metacarpals_base1/thumb_metacarpals_base2/thumb_metacarpals>
custom rel physics:body1
prepend rel physics:body1 = </linkerhand_g20_left/Geometry/hand_base_link/thumb_metacarpals_base1/thumb_metacarpals_base2/thumb_metacarpals/thumb_proximal>
point3f physics:localPos0 = (0.012701825, -6.938894e-18, 0.06272562)
point3f physics:localPos1 = (0, 0, 0)
quatf physics:localRot0 = (1, 0, 0, 0)
quatf physics:localRot1 = (1, 0, 0, 0)
float physics:lowerLimit = 0
float physics:upperLimit = 72.19268
custom float urdf:limit:effort = 100
custom float urdf:limit:velocity = 1
}
def PhysicsRevoluteJoint "thumb_ip" (
prepend apiSchemas = ["NewtonMimicAPI", "PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
float drive:angular:physics:maxForce = 10
uniform token drive:angular:physics:type = "force"
float newton:mimicCoef1 = 1.02
rel newton:mimicJoint = </linkerhand_g20_left/Physics/thumb_mcp>
uniform token physics:axis = "Y"
custom rel physics:body0
prepend rel physics:body0 = </linkerhand_g20_left/Geometry/hand_base_link/thumb_metacarpals_base1/thumb_metacarpals_base2/thumb_metacarpals/thumb_proximal>
custom rel physics:body1
prepend rel physics:body1 = </linkerhand_g20_left/Geometry/hand_base_link/thumb_metacarpals_base1/thumb_metacarpals_base2/thumb_metacarpals/thumb_proximal/thumb_distal>
point3f physics:localPos0 = (-0.004836522, 1.3877788e-17, 0.034222648)
point3f physics:localPos1 = (0, 0, 0)
quatf physics:localRot0 = (1, 0, 0, 0)
quatf physics:localRot1 = (1, 0, 0, 0)
float physics:lowerLimit = 0
float physics:upperLimit = 73.91155
custom float urdf:limit:effort = 100
custom float urdf:limit:velocity = 1
}
def PhysicsRevoluteJoint "index_mcp_roll" (
prepend apiSchemas = ["PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
float drive:angular:physics:maxForce = 10
uniform token drive:angular:physics:type = "force"
uniform token physics:axis = "X"
custom rel physics:body0
prepend rel physics:body0 = </linkerhand_g20_left/Geometry/hand_base_link>
custom rel physics:body1
prepend rel physics:body1 = </linkerhand_g20_left/Geometry/hand_base_link/index_metacarpals>
point3f physics:localPos0 = (0.0038, -0.03525, 0.1481)
point3f physics:localPos1 = (0, 0, 0)
quatf physics:localRot0 = (1, 0, 0, 0)
quatf physics:localRot1 = (1, 0, 0, 0)
float physics:lowerLimit = -13.178029
float physics:upperLimit = 13.178029
custom float urdf:limit:effort = 100
custom float urdf:limit:velocity = 1
}
def PhysicsRevoluteJoint "index_mcp_pitch" (
prepend apiSchemas = ["PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
float drive:angular:physics:maxForce = 10
uniform token drive:angular:physics:type = "force"
uniform token physics:axis = "Y"
custom rel physics:body0
prepend rel physics:body0 = </linkerhand_g20_left/Geometry/hand_base_link/index_metacarpals>
custom rel physics:body1
prepend rel physics:body1 = </linkerhand_g20_left/Geometry/hand_base_link/index_metacarpals/index_proximal>
point3f physics:localPos0 = (-0.0021302, 0, 0)
point3f physics:localPos1 = (0, 0, 0)
quatf physics:localRot0 = (1, 0, 0, 0)
quatf physics:localRot1 = (1, 0, 0, 0)
float physics:lowerLimit = 0
float physics:upperLimit = 69.90085
custom float urdf:limit:effort = 100
custom float urdf:limit:velocity = 1
}
def PhysicsRevoluteJoint "index_pip" (
prepend apiSchemas = ["PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
float drive:angular:physics:maxForce = 10
uniform token drive:angular:physics:type = "force"
uniform token physics:axis = "Y"
custom rel physics:body0
prepend rel physics:body0 = </linkerhand_g20_left/Geometry/hand_base_link/index_metacarpals/index_proximal>
custom rel physics:body1
prepend rel physics:body1 = </linkerhand_g20_left/Geometry/hand_base_link/index_metacarpals/index_proximal/index_middle>
point3f physics:localPos0 = (-0.0041946, 0, 0.044819)
point3f physics:localPos1 = (0, 0, 0)
quatf physics:localRot0 = (1, 0, 0, 0)
quatf physics:localRot1 = (1, 0, 0, 0)
float physics:lowerLimit = 0
float physics:upperLimit = 99.69466
custom float urdf:limit:effort = 100
custom float urdf:limit:velocity = 1
}
def PhysicsRevoluteJoint "index_dip" (
prepend apiSchemas = ["NewtonMimicAPI", "PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
float drive:angular:physics:maxForce = 10
uniform token drive:angular:physics:type = "force"
float newton:mimicCoef1 = 0.89
rel newton:mimicJoint = </linkerhand_g20_left/Physics/index_pip>
uniform token physics:axis = "Y"
custom rel physics:body0
prepend rel physics:body0 = </linkerhand_g20_left/Geometry/hand_base_link/index_metacarpals/index_proximal/index_middle>
custom rel physics:body1
prepend rel physics:body1 = </linkerhand_g20_left/Geometry/hand_base_link/index_metacarpals/index_proximal/index_middle/index_distal>
point3f physics:localPos0 = (0.0028245, 0, 0.031696)
point3f physics:localPos1 = (0, 0, 0)
quatf physics:localRot0 = (1, 0, 0, 0)
quatf physics:localRot1 = (1, 0, 0, 0)
float physics:lowerLimit = 0
float physics:upperLimit = 88.80846
custom float urdf:limit:effort = 100
custom float urdf:limit:velocity = 1
}
def PhysicsRevoluteJoint "middle_mcp_roll" (
prepend apiSchemas = ["PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
float drive:angular:physics:maxForce = 10
uniform token drive:angular:physics:type = "force"
uniform token physics:axis = "X"
custom rel physics:body0
prepend rel physics:body0 = </linkerhand_g20_left/Geometry/hand_base_link>
custom rel physics:body1
prepend rel physics:body1 = </linkerhand_g20_left/Geometry/hand_base_link/middle_metacarpals>
point3f physics:localPos0 = (0.0038, -0.01175, 0.1526)
point3f physics:localPos1 = (0, 0, 0)
quatf physics:localRot0 = (1, 0, 0, 0)
quatf physics:localRot1 = (1, 0, 0, 0)
float physics:lowerLimit = -13.178029
float physics:upperLimit = 13.178029
custom float urdf:limit:effort = 100
custom float urdf:limit:velocity = 1
}
def PhysicsRevoluteJoint "middle_mcp_pitch" (
prepend apiSchemas = ["PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
float drive:angular:physics:maxForce = 10
uniform token drive:angular:physics:type = "force"
uniform token physics:axis = "Y"
custom rel physics:body0
prepend rel physics:body0 = </linkerhand_g20_left/Geometry/hand_base_link/middle_metacarpals>
custom rel physics:body1
prepend rel physics:body1 = </linkerhand_g20_left/Geometry/hand_base_link/middle_metacarpals/middle_proximal>
point3f physics:localPos0 = (-0.0021302, 0, 0)
point3f physics:localPos1 = (0, 0, 0)
quatf physics:localRot0 = (1, 0, 0, 0)
quatf physics:localRot1 = (1, 0, 0, 0)
float physics:lowerLimit = 0
float physics:upperLimit = 69.90085
custom float urdf:limit:effort = 100
custom float urdf:limit:velocity = 1
}
def PhysicsRevoluteJoint "middle_pip" (
prepend apiSchemas = ["PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
float drive:angular:physics:maxForce = 10
uniform token drive:angular:physics:type = "force"
uniform token physics:axis = "Y"
custom rel physics:body0
prepend rel physics:body0 = </linkerhand_g20_left/Geometry/hand_base_link/middle_metacarpals/middle_proximal>
custom rel physics:body1
prepend rel physics:body1 = </linkerhand_g20_left/Geometry/hand_base_link/middle_metacarpals/middle_proximal/middle_middle>
point3f physics:localPos0 = (-0.004194577, 0, 0.044819433)
point3f physics:localPos1 = (0, 0, 0)
quatf physics:localRot0 = (1, 0, 0, 0)
quatf physics:localRot1 = (1, 0, 0, 0)
float physics:lowerLimit = 0
float physics:upperLimit = 99.69466
custom float urdf:limit:effort = 100
custom float urdf:limit:velocity = 1
}
def PhysicsRevoluteJoint "middle_dip" (
prepend apiSchemas = ["NewtonMimicAPI", "PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
float drive:angular:physics:maxForce = 10
uniform token drive:angular:physics:type = "force"
float newton:mimicCoef1 = 0.89
rel newton:mimicJoint = </linkerhand_g20_left/Physics/middle_pip>
uniform token physics:axis = "Y"
custom rel physics:body0
prepend rel physics:body0 = </linkerhand_g20_left/Geometry/hand_base_link/middle_metacarpals/middle_proximal/middle_middle>
custom rel physics:body1
prepend rel physics:body1 = </linkerhand_g20_left/Geometry/hand_base_link/middle_metacarpals/middle_proximal/middle_middle/middle_distal>
point3f physics:localPos0 = (0.0028245, 0, 0.031696)
point3f physics:localPos1 = (0, 0, 0)
quatf physics:localRot0 = (1, 0, 0, 0)
quatf physics:localRot1 = (1, 0, 0, 0)
float physics:lowerLimit = 0
float physics:upperLimit = 88.80846
custom float urdf:limit:effort = 100
custom float urdf:limit:velocity = 1
}
def PhysicsRevoluteJoint "ring_mcp_roll" (
prepend apiSchemas = ["PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
float drive:angular:physics:maxForce = 10
uniform token drive:angular:physics:type = "force"
uniform token physics:axis = "X"
custom rel physics:body0
prepend rel physics:body0 = </linkerhand_g20_left/Geometry/hand_base_link>
custom rel physics:body1
prepend rel physics:body1 = </linkerhand_g20_left/Geometry/hand_base_link/ring_metacarpals>
point3f physics:localPos0 = (0.0038, 0.01175, 0.1481)
point3f physics:localPos1 = (0, 0, 0)
quatf physics:localRot0 = (1, 0, 0, 0)
quatf physics:localRot1 = (1, 0, 0, 0)
float physics:lowerLimit = -13.178029
float physics:upperLimit = 13.178029
custom float urdf:limit:effort = 100
custom float urdf:limit:velocity = 1
}
def PhysicsRevoluteJoint "ring_mcp_pitch" (
prepend apiSchemas = ["PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
float drive:angular:physics:maxForce = 10
uniform token drive:angular:physics:type = "force"
uniform token physics:axis = "Y"
custom rel physics:body0
prepend rel physics:body0 = </linkerhand_g20_left/Geometry/hand_base_link/ring_metacarpals>
custom rel physics:body1
prepend rel physics:body1 = </linkerhand_g20_left/Geometry/hand_base_link/ring_metacarpals/ring_proximal>
point3f physics:localPos0 = (-0.0021302, 0, 0)
point3f physics:localPos1 = (0, 0, 0)
quatf physics:localRot0 = (1, 0, 0, 0)
quatf physics:localRot1 = (1, 0, 0, 0)
float physics:lowerLimit = 0
float physics:upperLimit = 69.90085
custom float urdf:limit:effort = 100
custom float urdf:limit:velocity = 1
}
def PhysicsRevoluteJoint "ring_pip" (
prepend apiSchemas = ["PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
float drive:angular:physics:maxForce = 10
uniform token drive:angular:physics:type = "force"
uniform token physics:axis = "Y"
custom rel physics:body0
prepend rel physics:body0 = </linkerhand_g20_left/Geometry/hand_base_link/ring_metacarpals/ring_proximal>
custom rel physics:body1
prepend rel physics:body1 = </linkerhand_g20_left/Geometry/hand_base_link/ring_metacarpals/ring_proximal/ring_middle>
point3f physics:localPos0 = (-0.004194577, 0, 0.044819433)
point3f physics:localPos1 = (0, 0, 0)
quatf physics:localRot0 = (1, 0, 0, 0)
quatf physics:localRot1 = (1, 0, 0, 0)
float physics:lowerLimit = 0
float physics:upperLimit = 99.69466
custom float urdf:limit:effort = 100
custom float urdf:limit:velocity = 1
}
def PhysicsRevoluteJoint "ring_dip" (
prepend apiSchemas = ["NewtonMimicAPI", "PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
float drive:angular:physics:maxForce = 10
uniform token drive:angular:physics:type = "force"
float newton:mimicCoef1 = 0.89
rel newton:mimicJoint = </linkerhand_g20_left/Physics/ring_pip>
uniform token physics:axis = "Y"
custom rel physics:body0
prepend rel physics:body0 = </linkerhand_g20_left/Geometry/hand_base_link/ring_metacarpals/ring_proximal/ring_middle>
custom rel physics:body1
prepend rel physics:body1 = </linkerhand_g20_left/Geometry/hand_base_link/ring_metacarpals/ring_proximal/ring_middle/ring_distal>
point3f physics:localPos0 = (0.0028245, 0, 0.031696)
point3f physics:localPos1 = (0, 0, 0)
quatf physics:localRot0 = (1, 0, 0, 0)
quatf physics:localRot1 = (1, 0, 0, 0)
float physics:lowerLimit = 0
float physics:upperLimit = 88.80846
custom float urdf:limit:effort = 100
custom float urdf:limit:velocity = 1
}
def PhysicsRevoluteJoint "pinky_mcp_roll" (
prepend apiSchemas = ["PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
float drive:angular:physics:maxForce = 10
uniform token drive:angular:physics:type = "force"
uniform token physics:axis = "X"
custom rel physics:body0
prepend rel physics:body0 = </linkerhand_g20_left/Geometry/hand_base_link>
custom rel physics:body1
prepend rel physics:body1 = </linkerhand_g20_left/Geometry/hand_base_link/pinky_metacarpals>
point3f physics:localPos0 = (0.0038, 0.03525, 0.1436)
point3f physics:localPos1 = (0, 0, 0)
quatf physics:localRot0 = (1, 0, 0, 0)
quatf physics:localRot1 = (1, 0, 0, 0)
float physics:lowerLimit = -13.178029
float physics:upperLimit = 13.178029
custom float urdf:limit:effort = 100
custom float urdf:limit:velocity = 1
}
def PhysicsRevoluteJoint "pinky_mcp_pitch" (
prepend apiSchemas = ["PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
float drive:angular:physics:maxForce = 10
uniform token drive:angular:physics:type = "force"
uniform token physics:axis = "Y"
custom rel physics:body0
prepend rel physics:body0 = </linkerhand_g20_left/Geometry/hand_base_link/pinky_metacarpals>
custom rel physics:body1
prepend rel physics:body1 = </linkerhand_g20_left/Geometry/hand_base_link/pinky_metacarpals/pinky_proximal>
point3f physics:localPos0 = (-0.0021302, 0, 0)
point3f physics:localPos1 = (0, 0, 0)
quatf physics:localRot0 = (1, 0, 0, 0)
quatf physics:localRot1 = (1, 0, 0, 0)
float physics:lowerLimit = 0
float physics:upperLimit = 69.90085
custom float urdf:limit:effort = 100
custom float urdf:limit:velocity = 1
}
def PhysicsRevoluteJoint "pinky_pip" (
prepend apiSchemas = ["PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
float drive:angular:physics:maxForce = 10
uniform token drive:angular:physics:type = "force"
uniform token physics:axis = "Y"
custom rel physics:body0
prepend rel physics:body0 = </linkerhand_g20_left/Geometry/hand_base_link/pinky_metacarpals/pinky_proximal>
custom rel physics:body1
prepend rel physics:body1 = </linkerhand_g20_left/Geometry/hand_base_link/pinky_metacarpals/pinky_proximal/pinky_middle>
point3f physics:localPos0 = (-0.0041946, 0, 0.044819)
point3f physics:localPos1 = (0, 0, 0)
quatf physics:localRot0 = (1, 0, 0, 0)
quatf physics:localRot1 = (1, 0, 0, 0)
float physics:lowerLimit = 0
float physics:upperLimit = 99.69466
custom float urdf:limit:effort = 100
custom float urdf:limit:velocity = 1
}
def PhysicsRevoluteJoint "pinky_dip" (
prepend apiSchemas = ["NewtonMimicAPI", "PhysicsDriveAPI:angular", "PhysicsJointStateAPI:angular"]
)
{
float drive:angular:physics:maxForce = 10
uniform token drive:angular:physics:type = "force"
float newton:mimicCoef1 = 0.89
rel newton:mimicJoint = </linkerhand_g20_left/Physics/pinky_pip>
uniform token physics:axis = "Y"
custom rel physics:body0
prepend rel physics:body0 = </linkerhand_g20_left/Geometry/hand_base_link/pinky_metacarpals/pinky_proximal/pinky_middle>
custom rel physics:body1
prepend rel physics:body1 = </linkerhand_g20_left/Geometry/hand_base_link/pinky_metacarpals/pinky_proximal/pinky_middle/pinky_distal>
point3f physics:localPos0 = (0.0028245, 0, 0.031696)
point3f physics:localPos1 = (0, 0, 0)
quatf physics:localRot0 = (1, 0, 0, 0)
quatf physics:localRot1 = (1, 0, 0, 0)
float physics:lowerLimit = 0
float physics:upperLimit = 88.80846
custom float urdf:limit:effort = 100
custom float urdf:limit:velocity = 1
}
def PhysicsFixedJoint "root_joint"
{
# Deliverable fixed base: empty body0 = world, body1 = palm rigid body.
# Mount pose comes from the referencing Xform in the scene (not localPos0).
custom rel physics:body0
custom rel physics:body1
prepend rel physics:body1 = </linkerhand_g20_left/Geometry/hand_base_link>
point3f physics:localPos0 = (0, 0, 0)
point3f physics:localPos1 = (0, 0, 0)
quatf physics:localRot0 = (1, 0, 0, 0)
quatf physics:localRot1 = (1, 0, 0, 0)
bool physics:jointEnabled = 1
}
}
}
@@ -0,0 +1,230 @@
#usda 1.0
(
customLayerData = {
string creator = "URDF USD Converter v0.1.3"
}
defaultPrim = "linkerhand_g20_left"
doc = """Generated from Composed Stage of root layer /tmp/tmp5xni4jzi/linkerhand_g20_left.usdc
Generated from Composed Stage of root layer /tmp/urdf_import_linkerhand_g20_left_9306w6un/usdex_linkerhand_g20_left/linkerhand_g20_left.usdc
Generated from Composed Stage of root layer /tmp/urdf_import_linkerhand_g20_left_9306w6un/temp_linkerhand_g20_left/linkerhand_g20_left.usd
Generated from Composed Stage of root layer /home/lxqs/isaacsim/linkerhand/urdf/g20/left/linkerhand_g20_left/payloads/base.usd
"""
kilogramsPerUnit = 1
metersPerUnit = 1
subLayers = [
@./physics.usda@,
@./hand_body_limits.usda@
]
upAxis = "Z"
)
over "linkerhand_g20_left"
{
# Deliverable PhysX limits: prevent contact impulse blow-ups when fingertips collide
over "Geometry" (
prepend apiSchemas = ["PhysxArticulationAPI"]
)
{
bool physxArticulation:enabledSelfCollisions = 1
bool newton:selfCollisionEnabled = 1
int physxArticulation:solverPositionIterationCount = 32
int physxArticulation:solverVelocityIterationCount = 4
float physxArticulation:sleepThreshold = 0.005
over "hand_base_link" (
prepend apiSchemas = ["PhysxRigidBodyAPI"]
)
{
# Retarget/PD 稳定:限速 + 阻尼,避免握拳末端冲飞
float physxRigidBody:maxLinearVelocity = 3.0
float physxRigidBody:maxAngularVelocity = 360.0
float physxRigidBody:linearDamping = 5.0
float physxRigidBody:angularDamping = 5.0
bool physxRigidBody:disableGravity = 0
}
}
over "Physics"
{
over "thumb_cmc_roll" (
prepend apiSchemas = ["PhysxJointAPI"]
)
{
float physxJoint:maxJointVelocity = 171.887
float physxJoint:armature = 0.05
}
over "thumb_cmc_yaw" (
prepend apiSchemas = ["PhysxJointAPI"]
)
{
float physxJoint:maxJointVelocity = 171.887
float physxJoint:armature = 0.05
}
over "thumb_cmc_pitch" (
prepend apiSchemas = ["PhysxJointAPI"]
)
{
float physxJoint:maxJointVelocity = 171.887
float physxJoint:armature = 0.05
}
over "thumb_mcp" (
prepend apiSchemas = ["PhysxJointAPI"]
)
{
float physxJoint:maxJointVelocity = 171.887
float physxJoint:armature = 0.05
}
over "thumb_ip" (
prepend apiSchemas = ["PhysxJointAPI"]
)
{
float physxJoint:maxJointVelocity = 171.887
float physxJoint:armature = 0.05
}
over "index_mcp_roll" (
prepend apiSchemas = ["PhysxJointAPI"]
)
{
float physxJoint:maxJointVelocity = 171.887
float physxJoint:armature = 0.05
}
over "index_mcp_pitch" (
prepend apiSchemas = ["PhysxJointAPI"]
)
{
float physxJoint:maxJointVelocity = 171.887
float physxJoint:armature = 0.05
}
over "index_pip" (
prepend apiSchemas = ["PhysxJointAPI"]
)
{
float physxJoint:maxJointVelocity = 171.887
float physxJoint:armature = 0.05
}
over "index_dip" (
prepend apiSchemas = ["PhysxJointAPI"]
)
{
float physxJoint:maxJointVelocity = 171.887
float physxJoint:armature = 0.05
}
over "middle_mcp_roll" (
prepend apiSchemas = ["PhysxJointAPI"]
)
{
float physxJoint:maxJointVelocity = 171.887
float physxJoint:armature = 0.05
}
over "middle_mcp_pitch" (
prepend apiSchemas = ["PhysxJointAPI"]
)
{
float physxJoint:maxJointVelocity = 171.887
float physxJoint:armature = 0.05
}
over "middle_pip" (
prepend apiSchemas = ["PhysxJointAPI"]
)
{
float physxJoint:maxJointVelocity = 171.887
float physxJoint:armature = 0.05
}
over "middle_dip" (
prepend apiSchemas = ["PhysxJointAPI"]
)
{
float physxJoint:maxJointVelocity = 171.887
float physxJoint:armature = 0.05
}
over "ring_mcp_roll" (
prepend apiSchemas = ["PhysxJointAPI"]
)
{
float physxJoint:maxJointVelocity = 171.887
float physxJoint:armature = 0.05
}
over "ring_mcp_pitch" (
prepend apiSchemas = ["PhysxJointAPI"]
)
{
float physxJoint:maxJointVelocity = 171.887
float physxJoint:armature = 0.05
}
over "ring_pip" (
prepend apiSchemas = ["PhysxJointAPI"]
)
{
float physxJoint:maxJointVelocity = 171.887
float physxJoint:armature = 0.05
}
over "ring_dip" (
prepend apiSchemas = ["PhysxJointAPI"]
)
{
float physxJoint:maxJointVelocity = 171.887
float physxJoint:armature = 0.05
}
over "pinky_mcp_roll" (
prepend apiSchemas = ["PhysxJointAPI"]
)
{
float physxJoint:maxJointVelocity = 171.887
float physxJoint:armature = 0.05
}
over "pinky_mcp_pitch" (
prepend apiSchemas = ["PhysxJointAPI"]
)
{
float physxJoint:maxJointVelocity = 171.887
float physxJoint:armature = 0.05
}
over "pinky_pip" (
prepend apiSchemas = ["PhysxJointAPI"]
)
{
float physxJoint:maxJointVelocity = 171.887
float physxJoint:armature = 0.05
}
over "pinky_dip" (
prepend apiSchemas = ["PhysxJointAPI"]
)
{
float physxJoint:maxJointVelocity = 171.887
float physxJoint:armature = 0.05
}
}
}