双臂操作沙盒(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:
@@ -0,0 +1,31 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
跟 `python3 -m http.server` 一样零依赖,只多发两个头:
|
||||
Cross-Origin-Opener-Policy: same-origin + Cross-Origin-Embedder-Policy: require-corp。
|
||||
|
||||
@mujoco/mujoco 这个 WASM 包是多线程(pthread)构建,启动时要用 SharedArrayBuffer,
|
||||
而浏览器只在"跨源隔离"(cross-origin isolated)页面里才允许用 SharedArrayBuffer。
|
||||
不发这两个头的话,WASM 会卡在 wasm-instantiate 那一步一直转,既不报错也不失败,
|
||||
表现就是"初始化 MuJoCo…"卡死不动——console 里唯一线索是反复打印
|
||||
"still waiting on run dependencies: dependency: wasm-instantiate"。
|
||||
jsDelivr 给这个包的资源都带 Cross-Origin-Resource-Policy: cross-origin,
|
||||
所以跨源隔离页面照样能从 CDN 拉东西,不会被 COEP 卡住。
|
||||
"""
|
||||
import http.server
|
||||
import sys
|
||||
|
||||
|
||||
class Handler(http.server.SimpleHTTPRequestHandler):
|
||||
def end_headers(self):
|
||||
self.send_header('Cross-Origin-Opener-Policy', 'same-origin')
|
||||
self.send_header('Cross-Origin-Embedder-Policy', 'require-corp')
|
||||
# 开发中的资源一律不缓存。ES 模块缓存得特别死:改完 src/*.js 普通刷新
|
||||
# 照样跑旧代码,而且**不报错**,只在调用新方法时抛
|
||||
# "xxx is not a function" —— 极难往缓存上想,已经浪费过一轮排查。
|
||||
self.send_header('Cache-Control', 'no-store, must-revalidate')
|
||||
super().end_headers()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
port = int(sys.argv[1]) if len(sys.argv) > 1 else 8000
|
||||
http.server.test(HandlerClass=Handler, port=port)
|
||||
Reference in New Issue
Block a user