(base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % python3 dynamic_tracking_limits/drag_teaching/record_teach_demo.py run --teach drag_v2_20221013_233323.json --power 5A --execute [RTD ] 到達許容差は本線 run_pick_place.py の stage 値を使います(区間ごと。一律 8.0° は 2026-10-19 にやめた): [RTD ] HOME 2.5° ← rpp.TOL_HOME(stage1_to_home / HOME 復帰) [RTD ] APPROACH_PICK 2.0° ← rpp.TOL_APPROACH(approach 系) [RTD ] PICK 3.0° ← rpp.TOL_PICK_PLACE(stage4_pick) [RTD ] APPROACH_PICK (lift) 3.0° ← rpp.TOL_LIFT_BACK(lift の残差 2.19° を吸収) [RTD ] APPROACH_PLACE 3.0° ← rpp.TOL_APPROACH_PLACE(stage7) [RTD ] PLACE 3.0° ← rpp.TOL_PICK_PLACE(stage8_place) [RTD ] APPROACH_PLACE (retreat) 3.0° ← rpp.TOL_LIFT_BACK(stage10_lift_back) [RTD ] 到達を待つ最大時間 = clamp(2.0 + max|Δ|/20*3.0, 8.0, 30.0) 秒(本線と同じ wr._compute_arrival_timeout) [RTD ] 爪の閉じる値: 20(既定) [RTD ] 電源: 5A(--power。試行 JSON の power に残し、爪の位置と電圧も読みます) [RTD ] モード: EXECUTE(実機) 記録: ON [RTD ] Pi から教えた記録を取得します: ubuntu@192.168.2.1:r2r2r-scripts/dynamic_tracking_limits/drag_teaching/drag_v2_20221013_233323.json [RTD ] 取得しました → /var/folders/5w/2q2mc64n6yv63gfh31h34w6h0000gn/T/record_teach_demo_s3fbxwfl/drag_v2_20221013_233323.json [RTD ] 入力ファイル: drag_v2_20221013_233323.json [RTD ] 抽出ウェイポイント: APPROACH_PICK <- phase APPROACH_PICK argmax_idx=175 (start=175 end=233, gap=14.85°) angles = [ +12.83, +44.38, +31.11, -3.25, -67.06, -26.63] PICK <- gripper close mark idx=247(PICK phase 範囲内) angles = [ +13.09, +59.23, +18.54, -3.25, -60.11, -27.07] APPROACH_PLACE <- phase APPROACH_PLACE argmax_idx=350 (start=350 end=390, gap=15.39°) angles = [ +43.15, +50.62, -5.27, +5.44, -46.66, -35.41] PLACE <- gripper open mark idx=400(PLACE phase 範囲内) angles = [ +43.06, +66.00, -5.97, +6.67, -62.05, -35.33] [RTD ] JOINT_LIMITS 一括検証 OK(全 endpoint + HOME) [RTD ] 姿勢検査 OK(全 116 姿勢が 有限値 + JOINT_LIMITS + J4_SAFE [-90.0, +60.0] 内) [RTD ] j4 の余裕は最小 22.94°(しきい値 3.0° 以上) [RTD ] 現在姿勢を daemon から取得します [RTD ] 現在姿勢 = [ -0.43, +1.31, +0.79, +0.26, -0.26, -30.23] ============================================================================== [RTD ] 実行プラン(daemon 経由・区間ごとに 1 回送信 → 到達待ち) ============================================================================== [STEP 1] MOVE → HOME (single send + settle) speed=20 current = [ -0.43, +1.31, +0.79, +0.26, -0.26, -30.23] to HOME = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 1.31° (settle 3.0s) [STEP 2] GRIPPER OPEN daemon_set_gripper(0, 50, wait=0) ×1 回(daemon 事前 2.0s + 事後 2.0s + 待ち 2.0s)= 計 6.0s 開いたかは確認しません(gv を使わず・開始前の y/n も無し。判定は終了後の y/n と動画) [STEP 3] MOVE → APPROACH_PICK segment HOME → APPROACH_PICK tol=2.0° [rpp.TOL_APPROACH(approach 系)] from = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] to = [ +12.83, +44.38, +31.11, -3.25, -67.06, -26.63] max |Δ| = 67.06° 1 回送信 speed=20 (~ 3.4s @ 20°/s 目安・到達待ち 最大 12.1s) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage4_pick)] from = [ +12.83, +44.38, +31.11, -3.25, -67.06, -26.63] to = [ +13.09, +59.23, +18.54, -3.25, -60.11, -27.07] max |Δ| = 14.85° 1 回送信 speed=20 (~ 0.7s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 5] GRIPPER CLOSE daemon_set_gripper_value(20, 50) + sleep(2.0s) [STEP 6] MOVE → APPROACH_PICK (lift) segment PICK → APPROACH_PICK (lift) tol=3.0° [rpp.TOL_LIFT_BACK(lift の残差 2.19° を吸収)] from = [ +13.09, +59.23, +18.54, -3.25, -60.11, -27.07] to = [ +12.83, +44.38, +31.11, -3.25, -67.06, -26.63] max |Δ| = 14.85° 1 回送信 speed=20 (~ 0.7s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE tol=3.0° [rpp.TOL_APPROACH_PLACE(stage7)] from = [ +12.83, +44.38, +31.11, -3.25, -67.06, -26.63] to = [ +43.15, +50.62, -5.27, +5.44, -46.66, -35.41] max |Δ| = 36.38° 1 回送信 speed=20 (~ 1.8s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage8_place)] from = [ +43.15, +50.62, -5.27, +5.44, -46.66, -35.41] to = [ +43.06, +66.00, -5.97, +6.67, -62.05, -35.33] max |Δ| = 15.39° 1 回送信 speed=20 (~ 0.8s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 9] GRIPPER OPEN daemon_set_gripper(0, 50, wait=0) ×1 回(daemon 事前 2.0s + 事後 2.0s + 待ち 2.0s)= 計 6.0s 開いたかは確認しません(gv を使わず・開始前の y/n も無し。判定は終了後の y/n と動画) [STEP 10] MOVE → APPROACH_PLACE (retreat) segment PLACE → APPROACH_PLACE (retreat) tol=3.0° [rpp.TOL_LIFT_BACK(stage10_lift_back)] from = [ +43.06, +66.00, -5.97, +6.67, -62.05, -35.33] to = [ +43.15, +50.62, -5.27, +5.44, -46.66, -35.41] max |Δ| = 15.39° 1 回送信 speed=20 (~ 0.8s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME tol=2.5° [rpp.TOL_HOME(stage1_to_home / HOME 復帰)] from = [ +43.15, +50.62, -5.27, +5.44, -46.66, -35.41] to = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 50.62° 1 回送信 speed=20 (~ 2.5s @ 20°/s 目安・到達待ち 最大 9.6s) ============================================================================== [RTD ] 送信 = 8 回(STEP 1 + move 7 区間), 想定所要時間 ≈ 27.7s(最悪 73.0s) [RTD ] 内訳: 先頭 settle 3.0s + 移動 10.7s(max|Δ| 合計 214.5° @ 20°/s 目安) + gripper 14.0s [RTD ] 到達確認: 許容は区間ごと(本線 run_pick_place.py の stage 値)/ 最大は clamp(2.0 + max|Δ|/20*3.0, 8.0, 30.0) 秒 [RTD ] 届かないとき: 送信前から 1.0° 未満しか動いていなければ 5.0s 待って**同じ目標へ 1 回だけ**再送(本線と同じ)。それでも届かなければ ABORT(HOME へ自動で戻らない) [RTD ] 実測 j4: [-90.0, +60.0] の外は WARN / [-98.0, +68.0] の外は ABORT ============================================================================== [RTD ] measure: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261113/measure_20261113_191316.json [RTD ] measured_at = 2026-11-13T19:13:21.449689 block = (-263.9, +277.9) mm box = (-143.5, +355.0) mm [RTD ] 再生直前: 上カメラでマット四隅とブロック画素を確認します [RTD ] [WARN] 再生直前: 四隅が最大 810.4px ずれています(1 回目 / 上限 15.0px)。測り直します [RTD ] [WARN] 再生直前: 四隅が最大 810.4px ずれています(2 回目 / 上限 15.0px)。測り直します [RTD ] [WARN] 再生直前: 四隅が最大 810.4px ずれています(3 回目 / 上限 15.0px)。やり直しの上限に達しました [RTD ] 再生直前: block = (-256.7, +281.0) mm(measure の homography で換算) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261113/prerun_20261113_191701.jpg [RTD ] 弾いた理由と各回の記録を残しました: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261113/prerun_20261113_191701_rejected.json [RTD ] [WARN] マット四隅が measure 時から最大 810.4px ずれています(上限 15.0px・最大 3 回やり直しても収まらず)。カメラが動いた可能性があるので止めます。measure を取り直してください(各隅のずれ: 6.0, 810.4, 392.9, 8.2)(**止めません**・WARN のみ) [RTD ] [SAFETY] 再生中はグリッパーが実機で開閉します。爪に指を挟まないこと。 [RTD ] [SAFETY] 止めるときはアームの電源を切ること。Ctrl-C は新しい送信をやめるだけで、進行中の移動は止まりません。 [RTD ] [SAFETY] 開いたかの自動確認はしません(gv は使わない)。STEP 2 で open を送ってから PICK へ降ります。 [RTD ] 周囲に手・物が無いか確認してください。OK なら Enter で開始 [RTD ] 試行フォルダ: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261113_191709 [RTD ] 教えた記録のコピー: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261113_191709/teach/drag_v2_20221013_233323.json [RTD ] recorder に trial_start を送りました。1.0s 待ってから動き出します(mp4 writer が開くまで) [RTD ] 爪と肩の電流を 1 秒 10 回で記録します(爪を動かしている間は読みません)→ /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261113_191709/recording/currents.csv [RTD ] 電源 5A: 爪の位置(番地 7:56/57)と電圧(2:62・7:62)も読みます(生の値・未確認の番地)→ /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261113_191709/recording/power_regs.csv [Pi] fresh_mode=1 [RTD ] daemon_set_fresh_mode(1)(最新コマンド優先・本線 run_pick_place.py L3976 と同じ。647 試行の実績はこの状態) [STEP 1] MOVE → HOME daemon_send_angles(HOME, 20) [STEP 1] 到達待ち 許容 2.5°[TOL_HOME(stage1_to_home / HOME 復帰)] / 最大 8.0s [RTD ] 先頭移動: 送信直前の実測で max|Δ| = 1.31° / 到達待ち 最大 8.0s [STEP 1] 3.0s 待ちます(settle) [RTD ] arrival OK (current → HOME, max|Δ|=1.31° <= tol 2.5°) [STEP 2] GRIPPER OPEN → daemon_set_gripper(0, 50, wait=0) [RTD ] 静止確認 OK(step2_open: 連続 3 回・連続差 最大 0.00° <= 1.0°) [Pi] GRIPPER: OPEN result= None [RTD ] gripper open (1/1 回目) の daemon 往復 = 2.004s [STEP 2] open 後 2.0s 待ちます(本線の daemon wait=2 相当・読み取りなし) [STEP 2] gripper dwell 2.0s(読み取りなし) [STEP 3] MOVE → APPROACH_PICK segment HOME → APPROACH_PICK (1 回送信 speed=20 → 到達待ち 許容 2.0°[TOL_APPROACH(approach 系)] / 最大 12.1s) [RTD ] 送信 OK(daemon 往復 1.032s) [RTD ] arrival OK (HOME → APPROACH_PICK, max|Δ|=1.50° <= tol 2.0°) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_PICK_PLACE(stage4_pick)] / 最大 8.0s) [critical] [RTD ] 送信 OK(daemon 往復 1.034s) [RTD ] arrival OK (APPROACH_PICK → PICK, max|Δ|=1.58° <= tol 3.0°) [STEP 5] GRIPPER CLOSE → daemon_set_gripper_value(20, 50) [RTD ] 静止確認 OK(step5_close: 連続 3 回・連続差 最大 0.00° <= 1.0°) [Pi] GRIPPER: VALUE=20 speed=50 result= None [RTD ] gripper close (1/1 回目) の daemon 往復 = 0.006s [STEP 5] gripper dwell 2.0s(読み取りなし) [STEP 6] MOVE → APPROACH_PICK (lift) segment PICK → APPROACH_PICK (lift) (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_LIFT_BACK(lift の残差 2.19° を吸収)] / 最大 8.0s) [RTD ] 送信 OK(daemon 往復 1.036s) [RTD ] arrival OK (PICK → APPROACH_PICK (lift), max|Δ|=1.85° <= tol 3.0°) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_APPROACH_PLACE(stage7)] / 最大 8.0s) [RTD ] 送信 OK(daemon 往復 1.031s) [RTD ] arrival OK (APPROACH_PICK → APPROACH_PLACE, max|Δ|=1.41° <= tol 3.0°) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_PICK_PLACE(stage8_place)] / 最大 8.0s) [critical] [RTD ] 送信 OK(daemon 往復 1.031s) [RTD ] arrival OK (APPROACH_PLACE → PLACE, max|Δ|=1.23° <= tol 3.0°) [STEP 9] GRIPPER OPEN → daemon_set_gripper(0, 50, wait=0) [RTD ] 静止確認 OK(step9_open: 連続 3 回・連続差 最大 0.09° <= 1.0°) [Pi] GRIPPER: OPEN result= None [RTD ] gripper open (1/1 回目) の daemon 往復 = 2.013s [STEP 9] open 後 2.0s 待ちます(本線の daemon wait=2 相当・読み取りなし) [STEP 9] gripper dwell 2.0s(読み取りなし) [STEP 10] MOVE → APPROACH_PLACE (retreat) segment PLACE → APPROACH_PLACE (retreat) (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_LIFT_BACK(stage10_lift_back)] / 最大 8.0s) [RTD ] 送信 OK(daemon 往復 1.029s) [RTD ] arrival OK (PLACE → APPROACH_PLACE (retreat), max|Δ|=2.02° <= tol 3.0°) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME (1 回送信 speed=20 → 到達待ち 許容 2.5°[TOL_HOME(stage1_to_home / HOME 復帰)] / 最大 9.6s) [RTD ] 送信 OK(daemon 往復 1.031s) [RTD ] arrival OK (APPROACH_PLACE → HOME, max|Δ|=1.31° <= tol 2.5°) [Pi] fresh_mode=0 [RTD ] daemon_set_fresh_mode(0) 完了 [RTD ] 実測角の読み取り: ok 54/54 回, 実効 1.57 Hz(目標 3.0 Hz 以上) [RTD ] [WARN] 実測角の読み取りが目標 3.0 Hz を下回りました(1.57 Hz)。学習データの state 密度が 19 本より薄くなります [RTD ] send_angles の daemon 往復 (7 回): 平均 1.032s / p50 1.031s / 最大 1.036s(timeout 6.0s) [RTD ] [WARN] 送信 1 回に 1.036s かかった回があります。daemon は送信後に角度を読み直すので、動き始めで読めないと伸びます(単発送信なので試行全体への影響は小さい) [RTD ] 区間の所要(送信→到達確認まで)(8 区間): 平均 2.18s / 最大 4.49s [RECORD] 電流の記録終了 45 行 (1.3 行/秒. 本体が眠っている間だけ読む. 爪の間 14.048 秒は読まない. 見込み超え 0 回. read_servo) → /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261113_191709/recording/currents.csv [RECORD] 爪の位置と電圧 36 行 (読めた数 {'7:56': 18, '7:57': 18, '2:62': 18, '7:62': 18}) → /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261113_191709/recording/power_regs.csv ============================================================================== [RTD ] 再生 完了 ============================================================================== [RTD ] つかめたか (y/n) > y [RTD ] 箱に入ったか (y/n) > y [RTD ] 試行 JSON: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261113_191709/run_0001_20261113_191709.json [LEDGER] append OK: /Volumes/KIOXIA/r2r2r-data/runs/pick_place_ledger_v3.csv (pick=yes place=yes recording_status=ok) [RTD ] 次に進むには: python3 /Users/shimazueiichi/r2r2r-scripts/pi05/build_demo_episodes.py --run run_0001_20261113_191709 --dataset mecharm_redblock_box_teach_v1 (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % python3 dynamic_tracking_limits/drag_teaching/record_teach_demo.py run --teach drag_v2_20221013_233323.json --power 5A --execute [RTD ] 到達許容差は本線 run_pick_place.py の stage 値を使います(区間ごと。一律 8.0° は 2026-10-19 にやめた): [RTD ] HOME 2.5° ← rpp.TOL_HOME(stage1_to_home / HOME 復帰) [RTD ] APPROACH_PICK 2.0° ← rpp.TOL_APPROACH(approach 系) [RTD ] PICK 3.0° ← rpp.TOL_PICK_PLACE(stage4_pick) [RTD ] APPROACH_PICK (lift) 3.0° ← rpp.TOL_LIFT_BACK(lift の残差 2.19° を吸収) [RTD ] APPROACH_PLACE 3.0° ← rpp.TOL_APPROACH_PLACE(stage7) [RTD ] PLACE 3.0° ← rpp.TOL_PICK_PLACE(stage8_place) [RTD ] APPROACH_PLACE (retreat) 3.0° ← rpp.TOL_LIFT_BACK(stage10_lift_back) [RTD ] 到達を待つ最大時間 = clamp(2.0 + max|Δ|/20*3.0, 8.0, 30.0) 秒(本線と同じ wr._compute_arrival_timeout) [RTD ] 爪の閉じる値: 20(既定) [RTD ] 電源: 5A(--power。試行 JSON の power に残し、爪の位置と電圧も読みます) [RTD ] モード: EXECUTE(実機) 記録: ON [RTD ] Pi から教えた記録を取得します: ubuntu@192.168.2.1:r2r2r-scripts/dynamic_tracking_limits/drag_teaching/drag_v2_20221013_233323.json [RTD ] 取得しました → /var/folders/5w/2q2mc64n6yv63gfh31h34w6h0000gn/T/record_teach_demo_22ctq726/drag_v2_20221013_233323.json [RTD ] 入力ファイル: drag_v2_20221013_233323.json [RTD ] 抽出ウェイポイント: APPROACH_PICK <- phase APPROACH_PICK argmax_idx=175 (start=175 end=233, gap=14.85°) angles = [ +12.83, +44.38, +31.11, -3.25, -67.06, -26.63] PICK <- gripper close mark idx=247(PICK phase 範囲内) angles = [ +13.09, +59.23, +18.54, -3.25, -60.11, -27.07] APPROACH_PLACE <- phase APPROACH_PLACE argmax_idx=350 (start=350 end=390, gap=15.39°) angles = [ +43.15, +50.62, -5.27, +5.44, -46.66, -35.41] PLACE <- gripper open mark idx=400(PLACE phase 範囲内) angles = [ +43.06, +66.00, -5.97, +6.67, -62.05, -35.33] [RTD ] JOINT_LIMITS 一括検証 OK(全 endpoint + HOME) [RTD ] 姿勢検査 OK(全 116 姿勢が 有限値 + JOINT_LIMITS + J4_SAFE [-90.0, +60.0] 内) [RTD ] j4 の余裕は最小 22.94°(しきい値 3.0° 以上) [RTD ] 現在姿勢を daemon から取得します [RTD ] 現在姿勢 = [ -0.43, +1.31, +0.79, +0.26, -0.26, -30.23] ============================================================================== [RTD ] 実行プラン(daemon 経由・区間ごとに 1 回送信 → 到達待ち) ============================================================================== [STEP 1] MOVE → HOME (single send + settle) speed=20 current = [ -0.43, +1.31, +0.79, +0.26, -0.26, -30.23] to HOME = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 1.31° (settle 3.0s) [STEP 2] GRIPPER OPEN daemon_set_gripper(0, 50, wait=0) ×1 回(daemon 事前 2.0s + 事後 2.0s + 待ち 2.0s)= 計 6.0s 開いたかは確認しません(gv を使わず・開始前の y/n も無し。判定は終了後の y/n と動画) [STEP 3] MOVE → APPROACH_PICK segment HOME → APPROACH_PICK tol=2.0° [rpp.TOL_APPROACH(approach 系)] from = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] to = [ +12.83, +44.38, +31.11, -3.25, -67.06, -26.63] max |Δ| = 67.06° 1 回送信 speed=20 (~ 3.4s @ 20°/s 目安・到達待ち 最大 12.1s) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage4_pick)] from = [ +12.83, +44.38, +31.11, -3.25, -67.06, -26.63] to = [ +13.09, +59.23, +18.54, -3.25, -60.11, -27.07] max |Δ| = 14.85° 1 回送信 speed=20 (~ 0.7s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 5] GRIPPER CLOSE daemon_set_gripper_value(20, 50) + sleep(2.0s) [STEP 6] MOVE → APPROACH_PICK (lift) segment PICK → APPROACH_PICK (lift) tol=3.0° [rpp.TOL_LIFT_BACK(lift の残差 2.19° を吸収)] from = [ +13.09, +59.23, +18.54, -3.25, -60.11, -27.07] to = [ +12.83, +44.38, +31.11, -3.25, -67.06, -26.63] max |Δ| = 14.85° 1 回送信 speed=20 (~ 0.7s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE tol=3.0° [rpp.TOL_APPROACH_PLACE(stage7)] from = [ +12.83, +44.38, +31.11, -3.25, -67.06, -26.63] to = [ +43.15, +50.62, -5.27, +5.44, -46.66, -35.41] max |Δ| = 36.38° 1 回送信 speed=20 (~ 1.8s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage8_place)] from = [ +43.15, +50.62, -5.27, +5.44, -46.66, -35.41] to = [ +43.06, +66.00, -5.97, +6.67, -62.05, -35.33] max |Δ| = 15.39° 1 回送信 speed=20 (~ 0.8s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 9] GRIPPER OPEN daemon_set_gripper(0, 50, wait=0) ×1 回(daemon 事前 2.0s + 事後 2.0s + 待ち 2.0s)= 計 6.0s 開いたかは確認しません(gv を使わず・開始前の y/n も無し。判定は終了後の y/n と動画) [STEP 10] MOVE → APPROACH_PLACE (retreat) segment PLACE → APPROACH_PLACE (retreat) tol=3.0° [rpp.TOL_LIFT_BACK(stage10_lift_back)] from = [ +43.06, +66.00, -5.97, +6.67, -62.05, -35.33] to = [ +43.15, +50.62, -5.27, +5.44, -46.66, -35.41] max |Δ| = 15.39° 1 回送信 speed=20 (~ 0.8s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME tol=2.5° [rpp.TOL_HOME(stage1_to_home / HOME 復帰)] from = [ +43.15, +50.62, -5.27, +5.44, -46.66, -35.41] to = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 50.62° 1 回送信 speed=20 (~ 2.5s @ 20°/s 目安・到達待ち 最大 9.6s) ============================================================================== [RTD ] 送信 = 8 回(STEP 1 + move 7 区間), 想定所要時間 ≈ 27.7s(最悪 73.0s) [RTD ] 内訳: 先頭 settle 3.0s + 移動 10.7s(max|Δ| 合計 214.5° @ 20°/s 目安) + gripper 14.0s [RTD ] 到達確認: 許容は区間ごと(本線 run_pick_place.py の stage 値)/ 最大は clamp(2.0 + max|Δ|/20*3.0, 8.0, 30.0) 秒 [RTD ] 届かないとき: 送信前から 1.0° 未満しか動いていなければ 5.0s 待って**同じ目標へ 1 回だけ**再送(本線と同じ)。それでも届かなければ ABORT(HOME へ自動で戻らない) [RTD ] 実測 j4: [-90.0, +60.0] の外は WARN / [-98.0, +68.0] の外は ABORT ============================================================================== [RTD ] measure: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261113/measure_20261113_191316.json [RTD ] measured_at = 2026-11-13T19:13:21.449689 block = (-263.9, +277.9) mm box = (-143.5, +355.0) mm [RTD ] 再生直前: 上カメラでマット四隅とブロック画素を確認します [RTD ] [WARN] 再生直前: 四隅が最大 809.4px ずれています(1 回目 / 上限 15.0px)。測り直します [RTD ] [WARN] 再生直前: 四隅が最大 809.6px ずれています(2 回目 / 上限 15.0px)。測り直します [RTD ] [WARN] 再生直前: 四隅が最大 810.2px ずれています(3 回目 / 上限 15.0px)。やり直しの上限に達しました [RTD ] 再生直前: block = (-259.4, +284.0) mm(measure の homography で換算) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261113/prerun_20261113_191754.jpg [RTD ] 弾いた理由と各回の記録を残しました: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261113/prerun_20261113_191754_rejected.json [RTD ] [WARN] マット四隅が measure 時から最大 810.2px ずれています(上限 15.0px・最大 3 回やり直しても収まらず)。カメラが動いた可能性があるので止めます。measure を取り直してください(各隅のずれ: 6.0, 810.2, 393.0, 8.5)(**止めません**・WARN のみ) [RTD ] [SAFETY] 再生中はグリッパーが実機で開閉します。爪に指を挟まないこと。 [RTD ] [SAFETY] 止めるときはアームの電源を切ること。Ctrl-C は新しい送信をやめるだけで、進行中の移動は止まりません。 [RTD ] [SAFETY] 開いたかの自動確認はしません(gv は使わない)。STEP 2 で open を送ってから PICK へ降ります。 [RTD ] 周囲に手・物が無いか確認してください。OK なら Enter で開始 [RTD ] 試行フォルダ: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261113_191807 [RTD ] 教えた記録のコピー: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261113_191807/teach/drag_v2_20221013_233323.json [RTD ] recorder に trial_start を送りました。1.0s 待ってから動き出します(mp4 writer が開くまで) [RTD ] 爪と肩の電流を 1 秒 10 回で記録します(爪を動かしている間は読みません)→ /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261113_191807/recording/currents.csv [RTD ] 電源 5A: 爪の位置(番地 7:56/57)と電圧(2:62・7:62)も読みます(生の値・未確認の番地)→ /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261113_191807/recording/power_regs.csv [Pi] fresh_mode=1 [RTD ] daemon_set_fresh_mode(1)(最新コマンド優先・本線 run_pick_place.py L3976 と同じ。647 試行の実績はこの状態) [STEP 1] MOVE → HOME daemon_send_angles(HOME, 20) [STEP 1] 到達待ち 許容 2.5°[TOL_HOME(stage1_to_home / HOME 復帰)] / 最大 8.0s [RTD ] 先頭移動: 送信直前の実測で max|Δ| = 1.31° / 到達待ち 最大 8.0s [STEP 1] 3.0s 待ちます(settle) [RTD ] arrival OK (current → HOME, max|Δ|=1.31° <= tol 2.5°) [STEP 2] GRIPPER OPEN → daemon_set_gripper(0, 50, wait=0) [RTD ] 静止確認 OK(step2_open: 連続 3 回・連続差 最大 0.00° <= 1.0°) [Pi] GRIPPER: OPEN result= None [RTD ] gripper open (1/1 回目) の daemon 往復 = 2.005s [STEP 2] open 後 2.0s 待ちます(本線の daemon wait=2 相当・読み取りなし) [STEP 2] gripper dwell 2.0s(読み取りなし) [STEP 3] MOVE → APPROACH_PICK segment HOME → APPROACH_PICK (1 回送信 speed=20 → 到達待ち 許容 2.0°[TOL_APPROACH(approach 系)] / 最大 12.1s) [RTD ] 送信 OK(daemon 往復 1.029s) [RTD ] arrival OK (HOME → APPROACH_PICK, max|Δ|=1.41° <= tol 2.0°) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_PICK_PLACE(stage4_pick)] / 最大 8.0s) [critical] [RTD ] 送信 OK(daemon 往復 1.031s) [RTD ] arrival OK (APPROACH_PICK → PICK, max|Δ|=1.76° <= tol 3.0°) [STEP 5] GRIPPER CLOSE → daemon_set_gripper_value(20, 50) [RTD ] 静止確認 OK(step5_close: 連続 3 回・連続差 最大 0.00° <= 1.0°) [Pi] GRIPPER: VALUE=20 speed=50 result= None [RTD ] gripper close (1/1 回目) の daemon 往復 = 0.012s [STEP 5] gripper dwell 2.0s(読み取りなし) [STEP 6] MOVE → APPROACH_PICK (lift) segment PICK → APPROACH_PICK (lift) (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_LIFT_BACK(lift の残差 2.19° を吸収)] / 最大 8.0s) [RTD ] 送信 OK(daemon 往復 1.030s) [RTD ] arrival OK (PICK → APPROACH_PICK (lift), max|Δ|=2.99° <= tol 3.0°) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_APPROACH_PLACE(stage7)] / 最大 8.0s) [RTD ] 送信 OK(daemon 往復 1.030s) [RTD ] arrival OK (APPROACH_PICK → APPROACH_PLACE, max|Δ|=1.58° <= tol 3.0°) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_PICK_PLACE(stage8_place)] / 最大 8.0s) [critical] [RTD ] 送信 OK(daemon 往復 1.020s) [RTD ] arrival OK (APPROACH_PLACE → PLACE, max|Δ|=1.41° <= tol 3.0°) [STEP 9] GRIPPER OPEN → daemon_set_gripper(0, 50, wait=0) [RTD ] 静止確認 OK(step9_open: 連続 3 回・連続差 最大 0.09° <= 1.0°) [Pi] GRIPPER: OPEN result= None [RTD ] gripper open (1/1 回目) の daemon 往復 = 2.019s [STEP 9] open 後 2.0s 待ちます(本線の daemon wait=2 相当・読み取りなし) [STEP 9] gripper dwell 2.0s(読み取りなし) [STEP 10] MOVE → APPROACH_PLACE (retreat) segment PLACE → APPROACH_PLACE (retreat) (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_LIFT_BACK(stage10_lift_back)] / 最大 8.0s) [RTD ] 送信 OK(daemon 往復 1.029s) [RTD ] arrival OK (PLACE → APPROACH_PLACE (retreat), max|Δ|=2.02° <= tol 3.0°) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME (1 回送信 speed=20 → 到達待ち 許容 2.5°[TOL_HOME(stage1_to_home / HOME 復帰)] / 最大 9.6s) [RTD ] 送信 OK(daemon 往復 1.035s) [RTD ] arrival OK (APPROACH_PLACE → HOME, max|Δ|=1.31° <= tol 2.5°) [Pi] fresh_mode=0 [RTD ] daemon_set_fresh_mode(0) 完了 [RTD ] 実測角の読み取り: ok 51/51 回, 実効 1.52 Hz(目標 3.0 Hz 以上) [RTD ] [WARN] 実測角の読み取りが目標 3.0 Hz を下回りました(1.52 Hz)。学習データの state 密度が 19 本より薄くなります [RTD ] send_angles の daemon 往復 (7 回): 平均 1.029s / p50 1.030s / 最大 1.035s(timeout 6.0s) [RTD ] [WARN] 送信 1 回に 1.035s かかった回があります。daemon は送信後に角度を読み直すので、動き始めで読めないと伸びます(単発送信なので試行全体への影響は小さい) [RTD ] 区間の所要(送信→到達確認まで)(8 区間): 平均 2.06s / 最大 4.48s [RECORD] 電流の記録終了 44 行 (1.31 行/秒. 本体が眠っている間だけ読む. 爪の間 14.056 秒は読まない. 見込み超え 0 回. read_servo) → /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261113_191807/recording/currents.csv [RECORD] 爪の位置と電圧 35 行 (読めた数 {'7:56': 18, '7:57': 18, '2:62': 17, '7:62': 17}) → /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261113_191807/recording/power_regs.csv ============================================================================== [RTD ] 再生 完了 ============================================================================== [RTD ] つかめたか (y/n) > y [RTD ] 箱に入ったか (y/n) > y [RTD ] 試行 JSON: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261113_191807/run_0001_20261113_191807.json [LEDGER] append OK: /Volumes/KIOXIA/r2r2r-data/runs/pick_place_ledger_v3.csv (pick=yes place=yes recording_status=ok) [RTD ] 次に進むには: python3 /Users/shimazueiichi/r2r2r-scripts/pi05/build_demo_episodes.py --run run_0001_20261113_191807 --dataset mecharm_redblock_box_teach_v1 (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % python3 dynamic_tracking_limits/drag_teaching/record_teach_demo.py run --teach drag_v2_20221013_233323.json --power 5A --execute [RTD ] 到達許容差は本線 run_pick_place.py の stage 値を使います(区間ごと。一律 8.0° は 2026-10-19 にやめた): [RTD ] HOME 2.5° ← rpp.TOL_HOME(stage1_to_home / HOME 復帰) [RTD ] APPROACH_PICK 2.0° ← rpp.TOL_APPROACH(approach 系) [RTD ] PICK 3.0° ← rpp.TOL_PICK_PLACE(stage4_pick) [RTD ] APPROACH_PICK (lift) 3.0° ← rpp.TOL_LIFT_BACK(lift の残差 2.19° を吸収) [RTD ] APPROACH_PLACE 3.0° ← rpp.TOL_APPROACH_PLACE(stage7) [RTD ] PLACE 3.0° ← rpp.TOL_PICK_PLACE(stage8_place) [RTD ] APPROACH_PLACE (retreat) 3.0° ← rpp.TOL_LIFT_BACK(stage10_lift_back) [RTD ] 到達を待つ最大時間 = clamp(2.0 + max|Δ|/20*3.0, 8.0, 30.0) 秒(本線と同じ wr._compute_arrival_timeout) [RTD ] 爪の閉じる値: 20(既定) [RTD ] 電源: 5A(--power。試行 JSON の power に残し、爪の位置と電圧も読みます) [RTD ] モード: EXECUTE(実機) 記録: ON [RTD ] Pi から教えた記録を取得します: ubuntu@192.168.2.1:r2r2r-scripts/dynamic_tracking_limits/drag_teaching/drag_v2_20221013_233323.json [RTD ] 取得しました → /var/folders/5w/2q2mc64n6yv63gfh31h34w6h0000gn/T/record_teach_demo_gp0agddw/drag_v2_20221013_233323.json [RTD ] 入力ファイル: drag_v2_20221013_233323.json [RTD ] 抽出ウェイポイント: APPROACH_PICK <- phase APPROACH_PICK argmax_idx=175 (start=175 end=233, gap=14.85°) angles = [ +12.83, +44.38, +31.11, -3.25, -67.06, -26.63] PICK <- gripper close mark idx=247(PICK phase 範囲内) angles = [ +13.09, +59.23, +18.54, -3.25, -60.11, -27.07] APPROACH_PLACE <- phase APPROACH_PLACE argmax_idx=350 (start=350 end=390, gap=15.39°) angles = [ +43.15, +50.62, -5.27, +5.44, -46.66, -35.41] PLACE <- gripper open mark idx=400(PLACE phase 範囲内) angles = [ +43.06, +66.00, -5.97, +6.67, -62.05, -35.33] [RTD ] JOINT_LIMITS 一括検証 OK(全 endpoint + HOME) [RTD ] 姿勢検査 OK(全 116 姿勢が 有限値 + JOINT_LIMITS + J4_SAFE [-90.0, +60.0] 内) [RTD ] j4 の余裕は最小 22.94°(しきい値 3.0° 以上) [RTD ] 現在姿勢を daemon から取得します [RTD ] 現在姿勢 = [ -0.43, +1.31, +0.79, +0.26, -0.26, -30.23] ============================================================================== [RTD ] 実行プラン(daemon 経由・区間ごとに 1 回送信 → 到達待ち) ============================================================================== [STEP 1] MOVE → HOME (single send + settle) speed=20 current = [ -0.43, +1.31, +0.79, +0.26, -0.26, -30.23] to HOME = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 1.31° (settle 3.0s) [STEP 2] GRIPPER OPEN daemon_set_gripper(0, 50, wait=0) ×1 回(daemon 事前 2.0s + 事後 2.0s + 待ち 2.0s)= 計 6.0s 開いたかは確認しません(gv を使わず・開始前の y/n も無し。判定は終了後の y/n と動画) [STEP 3] MOVE → APPROACH_PICK segment HOME → APPROACH_PICK tol=2.0° [rpp.TOL_APPROACH(approach 系)] from = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] to = [ +12.83, +44.38, +31.11, -3.25, -67.06, -26.63] max |Δ| = 67.06° 1 回送信 speed=20 (~ 3.4s @ 20°/s 目安・到達待ち 最大 12.1s) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage4_pick)] from = [ +12.83, +44.38, +31.11, -3.25, -67.06, -26.63] to = [ +13.09, +59.23, +18.54, -3.25, -60.11, -27.07] max |Δ| = 14.85° 1 回送信 speed=20 (~ 0.7s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 5] GRIPPER CLOSE daemon_set_gripper_value(20, 50) + sleep(2.0s) [STEP 6] MOVE → APPROACH_PICK (lift) segment PICK → APPROACH_PICK (lift) tol=3.0° [rpp.TOL_LIFT_BACK(lift の残差 2.19° を吸収)] from = [ +13.09, +59.23, +18.54, -3.25, -60.11, -27.07] to = [ +12.83, +44.38, +31.11, -3.25, -67.06, -26.63] max |Δ| = 14.85° 1 回送信 speed=20 (~ 0.7s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE tol=3.0° [rpp.TOL_APPROACH_PLACE(stage7)] from = [ +12.83, +44.38, +31.11, -3.25, -67.06, -26.63] to = [ +43.15, +50.62, -5.27, +5.44, -46.66, -35.41] max |Δ| = 36.38° 1 回送信 speed=20 (~ 1.8s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage8_place)] from = [ +43.15, +50.62, -5.27, +5.44, -46.66, -35.41] to = [ +43.06, +66.00, -5.97, +6.67, -62.05, -35.33] max |Δ| = 15.39° 1 回送信 speed=20 (~ 0.8s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 9] GRIPPER OPEN daemon_set_gripper(0, 50, wait=0) ×1 回(daemon 事前 2.0s + 事後 2.0s + 待ち 2.0s)= 計 6.0s 開いたかは確認しません(gv を使わず・開始前の y/n も無し。判定は終了後の y/n と動画) [STEP 10] MOVE → APPROACH_PLACE (retreat) segment PLACE → APPROACH_PLACE (retreat) tol=3.0° [rpp.TOL_LIFT_BACK(stage10_lift_back)] from = [ +43.06, +66.00, -5.97, +6.67, -62.05, -35.33] to = [ +43.15, +50.62, -5.27, +5.44, -46.66, -35.41] max |Δ| = 15.39° 1 回送信 speed=20 (~ 0.8s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME tol=2.5° [rpp.TOL_HOME(stage1_to_home / HOME 復帰)] from = [ +43.15, +50.62, -5.27, +5.44, -46.66, -35.41] to = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 50.62° 1 回送信 speed=20 (~ 2.5s @ 20°/s 目安・到達待ち 最大 9.6s) ============================================================================== [RTD ] 送信 = 8 回(STEP 1 + move 7 区間), 想定所要時間 ≈ 27.7s(最悪 73.0s) [RTD ] 内訳: 先頭 settle 3.0s + 移動 10.7s(max|Δ| 合計 214.5° @ 20°/s 目安) + gripper 14.0s [RTD ] 到達確認: 許容は区間ごと(本線 run_pick_place.py の stage 値)/ 最大は clamp(2.0 + max|Δ|/20*3.0, 8.0, 30.0) 秒 [RTD ] 届かないとき: 送信前から 1.0° 未満しか動いていなければ 5.0s 待って**同じ目標へ 1 回だけ**再送(本線と同じ)。それでも届かなければ ABORT(HOME へ自動で戻らない) [RTD ] 実測 j4: [-90.0, +60.0] の外は WARN / [-98.0, +68.0] の外は ABORT ============================================================================== [RTD ] measure: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261113/measure_20261113_191316.json [RTD ] measured_at = 2026-11-13T19:13:21.449689 block = (-263.9, +277.9) mm box = (-143.5, +355.0) mm [RTD ] 再生直前: 上カメラでマット四隅とブロック画素を確認します [RTD ] [WARN] 再生直前: 四隅が最大 809.6px ずれています(1 回目 / 上限 15.0px)。測り直します [RTD ] [WARN] 再生直前: 四隅が最大 809.4px ずれています(2 回目 / 上限 15.0px)。測り直します [RTD ] [WARN] 再生直前: 四隅が最大 809.4px ずれています(3 回目 / 上限 15.0px)。やり直しの上限に達しました [RTD ] 再生直前: block = (-259.2, +281.5) mm(measure の homography で換算) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261113/prerun_20261113_191907.jpg [RTD ] 弾いた理由と各回の記録を残しました: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261113/prerun_20261113_191907_rejected.json [RTD ] [WARN] マット四隅が measure 時から最大 809.4px ずれています(上限 15.0px・最大 3 回やり直しても収まらず)。カメラが動いた可能性があるので止めます。measure を取り直してください(各隅のずれ: 6.0, 809.4, 393.1, 8.6)(**止めません**・WARN のみ) [RTD ] [SAFETY] 再生中はグリッパーが実機で開閉します。爪に指を挟まないこと。 [RTD ] [SAFETY] 止めるときはアームの電源を切ること。Ctrl-C は新しい送信をやめるだけで、進行中の移動は止まりません。 [RTD ] [SAFETY] 開いたかの自動確認はしません(gv は使わない)。STEP 2 で open を送ってから PICK へ降ります。 [RTD ] 周囲に手・物が無いか確認してください。OK なら Enter で開始 [RTD ] 試行フォルダ: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261113_191916 [RTD ] 教えた記録のコピー: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261113_191916/teach/drag_v2_20221013_233323.json [RTD ] recorder に trial_start を送りました。1.0s 待ってから動き出します(mp4 writer が開くまで) [RTD ] 爪と肩の電流を 1 秒 10 回で記録します(爪を動かしている間は読みません)→ /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261113_191916/recording/currents.csv [RTD ] 電源 5A: 爪の位置(番地 7:56/57)と電圧(2:62・7:62)も読みます(生の値・未確認の番地)→ /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261113_191916/recording/power_regs.csv [Pi] fresh_mode=1 [RTD ] daemon_set_fresh_mode(1)(最新コマンド優先・本線 run_pick_place.py L3976 と同じ。647 試行の実績はこの状態) [STEP 1] MOVE → HOME daemon_send_angles(HOME, 20) [STEP 1] 到達待ち 許容 2.5°[TOL_HOME(stage1_to_home / HOME 復帰)] / 最大 8.0s [RTD ] 先頭移動: 送信直前の実測で max|Δ| = 1.31° / 到達待ち 最大 8.0s [STEP 1] 3.0s 待ちます(settle) [RTD ] arrival OK (current → HOME, max|Δ|=1.31° <= tol 2.5°) [STEP 2] GRIPPER OPEN → daemon_set_gripper(0, 50, wait=0) [RTD ] 静止確認 OK(step2_open: 連続 3 回・連続差 最大 0.00° <= 1.0°) [Pi] GRIPPER: OPEN result= None [RTD ] gripper open (1/1 回目) の daemon 往復 = 2.013s [STEP 2] open 後 2.0s 待ちます(本線の daemon wait=2 相当・読み取りなし) [STEP 2] gripper dwell 2.0s(読み取りなし) [STEP 3] MOVE → APPROACH_PICK segment HOME → APPROACH_PICK (1 回送信 speed=20 → 到達待ち 許容 2.0°[TOL_APPROACH(approach 系)] / 最大 12.1s) [RTD ] 送信 OK(daemon 往復 1.029s) [RTD ] arrival OK (HOME → APPROACH_PICK, max|Δ|=1.32° <= tol 2.0°) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_PICK_PLACE(stage4_pick)] / 最大 8.0s) [critical] [RTD ] 送信 OK(daemon 往復 1.030s) [RTD ] arrival OK (APPROACH_PICK → PICK, max|Δ|=1.67° <= tol 3.0°) [STEP 5] GRIPPER CLOSE → daemon_set_gripper_value(20, 50) [RTD ] 静止確認 OK(step5_close: 連続 3 回・連続差 最大 0.00° <= 1.0°) [Pi] GRIPPER: VALUE=20 speed=50 result= None [RTD ] gripper close (1/1 回目) の daemon 往復 = 0.013s [STEP 5] gripper dwell 2.0s(読み取りなし) [STEP 6] MOVE → APPROACH_PICK (lift) segment PICK → APPROACH_PICK (lift) (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_LIFT_BACK(lift の残差 2.19° を吸収)] / 最大 8.0s) [RTD ] 送信 OK(daemon 往復 1.055s) [RTD ] arrival OK (PICK → APPROACH_PICK (lift), max|Δ|=2.99° <= tol 3.0°) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_APPROACH_PLACE(stage7)] / 最大 8.0s) [RTD ] 送信 OK(daemon 往復 1.031s) [RTD ] arrival OK (APPROACH_PICK → APPROACH_PLACE, max|Δ|=1.76° <= tol 3.0°) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_PICK_PLACE(stage8_place)] / 最大 8.0s) [critical] [RTD ] 送信 OK(daemon 往復 1.031s) [RTD ] arrival OK (APPROACH_PLACE → PLACE, max|Δ|=1.41° <= tol 3.0°) [STEP 9] GRIPPER OPEN → daemon_set_gripper(0, 50, wait=0) [RTD ] 静止確認 OK(step9_open: 連続 3 回・連続差 最大 0.09° <= 1.0°) [Pi] GRIPPER: OPEN result= None [RTD ] gripper open (1/1 回目) の daemon 往復 = 2.004s [STEP 9] open 後 2.0s 待ちます(本線の daemon wait=2 相当・読み取りなし) [STEP 9] gripper dwell 2.0s(読み取りなし) [STEP 10] MOVE → APPROACH_PLACE (retreat) segment PLACE → APPROACH_PLACE (retreat) (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_LIFT_BACK(stage10_lift_back)] / 最大 8.0s) [RTD ] 送信 OK(daemon 往復 1.031s) [RTD ] arrival OK (PLACE → APPROACH_PLACE (retreat), max|Δ|=2.02° <= tol 3.0°) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME (1 回送信 speed=20 → 到達待ち 許容 2.5°[TOL_HOME(stage1_to_home / HOME 復帰)] / 最大 9.6s) [RTD ] 送信 OK(daemon 往復 1.049s) [RTD ] arrival OK (APPROACH_PLACE → HOME, max|Δ|=1.23° <= tol 2.5°) [Pi] fresh_mode=0 [RTD ] daemon_set_fresh_mode(0) 完了 [RTD ] 実測角の読み取り: ok 51/51 回, 実効 1.52 Hz(目標 3.0 Hz 以上) [RTD ] [WARN] 実測角の読み取りが目標 3.0 Hz を下回りました(1.52 Hz)。学習データの state 密度が 19 本より薄くなります [RTD ] send_angles の daemon 往復 (7 回): 平均 1.037s / p50 1.032s / 最大 1.055s(timeout 6.0s) [RTD ] [WARN] 送信 1 回に 1.055s かかった回があります。daemon は送信後に角度を読み直すので、動き始めで読めないと伸びます(単発送信なので試行全体への影響は小さい) [RTD ] 区間の所要(送信→到達確認まで)(8 区間): 平均 2.06s / 最大 4.46s [RECORD] 電流の記録終了 43 行 (1.28 行/秒. 本体が眠っている間だけ読む. 爪の間 14.051 秒は読まない. 見込み超え 0 回. read_servo) → /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261113_191916/recording/currents.csv [RECORD] 爪の位置と電圧 34 行 (読めた数 {'7:56': 17, '7:57': 17, '2:62': 17, '7:62': 17}) → /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261113_191916/recording/power_regs.csv ============================================================================== [RTD ] 再生 完了 ============================================================================== [RTD ] つかめたか (y/n) > y [RTD ] 箱に入ったか (y/n) > y [RTD ] 試行 JSON: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261113_191916/run_0001_20261113_191916.json [LEDGER] append OK: /Volumes/KIOXIA/r2r2r-data/runs/pick_place_ledger_v3.csv (pick=yes place=yes recording_status=ok) [RTD ] 次に進むには: python3 /Users/shimazueiichi/r2r2r-scripts/pi05/build_demo_episodes.py --run run_0001_20261113_191916 --dataset mecharm_redblock_box_teach_v1 (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % python3 dynamic_tracking_limits/drag_teaching/record_teach_demo.py run --teach drag_v2_20221013_233323.json --power 5A --execute [RTD ] 到達許容差は本線 run_pick_place.py の stage 値を使います(区間ごと。一律 8.0° は 2026-10-19 にやめた): [RTD ] HOME 2.5° ← rpp.TOL_HOME(stage1_to_home / HOME 復帰) [RTD ] APPROACH_PICK 2.0° ← rpp.TOL_APPROACH(approach 系) [RTD ] PICK 3.0° ← rpp.TOL_PICK_PLACE(stage4_pick) [RTD ] APPROACH_PICK (lift) 3.0° ← rpp.TOL_LIFT_BACK(lift の残差 2.19° を吸収) [RTD ] APPROACH_PLACE 3.0° ← rpp.TOL_APPROACH_PLACE(stage7) [RTD ] PLACE 3.0° ← rpp.TOL_PICK_PLACE(stage8_place) [RTD ] APPROACH_PLACE (retreat) 3.0° ← rpp.TOL_LIFT_BACK(stage10_lift_back) [RTD ] 到達を待つ最大時間 = clamp(2.0 + max|Δ|/20*3.0, 8.0, 30.0) 秒(本線と同じ wr._compute_arrival_timeout) [RTD ] 爪の閉じる値: 20(既定) [RTD ] 電源: 5A(--power。試行 JSON の power に残し、爪の位置と電圧も読みます) [RTD ] モード: EXECUTE(実機) 記録: ON [RTD ] Pi から教えた記録を取得します: ubuntu@192.168.2.1:r2r2r-scripts/dynamic_tracking_limits/drag_teaching/drag_v2_20221013_233323.json [RTD ] 取得しました → /var/folders/5w/2q2mc64n6yv63gfh31h34w6h0000gn/T/record_teach_demo_qgn8osrx/drag_v2_20221013_233323.json [RTD ] 入力ファイル: drag_v2_20221013_233323.json [RTD ] 抽出ウェイポイント: APPROACH_PICK <- phase APPROACH_PICK argmax_idx=175 (start=175 end=233, gap=14.85°) angles = [ +12.83, +44.38, +31.11, -3.25, -67.06, -26.63] PICK <- gripper close mark idx=247(PICK phase 範囲内) angles = [ +13.09, +59.23, +18.54, -3.25, -60.11, -27.07] APPROACH_PLACE <- phase APPROACH_PLACE argmax_idx=350 (start=350 end=390, gap=15.39°) angles = [ +43.15, +50.62, -5.27, +5.44, -46.66, -35.41] PLACE <- gripper open mark idx=400(PLACE phase 範囲内) angles = [ +43.06, +66.00, -5.97, +6.67, -62.05, -35.33] [RTD ] JOINT_LIMITS 一括検証 OK(全 endpoint + HOME) [RTD ] 姿勢検査 OK(全 116 姿勢が 有限値 + JOINT_LIMITS + J4_SAFE [-90.0, +60.0] 内) [RTD ] j4 の余裕は最小 22.94°(しきい値 3.0° 以上) [RTD ] 現在姿勢を daemon から取得します [RTD ] 現在姿勢 = [ -0.43, +1.23, +0.79, +0.17, -0.26, -30.23] ============================================================================== [RTD ] 実行プラン(daemon 経由・区間ごとに 1 回送信 → 到達待ち) ============================================================================== [STEP 1] MOVE → HOME (single send + settle) speed=20 current = [ -0.43, +1.23, +0.79, +0.17, -0.26, -30.23] to HOME = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 1.23° (settle 3.0s) [STEP 2] GRIPPER OPEN daemon_set_gripper(0, 50, wait=0) ×1 回(daemon 事前 2.0s + 事後 2.0s + 待ち 2.0s)= 計 6.0s 開いたかは確認しません(gv を使わず・開始前の y/n も無し。判定は終了後の y/n と動画) [STEP 3] MOVE → APPROACH_PICK segment HOME → APPROACH_PICK tol=2.0° [rpp.TOL_APPROACH(approach 系)] from = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] to = [ +12.83, +44.38, +31.11, -3.25, -67.06, -26.63] max |Δ| = 67.06° 1 回送信 speed=20 (~ 3.4s @ 20°/s 目安・到達待ち 最大 12.1s) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage4_pick)] from = [ +12.83, +44.38, +31.11, -3.25, -67.06, -26.63] to = [ +13.09, +59.23, +18.54, -3.25, -60.11, -27.07] max |Δ| = 14.85° 1 回送信 speed=20 (~ 0.7s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 5] GRIPPER CLOSE daemon_set_gripper_value(20, 50) + sleep(2.0s) [STEP 6] MOVE → APPROACH_PICK (lift) segment PICK → APPROACH_PICK (lift) tol=3.0° [rpp.TOL_LIFT_BACK(lift の残差 2.19° を吸収)] from = [ +13.09, +59.23, +18.54, -3.25, -60.11, -27.07] to = [ +12.83, +44.38, +31.11, -3.25, -67.06, -26.63] max |Δ| = 14.85° 1 回送信 speed=20 (~ 0.7s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE tol=3.0° [rpp.TOL_APPROACH_PLACE(stage7)] from = [ +12.83, +44.38, +31.11, -3.25, -67.06, -26.63] to = [ +43.15, +50.62, -5.27, +5.44, -46.66, -35.41] max |Δ| = 36.38° 1 回送信 speed=20 (~ 1.8s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage8_place)] from = [ +43.15, +50.62, -5.27, +5.44, -46.66, -35.41] to = [ +43.06, +66.00, -5.97, +6.67, -62.05, -35.33] max |Δ| = 15.39° 1 回送信 speed=20 (~ 0.8s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 9] GRIPPER OPEN daemon_set_gripper(0, 50, wait=0) ×1 回(daemon 事前 2.0s + 事後 2.0s + 待ち 2.0s)= 計 6.0s 開いたかは確認しません(gv を使わず・開始前の y/n も無し。判定は終了後の y/n と動画) [STEP 10] MOVE → APPROACH_PLACE (retreat) segment PLACE → APPROACH_PLACE (retreat) tol=3.0° [rpp.TOL_LIFT_BACK(stage10_lift_back)] from = [ +43.06, +66.00, -5.97, +6.67, -62.05, -35.33] to = [ +43.15, +50.62, -5.27, +5.44, -46.66, -35.41] max |Δ| = 15.39° 1 回送信 speed=20 (~ 0.8s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME tol=2.5° [rpp.TOL_HOME(stage1_to_home / HOME 復帰)] from = [ +43.15, +50.62, -5.27, +5.44, -46.66, -35.41] to = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 50.62° 1 回送信 speed=20 (~ 2.5s @ 20°/s 目安・到達待ち 最大 9.6s) ============================================================================== [RTD ] 送信 = 8 回(STEP 1 + move 7 区間), 想定所要時間 ≈ 27.7s(最悪 73.0s) [RTD ] 内訳: 先頭 settle 3.0s + 移動 10.7s(max|Δ| 合計 214.5° @ 20°/s 目安) + gripper 14.0s [RTD ] 到達確認: 許容は区間ごと(本線 run_pick_place.py の stage 値)/ 最大は clamp(2.0 + max|Δ|/20*3.0, 8.0, 30.0) 秒 [RTD ] 届かないとき: 送信前から 1.0° 未満しか動いていなければ 5.0s 待って**同じ目標へ 1 回だけ**再送(本線と同じ)。それでも届かなければ ABORT(HOME へ自動で戻らない) [RTD ] 実測 j4: [-90.0, +60.0] の外は WARN / [-98.0, +68.0] の外は ABORT ============================================================================== [RTD ] measure: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261113/measure_20261113_191316.json [RTD ] measured_at = 2026-11-13T19:13:21.449689 block = (-263.9, +277.9) mm box = (-143.5, +355.0) mm [RTD ] 再生直前: 上カメラでマット四隅とブロック画素を確認します [RTD ] [WARN] 再生直前: 四隅が最大 810.4px ずれています(1 回目 / 上限 15.0px)。測り直します [RTD ] [WARN] 再生直前: 四隅が最大 810.4px ずれています(2 回目 / 上限 15.0px)。測り直します [RTD ] [WARN] 再生直前: 四隅が最大 810.4px ずれています(3 回目 / 上限 15.0px)。やり直しの上限に達しました [RTD ] 再生直前: block = (-261.2, +279.7) mm(measure の homography で換算) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261113/prerun_20261113_192027.jpg [RTD ] 弾いた理由と各回の記録を残しました: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261113/prerun_20261113_192027_rejected.json [RTD ] [WARN] マット四隅が measure 時から最大 810.4px ずれています(上限 15.0px・最大 3 回やり直しても収まらず)。カメラが動いた可能性があるので止めます。measure を取り直してください(各隅のずれ: 5.0, 810.4, 393.7, 7.6)(**止めません**・WARN のみ) [RTD ] [SAFETY] 再生中はグリッパーが実機で開閉します。爪に指を挟まないこと。 [RTD ] [SAFETY] 止めるときはアームの電源を切ること。Ctrl-C は新しい送信をやめるだけで、進行中の移動は止まりません。 [RTD ] [SAFETY] 開いたかの自動確認はしません(gv は使わない)。STEP 2 で open を送ってから PICK へ降ります。 [RTD ] 周囲に手・物が無いか確認してください。OK なら Enter で開始 [RTD ] 試行フォルダ: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261113_192043 [RTD ] 教えた記録のコピー: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261113_192043/teach/drag_v2_20221013_233323.json [RTD ] recorder に trial_start を送りました。1.0s 待ってから動き出します(mp4 writer が開くまで) [RTD ] 爪と肩の電流を 1 秒 10 回で記録します(爪を動かしている間は読みません)→ /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261113_192043/recording/currents.csv [RTD ] 電源 5A: 爪の位置(番地 7:56/57)と電圧(2:62・7:62)も読みます(生の値・未確認の番地)→ /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261113_192043/recording/power_regs.csv [Pi] fresh_mode=1 [RTD ] daemon_set_fresh_mode(1)(最新コマンド優先・本線 run_pick_place.py L3976 と同じ。647 試行の実績はこの状態) [STEP 1] MOVE → HOME daemon_send_angles(HOME, 20) [STEP 1] 到達待ち 許容 2.5°[TOL_HOME(stage1_to_home / HOME 復帰)] / 最大 8.0s [RTD ] 先頭移動: 送信直前の実測で max|Δ| = 1.23° / 到達待ち 最大 8.0s [STEP 1] 3.0s 待ちます(settle) [RTD ] arrival OK (current → HOME, max|Δ|=1.23° <= tol 2.5°) [STEP 2] GRIPPER OPEN → daemon_set_gripper(0, 50, wait=0) [RTD ] 静止確認 OK(step2_open: 連続 3 回・連続差 最大 0.00° <= 1.0°) [Pi] GRIPPER: OPEN result= None [RTD ] gripper open (1/1 回目) の daemon 往復 = 2.013s [STEP 2] open 後 2.0s 待ちます(本線の daemon wait=2 相当・読み取りなし) [STEP 2] gripper dwell 2.0s(読み取りなし) [STEP 3] MOVE → APPROACH_PICK segment HOME → APPROACH_PICK (1 回送信 speed=20 → 到達待ち 許容 2.0°[TOL_APPROACH(approach 系)] / 最大 12.1s) [RTD ] 送信 OK(daemon 往復 1.032s) [RTD ] arrival OK (HOME → APPROACH_PICK, max|Δ|=0.97° <= tol 2.0°) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_PICK_PLACE(stage4_pick)] / 最大 8.0s) [critical] [RTD ] 送信 OK(daemon 往復 1.032s) [RTD ] arrival OK (APPROACH_PICK → PICK, max|Δ|=1.76° <= tol 3.0°) [STEP 5] GRIPPER CLOSE → daemon_set_gripper_value(20, 50) [RTD ] 静止確認 OK(step5_close: 連続 3 回・連続差 最大 0.09° <= 1.0°) [Pi] GRIPPER: VALUE=20 speed=50 result= None [RTD ] gripper close (1/1 回目) の daemon 往復 = 0.013s [STEP 5] gripper dwell 2.0s(読み取りなし) [STEP 6] MOVE → APPROACH_PICK (lift) segment PICK → APPROACH_PICK (lift) (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_LIFT_BACK(lift の残差 2.19° を吸収)] / 最大 8.0s) [RTD ] 送信 OK(daemon 往復 1.039s) [RTD ] arrival OK (PICK → APPROACH_PICK (lift), max|Δ|=2.90° <= tol 3.0°) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_APPROACH_PLACE(stage7)] / 最大 8.0s) [RTD ] 送信 OK(daemon 往復 1.056s) [RTD ] arrival OK (APPROACH_PICK → APPROACH_PLACE, max|Δ|=1.49° <= tol 3.0°) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_PICK_PLACE(stage8_place)] / 最大 8.0s) [critical] [RTD ] 送信 OK(daemon 往復 1.031s) [RTD ] arrival OK (APPROACH_PLACE → PLACE, max|Δ|=1.32° <= tol 3.0°) [STEP 9] GRIPPER OPEN → daemon_set_gripper(0, 50, wait=0) [RTD ] 静止確認 OK(step9_open: 連続 3 回・連続差 最大 0.09° <= 1.0°) [Pi] GRIPPER: OPEN result= None [RTD ] gripper open (1/1 回目) の daemon 往復 = 2.013s [STEP 9] open 後 2.0s 待ちます(本線の daemon wait=2 相当・読み取りなし) [STEP 9] gripper dwell 2.0s(読み取りなし) [STEP 10] MOVE → APPROACH_PLACE (retreat) segment PLACE → APPROACH_PLACE (retreat) (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_LIFT_BACK(stage10_lift_back)] / 最大 8.0s) [RTD ] 送信 OK(daemon 往復 1.032s) [RTD ] arrival OK (PLACE → APPROACH_PLACE (retreat), max|Δ|=2.02° <= tol 3.0°) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME (1 回送信 speed=20 → 到達待ち 許容 2.5°[TOL_HOME(stage1_to_home / HOME 復帰)] / 最大 9.6s) [RTD ] 送信 OK(daemon 往復 1.030s) [RTD ] arrival OK (APPROACH_PLACE → HOME, max|Δ|=1.23° <= tol 2.5°) [Pi] fresh_mode=0 [RTD ] daemon_set_fresh_mode(0) 完了 [RTD ] 実測角の読み取り: ok 52/52 回, 実効 1.54 Hz(目標 3.0 Hz 以上) [RTD ] [WARN] 実測角の読み取りが目標 3.0 Hz を下回りました(1.54 Hz)。学習データの state 密度が 19 本より薄くなります [RTD ] send_angles の daemon 往復 (7 回): 平均 1.036s / p50 1.032s / 最大 1.056s(timeout 6.0s) [RTD ] [WARN] 送信 1 回に 1.056s かかった回があります。daemon は送信後に角度を読み直すので、動き始めで読めないと伸びます(単発送信なので試行全体への影響は小さい) [RTD ] 区間の所要(送信→到達確認まで)(8 区間): 平均 2.10s / 最大 4.61s [RECORD] 電流の記録終了 46 行 (1.36 行/秒. 本体が眠っている間だけ読む. 爪の間 14.06 秒は読まない. 見込み超え 0 回. read_servo) → /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261113_192043/recording/currents.csv [RECORD] 爪の位置と電圧 36 行 (読めた数 {'7:56': 18, '7:57': 18, '2:62': 18, '7:62': 18}) → /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261113_192043/recording/power_regs.csv ============================================================================== [RTD ] 再生 完了 ============================================================================== [RTD ] つかめたか (y/n) > y [RTD ] 箱に入ったか (y/n) > y [RTD ] 試行 JSON: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261113_192043/run_0001_20261113_192043.json [LEDGER] append OK: /Volumes/KIOXIA/r2r2r-data/runs/pick_place_ledger_v3.csv (pick=yes place=yes recording_status=ok) [RTD ] 次に進むには: python3 /Users/shimazueiichi/r2r2r-scripts/pi05/build_demo_episodes.py --run run_0001_20261113_192043 --dataset mecharm_redblock_box_teach_v1 (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % python3 dynamic_tracking_limits/drag_teaching/record_teach_demo.py run --teach drag_v2_20221013_233323.json --power 5A --execute [RTD ] 到達許容差は本線 run_pick_place.py の stage 値を使います(区間ごと。一律 8.0° は 2026-10-19 にやめた): [RTD ] HOME 2.5° ← rpp.TOL_HOME(stage1_to_home / HOME 復帰) [RTD ] APPROACH_PICK 2.0° ← rpp.TOL_APPROACH(approach 系) [RTD ] PICK 3.0° ← rpp.TOL_PICK_PLACE(stage4_pick) [RTD ] APPROACH_PICK (lift) 3.0° ← rpp.TOL_LIFT_BACK(lift の残差 2.19° を吸収) [RTD ] APPROACH_PLACE 3.0° ← rpp.TOL_APPROACH_PLACE(stage7) [RTD ] PLACE 3.0° ← rpp.TOL_PICK_PLACE(stage8_place) [RTD ] APPROACH_PLACE (retreat) 3.0° ← rpp.TOL_LIFT_BACK(stage10_lift_back) [RTD ] 到達を待つ最大時間 = clamp(2.0 + max|Δ|/20*3.0, 8.0, 30.0) 秒(本線と同じ wr._compute_arrival_timeout) [RTD ] 爪の閉じる値: 20(既定) [RTD ] 電源: 5A(--power。試行 JSON の power に残し、爪の位置と電圧も読みます) [RTD ] モード: EXECUTE(実機) 記録: ON [RTD ] Pi から教えた記録を取得します: ubuntu@192.168.2.1:r2r2r-scripts/dynamic_tracking_limits/drag_teaching/drag_v2_20221013_233323.json [RTD ] 取得しました → /var/folders/5w/2q2mc64n6yv63gfh31h34w6h0000gn/T/record_teach_demo_mwgv6v4l/drag_v2_20221013_233323.json [RTD ] 入力ファイル: drag_v2_20221013_233323.json [RTD ] 抽出ウェイポイント: APPROACH_PICK <- phase APPROACH_PICK argmax_idx=175 (start=175 end=233, gap=14.85°) angles = [ +12.83, +44.38, +31.11, -3.25, -67.06, -26.63] PICK <- gripper close mark idx=247(PICK phase 範囲内) angles = [ +13.09, +59.23, +18.54, -3.25, -60.11, -27.07] APPROACH_PLACE <- phase APPROACH_PLACE argmax_idx=350 (start=350 end=390, gap=15.39°) angles = [ +43.15, +50.62, -5.27, +5.44, -46.66, -35.41] PLACE <- gripper open mark idx=400(PLACE phase 範囲内) angles = [ +43.06, +66.00, -5.97, +6.67, -62.05, -35.33] [RTD ] JOINT_LIMITS 一括検証 OK(全 endpoint + HOME) [RTD ] 姿勢検査 OK(全 116 姿勢が 有限値 + JOINT_LIMITS + J4_SAFE [-90.0, +60.0] 内) [RTD ] j4 の余裕は最小 22.94°(しきい値 3.0° 以上) [RTD ] 現在姿勢を daemon から取得します [RTD ] 現在姿勢 = [ -0.43, +1.23, +0.79, +0.26, -0.26, -30.23] ============================================================================== [RTD ] 実行プラン(daemon 経由・区間ごとに 1 回送信 → 到達待ち) ============================================================================== [STEP 1] MOVE → HOME (single send + settle) speed=20 current = [ -0.43, +1.23, +0.79, +0.26, -0.26, -30.23] to HOME = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 1.23° (settle 3.0s) [STEP 2] GRIPPER OPEN daemon_set_gripper(0, 50, wait=0) ×1 回(daemon 事前 2.0s + 事後 2.0s + 待ち 2.0s)= 計 6.0s 開いたかは確認しません(gv を使わず・開始前の y/n も無し。判定は終了後の y/n と動画) [STEP 3] MOVE → APPROACH_PICK segment HOME → APPROACH_PICK tol=2.0° [rpp.TOL_APPROACH(approach 系)] from = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] to = [ +12.83, +44.38, +31.11, -3.25, -67.06, -26.63] max |Δ| = 67.06° 1 回送信 speed=20 (~ 3.4s @ 20°/s 目安・到達待ち 最大 12.1s) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage4_pick)] from = [ +12.83, +44.38, +31.11, -3.25, -67.06, -26.63] to = [ +13.09, +59.23, +18.54, -3.25, -60.11, -27.07] max |Δ| = 14.85° 1 回送信 speed=20 (~ 0.7s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 5] GRIPPER CLOSE daemon_set_gripper_value(20, 50) + sleep(2.0s) [STEP 6] MOVE → APPROACH_PICK (lift) segment PICK → APPROACH_PICK (lift) tol=3.0° [rpp.TOL_LIFT_BACK(lift の残差 2.19° を吸収)] from = [ +13.09, +59.23, +18.54, -3.25, -60.11, -27.07] to = [ +12.83, +44.38, +31.11, -3.25, -67.06, -26.63] max |Δ| = 14.85° 1 回送信 speed=20 (~ 0.7s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE tol=3.0° [rpp.TOL_APPROACH_PLACE(stage7)] from = [ +12.83, +44.38, +31.11, -3.25, -67.06, -26.63] to = [ +43.15, +50.62, -5.27, +5.44, -46.66, -35.41] max |Δ| = 36.38° 1 回送信 speed=20 (~ 1.8s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage8_place)] from = [ +43.15, +50.62, -5.27, +5.44, -46.66, -35.41] to = [ +43.06, +66.00, -5.97, +6.67, -62.05, -35.33] max |Δ| = 15.39° 1 回送信 speed=20 (~ 0.8s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 9] GRIPPER OPEN daemon_set_gripper(0, 50, wait=0) ×1 回(daemon 事前 2.0s + 事後 2.0s + 待ち 2.0s)= 計 6.0s 開いたかは確認しません(gv を使わず・開始前の y/n も無し。判定は終了後の y/n と動画) [STEP 10] MOVE → APPROACH_PLACE (retreat) segment PLACE → APPROACH_PLACE (retreat) tol=3.0° [rpp.TOL_LIFT_BACK(stage10_lift_back)] from = [ +43.06, +66.00, -5.97, +6.67, -62.05, -35.33] to = [ +43.15, +50.62, -5.27, +5.44, -46.66, -35.41] max |Δ| = 15.39° 1 回送信 speed=20 (~ 0.8s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME tol=2.5° [rpp.TOL_HOME(stage1_to_home / HOME 復帰)] from = [ +43.15, +50.62, -5.27, +5.44, -46.66, -35.41] to = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 50.62° 1 回送信 speed=20 (~ 2.5s @ 20°/s 目安・到達待ち 最大 9.6s) ============================================================================== [RTD ] 送信 = 8 回(STEP 1 + move 7 区間), 想定所要時間 ≈ 27.7s(最悪 73.0s) [RTD ] 内訳: 先頭 settle 3.0s + 移動 10.7s(max|Δ| 合計 214.5° @ 20°/s 目安) + gripper 14.0s [RTD ] 到達確認: 許容は区間ごと(本線 run_pick_place.py の stage 値)/ 最大は clamp(2.0 + max|Δ|/20*3.0, 8.0, 30.0) 秒 [RTD ] 届かないとき: 送信前から 1.0° 未満しか動いていなければ 5.0s 待って**同じ目標へ 1 回だけ**再送(本線と同じ)。それでも届かなければ ABORT(HOME へ自動で戻らない) [RTD ] 実測 j4: [-90.0, +60.0] の外は WARN / [-98.0, +68.0] の外は ABORT ============================================================================== [RTD ] measure: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261113/measure_20261113_191316.json [RTD ] measured_at = 2026-11-13T19:13:21.449689 block = (-263.9, +277.9) mm box = (-143.5, +355.0) mm [RTD ] 再生直前: 上カメラでマット四隅とブロック画素を確認します [RTD ] [WARN] 再生直前: 四隅が最大 810.0px ずれています(1 回目 / 上限 15.0px)。測り直します [RTD ] [WARN] 再生直前: 四隅が最大 810.2px ずれています(2 回目 / 上限 15.0px)。測り直します [RTD ] [WARN] 再生直前: 四隅が最大 809.4px ずれています(3 回目 / 上限 15.0px)。やり直しの上限に達しました [RTD ] 再生直前: block = (-527.5, +251.4) mm(measure の homography で換算) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261113/prerun_20261113_192210.jpg [RTD ] 弾いた理由と各回の記録を残しました: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261113/prerun_20261113_192210_rejected.json [RTD ] [WARN] マット四隅が measure 時から最大 809.4px ずれています(上限 15.0px・最大 3 回やり直しても収まらず)。カメラが動いた可能性があるので止めます。measure を取り直してください(各隅のずれ: 5.1, 809.4, 393.1, 7.6)(**止めません**・WARN のみ) [RTD ] [SAFETY] 再生中はグリッパーが実機で開閉します。爪に指を挟まないこと。 [RTD ] [SAFETY] 止めるときはアームの電源を切ること。Ctrl-C は新しい送信をやめるだけで、進行中の移動は止まりません。 [RTD ] [SAFETY] 開いたかの自動確認はしません(gv は使わない)。STEP 2 で open を送ってから PICK へ降ります。 [RTD ] 周囲に手・物が無いか確認してください。OK なら Enter で開始 [RTD ] 試行フォルダ: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261113_192223 [RTD ] 教えた記録のコピー: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261113_192223/teach/drag_v2_20221013_233323.json [RTD ] recorder に trial_start を送りました。1.0s 待ってから動き出します(mp4 writer が開くまで) [RTD ] 爪と肩の電流を 1 秒 10 回で記録します(爪を動かしている間は読みません)→ /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261113_192223/recording/currents.csv [RTD ] 電源 5A: 爪の位置(番地 7:56/57)と電圧(2:62・7:62)も読みます(生の値・未確認の番地)→ /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261113_192223/recording/power_regs.csv [Pi] fresh_mode=1 [RTD ] daemon_set_fresh_mode(1)(最新コマンド優先・本線 run_pick_place.py L3976 と同じ。647 試行の実績はこの状態) [STEP 1] MOVE → HOME daemon_send_angles(HOME, 20) [STEP 1] 到達待ち 許容 2.5°[TOL_HOME(stage1_to_home / HOME 復帰)] / 最大 8.0s [RTD ] 先頭移動: 送信直前の実測で max|Δ| = 1.23° / 到達待ち 最大 8.0s [STEP 1] 3.0s 待ちます(settle) [RTD ] arrival OK (current → HOME, max|Δ|=1.23° <= tol 2.5°) [STEP 2] GRIPPER OPEN → daemon_set_gripper(0, 50, wait=0) [RTD ] 静止確認 OK(step2_open: 連続 3 回・連続差 最大 0.00° <= 1.0°) [Pi] GRIPPER: OPEN result= None [RTD ] gripper open (1/1 回目) の daemon 往復 = 2.015s [STEP 2] open 後 2.0s 待ちます(本線の daemon wait=2 相当・読み取りなし) [STEP 2] gripper dwell 2.0s(読み取りなし) [STEP 3] MOVE → APPROACH_PICK segment HOME → APPROACH_PICK (1 回送信 speed=20 → 到達待ち 許容 2.0°[TOL_APPROACH(approach 系)] / 最大 12.1s) [RTD ] 送信 OK(daemon 往復 1.031s) [RTD ] arrival OK (HOME → APPROACH_PICK, max|Δ|=1.06° <= tol 2.0°) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_PICK_PLACE(stage4_pick)] / 最大 8.0s) [critical] [RTD ] 送信 OK(daemon 往復 1.057s) [RTD ] arrival OK (APPROACH_PICK → PICK, max|Δ|=1.76° <= tol 3.0°) [STEP 5] GRIPPER CLOSE → daemon_set_gripper_value(20, 50) [RTD ] 静止確認 OK(step5_close: 連続 3 回・連続差 最大 0.00° <= 1.0°) [Pi] GRIPPER: VALUE=20 speed=50 result= None [RTD ] gripper close (1/1 回目) の daemon 往復 = 0.011s [STEP 5] gripper dwell 2.0s(読み取りなし) [STEP 6] MOVE → APPROACH_PICK (lift) segment PICK → APPROACH_PICK (lift) (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_LIFT_BACK(lift の残差 2.19° を吸収)] / 最大 8.0s) [RTD ] 送信 OK(daemon 往復 1.029s) [RTD ] arrival OK (PICK → APPROACH_PICK (lift), max|Δ|=2.90° <= tol 3.0°) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_APPROACH_PLACE(stage7)] / 最大 8.0s) [RTD ] 送信 OK(daemon 往復 1.052s) [RTD ] arrival OK (APPROACH_PICK → APPROACH_PLACE, max|Δ|=1.49° <= tol 3.0°) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_PICK_PLACE(stage8_place)] / 最大 8.0s) [critical] [RTD ] 送信 OK(daemon 往復 1.031s) [RTD ] arrival OK (APPROACH_PLACE → PLACE, max|Δ|=1.32° <= tol 3.0°) [STEP 9] GRIPPER OPEN → daemon_set_gripper(0, 50, wait=0) [RTD ] 静止確認 OK(step9_open: 連続 3 回・連続差 最大 0.09° <= 1.0°) [Pi] GRIPPER: OPEN result= None [RTD ] gripper open (1/1 回目) の daemon 往復 = 2.013s [STEP 9] open 後 2.0s 待ちます(本線の daemon wait=2 相当・読み取りなし) [STEP 9] gripper dwell 2.0s(読み取りなし) [STEP 10] MOVE → APPROACH_PLACE (retreat) segment PLACE → APPROACH_PLACE (retreat) (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_LIFT_BACK(stage10_lift_back)] / 最大 8.0s) [RTD ] 送信 OK(daemon 往復 1.029s) [RTD ] arrival OK (PLACE → APPROACH_PLACE (retreat), max|Δ|=2.02° <= tol 3.0°) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME (1 回送信 speed=20 → 到達待ち 許容 2.5°[TOL_HOME(stage1_to_home / HOME 復帰)] / 最大 9.6s) [RTD ] 送信 OK(daemon 往復 1.032s) [RTD ] arrival OK (APPROACH_PLACE → HOME, max|Δ|=1.31° <= tol 2.5°) [Pi] fresh_mode=0 [RTD ] daemon_set_fresh_mode(0) 完了 [RTD ] 実測角の読み取り: ok 52/52 回, 実効 1.54 Hz(目標 3.0 Hz 以上) [RTD ] [WARN] 実測角の読み取りが目標 3.0 Hz を下回りました(1.54 Hz)。学習データの state 密度が 19 本より薄くなります [RTD ] send_angles の daemon 往復 (7 回): 平均 1.037s / p50 1.031s / 最大 1.057s(timeout 6.0s) [RTD ] [WARN] 送信 1 回に 1.057s かかった回があります。daemon は送信後に角度を読み直すので、動き始めで読めないと伸びます(単発送信なので試行全体への影響は小さい) [RTD ] 区間の所要(送信→到達確認まで)(8 区間): 平均 2.10s / 最大 4.61s [RECORD] 電流の記録終了 46 行 (1.36 行/秒. 本体が眠っている間だけ読む. 爪の間 14.059 秒は読まない. 見込み超え 0 回. read_servo) → /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261113_192223/recording/currents.csv [RECORD] 爪の位置と電圧 36 行 (読めた数 {'7:56': 18, '7:57': 18, '2:62': 18, '7:62': 18}) → /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261113_192223/recording/power_regs.csv ============================================================================== [RTD ] 再生 完了 ============================================================================== [RTD ] つかめたか (y/n) > y [RTD ] 箱に入ったか (y/n) > y [RTD ] 試行 JSON: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261113_192223/run_0001_20261113_192223.json [LEDGER] append OK: /Volumes/KIOXIA/r2r2r-data/runs/pick_place_ledger_v3.csv (pick=yes place=yes recording_status=ok) [RTD ] 次に進むには: python3 /Users/shimazueiichi/r2r2r-scripts/pi05/build_demo_episodes.py --run run_0001_20261113_192223 --dataset mecharm_redblock_box_teach_v1