(base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % cd ~/r2r2r-scripts && python3 pi05/camera_align.py --raw-dir /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes --episode 183454 --scale 5 --alpha 0.7 && python3 dynamic_tracking_limits/drag_teaching/record_teach_demo.py measure && python3 dynamic_tracking_limits/drag_teaching/record_teach_demo.py run --teach drag_v2_20261109_094222.json --execute [REF ] 基準画像: /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes/run_0001_20261019_183454/frames/000000.jpg [REF ] お手本 run_0001_20261019_183454 (つかんだ瞬間の j0 = -36.4°) [REF ] 重なった画像のブロックに実物のブロックを合わせると, お手本と同じ位置に置ける [ALIGN ] |dy| <= 20 なら OK. アームは HOME に置いた状態で合わせる. q または Esc で終了 (ファイルには何も書かない) [ALIGN ] dy= -2.5 dx= +5.3 response=0.652 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= -1.0 dx= +1.1 response=0.522 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= -2.6 dx= +7.2 response=0.540 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= -1.3 dx= +12.7 response=0.577 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +2.3 dx= +14.3 response=0.528 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +3.8 dx= +14.2 response=0.521 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +2.8 dx= +14.1 response=0.527 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +0.6 dx= +18.7 response=0.592 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= -1.0 dx= +14.9 response=0.579 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= -2.2 dx= +12.5 response=0.536 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= -1.1 dx= +4.7 response=0.510 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +0.4 dx= +1.7 response=0.641 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= -0.6 dx= +6.3 response=0.502 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +0.7 dx= +7.2 response=0.524 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +1.8 dx= +8.4 response=0.523 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +3.4 dx= +9.7 response=0.609 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +2.2 dx= +9.5 response=0.540 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +4.9 dx= +9.5 response=0.533 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +6.9 dx= +8.5 response=0.566 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +8.1 dx= +8.6 response=0.619 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +7.0 dx= +7.9 response=0.606 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +3.7 dx= +7.9 response=0.586 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +4.9 dx= +7.6 response=0.607 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +3.9 dx= +6.7 response=0.584 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +5.2 dx= +5.3 response=0.587 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +7.9 dx= +5.4 response=0.609 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +9.7 dx= +5.7 response=0.626 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +10.8 dx= +5.8 response=0.617 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +6.5 dx= +6.1 response=0.606 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +4.1 dx= +6.3 response=0.566 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +3.0 dx= +7.4 response=0.546 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +1.5 dx= +7.9 response=0.559 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +0.3 dx= +8.6 response=0.585 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= -1.1 dx= +9.4 response=0.602 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= -2.2 dx= +9.7 response=0.581 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= -0.3 dx= +9.3 response=0.529 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +3.2 dx= +9.4 response=0.603 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +6.6 dx= +10.0 response=0.556 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +5.0 dx= +10.6 response=0.615 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +1.4 dx= +10.6 response=0.591 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +0.4 dx= +14.0 response=0.512 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= -0.6 dx= +14.8 response=0.586 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +0.9 dx= +13.0 response=0.551 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +2.0 dx= +10.6 response=0.582 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +3.7 dx= +7.4 response=0.585 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +5.0 dx= +5.7 response=0.600 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +7.1 dx= +6.7 response=0.583 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +8.3 dx= +4.6 response=0.590 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +7.0 dx= +2.8 response=0.617 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +3.5 dx= +1.2 response=0.625 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= -3.2 dx= +2.2 response=0.556 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= -5.0 dx= +2.6 response=0.537 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= -7.2 dx= +6.3 response=0.495 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= -5.0 dx= -13.5 response=0.518 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= -6.2 dx= -18.7 response=0.354 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= -7.2 dx= -11.9 response=0.471 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= -9.1 dx= -7.7 response=0.434 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= -10.3 dx= -5.7 response=0.495 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= -11.7 dx= -1.5 response=0.550 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= -10.6 dx= -2.6 response=0.570 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= -4.5 dx= +0.1 response=0.548 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +7.5 dx= +5.3 response=0.557 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +17.8 dx= +5.4 response=0.407 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +21.5 dx= +4.6 response=0.420 → ずれ (|dy|=21.5 > 20) [ALIGN ] dy= +19.2 dx= +7.7 response=0.456 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +13.0 dx= +10.8 response=0.504 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +5.6 dx= +16.4 response=0.544 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= -3.7 dx= +23.1 response=0.457 → ずれ (|dx|=23.1 > 20) [ALIGN ] dy= -5.3 dx= +22.8 response=0.389 → ずれ (|dx|=22.8 > 20) [ALIGN ] dy= -1.9 dx= +15.7 response=0.475 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +1.9 dx= +1.0 response=0.622 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +4.7 dx= +5.0 response=0.590 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +2.7 dx= +6.2 response=0.590 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +0.1 dx= +0.1 response=0.571 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= -1.4 dx= -1.9 response=0.538 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= -3.4 dx= -1.0 response=0.614 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= -4.4 dx= +2.9 response=0.536 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= -2.8 dx= -1.0 response=0.547 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [DONE ] 終了 (何も書いていません) [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 ] measure: 上カメラで検出します(repeat=5 interval=0.3s) [CAM] 接続中カメラ一覧: index=0 name=FaceTime HDカメラ index=1 name=Iriun Camera index=2 name=‎iPhone14 Pro MAXのカメラ [CAM] 上カメラ(iPhone) index=2 [CAM] 横カメラ(Iriun) index=1 [DETECT] resolved top index: 2 [Mac] マット四隅検出中... (10フレーム) [Mac] ✓ マット四隅検出: 10/10 フレーム成功 [Mac] ✓ 動的homography計算完了 [Mac] ✓ マット範囲: X=[277, 1690] Y=[0, 952] [06f] TEMPLATES_DIR overridden to: /Users/shimazueiichi/r2r2r-scripts/dynamic_tracking_limits/place/templates [06f] ROTATION_ANGLES_DEG overridden to: [0, 15, 30, 45, 60, 75] [06f] SCALES overridden to: [0.85, 1.0, 1.15] [テンプレ] loading white box templates from: /Users/shimazueiichi/r2r2r-scripts/dynamic_tracking_limits/place/templates [テンプレ] glob '/Users/shimazueiichi/r2r2r-scripts/dynamic_tracking_limits/place/templates/*.png' → 8 file(s) [テンプレ] - white_box_20260520_163829_004.png [テンプレ] - white_box_20260520_163838_005.png [テンプレ] - white_box_20260520_163846_006.png [テンプレ] - white_box_20260520_163905_009.png [テンプレ] - white_box_20260520_163912_010.png [テンプレ] - white_box_20260520_163918_011.png [テンプレ] - white_box_20260520_163923_012.png [テンプレ] - white_box_20260520_163929_013.png [テンプレ] 計 8 枚 (day165=8, auto=0) [06f] WARN: 輪郭中心とテンプレ中心の距離が閾値超 |Δ|=99.7px > 60px → 輪郭捨てて fallback [06f] DETECT: center=(1460,572) source=template_fallback score=0.647 angle=0° scale=1.15 size=(226x211) template=white_box_20260520_163838_005.png (eval 5.15s) [DETECT][1/5] box Unity=(-0.210,+0.191) score=0.6468337774276733 赤ブロック pixel=(859, 125) → Unity=(0.0558, -0.0283) [DETECT][1/5] block Unity=(+0.056,-0.028) score=null [06f] WARN: 輪郭中心とテンプレ中心の距離が閾値超 |Δ|=99.7px > 60px → 輪郭捨てて fallback [06f] DETECT: center=(1460,572) source=template_fallback score=0.647 angle=0° scale=1.15 size=(226x211) template=white_box_20260520_163838_005.png (eval 5.17s) [DETECT][2/5] box Unity=(-0.210,+0.191) score=0.6469279527664185 赤ブロック pixel=(859, 132) → Unity=(0.0559, -0.0249) [DETECT][2/5] block Unity=(+0.056,-0.025) score=null [06f] WARN: 輪郭中心とテンプレ中心の距離が閾値超 |Δ|=99.7px > 60px → 輪郭捨てて fallback [06f] DETECT: center=(1460,572) source=template_fallback score=0.647 angle=0° scale=1.15 size=(226x211) template=white_box_20260520_163838_005.png (eval 5.21s) [DETECT][3/5] box Unity=(-0.210,+0.191) score=0.6468681693077087 赤ブロック pixel=(860, 145) → Unity=(0.0556, -0.0186) [DETECT][3/5] block Unity=(+0.056,-0.019) score=null [06f] WARN: 輪郭中心とテンプレ中心の距離が閾値超 |Δ|=99.7px > 60px → 輪郭捨てて fallback [06f] DETECT: center=(1460,572) source=template_fallback score=0.647 angle=0° scale=1.15 size=(226x211) template=white_box_20260520_163838_005.png (eval 5.17s) [DETECT][4/5] box Unity=(-0.210,+0.191) score=0.6468533277511597 [DETECT][4/5] block 未検出 [06f] WARN: 輪郭中心とテンプレ中心の距離が閾値超 |Δ|=99.7px > 60px → 輪郭捨てて fallback [06f] DETECT: center=(1460,572) source=template_fallback score=0.647 angle=0° scale=1.15 size=(226x211) template=white_box_20260520_163838_005.png (eval 5.35s) [DETECT][5/5] box Unity=(-0.210,+0.191) score=0.6467010974884033 赤ブロック pixel=(860, 137) → Unity=(0.0555, -0.0225) [DETECT][5/5] block Unity=(+0.056,-0.022) score=null [RTD ] measure: block = (+55.7, -23.7) mm [RTD ] measure: box = (-209.8, +191.2) mm score=0.6468533277511597 [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/measure_20261109_102707.jpg [RTD ] homography のもとになった四隅と、測り直した四隅の差: 最大 0.54px(上限 15.0px・やり直し 1 回) [RTD ] [WARN] 検出したブロックがアームの根元から 60.5mm しか離れていません(120.0mm 以内は不可)。教示で使う位置は 200mm 以上離れているので、赤いケーブル等の別のものを拾っている可能性が高いです: (+55.7, -23.7) mm(WARN のみ・保存します) [RTD ] 何を拾ったかは確認画像で見てください: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/measure_20261109_102707.jpg [RTD ] ブロックのばらつき: 3.2px = 1.51mm(3 枚・上限 4.0mm) [RTD ] 元の検出と測り直しの差: 1.23mm(上限 3.0mm) [RTD ] 保存しました: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/measure_20261109_102707.json [RTD ] [WARN] この measure には WARN が 1 件あります: block_too_close_to_base [RTD ] [WARN] 値が外れている可能性があります。気になるなら取り直してください(保存はしてあります) [RTD ] 次は Pi で教示 → daemon 起動 → recorder.py --top --no-side 常駐 → run --teach --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 ] モード: EXECUTE(実機) 記録: ON [RTD ] Pi から教えた記録を取得します: ubuntu@192.168.2.1:r2r2r-scripts/dynamic_tracking_limits/drag_teaching/drag_v2_20261109_094222.json [RTD ] 取得しました → /var/folders/5w/2q2mc64n6yv63gfh31h34w6h0000gn/T/record_teach_demo_wx4fmt0v/drag_v2_20261109_094222.json [RTD ] 入力ファイル: drag_v2_20261109_094222.json [RTD ] 抽出ウェイポイント: APPROACH_PICK <- phase APPROACH_PICK argmax_idx=240 (start=240 end=290, gap=13.89°) angles = [ -40.69, +66.09, +1.49, +0.61, -70.48, -29.88] PICK <- gripper close mark idx=355(PICK phase 範囲内) angles = [ -40.51, +79.98, -0.43, +0.43, -73.47, -29.97] APPROACH_PLACE <- phase APPROACH_PLACE argmax_idx=470 (start=470 end=512, gap=27.86°) angles = [ +43.41, +31.81, +18.54, +6.24, -56.95, -29.88] PLACE <- gripper open mark idx=552(PLACE phase 範囲内) angles = [ +44.20, +59.67, +6.15, +10.54, -74.88, -30.84] [RTD ] JOINT_LIMITS 一括検証 OK(全 endpoint + HOME) [RTD ] 姿勢検査 OK(全 155 姿勢が 有限値 + JOINT_LIMITS + J4_SAFE [-90.0, +60.0] 内) [RTD ] j4 の余裕は最小 15.12°(しきい値 3.0° 以上) [RTD ] 現在姿勢を daemon から取得します [RTD ] 現在姿勢 = [ +0.26, +1.40, +0.79, -0.26, -0.26, -30.23] ============================================================================== [RTD ] 実行プラン(daemon 経由・区間ごとに 1 回送信 → 到達待ち) ============================================================================== [STEP 1] MOVE → HOME (single send + settle) speed=20 current = [ +0.26, +1.40, +0.79, -0.26, -0.26, -30.23] to HOME = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 1.40° (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 = [ -40.69, +66.09, +1.49, +0.61, -70.48, -29.88] max |Δ| = 70.48° 1 回送信 speed=20 (~ 3.5s @ 20°/s 目安・到達待ち 最大 12.6s) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage4_pick)] from = [ -40.69, +66.09, +1.49, +0.61, -70.48, -29.88] to = [ -40.51, +79.98, -0.43, +0.43, -73.47, -29.97] max |Δ| = 13.89° 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 = [ -40.51, +79.98, -0.43, +0.43, -73.47, -29.97] to = [ -40.69, +66.09, +1.49, +0.61, -70.48, -29.88] max |Δ| = 13.89° 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 = [ -40.69, +66.09, +1.49, +0.61, -70.48, -29.88] to = [ +43.41, +31.81, +18.54, +6.24, -56.95, -29.88] max |Δ| = 84.10° 1 回送信 speed=20 (~ 4.2s @ 20°/s 目安・到達待ち 最大 14.6s) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage8_place)] from = [ +43.41, +31.81, +18.54, +6.24, -56.95, -29.88] to = [ +44.20, +59.67, +6.15, +10.54, -74.88, -30.84] max |Δ| = 27.86° 1 回送信 speed=20 (~ 1.4s @ 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 = [ +44.20, +59.67, +6.15, +10.54, -74.88, -30.84] to = [ +43.41, +31.81, +18.54, +6.24, -56.95, -29.88] max |Δ| = 27.86° 1 回送信 speed=20 (~ 1.4s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME tol=2.5° [rpp.TOL_HOME(stage1_to_home / HOME 復帰)] from = [ +43.41, +31.81, +18.54, +6.24, -56.95, -29.88] to = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 56.95° 1 回送信 speed=20 (~ 2.8s @ 20°/s 目安・到達待ち 最大 10.5s) ============================================================================== [RTD ] 送信 = 8 回(STEP 1 + move 7 区間), 想定所要時間 ≈ 31.8s(最悪 73.0s) [RTD ] 内訳: 先頭 settle 3.0s + 移動 14.8s(max|Δ| 合計 295.0° @ 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_20261109/measure_20261109_102707.json [RTD ] measured_at = 2026-11-09T10:27:09.693356 block = (+55.7, -23.7) mm box = (-209.8, +191.2) mm [RTD ] 再生直前: 上カメラでマット四隅とブロック画素を確認します [RTD ] 再生直前: block = (+55.5, -23.0) mm(measure の homography で換算) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_102712.jpg [RTD ] 何を拾ったかは確認画像で見てください: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_102712.jpg [RTD ] [WARN] 検出したブロックがアームの根元から 60.1mm しか離れていません(120.0mm 以内は不可)。教示で使う位置は 200mm 以上離れているので、赤いケーブル等の別のものを拾っている可能性が高いです: (+55.5, -23.0) mm(**止めません**・WARN のみ) [RTD ] ブロック位置の照合 OK(画素の差 1.6px <= 許容 10.3px = 5.0mm / mm 換算の差 0.76mm) [RTD ] マット四隅のずれ 最大 1.0px(上限 15.0px・やり直し 1 回) [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_20261109_102715 [RTD ] 教えた記録のコピー: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_102715/teach/drag_v2_20261109_094222.json [RTD ] recorder に trial_start を送りました。1.0s 待ってから動き出します(mp4 writer が開くまで) [RTD ] 爪と肩の電流を 1 秒 10 回で記録します(爪を動かしている間は読みません)→ /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_102715/recording/currents.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.40° / 到達待ち 最大 8.0s [STEP 1] 3.0s 待ちます(settle) [RTD ] arrival OK (current → HOME, max|Δ|=1.40° <= 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.6s) [RTD ] 送信 OK(daemon 往復 1.030s) [RTD ] arrival OK (HOME → APPROACH_PICK, max|Δ|=1.05° <= 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|Δ|=2.99° <= tol 3.0°) [STEP 5] GRIPPER CLOSE → daemon_set_gripper_value(20, 50) [RTD ] 静止確認 OK(step5_close: 連続 3 回・連続差 最大 5.01° <= 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.029s) [RTD ] arrival OK (PICK → APPROACH_PICK (lift), max|Δ|=2.63° <= tol 3.0°) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_APPROACH_PLACE(stage7)] / 最大 14.6s) [RTD ] 送信 OK(daemon 往復 1.039s) [RTD ] arrival OK (APPROACH_PICK → APPROACH_PLACE, max|Δ|=2.02° <= 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.030s) [RTD ] arrival OK (APPROACH_PLACE → PLACE, max|Δ|=2.11° <= 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.012s [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.035s) [RTD ] arrival OK (PLACE → APPROACH_PLACE (retreat), max|Δ|=2.55° <= tol 3.0°) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME (1 回送信 speed=20 → 到達待ち 許容 2.5°[TOL_HOME(stage1_to_home / HOME 復帰)] / 最大 10.5s) [RTD ] 送信 OK(daemon 往復 1.039s) [RTD ] arrival OK (APPROACH_PLACE → HOME, max|Δ|=2.28° <= tol 2.5°) [Pi] fresh_mode=0 [RTD ] daemon_set_fresh_mode(0) 完了 [RTD ] 実測角の読み取り: ok 101/101 回, 実効 2.02 Hz(目標 3.0 Hz 以上) [RTD ] [WARN] 実測角の読み取りが目標 3.0 Hz を下回りました(2.02 Hz)。学習データの state 密度が 19 本より薄くなります [RTD ] send_angles の daemon 往復 (7 回): 平均 1.033s / p50 1.030s / 最大 1.039s(timeout 6.0s) [RTD ] [WARN] 送信 1 回に 1.039s かかった回があります。daemon は送信後に角度を読み直すので、動き始めで読めないと伸びます(単発送信なので試行全体への影響は小さい) [RTD ] 区間の所要(送信→到達確認まで)(8 区間): 平均 3.99s / 最大 8.50s [RECORD] 電流の記録終了 163 行 (3.25 行/秒. 本体が眠っている間だけ読む. 爪の間 14.061 秒は読まない. 見込み超え 1 回. read_servo) → /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_102715/recording/currents.csv ============================================================================== [RTD ] 再生 完了 ============================================================================== [RTD ] つかめたか (y/n) > n [RTD ] 箱に入ったか (y/n) > n [RTD ] 試行 JSON: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_102715/run_0001_20261109_102715.json [LEDGER] append OK: /Volumes/KIOXIA/r2r2r-data/runs/pick_place_ledger_v3.csv (pick=no place=no recording_status=ok) [RTD ] 次に進むには: python3 /Users/shimazueiichi/r2r2r-scripts/pi05/build_demo_episodes.py --run run_0001_20261109_102715 --dataset mecharm_redblock_box_teach_v1