Files
Mujoco_WASM/docs/mobile-training-curriculum.md
chenlin f3a8a38acd
web-platform-ci / Standalone decision service (no cloud credentials) (push) Has been cancelled
web-platform-ci / TypeScript, lint, unit, build (push) Has been cancelled
web-platform-ci / Playwright E2E (push) Has been cancelled
lekiwi-compatibility / cpu-compatibility (push) Has been cancelled
web-platform-ci / Standalone decision service (no cloud credentials) (pull_request) Has been cancelled
web-platform-ci / TypeScript, lint, unit, build (pull_request) Has been cancelled
web-platform-ci / Playwright E2E (pull_request) Has been cancelled
lekiwi-compatibility / cpu-compatibility (pull_request) Has been cancelled
feat: release v1.0.1 CADWorld 网站与 LeKiwi 智能抓放
集成同源 BYOK 会话隔离、精简模型设置、官方订阅入口和 HTTPS 发布运维;保留本地训练/调参与控制能力。同步 npm 版本及 CHANGELOG,记录公网真实 API 验收仍待用户凭据。
2026-09-24 09:57:41 +08:00

55 lines
6.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 移动操作 v2:先接近,再抓放
## 为什么不直接继续原来的策略
- v1 把动作映射到关节全行程的绝对位置;50 Hz 下可产生数弧度的位置目标跳变。v2 使用带速度/加速度约束的积分位置目标。
- Bundle 转换后关节层遗留的 `actuatorfrcrange="-1 1"` 覆盖了配方中舵机的 ±8 N·m 限力,导致保持姿态也会下垂、碰撞。现在关节和执行器限力一致。**这是仿真配方修正,不是实机扭矩标定,也不修改源 URDF。**
- 单纯跑通 PPO→ONNX 不等于任务学会。现在独立评估成功率、关节速度峰值、安全终止次数都写入 `deployment.json`,完整逐回合结果保存为 `evaluation.json`。
设计参考本机 IsaacLab 的 `source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/reach/`:
- `config/franka/joint_pos_env_cfg.py`:缩放的位置动作,而非全关节行程跳变。
- `reach_env_cfg.py`:分开的动作/观测/奖励/终止定义,动作变化率、关节速度惩罚和课程设计。
- `config/franka/agents/rsl_rl_ppo_cfg.py`:有界 PPO 更新与 MLP 策略。
这里借鉴结构和训练原则,没有复制 Franka 的关节范围、质量、奖励尺度,也**没有新建或启动 IsaacLab/Isaac Sim 环境**。继续使用同一份 MuJoCo 3.11 场景,是为了保持现有浏览器推断、API 与 Go2 训练链路不变。
## 控制与版本
唯一当前契约:`contracts/mobile-manipulator-v2.json`,固定 `float32 [1,92] → [1,12]`,50 Hz。
- 前 68 维保留原任务状态;68–79 为上次实际施加的归一化动作;80–91 为控制目标状态(底盘/未用槽为 0,臂位置目标及夹爪开度归一化)。积分器和滤波状态不是隐藏变量。
- 底盘三个分量目标上限:0.12 m/s、0.12 m/s、0.5 rad/s;加速度上限:0.3、0.3、0.8(对应 SI 单位)。轮速仍受描述符限制。
- 臂位置目标速率不超过 `min(velocityLimit, 0.5 rad/s)`;增量命令经过 1.5 rad/s² 加速度限制和 0.2 rad 跟踪误差防积分饱和。零动作保持既有目标,不追随重力下垂位置;暂停/撤销策略也保留安全位置目标,不清零位置舵机,不在每次暂停后继续向下垂姿态累积漂移。
- 夹爪动作变为开合速度:+1 张开、-1 闭合、0 保持;开度每秒最多变化 0.5。
- 目标限速不是物理速度的硬上界。每个物理子步检查实际臂/夹爪速度,超过 2 rad/s 即结束回合;底盘倾倒/越界也失败。**不通过裁剪 qvel 或跳过碰撞伪造安全。** 浏览器安全终止后暂停并显示原因。
- 部署校验任务版本、动作语义 `rate-limited-position-target-v1`、阶段、张量以及权重/机器人/场景指纹。旧 68 维全行程位置策略明确拒绝,必须重新训练;Go2 契约不变。
## 主控制台操作
1. 导入相应机器人,在「控制台 → 强化学习任务」连接本地训练服务。
2. 默认阶段 **1 · 底盘接近**:机械臂/夹爪保持;学习到物体前方世界坐标偏移 `(0.3, 0)` 的接近位,并朝向 +X。不是驶向放置目标,不是通用避障导航。
3. 默认可先做 4096 步导航示教初始化(闭环底盘控制器采样、监督训练 MLP),再用 PPO 微调。初始化还采样 ±0.6 rad 的初始朝向;设为 0 可做纯 PPO 对照。**部署只导出神经网络,不附带示教控制器。** 使用低初始探索噪声、较小学习率和 KL 约束,避免马上破坏接近行为。
4. 成功条件:接近位误差 <6 cm、偏航误差 <0.2 rad、线速度 <0.035 m/s、角速度 <0.1 rad/s,连续稳定 10 个控制步。1000 步超时。
5. 完成后查看评估,不只看 loss。点击「接续此作业(保留权重)」可同阶段续训;只接受服务拥有的 checkpoint,不接受浏览器提供 Python/PPO 文件路径。接续绑定完整资产快照;升级阶段还须保留已评估的坐标/随机范围,改变分布应先同阶段续训。
6. 上一阶段至少 **10 回合、成功率 ≥80%、无安全终止**,才允许切到 **2 · 末端接近**。先导航,接近位附近停止底盘并启用臂控制;末端 <9 cm 且臂速低、稳定驻留才成功。
7. 同样达标后才允许 **3 · 抓取放置**。保持接近门控,抬升后允许搬运;沿用真实接触、抬升、释放和稳定放置判据,不焊接/吸附物体。升级阶段时放开新启用机械臂的探索噪声。不能跨过未通过的阶段。
未达标作业仍可导出和导入,便于可视化调试,但界面明确警告,且不能用于跳级。服务重启会丢失当前内存作业索引;目前接续入口依赖同一服务会话,磁盘 checkpoint/评估文件不会因此删除。
## 随机化、奖励与评估边界
训练默认在名义物体/目标 XY 周围 ±0.1 m 采样;可设置 0–0.3 m。训练、示教、评估使用不同种子序列。浏览器复现部署中的名义初态,不复现隐藏随机数状态。
导航有距离进展和位置/朝向误差奖励。各阶段加入 `-0.005 * ||a_t-a_(t-1)||²` 和 `-dt * 0.01 * ||qdot_arm||²`;成功奖励 20,安全失败惩罚 -5。阶段 1 不包含抓取奖励,阶段 2 不包含抬升/搬运奖励。具体常量在共享 JSON,两端同公式并做多步 golden 对照。
本次实际实验(CPU、4 环境、128 rollout、位置扰动 0.1 m、示教 4096 步):
- Bundle:PPO 30 次更新 / 15360 步,10 回合评估 10/10,关节峰值约 1.084 rad/s,无安全终止。
- LeKiwi v1:同样初训后 6/10;继续 30 次更新后 7/10,峰值约 0.299 rad/s,无安全终止。**尚未达到升级门槛,未继续训练抓放。**
- 原 Bundle 全行程控制环境即使保持零位,短测臂速峰值约 5.52 rad/s;修正限力后同样保持姿态约 1.09 rad/s。这是仿真模型上的对照,不是硬件限速证明。
额外用导出的 ONNX(不是 PyTorch actor)在另一组从未用于上述 rollout/初始化的种子 `300000…300019` 上复测:Bundle 20/20,LeKiwi v1 17/20;两者安全终止均为0,峰值分别约1.085和0.299 rad/s,结果保存于各产物目录 `evaluation-independent-20.json`。v1 的服务部署元数据仍保留原 7/10 评估,没有用较好的一组结果覆盖门槛。Bundle 另做了 checkpoint→末端接近的两次更新连通性检查,0/2成功,尚不能升级为抓取放置。
这些是小样本、有限训练种子、有限初态分布结果,不代表大范围导航、任意朝向、未知资产、抓取成功或实机安全。后续需要更多独立种子和长回合评估;不得把成功导出 ONNX 写成“已经学会抓放”。实验产物在 `build/mobile-curriculum/`,服务作业成果仍按原路径位于 `logs/rsl_rl/web_jobs/{id}/`。