整套系统建立在「场景固定」上:同一张桌子、同一头姿态、同一光照、五个杯位,桌高标到毫米。搬场地时这些前提同时失效。这页把每一个写死在代码或数据里的场地量列出来,分成两条链对照 —— 硬编码 IK 链(安全层、归位、放杯、视觉伺服)改常量就能跟上;SmolVLA 链(数据集、checkpoint)改不了,只能让新场地长得和旧场地一样,或者重录。结论先行:桌面相对肩轴的高度必须复现到 ±1 cm,否则学习策略作废;离开前必须量一次「地面到桌面」的物理高度,现在仓库里没有这个数。
来源:configs/teleop_safety.yaml · configs/table_calibrations.json · configs/head_presets.json · scripts/measure_table.py · teleop_config.py z_floor()/y_floor() · policy_safety.py · cam_to_arm.py · visual_servo.py · teach_grasp.py / TEACH_GRASP.md · cup_locate.py · run_policy_trials.py(CAMERAS、--preview、start_poses_for)· usb_cameras.py · fix_hotspot_internet.sh · ROBOTIC-WORKING-HANDBOOK.yaml(P-03/P-06/V-01/V-06/V-07/S-01)· GRIPPER-SWAP-CHECKLIST.md · CURRENT-STATUS.md · 00-admin/DEMO-DAY-AWARDS-AND-LOGISTICS-2026-09-10.md · ~/.cache/huggingface/lerobot/calibration/
以上大约 40 分钟。下面的内容是给远程操作的人看的,现场不用读。
| 依赖 | 文件 · 值 | 谁在用 | 怎么重测 | 耗时 |
|---|---|---|---|---|
| 桌面高度(相对肩轴) | configs/teleop_safety.yaml arms.left.z[0]=0.061 / right 0.065;gripper_len_m 0.1959 / 0.1999;home_pose z 0.17(开机自检要求指尖离桌 ≥100 mm,桌高变 home 也变) | 安全层每帧(policy_safety.py 调 z_floor/y_floor 按爪俯仰角算地板)、归位、遥操作 | measure_table.py --arm left --port …:卸力矩、手把指尖按在杯子会站的位置、FK 读腕高;两臂各量;面板或 YAML 手填。--pivot 顺便反推爪长 | 30 min |
configs/table_calibrations.json 最新 20260824-064847,含头 pan/tilt 和三张照片 | 历史与回滚(robot_server calib_restore) | 新场地追加一条,不改旧的;服务端会拒绝两臂差 >20 mm 或散布 >10 mm 的标定 | 随上项 | |
cam_to_arm.py table_datum() → configs/table_datum.json 不存在,静默回退 0.20 m | 头相机像素→臂坐标 | 无脚本,要写一个(或先记下再说) | — | |
configs/place_pose.json(10 集示范,2026-09-07)、pour_pose.json、trial_start_pose*.json(每集第一帧中位数,arm_home.start_poses_for 可离线重算) | 放杯、倒酒、试跑起手位 | 关节角是绝对量,桌高变了不能平移;place/pour 要重教 10 集;起手位从数据集来,数据集不变它就不变 | place 30 min | |
visual_servo.py「杯子在固定平面上」;高度来自接近位姿 | 视觉伺服抓取 | 接近位姿随桌高重教 | 随 teach_grasp | |
| 过期文案:robot_server.py 还写着爪长 0.159、右 z_min +0.02、桌面 −0.139,与 YAML 矛盾 | 面板说明文字 | 重测时顺手改 | 5 min | |
| 头相机姿态 | configs/head_presets.json cup-grasp-v0 = pan 2003 / tilt 2619(操作者 2026-09-04 定为标准视角)。注意 2619 比舵机 range_max 2617 高 2 tick | 试跑锁头、录制、robot_effectors HEAD_PRESET | head_aim.py --preset cup-grasp-v0 后看图:/api/reference/head 五张参考图(不同杯位)必须都能叠上(手册 P-03:「相似亮度不等于在看桌子」) | 15 min |
configs/head_reference_{0..4}.jpg、head_reference_cup_grasp.jpg(2026-08-23) | 头对准卡片 | 这是 Space 21 的照片,搬走即误导;新场地重拍,旧的改名留档 | 10 min | |
| cam_to_arm_left/right.json、servo_jacobian_left.json(48 样本,2026-09-07,头在 pan 2000 tilt 2615)、wrist_jacobian_left.json、grasp_jacobian.json(2026-09-10)、grasp_demos.json(8 条,09-10)、grasp_tip_offset.json(n=2,std 大于均值,本来就没用) | 视觉伺服、teach_grasp 抓取 | cam_to_arm 文档:「只在拟合时的头姿态下有效」。teach_grasp.py 全流程 12 min(TEACH_GRASP.md);visual_servo.py --measure-jacobian --go 10 min;cam_to_arm.py --sweep 30 min | 50 min | |
| 光照 / 颜色 | cup_locate.py CUP_H 12–22、S≥80、V≥75、TABLE_TOP 0.18(2026-09-10 白天在头相机上量);cup_mask.py 蓝/黄阈值(09-11);finger_locate.py 胶带阈值 | 杯子定位、抹杯、指尖定位 | 新场地重拍 12×12 色块量 HSV;桌面必须仍是白的(S<25) | 20 min |
| 头相机 G/R:白天 0.95~0.98、夜间 1.54~1.58;数据集两批 1.28 / 0.98 | SmolVLA 输入分布;手册 V-06 夜间成绩单独标 | 每次试跑 trial_keyframes 自动记 light.gr/lum;新场地第一次试跑先看这个数 | 0 | |
| cup_mask --mask-fill plate 需要的空桌底片 | 颜色选杯 | 头到 cup-grasp-v0,桌上无物拍一张 424×240 | 2 min | |
| USB 拓扑 | 相机 by-path 三处写死(robot_server.py:86、run_policy_trials.py:861、camera_view/identify_cameras):左腕 2.3.2、右腕 2.3.3、头 1.1:1.4。Orbbec 09-03 已经换过一次口;两只腕相机序列号相同,只靠 hub 口区分 | 录制、试跑、预览 | 插错口左右腕会静默互换。到场先跑面板 identify_cameras(转一下腕看哪路画面动),再 run_policy_trials.py --preview 看相机路径/分辨率 PASS | 10 min |
| 串口 /dev/ttyACM0/1 按舵机数识别,不按口 | 所有总线脚本 | 不用管 | 0 | |
| 地面 | base_translate.py CAL_SCALE = 1.00「标过之后填这里」,从没标过;WHEEL_MOUNT_DEG 是机器本体的 | 底盘平移(演示不用) | 开 0.5 m 卷尺量;地毯和瓷砖不一样 | 10 min |
| 网络 | Tailscale 100.107.145.111 随机器走;8770/8790/8781/8443/8797/5900 端口不变 | 远程面板、上传、VR | 不用管 | 0 |
| fix_hotspot_internet.sh 写死 WAN_IF=enP8p1s0(有线 193.167.0.37)、AP_IF=wlP1p1s0、子网 10.42.0.0/24;iptables 不过重启 | Quest 热点上网 | 新场地是 Wi-Fi/DHCP 的话改 WAN_IF 重跑;verify_hotspot_client.sh 验 | 15 min | |
| 机器本体(不随场地变) | 舵机标定 ~/.cache/huggingface/lerobot/calibration/robots/xlerobot/xlerobot_arms_only.json(2026-08-16);运动学 L1 0.1159 / L2 0.1350;max_reach_m 0.2459;WHEEL_MOUNT_DEG;pan_sign | 一切 | 只在换舵机后重做(lerobot-calibrate,提示符打 c)。左肩 shoulder_lift 09-09 曾 69 °C 堵转、今天全天 50 °C+,如果搬场前换了它,整条链从舵机标定开始重来:z_min、爪行程、pan_sign 全部重测(SETTINGS-AUDIT 规则) | 换舵机 +1 h |
| 硬编码 IK 链(安全层 · arm_home · place/pour · 视觉伺服 · teach_grasp) | SmolVLA 链(sep3-clean 54 集 · left-sd-p0.2-b16-u20000@020000) | |
|---|---|---|
| 桌高在哪 | 一个数:teleop_safety.yaml z[0],其余从它派生 | 13,693 帧的关节角和图像里,无处不在 |
| 桌高 +Δ 时会怎样 | 不重测:安全层地板按旧桌算,策略/伺服把指尖按进桌面 3 cm 才被拦(min_wrist_clearance 0.03)。重测后:地板正确,place/pour 目标要重教 | 它输出的是旧桌面上的绝对关节角:桌高 +1 cm 就在杯壁高 1 cm 处闭爪(多半还行);+3 cm 指尖顶桌面被安全层 HELD 掐掉整轮;−3 cm 在杯口上方空抓。没有任何参数能补 |
| 头姿态变了 | cam_to_arm / jacobian 全部重拟合(有脚本) | 零容忍:54 集里头部标准差 0.0000。tilt 不对等于「对着墙」,手册 P-03 有过整轮作废的先例 |
| 光照变了 | cup_locate/cup_mask 阈值重量(20 min) | 夜间 G/R 1.54 时成绩要单独标(V-06);训练集里没有的色温就是分布外,程度未知 |
| 杯位范围 | 由 teach_grasp 示范覆盖,可补示范 | 120~175 mm 中段五档(cup-positions.json);左臂闭爪 pan 中位 −13.5°,超出范围就是外推 |
| 修复成本 | ≈2 h,全部现场可做 | 重录 ≥50 集 + 上传 + 4090 训 20k 步 ≈ 1~2 天;或者不改它,改场地 |
容差怎么定的:安全层腕部离桌余量 30 mm,超过它策略会被 HELD 掐掉;示范里闭爪高度在杯壁中段,杯高约 9 cm,±1 cm 仍在杯壁上;两臂标定的合格线本来就是差 <20 mm、散布 <10 mm。所以 ±1 cm 是「策略大概率还能用」,±3 cm 是「肯定不能用」。中间那段没实验过,别赌。
A 是现场才能做、仓库里没有的;B 是可选补跑;C 是仓库里已经有的,只确认备份。2026-09-11 晚复核后,原来放在 A/B 里的桌高读数、参考图、底片、光照色块、三组基线全部挪到了 C。
| # | 做什么 | 工具 | 存哪 | 耗时 |
|---|---|---|---|---|
| A1 | 卷尺量:地面→桌面;地面→左肩轴、右肩轴;桌面→肩轴(应 ≈13.5 cm,和 YAML 反推互验);地面→头相机镜头;机器人前缘→桌边;桌子长宽 | 卷尺 + 手机照片带比例尺 | configs/venue-space21-2026-09-11.json + 照片 | 20 min |
| A2 | 机器人停放点:地上贴胶带标四个轮位,拍一张俯视 | 胶带、手机 | 同上 | 5 min |
| A4 | --preview 通过日志(相机路径 / 分辨率 / state 维序),机器空闲时跑 run_policy_trials.py --preview 存到 05-training/trials/preview-space21.log;09-11 晚总线被 teach_present 占着,还没跑 | train310 python | 05-training/trials | 5 min |
| A3 | 相机线插在 hub 哪个口:贴标签拍照(左腕 2.3.2、右腕 2.3.3、头 1.1)。设备侧的拓扑已存:05-training/trials/usb-topology-space21-2026-09-11.txt(lsusb -t + by-path) | 标签、手机 | 04-reports 照片 | 10 min |
| # | 做什么 | 已有的 | 耗时 |
|---|---|---|---|
| B1 | 右臂再 5 集,P2~P4,同今天配方 | 09-11 6/6(trials-20260911-152009.json) | 25 min |
| B2 | 左臂再 5 集,杯子画面左半近端 | 09-09 15/20(28 批)、09-11 凌晨 4/4 | 20 min |
| B3 | 夜间头参考图一套(白天那套已有) | 凌晨试跑关键帧可当夜间参考 | 5 min |
| 已有什么 | 在哪 | 要做的只是 |
|---|---|---|
| 桌高标定与安全包络 | configs/table_calibrations.json(20260824-064847,双臂各量、差 4 mm);configs/teleop_safety.yaml | 一条命令 tar 打包到 ~/incoming 下载走;git 由操作者提交(git status 里 20 多个未跟踪文件)。10 min |
| 头预设、参考图、空桌底片 | configs/head_presets.json;head_reference_{0..4}.jpg + head_reference_cup_grasp.jpg(08-23);head_plate_cup-grasp-v0.jpg(09-11);今天所有试跑的 init 关键帧 | |
| 光照色块与夜间数据 | cup_locate.py 注释(09-10 实测 HSV);trial_keyframes 每集记 light.gr(白天 0.95、夜间 1.54) | |
| 基线成绩 | 左臂 09-09 15/20、右臂 09-11 6/6、夜间左臂 09-11 02:xx 4/4;全部在 trials-*.json 与 STATUS.md | |
| 相机→臂标定、雅可比、示范 | configs/cam_to_arm_*.json、servo_jacobian_left.json、wrist_jacobian_left.json;scripts/grasp_jacobian.json、grasp_demos.json、grasp_tip_offset.json | |
| 脚本姿态 | configs/place_pose.json、pour_pose.json、trial_start_pose*.json、marker_offset.json、pan_sign_measured.json、pan_range_measured.json | |
| 舵机标定 | ~/.cache/huggingface/lerobot/calibration/(机器本体的,不随场地变) | |
| 杯位与试跑记录、USB 拓扑 | 05-training/trials/cup-positions.json、traces/、keyframes/、usb-topology-space21-2026-09-11.txt | |
| 数据集 | sep3-clean(54 集)、0826sep8-full(73 集) | 查 meta/upload.json 为 ok(R-05)。5 min |
| 模型 | 05-training/…/checkpoints/020000(左、右各一) | 确认 HF Suyang99 下有同名 repo。2 min |
合计:A 约 40 分钟是硬指标,没有它到了新场地不知道要垫多少;B 可选;C 约 20 分钟。
数值出处见各行文件名;桌高 −0.1349 m 与 z_min 来自 teleop_safety.yaml 与 table_calibrations.json 20260824-064847;页面写于 2026-09-11 下午,机器在 Space 21。
The whole stack assumes a fixed scene: the same table, the same head pose, the same lighting, five cup positions, table height calibrated to the millimetre. A venue move breaks all of these at once. This page lists every venue-bound quantity baked into code or data and splits it into two chains — the hard-coded IK chain (safety layer, homing, place, visual servo) follows a constant change; the SmolVLA chain (datasets, checkpoints) cannot be changed, so the only options are to make the new venue look like the old one or to re-record. Verdict first: the table height relative to the shoulder pivot must be reproduced to ±1 cm or the learned policies are void; and before leaving, measure the physical floor-to-table height once — the repository does not contain that number.
Sources: configs/teleop_safety.yaml · configs/table_calibrations.json · configs/head_presets.json · scripts/measure_table.py · teleop_config.py z_floor()/y_floor() · policy_safety.py · cam_to_arm.py · visual_servo.py · teach_grasp.py / TEACH_GRASP.md · cup_locate.py · run_policy_trials.py (CAMERAS, --preview, start_poses_for) · usb_cameras.py · fix_hotspot_internet.sh · ROBOTIC-WORKING-HANDBOOK.yaml (P-03/P-06/V-01/V-06/V-07/S-01) · GRIPPER-SWAP-CHECKLIST.md · CURRENT-STATUS.md · 00-admin/DEMO-DAY-AWARDS-AND-LOGISTICS-2026-09-10.md · ~/.cache/huggingface/lerobot/calibration/
About 40 minutes. Everything below is for the remote operators; the person on site does not need to read it.
| Depends on | File · value | Used by | How to re-measure | Time |
|---|---|---|---|---|
| Table height (relative to shoulder pivot) | configs/teleop_safety.yaml arms.left.z[0]=0.061 / right 0.065; gripper_len_m 0.1959 / 0.1999; home_pose z 0.17 (the boot self-test requires the fingertip ≥100 mm above the table, so a new table height moves home too) | Safety layer every frame (policy_safety.py calls z_floor/y_floor, pitch-compensated), homing, teleop | measure_table.py --arm left --port …: torque off, place the fingertip by hand where the cup will stand, FK reads wrist height; once per arm; write into the panel or the YAML by hand. --pivot also re-derives gripper length | 30 min |
configs/table_calibrations.json, newest 20260824-064847, with head pan/tilt and three photos | History and rollback (robot_server calib_restore) | Append a new entry at the new venue, do not edit the old one; the server rejects calibrations where the arms differ >20 mm or spread >10 mm | with above | |
cam_to_arm.py table_datum() → configs/table_datum.json does not exist; silently falls back to 0.20 m | Head-camera pixel → arm coordinates | No script; one must be written (or note it and move on) | — | |
configs/place_pose.json (10 demos, 2026-09-07), pour_pose.json, trial_start_pose*.json (median of each episode's first frame; arm_home.start_poses_for recomputes offline) | Place, pour, trial start pose | Joint angles are absolute and cannot be shifted with the table; place/pour need 10 new demos each; the start pose comes from the dataset and does not change unless the dataset does | place 30 min | |
visual_servo.py assumes "the cup sits on a fixed plane"; height comes from the approach pose | Visual-servo grasp | Approach pose re-taught with the table height | with teach_grasp | |
| Stale copy: robot_server.py still quotes gripper length 0.159, right z_min +0.02, table −0.139 — contradicts the YAML | Panel help text | Fix while re-measuring | 5 min | |
| Head camera pose | configs/head_presets.json cup-grasp-v0 = pan 2003 / tilt 2619 (operator decision 2026-09-04 as the standard view). Note 2619 is 2 ticks above the servo range_max 2617 | Head lock in trials, recording, robot_effectors HEAD_PRESET | head_aim.py --preset cup-grasp-v0, then look at the image: the five reference frames at /api/reference/head (different cup positions) must all overlay (handbook P-03: "similar brightness does not mean it is looking at the table") | 15 min |
configs/head_reference_{0..4}.jpg, head_reference_cup_grasp.jpg (2026-08-23) | Head-aim card | These are photographs of Space 21 and mislead the moment you move; re-shoot at the new venue, rename the old ones for the archive | 10 min | |
| cam_to_arm_left/right.json, servo_jacobian_left.json (48 samples, 2026-09-07, head at pan 2000 tilt 2615), wrist_jacobian_left.json, grasp_jacobian.json (2026-09-10), grasp_demos.json (8 demos, 09-10), grasp_tip_offset.json (n=2, std larger than the mean — never usable) | Visual servo, teach_grasp | cam_to_arm docstring: "valid only at the head pose it was fitted at". teach_grasp.py full session 12 min (TEACH_GRASP.md); visual_servo.py --measure-jacobian --go 10 min; cam_to_arm.py --sweep 30 min | 50 min | |
| Lighting / colour | cup_locate.py CUP_H 12–22, S≥80, V≥75, TABLE_TOP 0.18 (measured 2026-09-10 in daylight on the head camera); cup_mask.py blue/yellow thresholds (09-11); finger_locate.py tape thresholds | Cup locating, cup masking, fingertip locating | Re-shoot 12×12 patches and measure HSV at the new venue; the table must still be white (S<25) | 20 min |
| Head camera G/R: day 0.95–0.98, night 1.54–1.58; the dataset has two batches, 1.28 / 0.98 | SmolVLA input distribution; handbook V-06 reports night results separately | trial_keyframes logs light.gr/lum on every trial; check this number on the first trial at the new venue | 0 | |
| Empty-table plate for cup_mask --mask-fill plate | Colour-conditioned picking | Head at cup-grasp-v0, nothing on the table, one 424×240 frame | 2 min | |
| USB topology | Camera by-path strings hard-coded in three places (robot_server.py:86, run_policy_trials.py:861, camera_view/identify_cameras): left wrist 2.3.2, right wrist 2.3.3, head 1.1:1.4. The Orbbec already changed port once on 09-03; the two wrist cameras share a serial number and are told apart only by hub port | Recording, trials, previews | Plugging into swapped ports silently swaps left/right. On arrival run the panel's identify_cameras (rotates one wrist, shows which image moves), then run_policy_trials.py --preview for camera path/resolution PASS | 10 min |
| Serial ports /dev/ttyACM0/1 are identified by motor count, not by port | Every bus script | Nothing to do | 0 | |
| Floor | base_translate.py CAL_SCALE = 1.00 "fill in after calibrating" — never calibrated; WHEEL_MOUNT_DEG is robot-intrinsic | Base translation (not used in the demo) | Drive 0.5 m, tape-measure the result; carpet and tile differ | 10 min |
| Network | Tailscale 100.107.145.111 travels with the robot; ports 8770/8790/8781/8443/8797/5900 unchanged | Remote panel, upload, VR | Nothing to do | 0 |
| fix_hotspot_internet.sh hard-codes WAN_IF=enP8p1s0 (wired, 193.167.0.37), AP_IF=wlP1p1s0, subnet 10.42.0.0/24; iptables do not survive a reboot | Quest hotspot internet | If the venue is Wi-Fi/DHCP, change WAN_IF and re-run; verify with verify_hotspot_client.sh | 15 min | |
| Robot itself (venue-independent) | Servo calibration ~/.cache/huggingface/lerobot/calibration/robots/xlerobot/xlerobot_arms_only.json (2026-08-16); kinematics L1 0.1159 / L2 0.1350; max_reach_m 0.2459; WHEEL_MOUNT_DEG; pan_sign | Everything | Redo only after a servo swap (lerobot-calibrate, type c at the prompt). The left shoulder_lift stalled at 69 °C on 09-09 and sat above 50 °C all day today; if it is replaced before the move, the whole chain restarts from servo calibration: z_min, gripper travel and pan_sign all re-measured (SETTINGS-AUDIT rule) | swap +1 h |
| Hard-coded IK chain (safety layer · arm_home · place/pour · visual servo · teach_grasp) | SmolVLA chain (sep3-clean 54 episodes · left-sd-p0.2-b16-u20000@020000) | |
|---|---|---|
| Where the table height lives | One number: teleop_safety.yaml z[0]; everything else derives from it | In 13,693 frames of joint angles and images — everywhere |
| Table +Δ | Not re-measured: the safety floor is computed for the old table, and the policy/servo pushes the fingertip 3 cm into the table before it is stopped (min_wrist_clearance 0.03). Re-measured: the floor is right, place/pour targets must be re-taught | It outputs absolute joint angles for the old table: +1 cm closes 1 cm higher on the cup wall (probably fine); +3 cm the fingertip hits the table and the safety layer HELDs the whole run; −3 cm it closes on air above the rim. No parameter compensates |
| Head pose changed | cam_to_arm / jacobians all re-fitted (scripts exist) | Zero tolerance: head std 0.0000 across 54 episodes. Wrong tilt equals "facing the wall"; handbook P-03 records a whole batch lost that way |
| Lighting changed | cup_locate/cup_mask thresholds re-measured (20 min) | Night G/R 1.54 results are reported separately (V-06); a colour temperature absent from training is out of distribution, degree unknown |
| Cup position range | Covered by teach_grasp demos, can add demos | Five bands in the 120–175 mm mid range (cup-positions.json); left-arm closure pan median −13.5°; outside that is extrapolation |
| Cost to fix | ≈2 h, all on site | Re-record ≥50 episodes + upload + 20k steps on the 4090 ≈ 1–2 days; or leave it alone and change the venue |
Where the tolerance comes from: the safety layer keeps 30 mm of wrist clearance above the table, beyond which the policy gets HELD; the demos close mid-wall on a cup about 8.5 cm tall (teleop_config.py:223), so ±1 cm is still on the wall; and the calibration acceptance itself is arms within 20 mm, spread within 10 mm. So ±1 cm means "the policy most likely still works" and ±3 cm means "it certainly does not". The band in between has never been tested — do not bet on it.
A is what only the site can give and the repository lacks; B is optional extra runs; C already exists in the repository and only needs backing up. Re-checked on the evening of 2026-09-11: the table-height reading, reference images, plate, lighting patches and all three baselines that were listed under A/B have moved to C.
| # | What | Tool | Where it goes | Time |
|---|---|---|---|---|
| A1 | Tape measure: floor→table top; floor→left and right shoulder pivot; table top→shoulder pivot (should be ≈13.5 cm; cross-check against the YAML); floor→head camera lens; robot front edge→table edge; table length and width | Tape measure + phone photos with a scale | configs/venue-space21-2026-09-11.json + photos | 20 min |
| A2 | Parking spot: tape marks for the four wheels, one top-down photo | Tape, phone | same | 5 min |
| A4 | --preview PASS log (camera paths / resolutions / state dims): run run_policy_trials.py --preview when the machine is idle and save to 05-training/trials/preview-space21.log; not yet run on the evening of 09-11 because teach_present held the bus | train310 python | 05-training/trials | 5 min |
| A3 | Which hub port each camera cable is in: label and photograph (left wrist 2.3.2, right wrist 2.3.3, head 1.1). The device-side topology is already saved: 05-training/trials/usb-topology-space21-2026-09-11.txt (lsusb -t + by-path) | Labels, phone | 04-reports photos | 10 min |
| # | What | Already have | Time |
|---|---|---|---|
| B1 | Right arm, 5 more trials at P2–P4, today's recipe | 09-11 6/6 (trials-20260911-152009.json) | 25 min |
| B2 | Left arm, 5 more trials, cup in the left half of the frame, near | 09-09 15/20 (28 runs), 09-11 early morning 4/4 | 20 min |
| B3 | A night set of head reference frames (the day set exists) | early-morning trial keyframes serve as night references | 5 min |
| What exists | Where | The only action |
|---|---|---|
| Table calibration and safety envelope | configs/table_calibrations.json (20260824-064847, per arm, 4 mm apart); configs/teleop_safety.yaml | One tar into ~/incoming and download it; git commits are the operator's (20+ untracked files). 10 min |
| Head presets, reference images, empty-table plate | configs/head_presets.json; head_reference_{0..4}.jpg + head_reference_cup_grasp.jpg (08-23); head_plate_cup-grasp-v0.jpg (09-11); every init keyframe from today's trials | |
| Lighting patches and night data | cup_locate.py comments (HSV measured 09-10); trial_keyframes logs light.gr per trial (day 0.95, night 1.54) | |
| Baselines | left 09-09 15/20, right 09-11 6/6, left at night 09-11 02:xx 4/4; all in trials-*.json and STATUS.md | |
| Camera→arm calibration, jacobians, demos | configs/cam_to_arm_*.json, servo_jacobian_left.json, wrist_jacobian_left.json; scripts/grasp_jacobian.json, grasp_demos.json, grasp_tip_offset.json | |
| Scripted poses | configs/place_pose.json, pour_pose.json, trial_start_pose*.json, marker_offset.json, pan_sign_measured.json, pan_range_measured.json | |
| Servo calibration | ~/.cache/huggingface/lerobot/calibration/ (robot-intrinsic, venue-independent) | |
| Cup positions, trial records, USB topology | 05-training/trials/cup-positions.json, traces/, keyframes/, usb-topology-space21-2026-09-11.txt | |
| Datasets | sep3-clean (54 ep), 0826sep8-full (73 ep) | Check meta/upload.json says ok (R-05). 5 min |
| Models | 05-training/…/checkpoints/020000 (left and right) | Confirm the same-named repos exist under HF Suyang99. 2 min |
Totals: A about 40 min and it is the hard requirement — without it you do not know how much to shim at the new venue; B optional; C about 20 min.
Values sourced per row; table −0.1349 m and z_min from teleop_safety.yaml and table_calibrations.json 20260824-064847; written 2026-09-11 afternoon with the robot in Space 21.