双臂操作沙盒(MuJoCo WASM 浏览器版)首次入库

从 ~/mujoco-web-spike 抽出 manip.html 的依赖闭包:
- manip.html + src/{manip,autograsp,scene-bridge,math}.js
- scenes/so101_pair(桌面并排两台 SO-101,默认)与 scenes/p7_bimanual(P7 双臂 + SO-101 夹爪)
  —— 自包含 MJCF,网格已内联
- serve.py(COOP/COEP + no-store 的静态服务器)、start.sh、README
- tools/export_manip_scene.py 场景生成脚本(仅供参考,跑页面不需要)

快照对应 2026-08-31 的最后一次改动(自动抓取规划 autograsp.js 落地版)。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016tgfYxR5mWNRKQ67PKga4T
This commit is contained in:
2026-09-01 17:16:41 +08:00
commit aed6e20a90
14 changed files with 4079 additions and 0 deletions
+1
View File
@@ -0,0 +1 @@
{"name": "p7_bimanual", "workstation": "p7_i1_l6_bimanual", "gripper": "so101", "sim": {"timestep": 0.002, "substeps": 10}, "nq": 53, "nu": 16, "ngeom": 156, "kps": [2000.0, 2000.0, 2000.0, 2000.0, 2000.0, 2000.0, 2000.0, 2000.0, 2000.0, 2000.0, 2000.0, 2000.0, 2000.0, 2000.0, 998.22, 998.22], "arms": {"left": {"act": [0, 1, 2, 3, 4, 5, 6], "names": ["arm_left_L1_Joint_act", "arm_left_L2_Joint_act", "arm_left_L3_Joint_act", "arm_left_L4_Joint_act", "arm_left_L5_Joint_act", "arm_left_L6_Joint_act", "arm_left_L7_Joint_act"], "qadr": [0, 1, 2, 3, 4, 5, 6], "range": [[-2.91, 2.91], [-3.2, 0.07], [-2.69, 2.69], [-2.05, 2.05], [-2.69, 2.69], [-1.59, 1.59], [-1.59, 1.59]], "site": "arm_left_tool0", "site_id": 2, "ready": [0.1580918164168783, 0.07, -0.039073152159846636, 1.2304709832679805, -0.06891315610756783, 0.4398884953429942, 0.04790742363418622]}, "right": {"act": [7, 8, 9, 10, 11, 12, 13], "names": ["arm_right_R1_Joint_act", "arm_right_R2_Joint_act", "arm_right_R3_Joint_act", "arm_right_R4_Joint_act", "arm_right_R5_Joint_act", "arm_right_R6_Joint_act", "arm_right_R7_Joint_act"], "qadr": [9, 10, 11, 12, 13, 14, 15], "range": [[-2.91, 2.91], [-0.07, 3.2], [-2.69, 2.69], [-2.05, 2.05], [-2.69, 2.69], [-1.59, 1.59], [-1.59, 1.59]], "site": "arm_right_tool0", "site_id": 6, "ready": [-0.16105633538148345, -0.07, 0.03882218199725755, -1.2175915928407415, 0.06952877520509076, -0.46856305129613646, -0.045417679190592676]}}, "hands": {"left": {"kind": "so101", "act": [14], "names": ["grip_left_act"], "range": [[0.0, 0.0]], "geoms": [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 37, 38, 39, 40, 41, 42, 43, 44], "jaw_a": [24, 25, 26], "jaw_b": [40, 41, 42], "palm_body": 13, "site": "grip_left_gripperframe", "site_id": 3}, "right": {"kind": "so101", "act": [15], "names": ["grip_right_act"], "range": [[0.0, 0.0]], "geoms": [63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 76, 77, 79, 80, 81, 82, 83, 84, 85, 86], "jaw_a": [66, 67, 68], "jaw_b": [82, 83, 84], "palm_body": 26, "site": "grip_right_gripperframe", "site_id": 7}}, "scene": {"table": {"x": 0.42, "top": 0.75, "half": [0.28, 0.42, 0.02]}, "objects": [{"name": "can", "label": "易拉罐", "body": "obj_can", "geom": "obj_can", "kind": "mesh", "mass": 0.15, "half_h": 0.0285347697145599, "pieces": 20, "home": [0.39999999999999997, -0.26, 0.7805347697145599], "qadr": 18, "body_id": 30, "geom_id": 93}, {"name": "bottle", "label": "瓶子", "body": "obj_bottle", "geom": "obj_bottle", "kind": "mesh", "mass": 0.12, "half_h": 0.050020083385326444, "pieces": 3, "home": [0.39999999999999997, -0.13, 0.8020200833853265], "qadr": 25, "body_id": 31, "geom_id": 114}, {"name": "jar", "label": "罐子", "body": "obj_jar", "geom": "obj_jar", "kind": "mesh", "mass": 0.16, "half_h": 0.02482021259712402, "pieces": 3, "home": [0.39999999999999997, 0.0, 0.776820212597124], "qadr": 32, "body_id": 32, "geom_id": 118}, {"name": "piano", "label": "玩具琴", "body": "obj_piano", "geom": "obj_piano", "kind": "mesh", "mass": 0.12, "half_h": 0.014234144039705122, "pieces": 30, "home": [0.39999999999999997, 0.13, 0.7662341440397051], "qadr": 39, "body_id": 33, "geom_id": 122}, {"name": "toy", "label": "玩偶", "body": "obj_toy", "geom": "obj_toy", "kind": "mesh", "mass": 0.1, "half_h": 0.02, "pieces": 2, "home": [0.39999999999999997, 0.26, 0.772], "qadr": 46, "body_id": 34, "geom_id": 153}]}, "xmlMB": 5.31}
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
{"name": "so101_pair", "workstation": "p7_i1_l6_bimanual", "gripper": "so101", "sim": {"timestep": 0.002, "substeps": 10}, "nq": 47, "nu": 12, "ngeom": 166, "kps": [998.22, 998.22, 998.22, 998.22, 998.22, 998.22, 998.22, 998.22, 998.22, 998.22, 998.22, 998.22], "arms": {"left": {"act": [0, 1, 2, 3, 4], "names": ["arm_left_shoulder_pan", "arm_left_shoulder_lift", "arm_left_elbow_flex", "arm_left_wrist_flex", "arm_left_wrist_roll"], "qadr": [0, 1, 2, 3, 4], "range": [[-1.91986, 1.91986], [-1.74533, 1.74533], [-1.69, 1.69], [-1.65806, 1.65806], [-2.74385, 2.84121]], "site": "arm_left_gripperframe", "site_id": 1, "ready": [0.2664159465395377, -0.053277895226272, 0.09506432223630396, 1.5261345315220791, -0.009229323360655772]}, "right": {"act": [6, 7, 8, 9, 10], "names": ["arm_right_shoulder_pan", "arm_right_shoulder_lift", "arm_right_elbow_flex", "arm_right_wrist_flex", "arm_right_wrist_roll"], "qadr": [6, 7, 8, 9, 10], "range": [[-1.91986, 1.91986], [-1.74533, 1.74533], [-1.69, 1.69], [-1.65806, 1.65806], [-2.74385, 2.84121]], "site": "arm_right_gripperframe", "site_id": 3, "ready": [-0.2697369618426545, -0.05331271527672901, 0.09510641744154119, 1.5261271765003104, 0.01303107961674866]}}, "hands": {"left": {"kind": "so101", "act": [5], "names": ["arm_left_gripper"], "range": [[-0.17453, 1.74533]], "geoms": [12, 14, 17, 19, 21, 23, 26, 28, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 45, 47, 48, 49, 50, 51, 52, 53, 54], "jaw_a": [34, 35, 36], "jaw_b": [50, 51, 52], "palm_body": 7, "site_id": 1}, "right": {"kind": "so101", "act": [11], "names": ["arm_right_gripper"], "range": [[-0.17453, 1.74533]], "geoms": [60, 62, 65, 67, 69, 71, 74, 76, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 93, 95, 96, 97, 98, 99, 100, 101, 102], "jaw_a": [82, 83, 84], "jaw_b": [98, 99, 100], "palm_body": 15, "site_id": 3}}, "scene": {"table": {"x": 0.15, "top": 0.4, "half": [0.3, 0.4, 0.02]}, "objects": [{"name": "can", "label": "易拉罐", "body": "obj_can", "geom": "obj_can", "kind": "mesh", "mass": 0.15, "half_h": 0.0285347697145599, "pieces": 20, "home": [0.27, -0.2, 0.43053476971455995], "qadr": 12, "body_id": 18, "geom_id": 103}, {"name": "bottle", "label": "瓶子", "body": "obj_bottle", "geom": "obj_bottle", "kind": "mesh", "mass": 0.12, "half_h": 0.050020083385326444, "pieces": 3, "home": [0.27, -0.1, 0.45202008338532645], "qadr": 19, "body_id": 19, "geom_id": 124}, {"name": "jar", "label": "罐子", "body": "obj_jar", "geom": "obj_jar", "kind": "mesh", "mass": 0.16, "half_h": 0.02482021259712402, "pieces": 3, "home": [0.27, 0.0, 0.42682021259712405], "qadr": 26, "body_id": 20, "geom_id": 128}, {"name": "piano", "label": "玩具琴", "body": "obj_piano", "geom": "obj_piano", "kind": "mesh", "mass": 0.12, "half_h": 0.014234144039705122, "pieces": 30, "home": [0.27, 0.1, 0.41623414403970516], "qadr": 33, "body_id": 21, "geom_id": 132}, {"name": "toy", "label": "玩偶", "body": "obj_toy", "geom": "obj_toy", "kind": "mesh", "mass": 0.1, "half_h": 0.02, "pieces": 2, "home": [0.27, 0.2, 0.42200000000000004], "qadr": 40, "body_id": 22, "geom_id": 163}]}, "xmlMB": 1.78}
File diff suppressed because one or more lines are too long