YAML Metadata Warning:empty or missing yaml metadata in repo card

Check out the documentation for more information.

Real StackCube L3 deploy1state 真机交接包

这份包只包含部署和对照实验需要的小模型 adapter、config、language embedding 和最小推理代码。Cosmos / DiT4DiT 预训练大模型不在包内,请继续使用你们本地已有权重或 Hugging Face cache。

核心接口保持如下:

输入 state: [1, 16],只给当前一个机器人状态 token
输出 action: [8, 16],8 步 absolute joint target,不是 delta joint
维度顺序: left7 + left_gripper + right7 + right_gripper

包内文件

checkpoint_adapters/    小 IDM adapter 和 Stack3 delta adapter
configs/                每个模型对应的 DiT4DiT config
language_embeddings/    预计算 prompt embedding,节省 24G 显卡显存
scripts/                最小推理/服务代码
reports/                离线评测和 smoke test 结果

推荐测试顺序

第一轮测 right_nonshared。目的:验证最简单的右手单臂 one-state deploy policy 是否能在真机闭环里输出合理动作。这个模型不依赖 shared IDM,也不依赖 token 区分左右手。

第二轮测 left_nonshared。目的:确认左手单臂数据、动作维度 0:8、inactive right-arm masking 都没问题。

第三轮测 primitive_shared_token 的 right/left。目的:和 non-shared 对比,验证 shared IDM + left/right token 是否足够稳定。如果它接近 non-shared,说明 shared 版本可用。

第四轮测 stack3_token_shot30。目的:验证 primitive token 初始化 + 30-shot 双臂 fine-tune 是否能做 L3 双臂组合任务。这是当前最重要的双臂主模型。

第五轮只做对照,不建议优先上真机:stack3_token_shot05/10stack3_ordinary_shot05/10/30stack3_scratch_shot30。这些用于拆分 shot scaling、token 效果、primitive 初始化效果。

模型文件含义

模型 加载方式 说明
right_nonshared_action_model_s12000_adapter.pt 单独加载 右手单臂 non-shared baseline,第一优先级
left_nonshared_action_model_s12000_adapter.pt 单独加载 左手单臂 non-shared baseline
primitive_shared_token_action_model_s12000_adapter.pt 单独加载 shared primitive token,right/left 由 prompt/token 区分
primitive_shared_ordinary_action_model_s12000_adapter.pt 单独加载 shared primitive ordinary,不加 token 的对照
stack3_token_shot30_from_primitive_s8000_delta.pt 先加载 primitive token,再加载该 delta L3 双臂主模型
stack3_token_shot05_from_primitive_s8000_delta.pt 先 primitive token,再 delta 5-shot token 对照
stack3_token_shot10_from_primitive_s8000_delta.pt 先 primitive token,再 delta 10-shot token 对照
stack3_ordinary_shot05/10/30_from_primitive_s8000_delta.pt 先 primitive ordinary,再 delta 不加 token 的 primitive 初始化对照
stack3_scratch_shot30_action_model_s8000_adapter.pt 单独加载 30-shot scratch baseline,只用于对照

环境准备

如果你们已有 Docker,只需要在已有镜像里加 Conda 环境和 DiT4DiT 依赖即可。

conda env create -f environment.yml
conda activate real-stackcube-dit4dit
pip install -e /application_ws/src/dit4dit_src/DiT4DiT

请确保 PYTHONPATH 能找到你们本地的 DiT4DiT 源码和 Cosmos diffusers patch。例如:

export HANDOFF_ROOT=/application_ws/src/real_stackcube_l3_partner_handoff_deploy1state_20260524
export PYTHONPATH=/application_ws/src/dit4dit_src:$PYTHONPATH
export STATE_PORT=5575
export ACTION_PORT=5576

第一轮:右手 non-shared safe mode

Policy server:

cd $HANDOFF_ROOT
python scripts/run_policy_server.py \
  --arm_mode right \
  --config_yaml configs/right_nonshared_config.yaml \
  --adapter_pt checkpoint_adapters/right_nonshared_action_model_s12000_adapter.pt \
  --prompt_cache language_embeddings/right_nonshared_prompt_embeds.pt \
  --state_port "tcp://localhost:${STATE_PORT}" \
  --action_port "tcp://*:${ACTION_PORT}"

Robot server:

cd $HANDOFF_ROOT
python3 scripts/run_robot_server.py \
  --arm_mode right \
  --num_episodes 3 \
  --safe_mode \
  --print_first_chunk \
  --use_lti_filter \
  --state_port "tcp://*:${STATE_PORT}" \
  --action_port "tcp://localhost:${ACTION_PORT}"

通过标准:打印出的 right arm 8:16 action chunk 不应有 NaN/Inf,不应远离当前关节状态;safe mode 通过后再低速执行。

第二轮:左手 non-shared

只改三处:arm_mode=left、config、adapter、prompt cache。

python scripts/run_policy_server.py \
  --arm_mode left \
  --config_yaml configs/left_nonshared_config.yaml \
  --adapter_pt checkpoint_adapters/left_nonshared_action_model_s12000_adapter.pt \
  --prompt_cache language_embeddings/left_nonshared_prompt_embeds.pt \
  --state_port "tcp://localhost:${STATE_PORT}" \
  --action_port "tcp://*:${ACTION_PORT}"

Robot server 同上,把 --arm_mode right 改成 --arm_mode left

第三轮:shared primitive token right/left

右手:

python scripts/run_policy_server.py \
  --arm_mode right \
  --config_yaml configs/primitive_shared_token_config.yaml \
  --adapter_pt checkpoint_adapters/primitive_shared_token_action_model_s12000_adapter.pt \
  --prompt_cache language_embeddings/primitive_right_prompt_embeds.pt \
  --state_port "tcp://localhost:${STATE_PORT}" \
  --action_port "tcp://*:${ACTION_PORT}"

左手只改 --arm_mode left--prompt_cache language_embeddings/primitive_left_prompt_embeds.pt

第四轮:Stack3 token 30-shot 双臂

注意这里要加载两个 adapter:先 primitive base,再 Stack3 delta。

python scripts/run_policy_server.py \
  --arm_mode dual \
  --config_yaml configs/stack3_token_shot30_config.yaml \
  --adapter_pt checkpoint_adapters/primitive_shared_token_action_model_s12000_adapter.pt \
  --adapter_pt checkpoint_adapters/stack3_token_shot30_from_primitive_s8000_delta.pt \
  --prompt_cache language_embeddings/stack3_prompt_embeds.pt \
  --state_port "tcp://localhost:${STATE_PORT}" \
  --action_port "tcp://*:${ACTION_PORT}"

Robot server:

python3 scripts/run_robot_server.py \
  --arm_mode dual \
  --num_episodes 3 \
  --safe_mode \
  --print_first_chunk \
  --use_lti_filter \
  --state_port "tcp://*:${STATE_PORT}" \
  --action_port "tcp://localhost:${ACTION_PORT}"

对照实验怎么比较

比较 right_nonshared vs primitive_shared_token right:如果 shared token 接近 non-shared,说明 token 能区分 left/right,共享 IDM 没明显损失。

比较 stack3_token_shot30 vs stack3_ordinary_shot30:如果 token 更稳,说明 token 对双臂组合有帮助。

比较 stack3_token_shot30 vs stack3_scratch_shot30:如果 token-from-primitive 更稳,说明 primitive 初始化确实有价值,不只是 30-shot 记忆。

比较 stack3_token_shot05/10/30:观察 few-shot scaling,shot 越多应越稳定。

安全注意

单臂执行时,inactive arm 必须在 robot server 或安全层强制 mask 成当前 state:right 只执行 8:16,left 只执行 0:8

上线前先 --safe_mode --print_first_chunk,只看 action,不动机器人。任一 active joint target 距当前 state 超过你们安全阈值时,直接 reject,不发给机器人。

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support