Skip to content

Ordinary DP on YAM: bottle task, absolute EEF

The paired experiment is manimux/configs/experiments/put_bottles/dp/yam_dp_manimux_eef_step100000.yaml. It uses the ordinary XPolicyLab DP model, checkpoint EMA weights, 100 DDPM sampling steps, three RGB cameras, three measured observations at 30 Hz, and six action waypoints per request. The training horizon is eight: the model selects rows 2 through 7 because the first three observation frames end at row 2. Actions are absolute grasp_site poses in each arm's own base frame. Model coordinates are XYZ metres and fixed-axis XYZ Euler radians; wire poses are XYZ+WXYZ. Gripper is normalized, zero closed and one open.

Installation and checkpoint

From the repository root:

bash XPolicyLab/policy/DP/install_inference.sh

Expected local checkpoint: checkpoints/finetuned/ziyang/dp-yam-eef-put-bottles-step100000/100000.ckpt. SHA-256: 579abd982af3289bd6835112bebe197a0e9c81f1403b6d9d8573326a48c30534. The server verifies this digest before loading. Normalization and architecture come from the checkpoint. The model environment contains torch; the robot runtime uses envs/yam/.venv and does not import model code.

Start

Run from the repository root, one terminal per process. Reuse existing camera and RoboGUI processes when their configuration matches.

envs/yam/.venv/bin/python -m manimux.servers.camera.server \
  --experiment manimux/configs/experiments/put_bottles/dp/yam_dp_manimux_eef_step100000.yaml
envs/yam/.venv/bin/python -m manimux.viewer.dashboard \
  --robot yam --host 127.0.0.1 --port 8086 \
  --config manimux/configs/viewer/yam-dp-live.yaml
XPolicyLab/policy/DP/.venv/bin/python -m manimux.servers.dp \
  --experiment manimux/configs/experiments/put_bottles/dp/yam_dp_manimux_eef_step100000.yaml
envs/yam/.venv/bin/python -m manimux serve \
  --config manimux/configs/experiments/put_bottles/dp/yam_dp_manimux_eef_step100000.yaml

The policy endpoint is ws://127.0.0.1:8520; a private station may override it with a policy_dp service. The existing station supplies CAN and camera serial bindings. RoboGUI flow is Prepare, Start rollout, Finish & Home. The experiment enables real execution and retains the YAM start/home behavior of the existing bottle experiment; Prepare may move the arms.

The history decorator waits for three distinct measured camera/state samples approximately 33 ms apart. It never fills history with repeated polling frames. The RoboGUI configuration displays current physical camera frames. DP's _t0, _t1, and _t2 model inputs are temporal aliases assembled separately by the adapter and are not physical stream names published to the RoboGUI. The experiment uses the standard ManiMux defaults: deadline scheduling, a 0.4-second refill threshold and two blending steps. Accepted decoded results take effect immediately at commit, without an additional switch delay. Inference may overlap execution; the model uses ordinary DDPM sampling, without RTC guidance. The six-step chunk is shorter than the observed inference plus IK latency, so overlapping requests does not guarantee uninterrupted motion. Unreachable IK targets reject the chunk. Recorded evidence goes under data/experiments/dp-put-bottles-eef-step100000/manimux-default.

Evidence boundary

On 2026-09-24, the downloaded checkpoint matched the remote SHA-256. Three GPU forwards on recorded input passed (521 ms cold, 251/227 ms warm). A separate WebSocket test using the actual runtime adapter passed backend identity, reset, and finite action checks; all twelve IK targets succeeded, producing two 6x7 joint chunks. That request took 453 ms including transport/inference, followed by 119 ms of IK. These are individual offline measurements, not a latency distribution or a guarantee under live camera/control load. Test receipts are in the private training/dp-yam-eef-deploy/ directory.

Offline pose, history and transport tests do not establish physical bottle-pick success. Hardware motion and task success require a separate real rollout.