Organize hand models and launchers; use linear active joint mapping

This commit is contained in:
2026-09-28 11:05:30 +08:00
parent 325dff6870
commit 01c9aa5c7a
712 changed files with 205077 additions and 6209 deletions
@@ -0,0 +1,28 @@
# O30 V10 左右手(最新零位校准版)
此目录为最新 V10 的独立副本,文件名已统一为 v10。旧目录和启动脚本未更改。
- 左手:`left/linkerhand_o30_left_v10.urdf`
- 右手:`right/linkerhand_o30_right_v10.urdf`
- 两侧各附带自己的 `meshes/`,移动时需与对应 URDF 一起复制。
右手是最新 V10 零位校准版,左手为其完整镜像。保持 SDK 0~255 按关节限位纯线性换算,没有分段映射。相同 SDK 顺序见 `sdk_joint_order.txt`;四组对指及零位见 `commands.json` 的 `sdk_command`。
零位指令:
```
[0,0,255,197,110,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
```
`left_ros_radians` 只是内部弧度参考,不能当作 SDK 指令发送。左手话题为 `/cb_left_hand_control_cmd`,右手为 `/cb_right_hand_control_cmd`,均接收 JointState.position 的 20 个 SDK 值。
从本目录显式启动(在项目根目录执行):
```bash
O30_LEFT_URDF="$PWD/exports/O30_V10_left_right/left/linkerhand_o30_left_v10.urdf" ./run_o30_left_mujoco_plan.sh
O30_RIGHT_URDF="$PWD/exports/O30_V10_left_right/right/linkerhand_o30_right_v10.urdf" ./run_o30_right_mujoco_plan.sh
```
复制来源已通过原始 SHA256 检查;新左右手 URDF 和网格与来源一致,仅 URDF 文件名更新。`validation.json` 与 `comparison.png` 为这些相同资产的既有验证记录和预览,复制本身不表示重新拟合。
左手仍是右手的对称仿真资产,未对左手真机单独标定。V10 基于伸直/并行几何先验调整零位,保留四组捏合及已校准弯曲端点,不代表照片精确测角或真机全行程验证。
@@ -0,0 +1,52 @@
{
"README.md": "a147289beed7c19242d3d21b6a7ad030c0ab1072e2957ca99214d99f83adcf23",
"commands.json": "69879230c754d5b36a59962b9a46f858f7a928adbf0aa7f06aa5408ce0e99b0e",
"comparison.png": "3c2e88a55788dfef722401006b0313ba82ee6ea31f3a6e9c0ba8729b79d6bdce",
"left/linkerhand_o30_left_v10.urdf": "44c8fdb411a712cac1f6be83b31c97344684e850ea1fbdb784ee93f2b515fe7a",
"left/meshes/hand_base_link.STL": "0a2d3b5716441a937b4983f544d5f7e9cf48efa406834bd99088c260a9fe161d",
"left/meshes/index_distal.STL": "dc58601a997bb95b70bf304cca6162942c0156aca17790adb94f5856235c9916",
"left/meshes/index_metacarpals.STL": "43fe41dee08b286c9c74d028518e6039a60fa875fa9786f19e8b0fa84bc2e2c2",
"left/meshes/index_middle.STL": "9b921b66922da9ccefd37b363728931747278200c50b566c79a1240afc8b3627",
"left/meshes/index_proximal.STL": "e8f06b5aaee297b71818bb60f338fa795d546061d1db00b056d99af1817644a3",
"left/meshes/middle_distal.STL": "dc58601a997bb95b70bf304cca6162942c0156aca17790adb94f5856235c9916",
"left/meshes/middle_metacarpals.STL": "43fe41dee08b286c9c74d028518e6039a60fa875fa9786f19e8b0fa84bc2e2c2",
"left/meshes/middle_middle.STL": "9b921b66922da9ccefd37b363728931747278200c50b566c79a1240afc8b3627",
"left/meshes/middle_proximal.STL": "e8f06b5aaee297b71818bb60f338fa795d546061d1db00b056d99af1817644a3",
"left/meshes/pinky_distal.STL": "dc58601a997bb95b70bf304cca6162942c0156aca17790adb94f5856235c9916",
"left/meshes/pinky_metacarpals.STL": "43fe41dee08b286c9c74d028518e6039a60fa875fa9786f19e8b0fa84bc2e2c2",
"left/meshes/pinky_middle.STL": "9b921b66922da9ccefd37b363728931747278200c50b566c79a1240afc8b3627",
"left/meshes/pinky_proximal.STL": "e8f06b5aaee297b71818bb60f338fa795d546061d1db00b056d99af1817644a3",
"left/meshes/ring_distal.STL": "dc58601a997bb95b70bf304cca6162942c0156aca17790adb94f5856235c9916",
"left/meshes/ring_metacarpals.STL": "43fe41dee08b286c9c74d028518e6039a60fa875fa9786f19e8b0fa84bc2e2c2",
"left/meshes/ring_middle.STL": "9b921b66922da9ccefd37b363728931747278200c50b566c79a1240afc8b3627",
"left/meshes/ring_proximal.STL": "e8f06b5aaee297b71818bb60f338fa795d546061d1db00b056d99af1817644a3",
"left/meshes/thumb_distal.STL": "096be98ed92fa14e975bd0564ec0ae80c3d785bac2a067f95120c20384b0e648",
"left/meshes/thumb_metacarpals_base1.STL": "f13ee3f0f9c3a63738badd186897b5e6ed06a3e470dc860d632ebd39afe13bcf",
"left/meshes/thumb_metacarpals_base2.STL": "ee4b38c013c1ac058fbc8acc2a80ab6da2bf6488a923c0bb1c17d241727941e6",
"left/meshes/thumb_proximal.STL": "58b7ee4495f9a9a08986569495bc2e95b1c637285e8704b1ad2091eb5a328260",
"right/linkerhand_o30_right_v10.urdf": "f233c5eff38ba46d1a2826c2624fc8a13e86ed0c74c6b914bf0fcc021b43e439",
"right/meshes/hand_base_link.STL": "716e9d422aa39f8d55f86e6d39edde411464fc8a5efeb5c1704d94769dc255ae",
"right/meshes/index_distal.STL": "1d99204e33765680dccc175c99144e7694069fa1a5bdf3f4207abe4471ec2dd9",
"right/meshes/index_metacarpals.STL": "e20eec3a9178a3b2d49f42e73dc7beebe36a7d54d4bc1956c84012c1d57cdff7",
"right/meshes/index_middle.STL": "8c659e3ad85a73f0e2da7e54dc83ecfd1abfa453f87c72f2feb30cbdda8937f5",
"right/meshes/index_proximal.STL": "4537368931f8b361d89f80263d408fb8a1d8c1457d01dc45988dfb129c6a91ca",
"right/meshes/middle_distal.STL": "1d99204e33765680dccc175c99144e7694069fa1a5bdf3f4207abe4471ec2dd9",
"right/meshes/middle_metacarpals.STL": "e20eec3a9178a3b2d49f42e73dc7beebe36a7d54d4bc1956c84012c1d57cdff7",
"right/meshes/middle_middle.STL": "8c659e3ad85a73f0e2da7e54dc83ecfd1abfa453f87c72f2feb30cbdda8937f5",
"right/meshes/middle_proximal.STL": "4537368931f8b361d89f80263d408fb8a1d8c1457d01dc45988dfb129c6a91ca",
"right/meshes/pinky_distal.STL": "1d99204e33765680dccc175c99144e7694069fa1a5bdf3f4207abe4471ec2dd9",
"right/meshes/pinky_metacarpals.STL": "e20eec3a9178a3b2d49f42e73dc7beebe36a7d54d4bc1956c84012c1d57cdff7",
"right/meshes/pinky_middle.STL": "8c659e3ad85a73f0e2da7e54dc83ecfd1abfa453f87c72f2feb30cbdda8937f5",
"right/meshes/pinky_proximal.STL": "4537368931f8b361d89f80263d408fb8a1d8c1457d01dc45988dfb129c6a91ca",
"right/meshes/ring_distal.STL": "1d99204e33765680dccc175c99144e7694069fa1a5bdf3f4207abe4471ec2dd9",
"right/meshes/ring_metacarpals.STL": "e20eec3a9178a3b2d49f42e73dc7beebe36a7d54d4bc1956c84012c1d57cdff7",
"right/meshes/ring_middle.STL": "8c659e3ad85a73f0e2da7e54dc83ecfd1abfa453f87c72f2feb30cbdda8937f5",
"right/meshes/ring_proximal.STL": "4537368931f8b361d89f80263d408fb8a1d8c1457d01dc45988dfb129c6a91ca",
"right/meshes/thumb_distal.STL": "2787c34dbc977938bd3975241870a6c43861bc06a4d7af995b7ff81e183106bd",
"right/meshes/thumb_metacarpals_base1.STL": "c9f36d66bc9d71c19baf3b33efa3cdcfe3a08bda9553ad09a8b65dcd1500f9b3",
"right/meshes/thumb_metacarpals_base2.STL": "0c8a4fe61141aaadda809cb5d03a51ec1e07fb4799e941aaa4eff1dc8e4ed260",
"right/meshes/thumb_proximal.STL": "2f2d5d1295e613a9545dac8f31834e1de93583d85786c59f5be269f1049b9a3e",
"sdk_joint_order.txt": "748b195c245f3567d22e3f71dd41585c32518906e36096ffe4fb8d70a2d9b5c8",
"validation.json": "a82168d0f719d54ddbbc5003fce1b45816cafad09a1a6d2fbaadfacda234cab1",
"version.json": "f2f92c82292faab7b2586350da189488824b09dd326e96d5a30f8b8dc391c64e"
}
@@ -0,0 +1,281 @@
{
"asset_version": "V10",
"command_topic": "/cb_left_hand_control_cmd",
"command_units": "SDK 0..255; send sdk_command, not left_ros_radians",
"sdk_joint_order": [
"thumb_cmc_roll",
"thumb_cmc_yaw",
"index_mcp_roll",
"middle_mcp_roll",
"ring_mcp_roll",
"pinky_mcp_roll",
"thumb_mcp",
"index_mcp_pitch",
"middle_mcp_pitch",
"ring_mcp_pitch",
"pinky_mcp_pitch",
"index_pip",
"middle_pip",
"ring_pip",
"pinky_pip",
"thumb_ip",
"index_dip",
"middle_dip",
"ring_dip",
"pinky_dip"
],
"left_ros_order": [
"thumb_cmc_roll",
"thumb_cmc_yaw",
"thumb_mcp",
"thumb_ip",
"index_mcp_roll",
"index_mcp_pitch",
"index_pip",
"index_dip",
"middle_mcp_roll",
"middle_mcp_pitch",
"middle_pip",
"middle_dip",
"ring_mcp_roll",
"ring_mcp_pitch",
"ring_pip",
"ring_dip",
"pinky_mcp_roll",
"pinky_mcp_pitch",
"pinky_pip",
"pinky_dip"
],
"pinches": {
"index": {
"sdk_command": [
55,
181,
225,
176,
212,
162,
135,
164,
0,
0,
0,
139,
0,
0,
0,
0,
0,
0,
0,
0
],
"left_ros_radians": [
0.18813577840372547,
1.4396582597857257,
1.0277351056058823,
0.0,
-0.09370641027822224,
1.11587286439394,
0.8020369133142686,
0.0,
-0.056923250644910384,
0.0,
0.0,
0.0,
0.20105220210793762,
0.0,
0.0,
0.0,
0.17710860883550222,
0.0,
0.0,
0.0
]
},
"middle": {
"sdk_command": [
137,
166,
225,
176,
212,
162,
174,
0,
78,
0,
0,
139,
216,
0,
0,
0,
0,
79,
0,
0
],
"left_ros_radians": [
0.468629120751098,
1.3203495642233727,
1.3246363583364706,
0.0,
-0.09370641027822224,
0.0,
0.8020369133142686,
0.0,
-0.056923250644910384,
0.4851377064829213,
1.3475198126296868,
0.49499464386611763,
0.20105220210793762,
0.0,
0.0,
0.0,
0.17710860883550222,
0.0,
0.0,
0.0
]
},
"ring": {
"sdk_command": [
255,
172,
169,
169,
162,
170,
143,
0,
0,
140,
0,
0,
0,
172,
0,
0,
0,
0,
61,
0
],
"left_ros_radians": [
0.87226588169,
1.3680730424483138,
1.0886379266788235,
0.0,
-0.16919281483119805,
0.0,
0.0,
0.0,
-0.07162232590335149,
0.0,
0.0,
0.0,
0.09967196576172593,
0.8531488605184314,
1.07031189749349,
0.3765771849929412,
0.18856088581503322,
0.0,
0.0,
0.0
]
},
"pinky": {
"sdk_command": [
101,
255,
169,
169,
162,
170,
98,
0,
0,
0,
166,
0,
0,
0,
150,
52,
0,
0,
0,
107
],
"left_ros_radians": [
0.3454857021595686,
2.02824782456,
0.7460595581435294,
0.32699495581089144,
-0.16919281483119805,
0.0,
0.0,
0.0,
-0.07162232590335149,
0.0,
0.0,
0.0,
0.09967196576172593,
0.0,
0.0,
0.0,
0.18856088581503322,
1.136714936245495,
0.9274665849352941,
0.6655254905272548
]
}
},
"zero": {
"sdk_command": [
0,
0,
255,
197,
110,
28,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
],
"left_ros_radians": [
0.0,
0.0,
0.0,
0.0,
-0.053267264981985196,
0.0,
0.0,
0.0,
-0.012826024869587227,
0.0,
0.0,
0.0,
-0.00576348003833424,
0.0,
0.0,
0.0,
-0.014717030571641594,
0.0,
0.0,
0.0
]
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

@@ -0,0 +1,605 @@
<?xml version='1.0' encoding='utf-8'?>
<robot name="linkerhand_o30_left_v10_mirrored">
<link name="hand_base_link">
<inertial>
<origin xyz="0.043952 -0.014169 0.022868" rpy="-0 0 -0" />
<mass value="0.046494" />
<inertia ixx="2.6054E-05" ixy="4.7068e-07" ixz="2.1277E-06" iyy="5.2487E-05" iyz="-2.7986e-06" izz="3.1143E-05" />
</inertial>
<visual>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/hand_base_link.STL" />
</geometry>
<material name="">
<color rgba="0.68 0.70 0.72 1" />
</material>
</visual>
<collision>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/hand_base_link.STL" />
</geometry>
</collision>
</link>
<link name="thumb_metacarpals_base1">
<inertial>
<origin xyz="-0.010316 -0.0066586 -0.0024476" rpy="-0 0 -0" />
<mass value="0.0024826" />
<inertia ixx="1.6045E-07" ixy="2.6684e-08" ixz="-1.7024E-08" iyy="1.7121E-07" iyz="2.6748e-08" izz="2.3246E-07" />
</inertial>
<visual>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/thumb_metacarpals_base1.STL" />
</geometry>
<material name="">
<color rgba="0.68 0.70 0.72 1" />
</material>
</visual>
<collision>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/thumb_metacarpals_base1.STL" />
</geometry>
</collision>
</link>
<joint name="thumb_cmc_roll" type="revolute">
<origin xyz="0.018257 -0.012998 0.024272" rpy="0.07680614007600001 0 -0" />
<parent link="hand_base_link" />
<child link="thumb_metacarpals_base1" />
<axis xyz="-1 0 -0" />
<limit lower="0" upper="0.87226588169" effort="1" velocity="1" />
</joint>
<link name="thumb_metacarpals_base2">
<inertial>
<origin xyz="0.00038148 -0.0076809 0.0021853" rpy="-0 0 -0" />
<mass value="0.0011821" />
<inertia ixx="3.9644E-08" ixy="-2.1365e-10" ixz="7.766E-11" iyy="1.569E-08" iyz="7.709600000000001e-09" izz="3.6362E-08" />
</inertial>
<visual>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/thumb_metacarpals_base2.STL" />
</geometry>
<material name="">
<color rgba="0.68 0.70 0.72 1" />
</material>
</visual>
<collision>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/thumb_metacarpals_base2.STL" />
</geometry>
</collision>
</link>
<joint name="thumb_cmc_yaw" type="revolute">
<origin xyz="-0.00215 -0.015238 0" rpy="-0 0 0.0283606787672" />
<parent link="thumb_metacarpals_base1" />
<child link="thumb_metacarpals_base2" />
<axis xyz="-0 0 1" />
<limit lower="0" upper="2.02824782456" effort="1" velocity="1" />
</joint>
<link name="thumb_proximal">
<inertial>
<origin xyz="3.6654e-06 -0.023946 -0.0037436" rpy="-0 0 -0" />
<mass value="0.0073969" />
<inertia ixx="1.1793E-06" ixy="-1.3736e-10" ixz="-9.6655E-11" iyy="6.5357E-07" iyz="5.8031e-08" izz="1.0764E-06" />
</inertial>
<visual>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/thumb_proximal.STL" />
</geometry>
<material name="">
<color rgba="0.68 0.70 0.72 1" />
</material>
</visual>
<collision>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/thumb_proximal.STL" />
</geometry>
</collision>
</link>
<joint name="thumb_mcp" type="revolute">
<origin xyz="0.00045 -0.015539 0.0029937" rpy="0.384266722602 0 -0" />
<parent link="thumb_metacarpals_base2" />
<child link="thumb_proximal" />
<axis xyz="-1 0 -0" />
<limit lower="0" upper="1.9412774217" effort="1" velocity="1" />
</joint>
<link name="thumb_distal">
<inertial>
<origin xyz="2.0498e-05 -0.02017 -0.00424" rpy="-0 0 -0" />
<mass value="0.0079712" />
<inertia ixx="8.2871E-07" ixy="4.2596e-11" ixz="-2.569E-11" iyy="3.2681E-07" iyz="-2.6339e-08" izz="8.3897E-07" />
</inertial>
<visual>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/thumb_distal.STL" />
</geometry>
<material name="">
<color rgba="0.48 0.50 0.52 1" />
</material>
</visual>
<collision>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/thumb_distal.STL" />
</geometry>
</collision>
</link>
<joint name="thumb_ip" type="revolute">
<origin xyz="0 -0.048532 0.00155" rpy="0.0327366295854 0 -0" />
<parent link="thumb_proximal" />
<child link="thumb_distal" />
<axis xyz="-1 0 -0" />
<limit lower="0" upper="1.603532956380333" effort="1" velocity="1" />
</joint>
<link name="index_metacarpals">
<inertial>
<origin xyz="-0.0106040258094052 5.13953894481882e-05 -0.00136151819442749" rpy="-0 0 -0" />
<mass value="0.00661261244742178" />
<inertia ixx="4.53652866123246E-07" ixy="-1.66679020586885e-08" ixz="-1.26712149811549E-08" iyy="5.30500427518365E-07" iyz="-4.56960905410225e-10" izz="2.56538210441828E-07" />
</inertial>
<visual>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/index_metacarpals.STL" />
</geometry>
<material name="">
<color rgba="0.68 0.70 0.72 1" />
</material>
</visual>
<collision>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/index_metacarpals.STL" />
</geometry>
</collision>
</link>
<joint name="index_mcp_roll" type="revolute">
<origin xyz="0.018722 -0.029679 0.075158" rpy="-0.05326726498196427 0 -0" />
<parent link="hand_base_link" />
<child link="index_metacarpals" />
<axis xyz="-1 0 -0" />
<limit lower="-0.3970" upper="-0.0532672649819852" effort="1.0" velocity="1.0" />
</joint>
<link name="index_proximal">
<inertial>
<origin xyz="-0.0043709621275504 -2.16385333159826e-05 0.0216063163265681" rpy="-0 0 -0" />
<mass value="0.00727256326100808" />
<inertia ixx="6.59424988535241E-07" ixy="-1.15369816881374e-10" ixz="-2.43455022025729E-08" iyy="7.06690330759988E-07" iyz="1.75709839767273e-10" izz="3.18019337389962E-07" />
</inertial>
<visual>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/index_proximal.STL" />
</geometry>
<material name="">
<color rgba="0.68 0.70 0.72 1" />
</material>
</visual>
<collision>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/index_proximal.STL" />
</geometry>
</collision>
</link>
<joint name="index_mcp_pitch" type="revolute">
<origin xyz="-0.00475 -0.00059587 0.016238" rpy="-0 1.221245327087672e-14 -0" />
<parent link="index_metacarpals" />
<child link="index_proximal" />
<axis xyz="-0 1 -0" />
<limit lower="0.0" upper="1.735046222075943" effort="1.0" velocity="1.0" />
</joint>
<link name="index_middle">
<inertial>
<origin xyz="-0.00412829489374895 -4.33935129848899e-05 0.0217078554898162" rpy="-0 0 -0" />
<mass value="0.00678023137976301" />
<inertia ixx="6.77930682969668E-07" ixy="-1.0022443161073e-10" ixz="-7.34914379088131E-09" iyy="7.24200285246171E-07" iyz="-6.8455968172179e-11" izz="2.95854297824364E-07" />
</inertial>
<visual>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/index_middle.STL" />
</geometry>
<material name="">
<color rgba="0.68 0.70 0.72 1" />
</material>
</visual>
<collision>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/index_middle.STL" />
</geometry>
</collision>
</link>
<joint name="index_pip" type="revolute">
<origin xyz="0 -0 0.039681" rpy="-0 -3.019806626980426e-14 -0" />
<parent link="index_proximal" />
<child link="index_middle" />
<axis xyz="-0 1 -0" />
<limit lower="0.0" upper="1.471362682698838" effort="1.0" velocity="1.0" />
</joint>
<link name="index_distal">
<inertial>
<origin xyz="-0.00405260592933677 -2.92010642392003e-05 0.0113571507781909" rpy="-0 0 -0" />
<mass value="0.0033098791304967" />
<inertia ixx="1.64002168413707E-07" ixy="3.45038659319342e-12" ixz="-9.24432368435003E-09" iyy="1.74779055176355E-07" iyz="-3.79661625368079e-12" izz="1.1460476210935E-07" />
</inertial>
<visual>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/index_distal.STL" />
</geometry>
<material name="">
<color rgba="0.48 0.50 0.52 1" />
</material>
</visual>
<collision>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/index_distal.STL" />
</geometry>
</collision>
</link>
<joint name="index_dip" type="revolute">
<origin xyz="0 -0 0.040244" rpy="-0 0.0402952773826 -0" />
<parent link="index_middle" />
<child link="index_distal" />
<axis xyz="-0 1 -0" />
<limit lower="0.0" upper="1.59669999534" effort="1.0" velocity="1.0" />
</joint>
<link name="middle_metacarpals">
<inertial>
<origin xyz="-0.0106040258093801 5.13953895135309e-05 -0.00136151819462214" rpy="-0 0 -0" />
<mass value="0.00661261244742176" />
<inertia ixx="4.53652866122421E-07" ixy="-1.6667902059155e-08" ixz="-1.26712149847738E-08" iyy="5.30500427517202E-07" iyz="-4.5696090563867e-10" izz="2.56538210441734E-07" />
</inertial>
<visual>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/middle_metacarpals.STL" />
</geometry>
<material name="">
<color rgba="0.68 0.70 0.72 1" />
</material>
</visual>
<collision>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/middle_metacarpals.STL" />
</geometry>
</collision>
</link>
<joint name="middle_mcp_roll" type="revolute">
<origin xyz="0.018722 -0.0086937 0.08158600000000001" rpy="-0.0128260248695901 0 -0" />
<parent link="hand_base_link" />
<child link="middle_metacarpals" />
<axis xyz="-1 0 -0" />
<limit lower="-0.4265" upper="0.1089663129860673" effort="1.0" velocity="1.0" />
</joint>
<link name="middle_proximal">
<inertial>
<origin xyz="-0.00437096211453991 -2.16385377681651e-05 0.021606316263903" rpy="-0 0 -0" />
<mass value="0.00727256322379252" />
<inertia ixx="6.59424984533755E-07" ixy="-1.15369786907248e-10" ixz="-2.43455017911397E-08" iyy="7.06690325324724E-07" iyz="1.75709424177874e-10" izz="3.18019338775399E-07" />
</inertial>
<visual>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/middle_proximal.STL" />
</geometry>
<material name="">
<color rgba="0.68 0.70 0.72 1" />
</material>
</visual>
<collision>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/middle_proximal.STL" />
</geometry>
</collision>
</link>
<joint name="middle_mcp_pitch" type="revolute">
<origin xyz="-0.00475 -0.00059587 0.016238" rpy="-0 -0.01523079055311838 -0" />
<parent link="middle_metacarpals" />
<child link="middle_proximal" />
<axis xyz="-0 1 -0" />
<limit lower="0.0" upper="1.586027117348012" effort="1.0" velocity="1.0" />
</joint>
<link name="middle_middle">
<inertial>
<origin xyz="-0.00416491190892752 -4.53802720945468e-05 0.0183968023027694" rpy="-0 0 -0" />
<mass value="0.00558395826725584" />
<inertia ixx="6.23566979572116E-07" ixy="-1.48661311147268e-12" ixz="9.71608105955063E-09" iyy="6.62874748143871E-07" iyz="1.95417713888735e-11" izz="2.52254263414512E-07" />
</inertial>
<visual>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/middle_middle.STL" />
</geometry>
<material name="">
<color rgba="0.68 0.70 0.72 1" />
</material>
</visual>
<collision>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/middle_middle.STL" />
</geometry>
</collision>
</link>
<joint name="middle_pip" type="revolute">
<origin xyz="0 -0 0.039681" rpy="-0 0.0138711925804 -0" />
<parent link="middle_proximal" />
<child link="middle_middle" />
<axis xyz="-0 1 -0" />
<limit lower="0.0" upper="1.590822001021158" effort="1.0" velocity="1.0" />
</joint>
<link name="middle_distal">
<inertial>
<origin xyz="-0.0040526080066767 -2.92015397774141e-05 0.0113571741521581" rpy="-0 0 -0" />
<mass value="0.00330988759550385" />
<inertia ixx="1.64003148791956E-07" ixy="3.39806839680505e-12" ixz="-9.24426389673421E-09" iyy="1.74779889123667E-07" iyz="-3.85472238306036e-12" izz="1.1460470796913E-07" />
</inertial>
<visual>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/middle_distal.STL" />
</geometry>
<material name="">
<color rgba="0.48 0.50 0.52 1" />
</material>
</visual>
<collision>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/middle_distal.STL" />
</geometry>
</collision>
</link>
<joint name="middle_dip" type="revolute">
<origin xyz="0 -0 0.040244" rpy="-0 -0.0308518454734 -0" />
<parent link="middle_middle" />
<child link="middle_distal" />
<axis xyz="-0 1 -0" />
<limit lower="0.0" upper="1.59776752134" effort="1.0" velocity="1.0" />
</joint>
<link name="ring_metacarpals">
<inertial>
<origin xyz="-0.0106040258039409 5.13953875669396e-05 -0.00136151819474453" rpy="-0 0 -0" />
<mass value="0.00661261244414956" />
<inertia ixx="4.53652866086209E-07" ixy="-1.66679020186835e-08" ixz="-1.26712150849033E-08" iyy="5.30500427139748E-07" iyz="-4.56960893200256e-10" izz="2.56538210088551E-07" />
</inertial>
<visual>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/ring_metacarpals.STL" />
</geometry>
<material name="">
<color rgba="0.68 0.70 0.72 1" />
</material>
</visual>
<collision>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/ring_metacarpals.STL" />
</geometry>
</collision>
</link>
<joint name="ring_mcp_roll" type="revolute">
<origin xyz="0.018722 0.012188 0.079218" rpy="-0.005763480038315312 0 -0" />
<parent link="hand_base_link" />
<child link="ring_metacarpals" />
<axis xyz="-1 0 -0" />
<limit lower="-0.2288" upper="0.2882392053656797" effort="0.0" velocity="0.0" />
</joint>
<link name="ring_proximal">
<inertial>
<origin xyz="-0.00437096212848108 -2.16385332126728e-05 0.0216063163327438" rpy="-0 0 -0" />
<mass value="0.00727256326396366" />
<inertia ixx="6.5942498771819E-07" ixy="-1.15369820837761e-10" ixz="-2.43455022245408E-08" iyy="7.06690331454756E-07" iyz="1.75709860575411e-10" izz="3.18019335895501E-07" />
</inertial>
<visual>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/ring_proximal.STL" />
</geometry>
<material name="">
<color rgba="0.68 0.70 0.72 1" />
</material>
</visual>
<collision>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/ring_proximal.STL" />
</geometry>
</collision>
</link>
<joint name="ring_mcp_pitch" type="revolute">
<origin xyz="-0.00475 -0.00059587 0.016238" rpy="-0 0.0255589602002 -0" />
<parent link="ring_metacarpals" />
<child link="ring_proximal" />
<axis xyz="-0 1 -0" />
<limit lower="0.0" upper="1.55394971023" effort="1.0" velocity="1.0" />
</joint>
<link name="ring_middle">
<inertial>
<origin xyz="-0.00416491192838481 -4.53802663086568e-05 0.0183968024169422" rpy="-0 0 -0" />
<mass value="0.00558395830757745" />
<inertia ixx="6.23566985916703E-07" ixy="-1.48664397100439e-12" ixz="9.71608067536211E-09" iyy="6.62874753776221E-07" iyz="1.95421758625405e-11" izz="2.52254264189611E-07" />
</inertial>
<visual>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/ring_middle.STL" />
</geometry>
<material name="">
<color rgba="0.68 0.70 0.72 1" />
</material>
</visual>
<collision>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/ring_middle.STL" />
</geometry>
</collision>
</link>
<joint name="ring_pip" type="revolute">
<origin xyz="0 -0 0.039681" rpy="-0 0.0220509528547 -0" />
<parent link="ring_proximal" />
<child link="ring_middle" />
<axis xyz="-0 1 -0" />
<limit lower="0.0" upper="1.58679961547" effort="1.0" velocity="1.0" />
</joint>
<link name="ring_distal">
<inertial>
<origin xyz="-0.00405260742568393 -2.91984265882485e-05 0.0113571618103905" rpy="-0 0 -0" />
<mass value="0.00330988375961977" />
<inertia ixx="1.64002482967217E-07" ixy="3.51093191735502e-12" ixz="-9.24429621268036E-09" iyy="1.74779331899762E-07" iyz="-3.79763524146384e-12" izz="1.14604618112137E-07" />
</inertial>
<visual>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/ring_distal.STL" />
</geometry>
<material name="">
<color rgba="0.48 0.50 0.52 1" />
</material>
</visual>
<collision>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/ring_distal.STL" />
</geometry>
</collision>
</link>
<joint name="ring_dip" type="revolute">
<origin xyz="0 -0 0.040244" rpy="-0 -0.00428430308889 -0" />
<parent link="ring_middle" />
<child link="ring_distal" />
<axis xyz="-0 1 -0" />
<limit lower="0.0" upper="1.5742161012" effort="1.0" velocity="1.0" />
</joint>
<link name="pinky_metacarpals">
<inertial>
<origin xyz="-0.0106040258039376 5.13953875944106e-05 -0.00136151819476814" rpy="-0 0 -0" />
<mass value="0.00661261244414956" />
<inertia ixx="4.53652866086213E-07" ixy="-1.66679020188784e-08" ixz="-1.26712150853475E-08" iyy="5.30500427140437E-07" iyz="-4.56960893204398e-10" izz="2.56538210089087E-07" />
</inertial>
<visual>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/pinky_metacarpals.STL" />
</geometry>
<material name="">
<color rgba="0.68 0.70 0.72 1" />
</material>
</visual>
<collision>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/pinky_metacarpals.STL" />
</geometry>
</collision>
</link>
<joint name="pinky_mcp_roll" type="revolute">
<origin xyz="0.018722 0.030927 0.067761" rpy="-0.01471703057163711 0 -0" />
<parent link="hand_base_link" />
<child link="pinky_metacarpals" />
<axis xyz="-1 0 -0" />
<limit lower="-0.0548" upper="0.3102413287225498" effort="1.0" velocity="1.0" />
</joint>
<link name="pinky_proximal">
<inertial>
<origin xyz="-0.00437096211497169 -2.16385374772129e-05 0.0216063162659534" rpy="-0 0 -0" />
<mass value="0.00727256322451616" />
<inertia ixx="6.59424984467403E-07" ixy="-1.15369789522493e-10" ixz="-2.43455018407703E-08" iyy="7.06690325599736E-07" iyz="1.75709453609034e-10" izz="3.1801933843565E-07" />
</inertial>
<visual>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/pinky_proximal.STL" />
</geometry>
<material name="">
<color rgba="0.68 0.70 0.72 1" />
</material>
</visual>
<collision>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/pinky_proximal.STL" />
</geometry>
</collision>
</link>
<joint name="pinky_mcp_pitch" type="revolute">
<origin xyz="-0.00475 -0.00059587 0.016238" rpy="-0 -0.0220425694976 -0" />
<parent link="pinky_metacarpals" />
<child link="pinky_proximal" />
<axis xyz="-0 1 -0" />
<limit lower="0.0" upper="1.746158486401212" effort="1.0" velocity="1.0" />
</joint>
<link name="pinky_middle">
<inertial>
<origin xyz="-0.00412829488912096 -4.33935004629793e-05 0.0217078554135159" rpy="-0 0 -0" />
<mass value="0.00678023141445045" />
<inertia ixx="6.77930689052883E-07" ixy="-1.00224317995394e-10" ixz="-7.34914443754626E-09" iyy="7.24200290521759E-07" iyz="-6.84568635307055e-11" izz="2.9585429874662E-07" />
</inertial>
<visual>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/pinky_middle.STL" />
</geometry>
<material name="">
<color rgba="0.68 0.70 0.72 1" />
</material>
</visual>
<collision>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/pinky_middle.STL" />
</geometry>
</collision>
</link>
<joint name="pinky_pip" type="revolute">
<origin xyz="0 -0 0.039681" rpy="-0 0.0153062751135 -0" />
<parent link="pinky_proximal" />
<child link="pinky_middle" />
<axis xyz="-0 1 -0" />
<limit lower="0.0" upper="1.57669319439" effort="1.0" velocity="1.0" />
</joint>
<link name="pinky_distal">
<inertial>
<origin xyz="-0.00405259886775996 -2.91983586506936e-05 0.0113571520424041" rpy="-0 0 -0" />
<mass value="0.00330987874289192" />
<inertia ixx="1.64002282686245E-07" ixy="3.40616709379705e-12" ixz="-9.24408880780151E-09" iyy="1.74779075536322E-07" iyz="-3.76063308216828e-12" izz="1.14604555086707E-07" />
</inertial>
<visual>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/pinky_distal.STL" />
</geometry>
<material name="">
<color rgba="0.48 0.50 0.52 1" />
</material>
</visual>
<collision>
<origin xyz="0 -0 0" rpy="-0 0 -0" />
<geometry>
<mesh filename="meshes/pinky_distal.STL" />
</geometry>
</collision>
</link>
<joint name="pinky_dip" type="revolute">
<origin xyz="0 -0 0.040244" rpy="-0 -0.0155350252509 -0" />
<parent link="pinky_middle" />
<child link="pinky_distal" />
<axis xyz="-0 1 -0" />
<limit lower="0.0" upper="1.58606542135" effort="1.0" velocity="1.0" />
</joint>
</robot>
@@ -0,0 +1,605 @@
<?xml version='1.0' encoding='utf-8'?>
<robot name="linkerhand_O30i_right.urdf">
<link name="hand_base_link">
<inertial>
<origin xyz="0.043952 0.014169 0.022868" rpy="0 0 0" />
<mass value="0.046494" />
<inertia ixx="2.6054E-05" ixy="-4.7068E-07" ixz="2.1277E-06" iyy="5.2487E-05" iyz="2.7986E-06" izz="3.1143E-05" />
</inertial>
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/hand_base_link.STL" />
</geometry>
<material name="">
<color rgba="0.68 0.70 0.72 1" />
</material>
</visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/hand_base_link.STL" />
</geometry>
</collision>
</link>
<link name="thumb_metacarpals_base1">
<inertial>
<origin xyz="-0.010316 0.0066586 -0.0024476" rpy="0 0 0" />
<mass value="0.0024826" />
<inertia ixx="1.6045E-07" ixy="-2.6684E-08" ixz="-1.7024E-08" iyy="1.7121E-07" iyz="-2.6748E-08" izz="2.3246E-07" />
</inertial>
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/thumb_metacarpals_base1.STL" />
</geometry>
<material name="">
<color rgba="0.68 0.70 0.72 1" />
</material>
</visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/thumb_metacarpals_base1.STL" />
</geometry>
</collision>
</link>
<joint name="thumb_cmc_roll" type="revolute">
<origin xyz="0.018257 0.012998 0.024272" rpy="-0.076806140076 0 0" />
<parent link="hand_base_link" />
<child link="thumb_metacarpals_base1" />
<axis xyz="1 0 0" />
<limit lower="0" upper="0.87226588169" effort="1" velocity="1" />
</joint>
<link name="thumb_metacarpals_base2">
<inertial>
<origin xyz="0.00038148 0.0076809 0.0021853" rpy="0 0 0" />
<mass value="0.0011821" />
<inertia ixx="3.9644E-08" ixy="2.1365E-10" ixz="7.766E-11" iyy="1.569E-08" iyz="-7.7096E-09" izz="3.6362E-08" />
</inertial>
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/thumb_metacarpals_base2.STL" />
</geometry>
<material name="">
<color rgba="0.68 0.70 0.72 1" />
</material>
</visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/thumb_metacarpals_base2.STL" />
</geometry>
</collision>
</link>
<joint name="thumb_cmc_yaw" type="revolute">
<origin xyz="-0.00215 0.015238 0" rpy="0 0 -0.0283606787672" />
<parent link="thumb_metacarpals_base1" />
<child link="thumb_metacarpals_base2" />
<axis xyz="0 0 -1" />
<limit lower="0" upper="2.02824782456" effort="1" velocity="1" />
</joint>
<link name="thumb_proximal">
<inertial>
<origin xyz="3.6654E-06 0.023946 -0.0037436" rpy="0 0 0" />
<mass value="0.0073969" />
<inertia ixx="1.1793E-06" ixy="1.3736E-10" ixz="-9.6655E-11" iyy="6.5357E-07" iyz="-5.8031E-08" izz="1.0764E-06" />
</inertial>
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/thumb_proximal.STL" />
</geometry>
<material name="">
<color rgba="0.68 0.70 0.72 1" />
</material>
</visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/thumb_proximal.STL" />
</geometry>
</collision>
</link>
<joint name="thumb_mcp" type="revolute">
<origin xyz="0.00045 0.015539 0.0029937" rpy="-0.384266722602 0 0" />
<parent link="thumb_metacarpals_base2" />
<child link="thumb_proximal" />
<axis xyz="1 0 0" />
<limit lower="0" upper="1.9412774217" effort="1" velocity="1" />
</joint>
<link name="thumb_distal">
<inertial>
<origin xyz="2.0498E-05 0.02017 -0.00424" rpy="0 0 0" />
<mass value="0.0079712" />
<inertia ixx="8.2871E-07" ixy="-4.2596E-11" ixz="-2.569E-11" iyy="3.2681E-07" iyz="2.6339E-08" izz="8.3897E-07" />
</inertial>
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/thumb_distal.STL" />
</geometry>
<material name="">
<color rgba="0.48 0.50 0.52 1" />
</material>
</visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/thumb_distal.STL" />
</geometry>
</collision>
</link>
<joint name="thumb_ip" type="revolute">
<origin xyz="0 0.048532 0.00155" rpy="-0.0327366295854 0 0" />
<parent link="thumb_proximal" />
<child link="thumb_distal" />
<axis xyz="1 0 0" />
<limit lower="0" upper="1.603532956380333" effort="1" velocity="1" />
</joint>
<link name="index_metacarpals">
<inertial>
<origin xyz="-0.0106040258094052 -5.13953894481882E-05 -0.00136151819442749" rpy="0 0 0" />
<mass value="0.00661261244742178" />
<inertia ixx="4.53652866123246E-07" ixy="1.66679020586885E-08" ixz="-1.26712149811549E-08" iyy="5.30500427518365E-07" iyz="4.56960905410225E-10" izz="2.56538210441828E-07" />
</inertial>
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/index_metacarpals.STL" />
</geometry>
<material name="">
<color rgba="0.68 0.70 0.72 1" />
</material>
</visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/index_metacarpals.STL" />
</geometry>
</collision>
</link>
<joint name="index_mcp_roll" type="revolute">
<origin xyz="0.018722 0.029679 0.075158" rpy="0.05326726498196427 0 0" />
<parent link="hand_base_link" />
<child link="index_metacarpals" />
<axis xyz="1 0 0" />
<limit lower="-0.3970" upper="-0.0532672649819852" effort="1.0" velocity="1.0" />
</joint>
<link name="index_proximal">
<inertial>
<origin xyz="-0.0043709621275504 2.16385333159826E-05 0.0216063163265681" rpy="0 0 0" />
<mass value="0.00727256326100808" />
<inertia ixx="6.59424988535241E-07" ixy="1.15369816881374E-10" ixz="-2.43455022025729E-08" iyy="7.06690330759988E-07" iyz="-1.75709839767273E-10" izz="3.18019337389962E-07" />
</inertial>
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/index_proximal.STL" />
</geometry>
<material name="">
<color rgba="0.68 0.70 0.72 1" />
</material>
</visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/index_proximal.STL" />
</geometry>
</collision>
</link>
<joint name="index_mcp_pitch" type="revolute">
<origin xyz="-0.00475 0.00059587 0.016238" rpy="0 1.221245327087672e-14 0" />
<parent link="index_metacarpals" />
<child link="index_proximal" />
<axis xyz="0 1 0" />
<limit lower="0.0" upper="1.735046222075943" effort="1.0" velocity="1.0" />
</joint>
<link name="index_middle">
<inertial>
<origin xyz="-0.00412829489374895 4.33935129848899E-05 0.0217078554898162" rpy="0 0 0" />
<mass value="0.00678023137976301" />
<inertia ixx="6.77930682969668E-07" ixy="1.0022443161073E-10" ixz="-7.34914379088131E-09" iyy="7.24200285246171E-07" iyz="6.8455968172179E-11" izz="2.95854297824364E-07" />
</inertial>
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/index_middle.STL" />
</geometry>
<material name="">
<color rgba="0.68 0.70 0.72 1" />
</material>
</visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/index_middle.STL" />
</geometry>
</collision>
</link>
<joint name="index_pip" type="revolute">
<origin xyz="0 0 0.039681" rpy="0 -3.019806626980426e-14 0" />
<parent link="index_proximal" />
<child link="index_middle" />
<axis xyz="0 1 0" />
<limit lower="0.0" upper="1.471362682698838" effort="1.0" velocity="1.0" />
</joint>
<link name="index_distal">
<inertial>
<origin xyz="-0.00405260592933677 2.92010642392003E-05 0.0113571507781909" rpy="0 0 0" />
<mass value="0.0033098791304967" />
<inertia ixx="1.64002168413707E-07" ixy="-3.45038659319342E-12" ixz="-9.24432368435003E-09" iyy="1.74779055176355E-07" iyz="3.79661625368079E-12" izz="1.1460476210935E-07" />
</inertial>
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/index_distal.STL" />
</geometry>
<material name="">
<color rgba="0.48 0.50 0.52 1" />
</material>
</visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/index_distal.STL" />
</geometry>
</collision>
</link>
<joint name="index_dip" type="revolute">
<origin xyz="0 0 0.040244" rpy="0 0.0402952773826 0" />
<parent link="index_middle" />
<child link="index_distal" />
<axis xyz="0 1 0" />
<limit lower="0.0" upper="1.59669999534" effort="1.0" velocity="1.0" />
</joint>
<link name="middle_metacarpals">
<inertial>
<origin xyz="-0.0106040258093801 -5.13953895135309E-05 -0.00136151819462214" rpy="0 0 0" />
<mass value="0.00661261244742176" />
<inertia ixx="4.53652866122421E-07" ixy="1.6667902059155E-08" ixz="-1.26712149847738E-08" iyy="5.30500427517202E-07" iyz="4.5696090563867E-10" izz="2.56538210441734E-07" />
</inertial>
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/middle_metacarpals.STL" />
</geometry>
<material name="">
<color rgba="0.68 0.70 0.72 1" />
</material>
</visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/middle_metacarpals.STL" />
</geometry>
</collision>
</link>
<joint name="middle_mcp_roll" type="revolute">
<origin xyz="0.018722 0.0086937 0.081586" rpy="0.0128260248695901 0 0" />
<parent link="hand_base_link" />
<child link="middle_metacarpals" />
<axis xyz="1 0 0" />
<limit lower="-0.4265" upper="0.1089663129860673" effort="1.0" velocity="1.0" />
</joint>
<link name="middle_proximal">
<inertial>
<origin xyz="-0.00437096211453991 2.16385377681651E-05 0.021606316263903" rpy="0 0 0" />
<mass value="0.00727256322379252" />
<inertia ixx="6.59424984533755E-07" ixy="1.15369786907248E-10" ixz="-2.43455017911397E-08" iyy="7.06690325324724E-07" iyz="-1.75709424177874E-10" izz="3.18019338775399E-07" />
</inertial>
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/middle_proximal.STL" />
</geometry>
<material name="">
<color rgba="0.68 0.70 0.72 1" />
</material>
</visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/middle_proximal.STL" />
</geometry>
</collision>
</link>
<joint name="middle_mcp_pitch" type="revolute">
<origin xyz="-0.00475 0.00059587 0.016238" rpy="0 -0.01523079055311838 0" />
<parent link="middle_metacarpals" />
<child link="middle_proximal" />
<axis xyz="0 1 0" />
<limit lower="0.0" upper="1.586027117348012" effort="1.0" velocity="1.0" />
</joint>
<link name="middle_middle">
<inertial>
<origin xyz="-0.00416491190892752 4.53802720945468E-05 0.0183968023027694" rpy="0 0 0" />
<mass value="0.00558395826725584" />
<inertia ixx="6.23566979572116E-07" ixy="1.48661311147268E-12" ixz="9.71608105955063E-09" iyy="6.62874748143871E-07" iyz="-1.95417713888735E-11" izz="2.52254263414512E-07" />
</inertial>
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/middle_middle.STL" />
</geometry>
<material name="">
<color rgba="0.68 0.70 0.72 1" />
</material>
</visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/middle_middle.STL" />
</geometry>
</collision>
</link>
<joint name="middle_pip" type="revolute">
<origin xyz="0 0 0.039681" rpy="0 0.0138711925804 0" />
<parent link="middle_proximal" />
<child link="middle_middle" />
<axis xyz="0 1 0" />
<limit lower="0.0" upper="1.590822001021158" effort="1.0" velocity="1.0" />
</joint>
<link name="middle_distal">
<inertial>
<origin xyz="-0.0040526080066767 2.92015397774141E-05 0.0113571741521581" rpy="0 0 0" />
<mass value="0.00330988759550385" />
<inertia ixx="1.64003148791956E-07" ixy="-3.39806839680505E-12" ixz="-9.24426389673421E-09" iyy="1.74779889123667E-07" iyz="3.85472238306036E-12" izz="1.1460470796913E-07" />
</inertial>
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/middle_distal.STL" />
</geometry>
<material name="">
<color rgba="0.48 0.50 0.52 1" />
</material>
</visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/middle_distal.STL" />
</geometry>
</collision>
</link>
<joint name="middle_dip" type="revolute">
<origin xyz="0 0 0.040244" rpy="0 -0.0308518454734 0" />
<parent link="middle_middle" />
<child link="middle_distal" />
<axis xyz="0 1 0" />
<limit lower="0.0" upper="1.59776752134" effort="1.0" velocity="1.0" />
</joint>
<link name="ring_metacarpals">
<inertial>
<origin xyz="-0.0106040258039409 -5.13953875669396E-05 -0.00136151819474453" rpy="0 0 0" />
<mass value="0.00661261244414956" />
<inertia ixx="4.53652866086209E-07" ixy="1.66679020186835E-08" ixz="-1.26712150849033E-08" iyy="5.30500427139748E-07" iyz="4.56960893200256E-10" izz="2.56538210088551E-07" />
</inertial>
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/ring_metacarpals.STL" />
</geometry>
<material name="">
<color rgba="0.68 0.70 0.72 1" />
</material>
</visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/ring_metacarpals.STL" />
</geometry>
</collision>
</link>
<joint name="ring_mcp_roll" type="revolute">
<origin xyz="0.018722 -0.012188 0.079218" rpy="0.005763480038315312 0 0" />
<parent link="hand_base_link" />
<child link="ring_metacarpals" />
<axis xyz="1 0 0" />
<limit lower="-0.2288" upper="0.2882392053656797" effort="0.0" velocity="0.0" />
</joint>
<link name="ring_proximal">
<inertial>
<origin xyz="-0.00437096212848108 2.16385332126728E-05 0.0216063163327438" rpy="0 0 0" />
<mass value="0.00727256326396366" />
<inertia ixx="6.5942498771819E-07" ixy="1.15369820837761E-10" ixz="-2.43455022245408E-08" iyy="7.06690331454756E-07" iyz="-1.75709860575411E-10" izz="3.18019335895501E-07" />
</inertial>
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/ring_proximal.STL" />
</geometry>
<material name="">
<color rgba="0.68 0.70 0.72 1" />
</material>
</visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/ring_proximal.STL" />
</geometry>
</collision>
</link>
<joint name="ring_mcp_pitch" type="revolute">
<origin xyz="-0.00475 0.00059587 0.016238" rpy="0 0.0255589602002 0" />
<parent link="ring_metacarpals" />
<child link="ring_proximal" />
<axis xyz="0 1 0" />
<limit lower="0.0" upper="1.55394971023" effort="1.0" velocity="1.0" />
</joint>
<link name="ring_middle">
<inertial>
<origin xyz="-0.00416491192838481 4.53802663086568E-05 0.0183968024169422" rpy="0 0 0" />
<mass value="0.00558395830757745" />
<inertia ixx="6.23566985916703E-07" ixy="1.48664397100439E-12" ixz="9.71608067536211E-09" iyy="6.62874753776221E-07" iyz="-1.95421758625405E-11" izz="2.52254264189611E-07" />
</inertial>
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/ring_middle.STL" />
</geometry>
<material name="">
<color rgba="0.68 0.70 0.72 1" />
</material>
</visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/ring_middle.STL" />
</geometry>
</collision>
</link>
<joint name="ring_pip" type="revolute">
<origin xyz="0 0 0.039681" rpy="0 0.0220509528547 0" />
<parent link="ring_proximal" />
<child link="ring_middle" />
<axis xyz="0 1 0" />
<limit lower="0.0" upper="1.58679961547" effort="1.0" velocity="1.0" />
</joint>
<link name="ring_distal">
<inertial>
<origin xyz="-0.00405260742568393 2.91984265882485E-05 0.0113571618103905" rpy="0 0 0" />
<mass value="0.00330988375961977" />
<inertia ixx="1.64002482967217E-07" ixy="-3.51093191735502E-12" ixz="-9.24429621268036E-09" iyy="1.74779331899762E-07" iyz="3.79763524146384E-12" izz="1.14604618112137E-07" />
</inertial>
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/ring_distal.STL" />
</geometry>
<material name="">
<color rgba="0.48 0.50 0.52 1" />
</material>
</visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/ring_distal.STL" />
</geometry>
</collision>
</link>
<joint name="ring_dip" type="revolute">
<origin xyz="0 0 0.040244" rpy="0 -0.00428430308889 0" />
<parent link="ring_middle" />
<child link="ring_distal" />
<axis xyz="0 1 0" />
<limit lower="0.0" upper="1.5742161012" effort="1.0" velocity="1.0" />
</joint>
<link name="pinky_metacarpals">
<inertial>
<origin xyz="-0.0106040258039376 -5.13953875944106E-05 -0.00136151819476814" rpy="0 0 0" />
<mass value="0.00661261244414956" />
<inertia ixx="4.53652866086213E-07" ixy="1.66679020188784E-08" ixz="-1.26712150853475E-08" iyy="5.30500427140437E-07" iyz="4.56960893204398E-10" izz="2.56538210089087E-07" />
</inertial>
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/pinky_metacarpals.STL" />
</geometry>
<material name="">
<color rgba="0.68 0.70 0.72 1" />
</material>
</visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/pinky_metacarpals.STL" />
</geometry>
</collision>
</link>
<joint name="pinky_mcp_roll" type="revolute">
<origin xyz="0.018722 -0.030927 0.067761" rpy="0.01471703057163711 0 0" />
<parent link="hand_base_link" />
<child link="pinky_metacarpals" />
<axis xyz="1 0 0" />
<limit lower="-0.0548" upper="0.3102413287225498" effort="1.0" velocity="1.0" />
</joint>
<link name="pinky_proximal">
<inertial>
<origin xyz="-0.00437096211497169 2.16385374772129E-05 0.0216063162659534" rpy="0 0 0" />
<mass value="0.00727256322451616" />
<inertia ixx="6.59424984467403E-07" ixy="1.15369789522493E-10" ixz="-2.43455018407703E-08" iyy="7.06690325599736E-07" iyz="-1.75709453609034E-10" izz="3.1801933843565E-07" />
</inertial>
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/pinky_proximal.STL" />
</geometry>
<material name="">
<color rgba="0.68 0.70 0.72 1" />
</material>
</visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/pinky_proximal.STL" />
</geometry>
</collision>
</link>
<joint name="pinky_mcp_pitch" type="revolute">
<origin xyz="-0.00475 0.00059587 0.016238" rpy="0 -0.0220425694976 0" />
<parent link="pinky_metacarpals" />
<child link="pinky_proximal" />
<axis xyz="0 1 0" />
<limit lower="0.0" upper="1.746158486401212" effort="1.0" velocity="1.0" />
</joint>
<link name="pinky_middle">
<inertial>
<origin xyz="-0.00412829488912096 4.33935004629793E-05 0.0217078554135159" rpy="0 0 0" />
<mass value="0.00678023141445045" />
<inertia ixx="6.77930689052883E-07" ixy="1.00224317995394E-10" ixz="-7.34914443754626E-09" iyy="7.24200290521759E-07" iyz="6.84568635307055E-11" izz="2.9585429874662E-07" />
</inertial>
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/pinky_middle.STL" />
</geometry>
<material name="">
<color rgba="0.68 0.70 0.72 1" />
</material>
</visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/pinky_middle.STL" />
</geometry>
</collision>
</link>
<joint name="pinky_pip" type="revolute">
<origin xyz="0 0 0.039681" rpy="0 0.0153062751135 0" />
<parent link="pinky_proximal" />
<child link="pinky_middle" />
<axis xyz="0 1 0" />
<limit lower="0.0" upper="1.57669319439" effort="1.0" velocity="1.0" />
</joint>
<link name="pinky_distal">
<inertial>
<origin xyz="-0.00405259886775996 2.91983586506936E-05 0.0113571520424041" rpy="0 0 0" />
<mass value="0.00330987874289192" />
<inertia ixx="1.64002282686245E-07" ixy="-3.40616709379705E-12" ixz="-9.24408880780151E-09" iyy="1.74779075536322E-07" iyz="3.76063308216828E-12" izz="1.14604555086707E-07" />
</inertial>
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/pinky_distal.STL" />
</geometry>
<material name="">
<color rgba="0.48 0.50 0.52 1" />
</material>
</visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="meshes/pinky_distal.STL" />
</geometry>
</collision>
</link>
<joint name="pinky_dip" type="revolute">
<origin xyz="0 0 0.040244" rpy="0 -0.0155350252509 0" />
<parent link="pinky_middle" />
<child link="pinky_distal" />
<axis xyz="0 1 0" />
<limit lower="0.0" upper="1.58606542135" effort="1.0" velocity="1.0" />
</joint>
</robot>
@@ -0,0 +1,20 @@
0: thumb_cmc_roll
1: thumb_cmc_yaw
2: index_mcp_roll
3: middle_mcp_roll
4: ring_mcp_roll
5: pinky_mcp_roll
6: thumb_mcp
7: index_mcp_pitch
8: middle_mcp_pitch
9: ring_mcp_pitch
10: pinky_mcp_pitch
11: index_pip
12: middle_pip
13: ring_pip
14: pinky_pip
15: thumb_ip
16: index_dip
17: middle_dip
18: ring_dip
19: pinky_dip
@@ -0,0 +1,33 @@
{
"commands": 37,
"max_mirror_position_error_m": 0.0,
"max_mirror_rotation_error": 0.0,
"max_runtime_pose_error": 1.833602714107485e-14,
"contacts": [
{
"finger": "index",
"right_gap_mm": -0.000126303898665965,
"left_gap_mm": -0.00012630389866754953,
"runtime_left_gap_mm": -0.00012630389910024724
},
{
"finger": "middle",
"right_gap_mm": 0.020000402670061167,
"left_gap_mm": 0.020000402670061167,
"runtime_left_gap_mm": 0.020000402670048555
},
{
"finger": "ring",
"right_gap_mm": 0.0,
"left_gap_mm": 0.0,
"runtime_left_gap_mm": 0.0
},
{
"finger": "pinky",
"right_gap_mm": 0.020000643267029144,
"left_gap_mm": 0.020000643267029144,
"runtime_left_gap_mm": 0.020000643267029144
}
],
"mirrored_inertia": true
}
@@ -0,0 +1,7 @@
{
"asset_version": "V10",
"source": "src/linkerhand-sim/linker_hand_mujoco_ros2/linker_hand_mujoco_ros2/urdf/O30/linker_hand_o30_right/linkerhand_o30_right_zero_v10_calibrated.urdf",
"source_sha256": "f233c5eff38ba46d1a2826c2624fc8a13e86ed0c74c6b914bf0fcc021b43e439",
"note": "Both URDF filenames and directory explicitly labeled V10; copied without changing asset contents.",
"copied_from": "exports/O30_V9_left_right"
}