Views
No views yet
1输入 state: [1, 16],只给当前一个机器人状态 token
2输出 action: [8, 16],8 步 absolute joint target,不是 delta joint
3维度顺序: left7 + left_gripper + right7 + right_gripper1checkpoint_adapters/ 小 IDM adapter 和 Stack3 delta adapter
2configs/ 每个模型对应的 DiT4DiT config
3language_embeddings/ 预计算 prompt embedding,节省 24G 显卡显存
4scripts/ 最小推理/服务代码
5reports/ 离线评测和 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/10、stack3_ordinary_shot05/10/30、stack3_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,只用于对照 |
1conda env create -f environment.yml
2conda activate real-stackcube-dit4dit
3pip install -e /application_ws/src/dit4dit_src/DiT4DiTPYTHONPATH 能找到你们本地的 DiT4DiT 源码和 Cosmos diffusers patch。例如:1export HANDOFF_ROOT=/application_ws/src/real_stackcube_l3_partner_handoff_deploy1state_20260524
2export PYTHONPATH=/application_ws/src/dit4dit_src:$PYTHONPATH
3export STATE_PORT=5575
4export ACTION_PORT=55761cd $HANDOFF_ROOT
2python scripts/run_policy_server.py \
3 --arm_mode right \
4 --config_yaml configs/right_nonshared_config.yaml \
5 --adapter_pt checkpoint_adapters/right_nonshared_action_model_s12000_adapter.pt \
6 --prompt_cache language_embeddings/right_nonshared_prompt_embeds.pt \
7 --state_port "tcp://localhost:${STATE_PORT}" \
8 --action_port "tcp://*:${ACTION_PORT}"1cd $HANDOFF_ROOT
2python3 scripts/run_robot_server.py \
3 --arm_mode right \
4 --num_episodes 3 \
5 --safe_mode \
6 --print_first_chunk \
7 --use_lti_filter \
8 --state_port "tcp://*:${STATE_PORT}" \
9 --action_port "tcp://localhost:${ACTION_PORT}"8:16 action chunk 不应有 NaN/Inf,不应远离当前关节状态;safe mode 通过后再低速执行。arm_mode=left、config、adapter、prompt cache。1python scripts/run_policy_server.py \
2 --arm_mode left \
3 --config_yaml configs/left_nonshared_config.yaml \
4 --adapter_pt checkpoint_adapters/left_nonshared_action_model_s12000_adapter.pt \
5 --prompt_cache language_embeddings/left_nonshared_prompt_embeds.pt \
6 --state_port "tcp://localhost:${STATE_PORT}" \
7 --action_port "tcp://*:${ACTION_PORT}"--arm_mode right 改成 --arm_mode left。1python scripts/run_policy_server.py \
2 --arm_mode right \
3 --config_yaml configs/primitive_shared_token_config.yaml \
4 --adapter_pt checkpoint_adapters/primitive_shared_token_action_model_s12000_adapter.pt \
5 --prompt_cache language_embeddings/primitive_right_prompt_embeds.pt \
6 --state_port "tcp://localhost:${STATE_PORT}" \
7 --action_port "tcp://*:${ACTION_PORT}"--arm_mode left 和 --prompt_cache language_embeddings/primitive_left_prompt_embeds.pt。1python scripts/run_policy_server.py \
2 --arm_mode dual \
3 --config_yaml configs/stack3_token_shot30_config.yaml \
4 --adapter_pt checkpoint_adapters/primitive_shared_token_action_model_s12000_adapter.pt \
5 --adapter_pt checkpoint_adapters/stack3_token_shot30_from_primitive_s8000_delta.pt \
6 --prompt_cache language_embeddings/stack3_prompt_embeds.pt \
7 --state_port "tcp://localhost:${STATE_PORT}" \
8 --action_port "tcp://*:${ACTION_PORT}"1python3 scripts/run_robot_server.py \
2 --arm_mode dual \
3 --num_episodes 3 \
4 --safe_mode \
5 --print_first_chunk \
6 --use_lti_filter \
7 --state_port "tcp://*:${STATE_PORT}" \
8 --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 越多应越稳定。8:16,left 只执行 0:8。--safe_mode --print_first_chunk,只看 action,不动机器人。任一 active joint target 距当前 state 超过你们安全阈值时,直接 reject,不发给机器人。