← reports index
搬场地 · 标定 / 桌高 / 离开前采集 · 对照硬编码 IK 链与 SmolVLA 链 · 2026-09-11

搬到新场地要重做什么:桌面高度、标定清单、离开 Space 21 前必须采的数据

整套系统建立在「场景固定」上:同一张桌子、同一头姿态、同一光照、五个杯位,桌高标到毫米。搬场地时这些前提同时失效。这页把每一个写死在代码或数据里的场地量列出来,分成两条链对照 —— 硬编码 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/

给现场同学:离开前做这几件,其他都不用管

  1. 用卷尺量四个数,拍照。地面到桌面;地面到左肩关节轴、右肩关节轴(手臂根部那颗转轴的中心);地面到头相机镜头;机器人前边缘到桌子边。顺手量一下桌子长宽。把数字写在纸上拍一张,发到群里。
  2. 在地上贴胶带标出四个轮子的位置,从上面拍一张。
  3. 给三根相机线贴标签并拍照:左手腕相机、右手腕相机、头相机各插在集线器哪个口,标签写清楚,拍一张能看清插口的照片。到了新场地照原样插回去。
  4. 搬之前:告诉远程把力矩卸掉,手臂软了以后扶着放平,关电源,头用手轻轻压到最低,相机线不要拔。
  5. 到了新场地:先量地面到桌面、地面到肩轴,和第 1 条比。桌面到肩轴要在 13.5 厘米左右,差超过 1 厘米就在机器人脚下垫板子(垫机器人,别动桌子)。然后开电源、连网,剩下的远程来做。

以上大约 40 分钟。下面的内容是给远程操作的人看的,现场不用读。

0 · 一句话版

桌子。所有几何都以肩轴为原点,桌面在肩轴下方 0.1349 m(左 z_min 0.061 − 爪长 0.1959;右 0.065 − 0.1999,2026-08-24 双臂各量、双重验证,两臂差 4 mm)。新场地要么把桌面(或机器人脚下的垫高)调到肩轴到桌面 = 13.5 cm ± 1 cm,要么接受学习策略从头再来。到场第一件事是用 measure_table.py 复测,不是信旧值。
硬编码 IK 链:8 个配置文件、约 2 小时,全部有现成脚本可重测(除 table_datum.json 缺失和底盘比例系数从没标过)。
SmolVLA 链:checkpoint 里写死了旧桌高、旧头姿态(每集内头部标准差 0.0000,对头动零容忍)、旧光照(两批 G/R 1.28 和 0.98)。任何一项变了都是分布外,唯一的修法是重录 ≥50 集再训(4090 上 1~2 天)。所以搬场地的目标不是「重标」,是「把新场地做成旧场地」。
离开前必采(第 4 节,约 2.5 小时):物理尺寸卷尺量一遍并拍照;参考配置下 10 集预注册基线;头姿态五张参考图 + 空桌底片;--preview 通过日志;所有配置打包并提交;两个数据集和 checkpoint 确认在云上。

1 · 哪些量写死了场地 —— 按物理依赖分组

依赖文件 · 值谁在用怎么重测耗时
桌面高度(相对肩轴)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_PRESEThead_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 min50 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.98SmolVLA 输入分布;手册 V-06 夜间成绩单独标每次试跑 trial_keyframes 自动记 light.gr/lum;新场地第一次试跑先看这个数0
cup_mask --mask-fill plate 需要的空桌底片颜色选杯头到 cup-grasp-v0,桌上无物拍一张 424×2402 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 看相机路径/分辨率 PASS10 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

2 · 两条链对照:桌高变了各自怎么办

硬编码 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 天;或者不改它,改场地

3 · 桌面高度怎么调 —— 三种情况

A
新桌子高度和旧的一样(±1 cm)。到场:measure_table 两臂复测 → 值应落在 0.061 / 0.065 ± 0.010 内 → 追加 table_calibrations 记录 → 头对 cup-grasp-v0 看图 → identify_cameras + --preview → 跑 5 集基线和离开前的 10 集比。1 h,策略不动
B
高度不一样,但能调(升降桌、垫木板、机器人脚下垫板)。目标是「肩轴到桌面 = 13.5 cm」,不是「桌子多高」。用离开前量好的「地面到肩轴」减去新桌面高度,算出要垫多少;垫完按 A 走。垫机器人比垫桌子好:桌面材质和颜色不变(cup_locate 要白桌面),头相机看到的桌面纹理也不变。1.5 h
C
高度不一样,也调不了。硬编码链按第 1 节全部重测(2 h),演示只走脚本抓取(grasp_cup / teach_grasp 那条线,09-10 已在真机跑通)。SmolVLA 只能新录:到场第一天用 leader-follower 录 50 集(头必须先到标准视角、按录制指南四项验收)、当场 /api/dataset/publish、4090 训一晚。2 天,且成功率回到未知

容差怎么定的:安全层腕部离桌余量 30 mm,超过它策略会被 HELD 掐掉;示范里闭爪高度在杯壁中段,杯高约 9 cm,±1 cm 仍在杯壁上;两臂标定的合格线本来就是差 <20 mm、散布 <10 mm。所以 ±1 cm 是「策略大概率还能用」,±3 cm 是「肯定不能用」。中间那段没实验过,别赌。

4 · 离开 Space 21 前要做的事 —— 分三类

A 是现场才能做、仓库里没有的;B 是可选补跑;C 是仓库里已经有的,只确认备份。2026-09-11 晚复核后,原来放在 A/B 里的桌高读数、参考图、底片、光照色块、三组基线全部挪到了 C。

A · 仓库里没有,只能在现场做(约 35 分钟)

#做什么工具存哪耗时
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 python05-training/trials5 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

B · 可选补跑(仓库里已有同配置成绩,补是为了样本量)

#做什么已有的耗时
B1右臂再 5 集,P2~P4,同今天配方09-11 6/6(trials-20260911-152009.json)25 min
B2左臂再 5 集,杯子画面左半近端09-09 15/20(28 批)、09-11 凌晨 4/420 min
B3夜间头参考图一套(白天那套已有)凌晨试跑关键帧可当夜间参考5 min

C · 仓库里已经有,只确认备份(约 20 分钟)

已有什么在哪要做的只是
桌高标定与安全包络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 分钟。

5 · 到场后的顺序(照着做,约 2 小时 + 基线)

  1. 开机前:卷尺量地面→桌面、地面→肩轴,和第 4 节 #1 比,决定垫不垫(第 3 节)。
  2. check_arms.py:17 颗全应答、温度正常(左肩 <50 °C 再开跑)。
  3. identify_cameras → --preview PASS;对不上就换口重跑,别改代码里的 by-path。
  4. measure_table.py 两臂 → 追加 table_calibrations → 改 YAML z[0](和 home z 如果桌面动了)。
  5. head_aim --preset cup-grasp-v0 → 五张参考图叠图确认 → 拍新底片。
  6. arm_home 双臂归位自检通过(P-01)。
  7. 光照:第一次试跑看 light.gr;>1.3 就按夜间标;cup_locate/cup_mask 阈值按需重量。
  8. teach_grasp.py 12 分钟重教(脚本抓取线);place_pose 重教(如果演示要放杯)。
  9. 基线 5 集,六项配置与第 4 节 #3 完全一致;和离开前的 10 集并排写进 STATUS。
  10. Quest 热点:WAN_IF 改成新场地的口,verify_hotspot_client.sh。

6 · 已知缺口(这页没解决的)

数值出处见各行文件名;桌高 −0.1349 m 与 z_min 来自 teleop_safety.yaml 与 table_calibrations.json 20260824-064847;页面写于 2026-09-11 下午,机器在 Space 21。