Skip to content

fix: align native control and standalone packaging with browser runtime - #5

Merged
kleinlau17 merged 6 commits into
mainfrom
fix/supermimic-velocity-actuator
Oct 24, 2026
Merged

kleinlau17 merged 6 commits into
mainfrom
fix/supermimic-velocity-actuator

Conversation

@kleinlau17

@kleinlau17 kleinlau17 commented Oct 24, 2026 •

Copy link
Copy Markdown
Contributor

SuperMimic 的同一份控制器在原生运行与浏览器发布时,需要绕过角速度坐标系、actuator 映射、资源身份和资产打包差异。本 PR 修复 SDK 的通用实现,使项目使用标准资源与控制 API,并直接从含 .venv、日志和旧产物的项目根目录构建站点。

改动

  • 对齐当前 BotLab 的 rootAngularVelocityFrame 契约:公共 Robot.base_angular_velocity() 生成 body 标记,原生读取 MuJoCo 的机体系角速度;旧无标记计划保持兼容,非法标记报错。
  • 单 compiled controller 的 PD 输出经过机器人 scope 的 actuator 映射。
  • Sensor.source 按已声明机器人 ID 验证,不再把命名机器人 ID 当成文件路径。
  • 收集 MJCF include、compiler 目录和文件资产依赖;原生临时加载保留相邻目录布局,打包检查缺失文件、循环和越界路径。
  • 发布摘要对齐现有浏览器 JSON.stringify 的数字与键顺序规则;新增 rfc8785 依赖,保持 release v3 / ABI 1。
  • build --site 仅复制 release 声明的源码和资产依赖,写入前校验文件;排除未声明的虚拟环境、日志、下载与旧站点。

跨仓依赖与兼容

配套 BotLab #47 → dev,修复恢复后的 NPZ 加载,并覆盖角速度与 actuator 契约。
角速度标记来自 BotLab dev f808bfb 已有实现:运行 scripts/sync_sdk.py 后只保留本次相关的 _robot.py 镜像更新,文件与拥有者逐字节一致;未带入无关的动态 PD/preview API 更新。原生 runner 由本仓独立实现,没有从 BotLab 旧 runtime 复制。
SDK wheel 和浏览器 runtime 是两个分发物。完整端到端验收使用两仓候选版本,后续分发需使用支持此标记及 NPZ 映射的浏览器 runtime。按 SDK 现有结构提交到 main,不新增 dev;不合并、不发布。

当前分支本地验证

macOS / Python 3.12:

  • python -c 'import onnxruntime as ort; ort.disable_telemetry_events(); import pytest; raise SystemExit(pytest.main(["tests"]))':764 passed、1 skipped、2 deselected,56 subtests passed。

  • ruff check .、git diff --check:通过。

  • python -m botlab._runtime.golden_check tests/fixtures/processors.json:53 cases 在容差内。

  • 隔离 SuperMimic case 8:python tools/verify.py --parity-steps 30 完整运行 523 步,qpos/qvel/actions/关节力/ctrl 与此前基线最大差值均为 0;前 30 步独立动作 parity 最大误差 8.344650268554688e-7,跟踪检查通过。

  • 当前 SDK 配合最新候选 BotLab 构建,通过公开 CLI ui export / ui fetch 导入隔离缓存,直接从项目根目录 build --site,无项目 staging 或包内容改写。

  • 最新候选源码重新构建站点后,case 8 浏览器运行、停止及刷新恢复通过;console 0 errors、HTTP 无 404。project 子树仍为 84 个声明文件,逐字节一致;本次自启浏览器与 HTTP 服务已关闭。

前序提交验收记录

以下在角速度兼容标记补充前的候选提交完成,区别于本次最终分支测试:

  • case 6/7/8,identity 与非自逆 actuator 排列共 3,228 步:轨迹、动作、关节力及映射后的 ctrl 与基线差值为 0。
  • uv build --wheel 后非 editable 安装到全新项目 .venv;安装后的 CLI validate、直接 build --site、case 8 的 523 步公开 headless API 验证通过;独立动作 parity 最大误差 3.814697265625e-6。
  • 通用单关节 fixture:CLI validate、30 步 run --headless、build --site 通过。
  • 站点 project 子树仅含 84 个声明源码/资产文件;真实浏览器运行、刷新和暂停正常,console 无错误,HTTP 无 404。

验证边界

未覆盖全部 Python 版本/操作系统。浏览器实际验收限 case 8,未做所有动作的浏览器轨迹数值比较。未运行 scripts/verify_wheel.py 完整 release gate;最后的兼容标记补充使用源码环境重跑,未重建安装候选 wheel。原项目、其他任务环境及默认 runtime 缓存未修改。

请项总审核实际改动与本地 CI 记录后,再通过 PR 决定是否合并。

CI 环境补充与最新结果(2026-10-24)

  • 合入 main 的 ci: run checks on EnkeeBot self-hosted runners #6 runner 配置已通过 GitHub 更新分支纳入本 PR。
  • 提交 cce5329 在测试前增加 actions/setup-node@v7,固定 Node.js 24.21.0,与当前 BotLab main 的 .nvmrc 一致,避免 runner 自带旧版 Node 缺少 Object.fromEntries。
  • 本地 workflow 校验:go run github.com/rhysd/actionlint/cmd/actionlint@v1.7.7 -shellcheck= .github/workflows/ci.yml 与 git diff --check 通过。
  • 本地定向回归:PYTHONPATH=src uv run --no-project --with pytest --with numpy --with PyYAML --with rfc8785 python -m pytest tests/test_project.py::test_digest_matches_actual_node_for_number_and_key_boundaries:1 passed(本地 Node.js 26.5.1)。
  • 最新 GitHub Actions CI:Python 3.10、3.11、3.12、3.13 四个任务全部通过,覆盖 lint、pytest、golden parity 与 source-wheel 验证;已核对日志中实际 Node.js 为 24.21.0。Python 3.12:759 passed、6 skipped、2 deselected、56 subtests passed。
  • source-wheel 检查不替代含 UI 的正式候选 wheel release gate;本 PR 尚未合并。

@kleinlau17
kleinlau17 merged commit ea7b551 into main Oct 24, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant