Last login: Mon Nov 9 12:04:46 on ttys005 (base) shimazueiichi@shimadzueiichinoMacBook-Pro ~ % 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_20221013_231249.json python3 dynamic_tracking_limits/drag_teaching/record_teach_demo.py run --teach drag_v2_20221013_231249.json --execute python3: can't open file '/Users/shimazueiichi/dynamic_tracking_limits/drag_teaching/record_teach_demo.py': [Errno 2] No such file or directory python3: can't open file '/Users/shimazueiichi/dynamic_tracking_limits/drag_teaching/record_teach_demo.py': [Errno 2] No such file or directory python3: can't open file '/Users/shimazueiichi/dynamic_tracking_limits/drag_teaching/record_teach_demo.py': [Errno 2] No such file or directory (base) shimazueiichi@shimadzueiichinoMacBook-Pro ~ % cd ~/r2r2r-scripts python3 dynamic_tracking_limits/drag_teaching/record_teach_demo.py measure [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=[304, 1701] Y=[0, 948] [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: 輪郭中心とテンプレ中心の距離が閾値超 |Δ|=102.5px > 60px → 輪郭捨てて fallback [06f] DETECT: center=(1489,553) source=template_fallback score=0.647 angle=0° scale=1.15 size=(226x211) template=white_box_20260520_163838_005.png (eval 5.54s) [DETECT][1/5] box Unity=(-0.218,+0.182) score=0.6472325325012207 赤ブロック pixel=(723, 682) → Unity=(0.1279, 0.2394) [DETECT][1/5] block Unity=(+0.128,+0.239) score=null [06f] WARN: 輪郭中心とテンプレ中心の距離が閾値超 |Δ|=102.2px > 60px → 輪郭捨てて fallback [06f] DETECT: center=(1489,553) source=template_fallback score=0.648 angle=0° scale=1.15 size=(226x211) template=white_box_20260520_163838_005.png (eval 5.45s) [DETECT][2/5] box Unity=(-0.218,+0.182) score=0.6475574374198914 赤ブロック pixel=(724, 683) → Unity=(0.1275, 0.2399) [DETECT][2/5] block Unity=(+0.127,+0.240) score=null [06f] WARN: 輪郭中心とテンプレ中心の距離が閾値超 |Δ|=102.5px > 60px → 輪郭捨てて fallback [06f] DETECT: center=(1489,554) source=template_fallback score=0.647 angle=0° scale=1.15 size=(226x211) template=white_box_20260520_163838_005.png (eval 5.73s) [DETECT][3/5] box Unity=(-0.218,+0.183) score=0.6469919085502625 赤ブロック pixel=(724, 682) → Unity=(0.1274, 0.2394) [DETECT][3/5] block Unity=(+0.127,+0.239) score=null [06f] WARN: 輪郭中心とテンプレ中心の距離が閾値超 |Δ|=102.5px > 60px → 輪郭捨てて fallback [06f] DETECT: center=(1489,554) source=template_fallback score=0.647 angle=0° scale=1.15 size=(226x211) template=white_box_20260520_163838_005.png (eval 5.21s) [DETECT][4/5] box Unity=(-0.218,+0.183) score=0.6472181081771851 赤ブロック pixel=(723, 683) → Unity=(0.1279, 0.2399) [DETECT][4/5] block Unity=(+0.128,+0.240) score=null [06f] WARN: 輪郭中心とテンプレ中心の距離が閾値超 |Δ|=102.8px > 60px → 輪郭捨てて fallback [06f] DETECT: center=(1490,554) source=template_fallback score=0.647 angle=0° scale=1.15 size=(226x211) template=white_box_20260520_163838_005.png (eval 5.25s) [DETECT][5/5] box Unity=(-0.219,+0.183) score=0.6470634937286377 赤ブロック pixel=(724, 683) → Unity=(0.1275, 0.2399) [DETECT][5/5] block Unity=(+0.127,+0.240) score=null [RTD ] measure: block = (+127.5, +239.9) mm [RTD ] measure: box = (-218.3, +183.0) mm score=0.6472181081771851 [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/measure_20261109_120729.jpg [RTD ] homography のもとになった四隅と、測り直した四隅の差: 最大 1.56px(上限 15.0px・やり直し 1 回) [RTD ] ブロックのばらつき: 1.0px = 0.47mm(5 枚・上限 4.0mm) [RTD ] 元の検出と測り直しの差: 0.47mm(上限 3.0mm) [RTD ] 保存しました: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/measure_20261109_120729.json [RTD ] 次は Pi で教示 → daemon 起動 → recorder.py --top --no-side 常駐 → run --teach --execute (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % python3 dynamic_tracking_limits/drag_teaching/record_teach_demo.py run --teach drag_v2_20221013_231249.json [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 ] モード: ドライラン(アームに何も送りません) [RTD ] Pi から教えた記録を取得します: ubuntu@192.168.2.1:r2r2r-scripts/dynamic_tracking_limits/drag_teaching/drag_v2_20221013_231249.json [RTD ] 取得しました → /var/folders/5w/2q2mc64n6yv63gfh31h34w6h0000gn/T/record_teach_demo_1m9msi0m/drag_v2_20221013_231249.json [RTD ] 入力ファイル: drag_v2_20221013_231249.json [RTD ] 抽出ウェイポイント: APPROACH_PICK <- phase APPROACH_PICK argmax_idx=146 (start=146 end=194, gap=12.04°) angles = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] PICK <- gripper close mark idx=214(PICK phase 範囲内) angles = [ -27.68, +63.10, +13.27, -8.26, -59.76, -27.33] APPROACH_PLACE <- phase APPROACH_PLACE argmax_idx=286 (start=286 end=321, gap=20.83°) angles = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] PLACE <- gripper open mark idx=345(PLACE phase 範囲内) angles = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] [RTD ] JOINT_LIMITS 一括検証 OK(全 endpoint + HOME) [RTD ] 姿勢検査 OK(全 137 姿勢が 有限値 + JOINT_LIMITS + J4_SAFE [-90.0, +60.0] 内) [RTD ] j4 の余裕は最小 18.20°(しきい値 3.0° 以上) ============================================================================== [RTD ] 実行プラン(daemon 経由・区間ごとに 1 回送信 → 到達待ち) ============================================================================== [STEP 1] MOVE → HOME (single send + settle) speed=20 current = 未取得(ドライラン・daemon に接続していない) to HOME = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] [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 = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] max |Δ| = 71.80° 1 回送信 speed=20 (~ 3.6s @ 20°/s 目安・到達待ち 最大 12.8s) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage4_pick)] from = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] to = [ -27.68, +63.10, +13.27, -8.26, -59.76, -27.33] max |Δ| = 12.04° 1 回送信 speed=20 (~ 0.6s @ 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 = [ -27.68, +63.10, +13.27, -8.26, -59.76, -27.33] to = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] max |Δ| = 12.04° 1 回送信 speed=20 (~ 0.6s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE tol=3.0° [rpp.TOL_APPROACH_PLACE(stage7)] from = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 69.16° 1 回送信 speed=20 (~ 3.5s @ 20°/s 目安・到達待ち 最大 12.4s) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage8_place)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 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 = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME tol=2.5° [rpp.TOL_HOME(stage1_to_home / HOME 復帰)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 49.39° 1 回送信 speed=20 (~ 2.5s @ 20°/s 目安・到達待ち 最大 9.4s) ============================================================================== [RTD ] 送信 = 8 回(STEP 1 + move 7 区間), 想定所要時間 ≈ 29.8s(最悪 73.0s) [RTD ] 内訳: 先頭 settle 3.0s + 移動 12.8s(max|Δ| 合計 256.1° @ 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_120729.json [RTD ] measured_at = 2026-11-09T12:07:31.373791 block = (+127.5, +239.9) mm box = (-218.3, +183.0) mm [RTD ] 再生直前: 上カメラでマット四隅とブロック画素を確認します [RTD ] 再生直前: block = (+127.4, +239.4) mm(measure の homography で換算) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_120752.jpg [RTD ] ブロック位置の照合 OK(画素の差 1.0px <= 許容 10.5px = 5.0mm / mm 換算の差 0.47mm) [RTD ] マット四隅のずれ 最大 1.4px(上限 15.0px・やり直し 1 回) [RTD ] ドライランなので、ここで終了します(アームには何も送っていません) [RTD ] Pi 版と比べる点: 抽出ウェイポイント 4 姿勢と各区間の max|Δ| は同じ。送り方は単発(Pi 版は 0.1s 補間ストリーミング)なので n_steps / ticks は比較対象外。送信 8 回 / 想定所要 ≈ 29.8s (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % python3 dynamic_tracking_limits/drag_teaching/record_teach_demo.py run --teach drag_v2_20221013_231249.json --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_20221013_231249.json [RTD ] 取得しました → /var/folders/5w/2q2mc64n6yv63gfh31h34w6h0000gn/T/record_teach_demo_nzrpmtyh/drag_v2_20221013_231249.json [RTD ] 入力ファイル: drag_v2_20221013_231249.json [RTD ] 抽出ウェイポイント: APPROACH_PICK <- phase APPROACH_PICK argmax_idx=146 (start=146 end=194, gap=12.04°) angles = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] PICK <- gripper close mark idx=214(PICK phase 範囲内) angles = [ -27.68, +63.10, +13.27, -8.26, -59.76, -27.33] APPROACH_PLACE <- phase APPROACH_PLACE argmax_idx=286 (start=286 end=321, gap=20.83°) angles = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] PLACE <- gripper open mark idx=345(PLACE phase 範囲内) angles = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] [RTD ] JOINT_LIMITS 一括検証 OK(全 endpoint + HOME) [RTD ] 姿勢検査 OK(全 137 姿勢が 有限値 + JOINT_LIMITS + J4_SAFE [-90.0, +60.0] 内) [RTD ] j4 の余裕は最小 18.20°(しきい値 3.0° 以上) [RTD ] 現在姿勢を daemon から取得します [RTD ] 現在姿勢 = [ +0.17, +1.49, +0.79, -0.17, -0.26, -30.23] ============================================================================== [RTD ] 実行プラン(daemon 経由・区間ごとに 1 回送信 → 到達待ち) ============================================================================== [STEP 1] MOVE → HOME (single send + settle) speed=20 current = [ +0.17, +1.49, +0.79, -0.17, -0.26, -30.23] to HOME = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 1.49° (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 = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] max |Δ| = 71.80° 1 回送信 speed=20 (~ 3.6s @ 20°/s 目安・到達待ち 最大 12.8s) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage4_pick)] from = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] to = [ -27.68, +63.10, +13.27, -8.26, -59.76, -27.33] max |Δ| = 12.04° 1 回送信 speed=20 (~ 0.6s @ 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 = [ -27.68, +63.10, +13.27, -8.26, -59.76, -27.33] to = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] max |Δ| = 12.04° 1 回送信 speed=20 (~ 0.6s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE tol=3.0° [rpp.TOL_APPROACH_PLACE(stage7)] from = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 69.16° 1 回送信 speed=20 (~ 3.5s @ 20°/s 目安・到達待ち 最大 12.4s) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage8_place)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 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 = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME tol=2.5° [rpp.TOL_HOME(stage1_to_home / HOME 復帰)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 49.39° 1 回送信 speed=20 (~ 2.5s @ 20°/s 目安・到達待ち 最大 9.4s) ============================================================================== [RTD ] 送信 = 8 回(STEP 1 + move 7 区間), 想定所要時間 ≈ 29.8s(最悪 73.0s) [RTD ] 内訳: 先頭 settle 3.0s + 移動 12.8s(max|Δ| 合計 256.1° @ 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_120729.json [RTD ] measured_at = 2026-11-09T12:07:31.373791 block = (+127.5, +239.9) mm box = (-218.3, +183.0) mm [RTD ] 再生直前: 上カメラでマット四隅とブロック画素を確認します [RTD ] 再生直前: block = (+127.4, +239.4) mm(measure の homography で換算) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_120813.jpg [RTD ] ブロック位置の照合 OK(画素の差 1.0px <= 許容 10.5px = 5.0mm / mm 換算の差 0.47mm) [RTD ] マット四隅のずれ 最大 1.1px(上限 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_120818 [RTD ] 教えた記録のコピー: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_120818/teach/drag_v2_20221013_231249.json [RTD ] recorder に trial_start を送りました。1.0s 待ってから動き出します(mp4 writer が開くまで) [RTD ] 爪と肩の電流を 1 秒 10 回で記録します(爪を動かしている間は読みません)→ /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_120818/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.49° / 到達待ち 最大 8.0s [STEP 1] 3.0s 待ちます(settle) [RTD ] arrival OK (current → HOME, max|Δ|=1.49° <= 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.8s) [RTD ] 送信 OK(daemon 往復 1.021s) [RTD ] arrival OK (HOME → APPROACH_PICK, max|Δ|=1.14° <= 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.043s) [RTD ] arrival OK (APPROACH_PICK → PICK, max|Δ|=1.93° <= 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.030s) [RTD ] arrival OK (PICK → APPROACH_PICK (lift), max|Δ|=2.29° <= tol 3.0°) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_APPROACH_PLACE(stage7)] / 最大 12.4s) [RTD ] 送信 OK(daemon 往復 1.055s) [RTD ] arrival OK (APPROACH_PICK → APPROACH_PLACE, max|Δ|=2.81° <= 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|Δ|=1.76° <= 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.040s) [RTD ] arrival OK (PLACE → APPROACH_PLACE (retreat), max|Δ|=2.72° <= tol 3.0°) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME (1 回送信 speed=20 → 到達待ち 許容 2.5°[TOL_HOME(stage1_to_home / HOME 復帰)] / 最大 9.4s) [RTD ] 送信 OK(daemon 往復 1.058s) [RTD ] arrival OK (APPROACH_PLACE → HOME, max|Δ|=2.46° <= tol 2.5°) [Pi] fresh_mode=0 [RTD ] daemon_set_fresh_mode(0) 完了 [RTD ] 実測角の読み取り: ok 58/58 回, 実効 1.61 Hz(目標 3.0 Hz 以上) [RTD ] [WARN] 実測角の読み取りが目標 3.0 Hz を下回りました(1.61 Hz)。学習データの state 密度が 19 本より薄くなります [RTD ] send_angles の daemon 往復 (7 回): 平均 1.039s / p50 1.040s / 最大 1.058s(timeout 6.0s) [RTD ] [WARN] 送信 1 回に 1.058s かかった回があります。daemon は送信後に角度を読み直すので、動き始めで読めないと伸びます(単発送信なので試行全体への影響は小さい) [RTD ] 区間の所要(送信→到達確認まで)(8 区間): 平均 2.36s / 最大 4.64s [RECORD] 電流の記録終了 77 行 (2.14 行/秒. 本体が眠っている間だけ読む. 爪の間 14.05 秒は読まない. 見込み超え 0 回. read_servo) → /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_120818/recording/currents.csv ============================================================================== [RTD ] 再生 完了 ============================================================================== [RTD ] つかめたか (y/n) > y [RTD ] 箱に入ったか (y/n) > y [RTD ] 試行 JSON: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_120818/run_0001_20261109_120818.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_20261109_120818 --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_231249.json --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_20221013_231249.json [RTD ] 取得しました → /var/folders/5w/2q2mc64n6yv63gfh31h34w6h0000gn/T/record_teach_demo_z9apcvd5/drag_v2_20221013_231249.json [RTD ] 入力ファイル: drag_v2_20221013_231249.json [RTD ] 抽出ウェイポイント: APPROACH_PICK <- phase APPROACH_PICK argmax_idx=146 (start=146 end=194, gap=12.04°) angles = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] PICK <- gripper close mark idx=214(PICK phase 範囲内) angles = [ -27.68, +63.10, +13.27, -8.26, -59.76, -27.33] APPROACH_PLACE <- phase APPROACH_PLACE argmax_idx=286 (start=286 end=321, gap=20.83°) angles = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] PLACE <- gripper open mark idx=345(PLACE phase 範囲内) angles = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] [RTD ] JOINT_LIMITS 一括検証 OK(全 endpoint + HOME) [RTD ] 姿勢検査 OK(全 137 姿勢が 有限値 + JOINT_LIMITS + J4_SAFE [-90.0, +60.0] 内) [RTD ] j4 の余裕は最小 18.20°(しきい値 3.0° 以上) [RTD ] 現在姿勢を daemon から取得します [RTD ] 現在姿勢 = [ -0.43, +1.49, +1.75, +0.00, -0.26, -30.23] ============================================================================== [RTD ] 実行プラン(daemon 経由・区間ごとに 1 回送信 → 到達待ち) ============================================================================== [STEP 1] MOVE → HOME (single send + settle) speed=20 current = [ -0.43, +1.49, +1.75, +0.00, -0.26, -30.23] to HOME = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 1.75° (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 = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] max |Δ| = 71.80° 1 回送信 speed=20 (~ 3.6s @ 20°/s 目安・到達待ち 最大 12.8s) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage4_pick)] from = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] to = [ -27.68, +63.10, +13.27, -8.26, -59.76, -27.33] max |Δ| = 12.04° 1 回送信 speed=20 (~ 0.6s @ 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 = [ -27.68, +63.10, +13.27, -8.26, -59.76, -27.33] to = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] max |Δ| = 12.04° 1 回送信 speed=20 (~ 0.6s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE tol=3.0° [rpp.TOL_APPROACH_PLACE(stage7)] from = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 69.16° 1 回送信 speed=20 (~ 3.5s @ 20°/s 目安・到達待ち 最大 12.4s) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage8_place)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 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 = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME tol=2.5° [rpp.TOL_HOME(stage1_to_home / HOME 復帰)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 49.39° 1 回送信 speed=20 (~ 2.5s @ 20°/s 目安・到達待ち 最大 9.4s) ============================================================================== [RTD ] 送信 = 8 回(STEP 1 + move 7 区間), 想定所要時間 ≈ 29.8s(最悪 73.0s) [RTD ] 内訳: 先頭 settle 3.0s + 移動 12.8s(max|Δ| 合計 256.1° @ 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_120729.json [RTD ] measured_at = 2026-11-09T12:07:31.373791 block = (+127.5, +239.9) mm box = (-218.3, +183.0) mm [RTD ] 再生直前: 上カメラでマット四隅とブロック画素を確認します [RTD ] 再生直前: block = (+153.9, +233.3) mm(measure の homography で換算) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_121012.jpg [RTD ] [WARN] ブロックが measure 時から動いています(止めません・項目8): ブロックが measure 時から 61.4px(≒27.2mm)動いています(許容 10.5px = 5.0mm)。ブロックを戻すか measure をやり直してください [RTD ] [WARN] 画素の差 61.4px(許容 10.5px = 5.0mm)/ mm 換算の差 27.23mm [RTD ] [WARN] つかみ損ねる可能性があります。気になるなら Enter の前に measure を取り直してください [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_121128 [RTD ] 教えた記録のコピー: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_121128/teach/drag_v2_20221013_231249.json [RTD ] recorder に trial_start を送りました。1.0s 待ってから動き出します(mp4 writer が開くまで) [RTD ] 爪と肩の電流を 1 秒 10 回で記録します(爪を動かしている間は読みません)→ /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_121128/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.75° / 到達待ち 最大 8.0s [STEP 1] 3.0s 待ちます(settle) [RTD ] arrival OK (current → HOME, max|Δ|=1.75° <= 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.014s [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.8s) [RTD ] 送信 OK(daemon 往復 1.031s) [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.022s) [RTD ] arrival OK (APPROACH_PICK → PICK, max|Δ|=1.85° <= 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.049s) [RTD ] arrival OK (PICK → APPROACH_PICK (lift), max|Δ|=2.81° <= tol 3.0°) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_APPROACH_PLACE(stage7)] / 最大 12.4s) [RTD ] 送信 OK(daemon 往復 1.032s) [RTD ] arrival OK (APPROACH_PICK → APPROACH_PLACE, max|Δ|=2.55° <= 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.032s) [RTD ] arrival OK (APPROACH_PLACE → PLACE, max|Δ|=1.93° <= tol 3.0°) [STEP 9] GRIPPER OPEN → daemon_set_gripper(0, 50, wait=0) [RTD ] 静止確認 OK(step9_open: 連続 3 回・連続差 最大 0.00° <= 1.0°) [Pi] GRIPPER: OPEN result= None [RTD ] gripper open (1/1 回目) の daemon 往復 = 2.017s [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.046s) [RTD ] arrival OK (PLACE → APPROACH_PLACE (retreat), max|Δ|=2.72° <= tol 3.0°) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME (1 回送信 speed=20 → 到達待ち 許容 2.5°[TOL_HOME(stage1_to_home / HOME 復帰)] / 最大 9.4s) [RTD ] 送信 OK(daemon 往復 1.031s) [RTD ] arrival OK (APPROACH_PLACE → HOME, max|Δ|=2.28° <= tol 2.5°) [Pi] fresh_mode=0 [RTD ] daemon_set_fresh_mode(0) 完了 [RTD ] 実測角の読み取り: ok 60/60 回, 実効 1.65 Hz(目標 3.0 Hz 以上) [RTD ] [WARN] 実測角の読み取りが目標 3.0 Hz を下回りました(1.65 Hz)。学習データの state 密度が 19 本より薄くなります [RTD ] send_angles の daemon 往復 (7 回): 平均 1.035s / p50 1.032s / 最大 1.049s(timeout 6.0s) [RTD ] [WARN] 送信 1 回に 1.049s かかった回があります。daemon は送信後に角度を読み直すので、動き始めで読めないと伸びます(単発送信なので試行全体への影響は小さい) [RTD ] 区間の所要(送信→到達確認まで)(8 区間): 平均 2.43s / 最大 4.43s [RECORD] 電流の記録終了 81 行 (2.22 行/秒. 本体が眠っている間だけ読む. 爪の間 14.054 秒は読まない. 見込み超え 0 回. read_servo) → /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_121128/recording/currents.csv ============================================================================== [RTD ] 再生 完了 ============================================================================== [RTD ] つかめたか (y/n) > y [RTD ] 箱に入ったか (y/n) > y [RTD ] 試行 JSON: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_121128/run_0001_20261109_121128.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_20261109_121128 --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_231249.json --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_20221013_231249.json [RTD ] 取得しました → /var/folders/5w/2q2mc64n6yv63gfh31h34w6h0000gn/T/record_teach_demo_9axsa31m/drag_v2_20221013_231249.json [RTD ] 入力ファイル: drag_v2_20221013_231249.json [RTD ] 抽出ウェイポイント: APPROACH_PICK <- phase APPROACH_PICK argmax_idx=146 (start=146 end=194, gap=12.04°) angles = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] PICK <- gripper close mark idx=214(PICK phase 範囲内) angles = [ -27.68, +63.10, +13.27, -8.26, -59.76, -27.33] APPROACH_PLACE <- phase APPROACH_PLACE argmax_idx=286 (start=286 end=321, gap=20.83°) angles = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] PLACE <- gripper open mark idx=345(PLACE phase 範囲内) angles = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] [RTD ] JOINT_LIMITS 一括検証 OK(全 endpoint + HOME) [RTD ] 姿勢検査 OK(全 137 姿勢が 有限値 + JOINT_LIMITS + J4_SAFE [-90.0, +60.0] 内) [RTD ] j4 の余裕は最小 18.20°(しきい値 3.0° 以上) [RTD ] 現在姿勢を daemon から取得します [RTD ] 現在姿勢 = [ -0.43, +1.49, +1.75, +0.00, -0.26, -30.23] ============================================================================== [RTD ] 実行プラン(daemon 経由・区間ごとに 1 回送信 → 到達待ち) ============================================================================== [STEP 1] MOVE → HOME (single send + settle) speed=20 current = [ -0.43, +1.49, +1.75, +0.00, -0.26, -30.23] to HOME = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 1.75° (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 = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] max |Δ| = 71.80° 1 回送信 speed=20 (~ 3.6s @ 20°/s 目安・到達待ち 最大 12.8s) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage4_pick)] from = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] to = [ -27.68, +63.10, +13.27, -8.26, -59.76, -27.33] max |Δ| = 12.04° 1 回送信 speed=20 (~ 0.6s @ 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 = [ -27.68, +63.10, +13.27, -8.26, -59.76, -27.33] to = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] max |Δ| = 12.04° 1 回送信 speed=20 (~ 0.6s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE tol=3.0° [rpp.TOL_APPROACH_PLACE(stage7)] from = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 69.16° 1 回送信 speed=20 (~ 3.5s @ 20°/s 目安・到達待ち 最大 12.4s) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage8_place)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 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 = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME tol=2.5° [rpp.TOL_HOME(stage1_to_home / HOME 復帰)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 49.39° 1 回送信 speed=20 (~ 2.5s @ 20°/s 目安・到達待ち 最大 9.4s) ============================================================================== [RTD ] 送信 = 8 回(STEP 1 + move 7 区間), 想定所要時間 ≈ 29.8s(最悪 73.0s) [RTD ] 内訳: 先頭 settle 3.0s + 移動 12.8s(max|Δ| 合計 256.1° @ 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_120729.json [RTD ] measured_at = 2026-11-09T12:07:31.373791 block = (+127.5, +239.9) mm box = (-218.3, +183.0) mm [RTD ] 再生直前: 上カメラでマット四隅とブロック画素を確認します [RTD ] 再生直前: block = (+135.4, +237.4) mm(measure の homography で換算) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_121219.jpg [RTD ] [WARN] ブロックが measure 時から動いています(止めません・項目8): ブロックが measure 時から 18.7px(≒8.3mm)動いています(許容 10.5px = 5.0mm)。ブロックを戻すか measure をやり直してください [RTD ] [WARN] 画素の差 18.7px(許容 10.5px = 5.0mm)/ mm 換算の差 8.31mm [RTD ] [WARN] つかみ損ねる可能性があります。気になるなら Enter の前に measure を取り直してください [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_121224 [RTD ] 教えた記録のコピー: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_121224/teach/drag_v2_20221013_231249.json [RTD ] recorder に trial_start を送りました。1.0s 待ってから動き出します(mp4 writer が開くまで) [RTD ] 爪と肩の電流を 1 秒 10 回で記録します(爪を動かしている間は読みません)→ /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_121224/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.75° / 到達待ち 最大 8.0s [STEP 1] 3.0s 待ちます(settle) [RTD ] arrival OK (current → HOME, max|Δ|=1.75° <= 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.014s [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.8s) [RTD ] 送信 OK(daemon 往復 1.041s) [RTD ] arrival OK (HOME → APPROACH_PICK, max|Δ|=1.23° <= 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.93° <= 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.029s) [RTD ] arrival OK (PICK → APPROACH_PICK (lift), max|Δ|=2.29° <= tol 3.0°) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_APPROACH_PLACE(stage7)] / 最大 12.4s) [RTD ] 送信 OK(daemon 往復 1.029s) [RTD ] arrival OK (APPROACH_PICK → APPROACH_PLACE, max|Δ|=2.99° <= 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.76° <= 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.056s) [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 復帰)] / 最大 9.4s) [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 59/59 回, 実効 1.64 Hz(目標 3.0 Hz 以上) [RTD ] [WARN] 実測角の読み取りが目標 3.0 Hz を下回りました(1.64 Hz)。学習データの state 密度が 19 本より薄くなります [RTD ] send_angles の daemon 往復 (7 回): 平均 1.037s / p50 1.032s / 最大 1.056s(timeout 6.0s) [RTD ] [WARN] 送信 1 回に 1.056s かかった回があります。daemon は送信後に角度を読み直すので、動き始めで読めないと伸びます(単発送信なので試行全体への影響は小さい) [RTD ] 区間の所要(送信→到達確認まで)(8 区間): 平均 2.38s / 最大 4.66s [RECORD] 電流の記録終了 79 行 (2.19 行/秒. 本体が眠っている間だけ読む. 爪の間 14.052 秒は読まない. 見込み超え 0 回. read_servo) → /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_121224/recording/currents.csv ============================================================================== [RTD ] 再生 完了 ============================================================================== [RTD ] つかめたか (y/n) > y [RTD ] 箱に入ったか (y/n) > y [RTD ] 試行 JSON: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_121224/run_0001_20261109_121224.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_20261109_121224 --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_231249.json --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_20221013_231249.json [RTD ] 取得しました → /var/folders/5w/2q2mc64n6yv63gfh31h34w6h0000gn/T/record_teach_demo_53m4i4bn/drag_v2_20221013_231249.json [RTD ] 入力ファイル: drag_v2_20221013_231249.json [RTD ] 抽出ウェイポイント: APPROACH_PICK <- phase APPROACH_PICK argmax_idx=146 (start=146 end=194, gap=12.04°) angles = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] PICK <- gripper close mark idx=214(PICK phase 範囲内) angles = [ -27.68, +63.10, +13.27, -8.26, -59.76, -27.33] APPROACH_PLACE <- phase APPROACH_PLACE argmax_idx=286 (start=286 end=321, gap=20.83°) angles = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] PLACE <- gripper open mark idx=345(PLACE phase 範囲内) angles = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] [RTD ] JOINT_LIMITS 一括検証 OK(全 endpoint + HOME) [RTD ] 姿勢検査 OK(全 137 姿勢が 有限値 + JOINT_LIMITS + J4_SAFE [-90.0, +60.0] 内) [RTD ] j4 の余裕は最小 18.20°(しきい値 3.0° 以上) [RTD ] 現在姿勢を daemon から取得します [RTD ] 現在姿勢 = [ -0.43, +1.49, +1.75, +0.08, -0.26, -30.23] ============================================================================== [RTD ] 実行プラン(daemon 経由・区間ごとに 1 回送信 → 到達待ち) ============================================================================== [STEP 1] MOVE → HOME (single send + settle) speed=20 current = [ -0.43, +1.49, +1.75, +0.08, -0.26, -30.23] to HOME = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 1.75° (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 = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] max |Δ| = 71.80° 1 回送信 speed=20 (~ 3.6s @ 20°/s 目安・到達待ち 最大 12.8s) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage4_pick)] from = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] to = [ -27.68, +63.10, +13.27, -8.26, -59.76, -27.33] max |Δ| = 12.04° 1 回送信 speed=20 (~ 0.6s @ 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 = [ -27.68, +63.10, +13.27, -8.26, -59.76, -27.33] to = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] max |Δ| = 12.04° 1 回送信 speed=20 (~ 0.6s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE tol=3.0° [rpp.TOL_APPROACH_PLACE(stage7)] from = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 69.16° 1 回送信 speed=20 (~ 3.5s @ 20°/s 目安・到達待ち 最大 12.4s) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage8_place)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 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 = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME tol=2.5° [rpp.TOL_HOME(stage1_to_home / HOME 復帰)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 49.39° 1 回送信 speed=20 (~ 2.5s @ 20°/s 目安・到達待ち 最大 9.4s) ============================================================================== [RTD ] 送信 = 8 回(STEP 1 + move 7 区間), 想定所要時間 ≈ 29.8s(最悪 73.0s) [RTD ] 内訳: 先頭 settle 3.0s + 移動 12.8s(max|Δ| 合計 256.1° @ 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_120729.json [RTD ] measured_at = 2026-11-09T12:07:31.373791 block = (+127.5, +239.9) mm box = (-218.3, +183.0) mm [RTD ] 再生直前: 上カメラでマット四隅とブロック画素を確認します [RTD ] 再生直前: block = (+130.5, +236.1) mm(measure の homography で換算) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_121316.jpg [RTD ] [WARN] ブロックが measure 時から動いています(止めません・項目8): ブロックが measure 時から 10.6px(≒4.9mm)動いています(許容 10.5px = 5.0mm)。ブロックを戻すか measure をやり直してください [RTD ] [WARN] 画素の差 10.6px(許容 10.5px = 5.0mm)/ mm 換算の差 4.90mm [RTD ] [WARN] つかみ損ねる可能性があります。気になるなら Enter の前に measure を取り直してください [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_121320 [RTD ] 教えた記録のコピー: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_121320/teach/drag_v2_20221013_231249.json [RTD ] recorder に trial_start を送りました。1.0s 待ってから動き出します(mp4 writer が開くまで) [RTD ] 爪と肩の電流を 1 秒 10 回で記録します(爪を動かしている間は読みません)→ /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_121320/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.75° / 到達待ち 最大 8.0s [STEP 1] 3.0s 待ちます(settle) [RTD ] arrival OK (current → HOME, max|Δ|=1.75° <= 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.8s) [RTD ] 送信 OK(daemon 往復 1.030s) [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.031s) [RTD ] arrival OK (APPROACH_PICK → PICK, max|Δ|=1.85° <= 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.29° <= tol 3.0°) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_APPROACH_PLACE(stage7)] / 最大 12.4s) [RTD ] 送信 OK(daemon 往復 1.037s) [RTD ] arrival OK (APPROACH_PICK → APPROACH_PLACE, max|Δ|=2.90° <= 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.032s) [RTD ] arrival OK (APPROACH_PLACE → PLACE, max|Δ|=1.76° <= 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.054s) [RTD ] arrival OK (PLACE → APPROACH_PLACE (retreat), max|Δ|=2.64° <= tol 3.0°) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME (1 回送信 speed=20 → 到達待ち 許容 2.5°[TOL_HOME(stage1_to_home / HOME 復帰)] / 最大 9.4s) [RTD ] 送信 OK(daemon 往復 1.031s) [RTD ] arrival OK (APPROACH_PLACE → HOME, max|Δ|=2.37° <= tol 2.5°) [Pi] fresh_mode=0 [RTD ] daemon_set_fresh_mode(0) 完了 [RTD ] 実測角の読み取り: ok 58/58 回, 実効 1.62 Hz(目標 3.0 Hz 以上) [RTD ] [WARN] 実測角の読み取りが目標 3.0 Hz を下回りました(1.62 Hz)。学習データの state 密度が 19 本より薄くなります [RTD ] send_angles の daemon 往復 (7 回): 平均 1.035s / p50 1.031s / 最大 1.054s(timeout 6.0s) [RTD ] [WARN] 送信 1 回に 1.054s かかった回があります。daemon は送信後に角度を読み直すので、動き始めで読めないと伸びます(単発送信なので試行全体への影響は小さい) [RTD ] 区間の所要(送信→到達確認まで)(8 区間): 平均 2.34s / 最大 4.37s [RECORD] 電流の記録終了 77 行 (2.16 行/秒. 本体が眠っている間だけ読む. 爪の間 14.048 秒は読まない. 見込み超え 0 回. read_servo) → /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_121320/recording/currents.csv ============================================================================== [RTD ] 再生 完了 ============================================================================== [RTD ] つかめたか (y/n) > y [RTD ] 箱に入ったか (y/n) > y [RTD ] 試行 JSON: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_121320/run_0001_20261109_121320.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_20261109_121320 --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_231249.json --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_20221013_231249.json [RTD ] 取得しました → /var/folders/5w/2q2mc64n6yv63gfh31h34w6h0000gn/T/record_teach_demo_2pa2_2i3/drag_v2_20221013_231249.json [RTD ] 入力ファイル: drag_v2_20221013_231249.json [RTD ] 抽出ウェイポイント: APPROACH_PICK <- phase APPROACH_PICK argmax_idx=146 (start=146 end=194, gap=12.04°) angles = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] PICK <- gripper close mark idx=214(PICK phase 範囲内) angles = [ -27.68, +63.10, +13.27, -8.26, -59.76, -27.33] APPROACH_PLACE <- phase APPROACH_PLACE argmax_idx=286 (start=286 end=321, gap=20.83°) angles = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] PLACE <- gripper open mark idx=345(PLACE phase 範囲内) angles = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] [RTD ] JOINT_LIMITS 一括検証 OK(全 endpoint + HOME) [RTD ] 姿勢検査 OK(全 137 姿勢が 有限値 + JOINT_LIMITS + J4_SAFE [-90.0, +60.0] 内) [RTD ] j4 の余裕は最小 18.20°(しきい値 3.0° 以上) [RTD ] 現在姿勢を daemon から取得します [RTD ] 現在姿勢 = [ -0.43, +1.49, +1.75, +0.00, -0.26, -30.23] ============================================================================== [RTD ] 実行プラン(daemon 経由・区間ごとに 1 回送信 → 到達待ち) ============================================================================== [STEP 1] MOVE → HOME (single send + settle) speed=20 current = [ -0.43, +1.49, +1.75, +0.00, -0.26, -30.23] to HOME = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 1.75° (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 = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] max |Δ| = 71.80° 1 回送信 speed=20 (~ 3.6s @ 20°/s 目安・到達待ち 最大 12.8s) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage4_pick)] from = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] to = [ -27.68, +63.10, +13.27, -8.26, -59.76, -27.33] max |Δ| = 12.04° 1 回送信 speed=20 (~ 0.6s @ 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 = [ -27.68, +63.10, +13.27, -8.26, -59.76, -27.33] to = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] max |Δ| = 12.04° 1 回送信 speed=20 (~ 0.6s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE tol=3.0° [rpp.TOL_APPROACH_PLACE(stage7)] from = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 69.16° 1 回送信 speed=20 (~ 3.5s @ 20°/s 目安・到達待ち 最大 12.4s) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage8_place)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 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 = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME tol=2.5° [rpp.TOL_HOME(stage1_to_home / HOME 復帰)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 49.39° 1 回送信 speed=20 (~ 2.5s @ 20°/s 目安・到達待ち 最大 9.4s) ============================================================================== [RTD ] 送信 = 8 回(STEP 1 + move 7 区間), 想定所要時間 ≈ 29.8s(最悪 73.0s) [RTD ] 内訳: 先頭 settle 3.0s + 移動 12.8s(max|Δ| 合計 256.1° @ 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_120729.json [RTD ] measured_at = 2026-11-09T12:07:31.373791 block = (+127.5, +239.9) mm box = (-218.3, +183.0) mm [RTD ] 再生直前: 上カメラでマット四隅とブロック画素を確認します [RTD ] 再生直前: block = (+133.5, +226.5) mm(measure の homography で換算) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_121413.jpg [RTD ] [WARN] ブロックが measure 時から動いています(止めません・項目8): ブロックが measure 時から 31.3px(≒14.7mm)動いています(許容 10.5px = 5.0mm)。ブロックを戻すか measure をやり直してください [RTD ] [WARN] 画素の差 31.3px(許容 10.5px = 5.0mm)/ mm 換算の差 14.67mm [RTD ] [WARN] つかみ損ねる可能性があります。気になるなら Enter の前に measure を取り直してください [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_121416 [RTD ] 教えた記録のコピー: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_121416/teach/drag_v2_20221013_231249.json [RTD ] recorder に trial_start を送りました。1.0s 待ってから動き出します(mp4 writer が開くまで) [RTD ] 爪と肩の電流を 1 秒 10 回で記録します(爪を動かしている間は読みません)→ /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_121416/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.75° / 到達待ち 最大 8.0s [STEP 1] 3.0s 待ちます(settle) [RTD ] arrival OK (current → HOME, max|Δ|=1.75° <= 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.8s) [RTD ] 送信 OK(daemon 往復 1.048s) [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.031s) [RTD ] arrival OK (APPROACH_PICK → PICK, max|Δ|=1.85° <= 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.29° <= tol 3.0°) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_APPROACH_PLACE(stage7)] / 最大 12.4s) [RTD ] 送信 OK(daemon 往復 1.055s) [RTD ] arrival OK (APPROACH_PICK → APPROACH_PLACE, max|Δ|=2.55° <= 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.032s) [RTD ] arrival OK (APPROACH_PLACE → PLACE, max|Δ|=2.02° <= 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.99° <= tol 3.0°) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME (1 回送信 speed=20 → 到達待ち 許容 2.5°[TOL_HOME(stage1_to_home / HOME 復帰)] / 最大 9.4s) [RTD ] 送信 OK(daemon 往復 1.031s) [RTD ] arrival OK (APPROACH_PLACE → HOME, max|Δ|=2.28° <= tol 2.5°) [Pi] fresh_mode=0 [RTD ] daemon_set_fresh_mode(0) 完了 [RTD ] 実測角の読み取り: ok 60/60 回, 実効 1.65 Hz(目標 3.0 Hz 以上) [RTD ] [WARN] 実測角の読み取りが目標 3.0 Hz を下回りました(1.65 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.42s / 最大 4.38s [RECORD] 電流の記録終了 81 行 (2.23 行/秒. 本体が眠っている間だけ読む. 爪の間 14.053 秒は読まない. 見込み超え 0 回. read_servo) → /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_121416/recording/currents.csv ============================================================================== [RTD ] 再生 完了 ============================================================================== [RTD ] つかめたか (y/n) > y [RTD ] 箱に入ったか (y/n) > y [RTD ] 試行 JSON: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_121416/run_0001_20261109_121416.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_20261109_121416 --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_231249.json --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_20221013_231249.json [RTD ] 取得しました → /var/folders/5w/2q2mc64n6yv63gfh31h34w6h0000gn/T/record_teach_demo_ba2f9hiv/drag_v2_20221013_231249.json [RTD ] 入力ファイル: drag_v2_20221013_231249.json [RTD ] 抽出ウェイポイント: APPROACH_PICK <- phase APPROACH_PICK argmax_idx=146 (start=146 end=194, gap=12.04°) angles = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] PICK <- gripper close mark idx=214(PICK phase 範囲内) angles = [ -27.68, +63.10, +13.27, -8.26, -59.76, -27.33] APPROACH_PLACE <- phase APPROACH_PLACE argmax_idx=286 (start=286 end=321, gap=20.83°) angles = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] PLACE <- gripper open mark idx=345(PLACE phase 範囲内) angles = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] [RTD ] JOINT_LIMITS 一括検証 OK(全 endpoint + HOME) [RTD ] 姿勢検査 OK(全 137 姿勢が 有限値 + JOINT_LIMITS + J4_SAFE [-90.0, +60.0] 内) [RTD ] j4 の余裕は最小 18.20°(しきい値 3.0° 以上) [RTD ] 現在姿勢を daemon から取得します [RTD ] 現在姿勢 = [ -0.43, +1.49, +1.75, +0.08, -0.26, -30.23] ============================================================================== [RTD ] 実行プラン(daemon 経由・区間ごとに 1 回送信 → 到達待ち) ============================================================================== [STEP 1] MOVE → HOME (single send + settle) speed=20 current = [ -0.43, +1.49, +1.75, +0.08, -0.26, -30.23] to HOME = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 1.75° (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 = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] max |Δ| = 71.80° 1 回送信 speed=20 (~ 3.6s @ 20°/s 目安・到達待ち 最大 12.8s) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage4_pick)] from = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] to = [ -27.68, +63.10, +13.27, -8.26, -59.76, -27.33] max |Δ| = 12.04° 1 回送信 speed=20 (~ 0.6s @ 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 = [ -27.68, +63.10, +13.27, -8.26, -59.76, -27.33] to = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] max |Δ| = 12.04° 1 回送信 speed=20 (~ 0.6s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE tol=3.0° [rpp.TOL_APPROACH_PLACE(stage7)] from = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 69.16° 1 回送信 speed=20 (~ 3.5s @ 20°/s 目安・到達待ち 最大 12.4s) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage8_place)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 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 = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME tol=2.5° [rpp.TOL_HOME(stage1_to_home / HOME 復帰)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 49.39° 1 回送信 speed=20 (~ 2.5s @ 20°/s 目安・到達待ち 最大 9.4s) ============================================================================== [RTD ] 送信 = 8 回(STEP 1 + move 7 区間), 想定所要時間 ≈ 29.8s(最悪 73.0s) [RTD ] 内訳: 先頭 settle 3.0s + 移動 12.8s(max|Δ| 合計 256.1° @ 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_120729.json [RTD ] measured_at = 2026-11-09T12:07:31.373791 block = (+127.5, +239.9) mm box = (-218.3, +183.0) mm [RTD ] 再生直前: 上カメラでマット四隅とブロック画素を確認します [RTD ] 再生直前: block = (+128.4, +241.8) mm(measure の homography で換算) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_121507.jpg [RTD ] ブロック位置の照合 OK(画素の差 4.5px <= 許容 10.5px = 5.0mm / mm 換算の差 2.10mm) [RTD ] マット四隅のずれ 最大 2.2px(上限 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_121511 [RTD ] 教えた記録のコピー: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_121511/teach/drag_v2_20221013_231249.json [RTD ] recorder に trial_start を送りました。1.0s 待ってから動き出します(mp4 writer が開くまで) [RTD ] 爪と肩の電流を 1 秒 10 回で記録します(爪を動かしている間は読みません)→ /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_121511/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.75° / 到達待ち 最大 8.0s [STEP 1] 3.0s 待ちます(settle) [RTD ] arrival OK (current → HOME, max|Δ|=1.75° <= 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.016s [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.8s) [RTD ] 送信 OK(daemon 往復 1.032s) [RTD ] arrival OK (HOME → APPROACH_PICK, max|Δ|=1.40° <= 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.056s) [RTD ] arrival OK (APPROACH_PICK → PICK, max|Δ|=1.85° <= 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.010s [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.028s) [RTD ] arrival OK (PICK → APPROACH_PICK (lift), max|Δ|=2.37° <= tol 3.0°) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_APPROACH_PLACE(stage7)] / 最大 12.4s) [RTD ] 送信 OK(daemon 往復 1.053s) [RTD ] arrival OK (APPROACH_PICK → APPROACH_PLACE, max|Δ|=2.55° <= 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.02° <= 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.037s) [RTD ] arrival OK (PLACE → APPROACH_PLACE (retreat), max|Δ|=2.37° <= tol 3.0°) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME (1 回送信 speed=20 → 到達待ち 許容 2.5°[TOL_HOME(stage1_to_home / HOME 復帰)] / 最大 9.4s) [RTD ] 送信 OK(daemon 往復 1.043s) [RTD ] arrival OK (APPROACH_PLACE → HOME, max|Δ|=2.37° <= tol 2.5°) [Pi] fresh_mode=0 [RTD ] daemon_set_fresh_mode(0) 完了 [RTD ] 実測角の読み取り: ok 57/57 回, 実効 1.61 Hz(目標 3.0 Hz 以上) [RTD ] [WARN] 実測角の読み取りが目標 3.0 Hz を下回りました(1.61 Hz)。学習データの state 密度が 19 本より薄くなります [RTD ] send_angles の daemon 往復 (7 回): 平均 1.040s / p50 1.037s / 最大 1.056s(timeout 6.0s) [RTD ] [WARN] 送信 1 回に 1.056s かかった回があります。daemon は送信後に角度を読み直すので、動き始めで読めないと伸びます(単発送信なので試行全体への影響は小さい) [RTD ] 区間の所要(送信→到達確認まで)(8 区間): 平均 2.29s / 最大 4.41s [RECORD] 電流の記録終了 75 行 (2.12 行/秒. 本体が眠っている間だけ読む. 爪の間 14.053 秒は読まない. 見込み超え 0 回. read_servo) → /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_121511/recording/currents.csv ============================================================================== [RTD ] 再生 完了 ============================================================================== [RTD ] つかめたか (y/n) > y [RTD ] 箱に入ったか (y/n) > y [RTD ] 試行 JSON: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_121511/run_0001_20261109_121511.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_20261109_121511 --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_231249.json --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_20221013_231249.json [RTD ] 取得しました → /var/folders/5w/2q2mc64n6yv63gfh31h34w6h0000gn/T/record_teach_demo_z7s9m0g_/drag_v2_20221013_231249.json [RTD ] 入力ファイル: drag_v2_20221013_231249.json [RTD ] 抽出ウェイポイント: APPROACH_PICK <- phase APPROACH_PICK argmax_idx=146 (start=146 end=194, gap=12.04°) angles = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] PICK <- gripper close mark idx=214(PICK phase 範囲内) angles = [ -27.68, +63.10, +13.27, -8.26, -59.76, -27.33] APPROACH_PLACE <- phase APPROACH_PLACE argmax_idx=286 (start=286 end=321, gap=20.83°) angles = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] PLACE <- gripper open mark idx=345(PLACE phase 範囲内) angles = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] [RTD ] JOINT_LIMITS 一括検証 OK(全 endpoint + HOME) [RTD ] 姿勢検査 OK(全 137 姿勢が 有限値 + JOINT_LIMITS + J4_SAFE [-90.0, +60.0] 内) [RTD ] j4 の余裕は最小 18.20°(しきい値 3.0° 以上) [RTD ] 現在姿勢を daemon から取得します [RTD ] 現在姿勢 = [ -0.43, +1.49, +1.75, +0.08, -0.26, -30.23] ============================================================================== [RTD ] 実行プラン(daemon 経由・区間ごとに 1 回送信 → 到達待ち) ============================================================================== [STEP 1] MOVE → HOME (single send + settle) speed=20 current = [ -0.43, +1.49, +1.75, +0.08, -0.26, -30.23] to HOME = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 1.75° (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 = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] max |Δ| = 71.80° 1 回送信 speed=20 (~ 3.6s @ 20°/s 目安・到達待ち 最大 12.8s) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage4_pick)] from = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] to = [ -27.68, +63.10, +13.27, -8.26, -59.76, -27.33] max |Δ| = 12.04° 1 回送信 speed=20 (~ 0.6s @ 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 = [ -27.68, +63.10, +13.27, -8.26, -59.76, -27.33] to = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] max |Δ| = 12.04° 1 回送信 speed=20 (~ 0.6s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE tol=3.0° [rpp.TOL_APPROACH_PLACE(stage7)] from = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 69.16° 1 回送信 speed=20 (~ 3.5s @ 20°/s 目安・到達待ち 最大 12.4s) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage8_place)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 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 = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME tol=2.5° [rpp.TOL_HOME(stage1_to_home / HOME 復帰)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 49.39° 1 回送信 speed=20 (~ 2.5s @ 20°/s 目安・到達待ち 最大 9.4s) ============================================================================== [RTD ] 送信 = 8 回(STEP 1 + move 7 区間), 想定所要時間 ≈ 29.8s(最悪 73.0s) [RTD ] 内訳: 先頭 settle 3.0s + 移動 12.8s(max|Δ| 合計 256.1° @ 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_120729.json [RTD ] measured_at = 2026-11-09T12:07:31.373791 block = (+127.5, +239.9) mm box = (-218.3, +183.0) mm [RTD ] 再生直前: 上カメラでマット四隅とブロック画素を確認します [RTD ] 再生直前: block = (+136.2, +228.9) mm(measure の homography で換算) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_121600.jpg [RTD ] [WARN] ブロックが measure 時から動いています(止めません・項目8): ブロックが measure 時から 30.5px(≒14.1mm)動いています(許容 10.5px = 5.0mm)。ブロックを戻すか measure をやり直してください [RTD ] [WARN] 画素の差 30.5px(許容 10.5px = 5.0mm)/ mm 換算の差 14.06mm [RTD ] [WARN] つかみ損ねる可能性があります。気になるなら Enter の前に measure を取り直してください [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_121605 [RTD ] 教えた記録のコピー: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_121605/teach/drag_v2_20221013_231249.json [RTD ] recorder に trial_start を送りました。1.0s 待ってから動き出します(mp4 writer が開くまで) [RTD ] 爪と肩の電流を 1 秒 10 回で記録します(爪を動かしている間は読みません)→ /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_121605/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.75° / 到達待ち 最大 8.0s [STEP 1] 3.0s 待ちます(settle) [RTD ] arrival OK (current → HOME, max|Δ|=1.75° <= 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.8s) [RTD ] 送信 OK(daemon 往復 1.039s) [RTD ] arrival OK (HOME → APPROACH_PICK, max|Δ|=1.49° <= 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.035s) [RTD ] arrival OK (APPROACH_PICK → PICK, max|Δ|=1.93° <= 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.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.039s) [RTD ] arrival OK (PICK → APPROACH_PICK (lift), max|Δ|=2.46° <= tol 3.0°) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_APPROACH_PLACE(stage7)] / 最大 12.4s) [RTD ] 送信 OK(daemon 往復 1.030s) [RTD ] arrival OK (APPROACH_PICK → APPROACH_PLACE, max|Δ|=2.55° <= 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.032s) [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.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.044s) [RTD ] arrival OK (PLACE → APPROACH_PLACE (retreat), max|Δ|=2.64° <= tol 3.0°) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME (1 回送信 speed=20 → 到達待ち 許容 2.5°[TOL_HOME(stage1_to_home / HOME 復帰)] / 最大 9.4s) [RTD ] 送信 OK(daemon 往復 1.032s) [RTD ] arrival OK (APPROACH_PLACE → HOME, max|Δ|=2.46° <= tol 2.5°) [Pi] fresh_mode=0 [RTD ] daemon_set_fresh_mode(0) 完了 [RTD ] 実測角の読み取り: ok 58/58 回, 実効 1.62 Hz(目標 3.0 Hz 以上) [RTD ] [WARN] 実測角の読み取りが目標 3.0 Hz を下回りました(1.62 Hz)。学習データの state 密度が 19 本より薄くなります [RTD ] send_angles の daemon 往復 (7 回): 平均 1.036s / p50 1.035s / 最大 1.044s(timeout 6.0s) [RTD ] [WARN] 送信 1 回に 1.044s かかった回があります。daemon は送信後に角度を読み直すので、動き始めで読めないと伸びます(単発送信なので試行全体への影響は小さい) [RTD ] 区間の所要(送信→到達確認まで)(8 区間): 平均 2.34s / 最大 4.44s [RECORD] 電流の記録終了 77 行 (2.16 行/秒. 本体が眠っている間だけ読む. 爪の間 14.059 秒は読まない. 見込み超え 0 回. read_servo) → /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_121605/recording/currents.csv ============================================================================== [RTD ] 再生 完了 ============================================================================== [RTD ] つかめたか (y/n) > y [RTD ] 箱に入ったか (y/n) > y [RTD ] 試行 JSON: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_121605/run_0001_20261109_121605.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_20261109_121605 --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_231249.json --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_20221013_231249.json [RTD ] 取得しました → /var/folders/5w/2q2mc64n6yv63gfh31h34w6h0000gn/T/record_teach_demo_6h81jhhb/drag_v2_20221013_231249.json [RTD ] 入力ファイル: drag_v2_20221013_231249.json [RTD ] 抽出ウェイポイント: APPROACH_PICK <- phase APPROACH_PICK argmax_idx=146 (start=146 end=194, gap=12.04°) angles = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] PICK <- gripper close mark idx=214(PICK phase 範囲内) angles = [ -27.68, +63.10, +13.27, -8.26, -59.76, -27.33] APPROACH_PLACE <- phase APPROACH_PLACE argmax_idx=286 (start=286 end=321, gap=20.83°) angles = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] PLACE <- gripper open mark idx=345(PLACE phase 範囲内) angles = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] [RTD ] JOINT_LIMITS 一括検証 OK(全 endpoint + HOME) [RTD ] 姿勢検査 OK(全 137 姿勢が 有限値 + JOINT_LIMITS + J4_SAFE [-90.0, +60.0] 内) [RTD ] j4 の余裕は最小 18.20°(しきい値 3.0° 以上) [RTD ] 現在姿勢を daemon から取得します [RTD ] 現在姿勢 = [ -0.43, +1.49, +1.93, +0.08, -0.26, -30.23] ============================================================================== [RTD ] 実行プラン(daemon 経由・区間ごとに 1 回送信 → 到達待ち) ============================================================================== [STEP 1] MOVE → HOME (single send + settle) speed=20 current = [ -0.43, +1.49, +1.93, +0.08, -0.26, -30.23] to HOME = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 1.93° (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 = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] max |Δ| = 71.80° 1 回送信 speed=20 (~ 3.6s @ 20°/s 目安・到達待ち 最大 12.8s) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage4_pick)] from = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] to = [ -27.68, +63.10, +13.27, -8.26, -59.76, -27.33] max |Δ| = 12.04° 1 回送信 speed=20 (~ 0.6s @ 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 = [ -27.68, +63.10, +13.27, -8.26, -59.76, -27.33] to = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] max |Δ| = 12.04° 1 回送信 speed=20 (~ 0.6s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE tol=3.0° [rpp.TOL_APPROACH_PLACE(stage7)] from = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 69.16° 1 回送信 speed=20 (~ 3.5s @ 20°/s 目安・到達待ち 最大 12.4s) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage8_place)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 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 = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME tol=2.5° [rpp.TOL_HOME(stage1_to_home / HOME 復帰)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 49.39° 1 回送信 speed=20 (~ 2.5s @ 20°/s 目安・到達待ち 最大 9.4s) ============================================================================== [RTD ] 送信 = 8 回(STEP 1 + move 7 区間), 想定所要時間 ≈ 29.8s(最悪 73.0s) [RTD ] 内訳: 先頭 settle 3.0s + 移動 12.8s(max|Δ| 合計 256.1° @ 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_120729.json [RTD ] measured_at = 2026-11-09T12:07:31.373791 block = (+127.5, +239.9) mm box = (-218.3, +183.0) mm [RTD ] 再生直前: 上カメラでマット四隅とブロック画素を確認します [RTD ] 再生直前: block = (+131.9, +241.7) mm(measure の homography で換算) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_121656.jpg [RTD ] [WARN] ブロックが measure 時から動いています(止めません・項目8): ブロックが measure 時から 10.8px(≒4.8mm)動いています(許容 10.5px = 5.0mm)。ブロックを戻すか measure をやり直してください [RTD ] [WARN] 画素の差 10.8px(許容 10.5px = 5.0mm)/ mm 換算の差 4.81mm [RTD ] [WARN] つかみ損ねる可能性があります。気になるなら Enter の前に measure を取り直してください [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_121659 [RTD ] 教えた記録のコピー: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_121659/teach/drag_v2_20221013_231249.json [RTD ] recorder に trial_start を送りました。1.0s 待ってから動き出します(mp4 writer が開くまで) [RTD ] 爪と肩の電流を 1 秒 10 回で記録します(爪を動かしている間は読みません)→ /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_121659/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.93° / 到達待ち 最大 8.0s [STEP 1] 3.0s 待ちます(settle) [RTD ] arrival OK (current → HOME, max|Δ|=1.93° <= 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.016s [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.8s) [RTD ] 送信 OK(daemon 往復 1.030s) [RTD ] arrival OK (HOME → APPROACH_PICK, max|Δ|=1.40° <= 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.167s) [RTD ] arrival OK (APPROACH_PICK → PICK, max|Δ|=1.85° <= 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.010s [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.034s) [RTD ] arrival OK (PICK → APPROACH_PICK (lift), max|Δ|=2.37° <= tol 3.0°) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_APPROACH_PLACE(stage7)] / 最大 12.4s) [RTD ] 送信 OK(daemon 往復 1.030s) [RTD ] arrival OK (APPROACH_PICK → APPROACH_PLACE, max|Δ|=2.64° <= 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.040s) [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.014s [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.72° <= tol 3.0°) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME (1 回送信 speed=20 → 到達待ち 許容 2.5°[TOL_HOME(stage1_to_home / HOME 復帰)] / 最大 9.4s) [RTD ] 送信 OK(daemon 往復 1.031s) [RTD ] arrival OK (APPROACH_PLACE → HOME, max|Δ|=2.28° <= tol 2.5°) [Pi] fresh_mode=0 [RTD ] daemon_set_fresh_mode(0) 完了 [RTD ] 実測角の読み取り: ok 60/60 回, 実効 1.65 Hz(目標 3.0 Hz 以上) [RTD ] [WARN] 実測角の読み取りが目標 3.0 Hz を下回りました(1.65 Hz)。学習データの state 密度が 19 本より薄くなります [RTD ] send_angles の daemon 往復 (7 回): 平均 1.052s / p50 1.031s / 最大 1.167s(timeout 6.0s) [RTD ] [WARN] 送信 1 回に 1.167s かかった回があります。daemon は送信後に角度を読み直すので、動き始めで読めないと伸びます(単発送信なので試行全体への影響は小さい) [RTD ] 区間の所要(送信→到達確認まで)(8 区間): 平均 2.43s / 最大 4.42s [RECORD] 電流の記録終了 81 行 (2.22 行/秒. 本体が眠っている間だけ読む. 爪の間 14.054 秒は読まない. 見込み超え 0 回. read_servo) → /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_121659/recording/currents.csv ============================================================================== [RTD ] 再生 完了 ============================================================================== [RTD ] つかめたか (y/n) > y [RTD ] 箱に入ったか (y/n) > y [RTD ] 試行 JSON: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_121659/run_0001_20261109_121659.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_20261109_121659 --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_231249.json --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_20221013_231249.json [RTD ] 取得しました → /var/folders/5w/2q2mc64n6yv63gfh31h34w6h0000gn/T/record_teach_demo_nnd1ylfz/drag_v2_20221013_231249.json [RTD ] 入力ファイル: drag_v2_20221013_231249.json [RTD ] 抽出ウェイポイント: APPROACH_PICK <- phase APPROACH_PICK argmax_idx=146 (start=146 end=194, gap=12.04°) angles = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] PICK <- gripper close mark idx=214(PICK phase 範囲内) angles = [ -27.68, +63.10, +13.27, -8.26, -59.76, -27.33] APPROACH_PLACE <- phase APPROACH_PLACE argmax_idx=286 (start=286 end=321, gap=20.83°) angles = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] PLACE <- gripper open mark idx=345(PLACE phase 範囲内) angles = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] [RTD ] JOINT_LIMITS 一括検証 OK(全 endpoint + HOME) [RTD ] 姿勢検査 OK(全 137 姿勢が 有限値 + JOINT_LIMITS + J4_SAFE [-90.0, +60.0] 内) [RTD ] j4 の余裕は最小 18.20°(しきい値 3.0° 以上) [RTD ] 現在姿勢を daemon から取得します [RTD ] 現在姿勢 = [ -0.43, +1.49, +1.75, +0.08, -0.26, -30.23] ============================================================================== [RTD ] 実行プラン(daemon 経由・区間ごとに 1 回送信 → 到達待ち) ============================================================================== [STEP 1] MOVE → HOME (single send + settle) speed=20 current = [ -0.43, +1.49, +1.75, +0.08, -0.26, -30.23] to HOME = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 1.75° (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 = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] max |Δ| = 71.80° 1 回送信 speed=20 (~ 3.6s @ 20°/s 目安・到達待ち 最大 12.8s) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage4_pick)] from = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] to = [ -27.68, +63.10, +13.27, -8.26, -59.76, -27.33] max |Δ| = 12.04° 1 回送信 speed=20 (~ 0.6s @ 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 = [ -27.68, +63.10, +13.27, -8.26, -59.76, -27.33] to = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] max |Δ| = 12.04° 1 回送信 speed=20 (~ 0.6s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE tol=3.0° [rpp.TOL_APPROACH_PLACE(stage7)] from = [ -28.12, +57.21, +19.86, -3.60, -71.80, -27.50] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 69.16° 1 回送信 speed=20 (~ 3.5s @ 20°/s 目安・到達待ち 最大 12.4s) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage8_place)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 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 = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME tol=2.5° [rpp.TOL_HOME(stage1_to_home / HOME 復帰)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 49.39° 1 回送信 speed=20 (~ 2.5s @ 20°/s 目安・到達待ち 最大 9.4s) ============================================================================== [RTD ] 送信 = 8 回(STEP 1 + move 7 区間), 想定所要時間 ≈ 29.8s(最悪 73.0s) [RTD ] 内訳: 先頭 settle 3.0s + 移動 12.8s(max|Δ| 合計 256.1° @ 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_120729.json [RTD ] measured_at = 2026-11-09T12:07:31.373791 block = (+127.5, +239.9) mm box = (-218.3, +183.0) mm [RTD ] 再生直前: 上カメラでマット四隅とブロック画素を確認します [RTD ] 再生直前: block = (+130.0, +228.5) mm(measure の homography で換算) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_121754.jpg [RTD ] [WARN] ブロックが measure 時から動いています(止めません・項目8): ブロックが measure 時から 24.7px(≒11.7mm)動いています(許容 10.5px = 5.0mm)。ブロックを戻すか measure をやり直してください [RTD ] [WARN] 画素の差 24.7px(許容 10.5px = 5.0mm)/ mm 換算の差 11.70mm [RTD ] [WARN] つかみ損ねる可能性があります。気になるなら Enter の前に measure を取り直してください [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_121815 [RTD ] 教えた記録のコピー: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_121815/teach/drag_v2_20221013_231249.json [RTD ] recorder に trial_start を送りました。1.0s 待ってから動き出します(mp4 writer が開くまで) [RTD ] 爪と肩の電流を 1 秒 10 回で記録します(爪を動かしている間は読みません)→ /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_121815/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.75° / 到達待ち 最大 8.0s [STEP 1] 3.0s 待ちます(settle) [RTD ] arrival OK (current → HOME, max|Δ|=1.75° <= 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.8s) [RTD ] 送信 OK(daemon 往復 1.030s) [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.031s) [RTD ] arrival OK (APPROACH_PICK → PICK, max|Δ|=1.85° <= 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.049s) [RTD ] arrival OK (PICK → APPROACH_PICK (lift), max|Δ|=2.37° <= tol 3.0°) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_APPROACH_PLACE(stage7)] / 最大 12.4s) [RTD ] 送信 OK(daemon 往復 1.032s) [RTD ] arrival OK (APPROACH_PICK → APPROACH_PLACE, max|Δ|=2.55° <= 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.93° <= 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.90° <= tol 3.0°) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME (1 回送信 speed=20 → 到達待ち 許容 2.5°[TOL_HOME(stage1_to_home / HOME 復帰)] / 最大 9.4s) [RTD ] 送信 OK(daemon 往復 1.032s) [RTD ] arrival OK (APPROACH_PLACE → HOME, max|Δ|=2.28° <= tol 2.5°) [Pi] fresh_mode=0 [RTD ] daemon_set_fresh_mode(0) 完了 [RTD ] 実測角の読み取り: ok 60/60 回, 実効 1.65 Hz(目標 3.0 Hz 以上) [RTD ] [WARN] 実測角の読み取りが目標 3.0 Hz を下回りました(1.65 Hz)。学習データの state 密度が 19 本より薄くなります [RTD ] send_angles の daemon 往復 (7 回): 平均 1.034s / p50 1.031s / 最大 1.049s(timeout 6.0s) [RTD ] [WARN] 送信 1 回に 1.049s かかった回があります。daemon は送信後に角度を読み直すので、動き始めで読めないと伸びます(単発送信なので試行全体への影響は小さい) [RTD ] 区間の所要(送信→到達確認まで)(8 区間): 平均 2.41s / 最大 4.42s [RECORD] 電流の記録終了 81 行 (2.23 行/秒. 本体が眠っている間だけ読む. 爪の間 14.049 秒は読まない. 見込み超え 1 回. read_servo) → /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_121815/recording/currents.csv ============================================================================== [RTD ] 再生 完了 ============================================================================== [RTD ] つかめたか (y/n) > y [RTD ] 箱に入ったか (y/n) > y [RTD ] 試行 JSON: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_121815/run_0001_20261109_121815.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_20261109_121815 --dataset mecharm_redblock_box_teach_v1 (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % python3 tools/gamepad_teleop.py --execute /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/pkgdata.py:25: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81. from pkg_resources import resource_stream, resource_exists objc[15510]: Class SDLApplication is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x102dad2c8) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10b8f4890). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[15510]: Class SDLAppDelegate is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x102dad318) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10b8f48e0). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[15510]: Class SDLTranslatorResponder is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x102dad390) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10b8f4958). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[15510]: Class SDLMessageBoxPresenter is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x102dad3b8) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10b8f4980). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[15510]: Class SDL_cocoametalview is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x102dad408) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10b8f49d0). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[15510]: Class SDLOpenGLContext is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x102dad458) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10b8f4a20). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[15510]: Class SDL_ShapeData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x102dad4d0) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10b8f4a98). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[15510]: Class SDL_CocoaClosure is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x102dad520) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10b8f4ae8). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[15510]: Class SDL_VideoData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x102dad570) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10b8f4b38). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[15510]: Class SDL_WindowData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x102dad5c0) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10b8f4b88). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[15510]: Class SDLWindow is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x102dad5e8) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10b8f4bb0). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[15510]: Class Cocoa_WindowListener is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x102dad610) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10b8f4bd8). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[15510]: Class SDLView is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x102dad688) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10b8f4c50). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[15510]: Class METAL_RenderData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x102dad700) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10b8f4cc8). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[15510]: Class METAL_TextureData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x102dad750) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10b8f4d18). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[15510]: Class SDL_RumbleMotor is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x102dad778) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10b8f4d40). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[15510]: Class SDL_RumbleContext is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x102dad7c8) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10b8f4d90). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. [記録] /Volumes/KIOXIA/r2r2r-data/runs/experiments/gamepad_teleop/teleop_20261109_122141 [実機] daemon に送ります。起動したときの姿勢: -0.43 +1.49 +1.75 +0.08 -0.26 -30.23 コントローラーを待っています(つないでいなければ、今つないでください) [接続] PS4 Controller GUID=03008fe54c050000cc09000000016800 軸=6 ボタン=16 [長押し] j0 を -0.43° → -9.93° まで(目標を 1 回送信。止めます) [送信] j0 -1.0° → -16.64 +1.49 +1.75 +0.08 -0.26 -30.23 届いた(ずれ 1.75°) 届いた角度 -17.05 +1.49 +1.93 +0.08 +1.49 -30.23 [送信] j0 -1.0° → -17.64 +1.49 +1.75 +0.08 -0.26 -30.23 動かなかった(次の押しは この目標の先から)・無視されたので 2 回送り直した(ずれ 1.75°) 届いた角度 -16.43 +1.49 +1.93 +0.08 +1.49 -30.23 [長押し] j0 を -16.43° → -16.43° まで(目標を 1 回送信。止めます) [長押し] j0 を -16.69° → -22.85° まで(目標を 1 回送信。止めます) [送信] j0 +1.0° → -29.32 +1.49 +1.75 +0.08 -0.26 -30.23 届いた(ずれ 1.92°) 届いた角度 -29.09 +1.58 +1.84 +0.00 +1.66 -30.32 [送信] j0 +1.0° → -28.32 +1.49 +1.75 +0.08 -0.26 -30.23 届いた(ずれ 1.92°) 届いた角度 -28.74 +1.58 +1.84 +0.00 +1.66 -30.32 [送信] j0 +1.0° → -27.32 +1.49 +1.75 +0.08 -0.26 -30.23 届いた(ずれ 1.92°) 届いた角度 -27.33 +1.58 +1.84 +0.00 +1.66 -30.32 [送信] j0 +1.0° → -26.32 +1.49 +1.75 +0.08 -0.26 -30.23 動かなかった(次の押しは この目標の先から)・無視されたので 2 回送り直した(ずれ 0.78°) 届いた角度 -27.07 +1.58 +1.84 +0.00 +0.52 -30.32 [送信] j0 +1.0° → -25.32 +1.49 +1.75 +0.08 -0.26 -30.23 動かなかった(次の押しは この目標の先から)・無視されたので 2 回送り直した(ずれ 1.75°) 届いた角度 -27.07 +1.58 +1.84 +0.00 +0.52 -30.32 [関節] 上下で動かす関節を j2 にしました [長押し] j2 を +1.84° → -7.47° まで(目標を 1 回送信。止めます) [関節] 上下で動かす関節を j3 にしました [関節] 上下で動かす関節を j4 にしました [WARN] daemon_get_angles failed: daemon error: get_angles returned empty/invalid after 12 retries [WARN] daemon_get_angles failed: daemon error: get_angles returned empty/invalid after 12 retries [WARN] daemon_get_angles failed: daemon error: get_angles returned empty/invalid after 12 retries [関節] 上下で動かす関節を j5 にしました [関節] 上下で動かす関節を j1 にしました [WARN] daemon_get_angles failed: daemon error: get_angles returned empty/invalid after 12 retries [WARN] daemon_get_angles failed: daemon error: get_angles returned empty/invalid after 12 retries [WARN] daemon_get_angles failed: daemon error: get_angles returned empty/invalid after 12 retries [WARN] daemon_get_angles failed: daemon error: get_angles returned empty/invalid after 12 retries [送信] j4 -1.0° → -25.32 +1.49 -26.42 +0.08 -1.00 -30.23 動かなかった(次の押しは この目標の先から)・無視されたので 2 回送り直した(ずれ 1.38°) 届いた角度 -25.04 +1.49 -25.04 +0.00 +0.00 -30.23 [送信] j1 +1.0° → -25.32 +2.49 -26.42 +0.08 -1.00 -30.23 届いた(ずれ 1.38°) 届いた角度 -25.04 +2.81 -25.04 +0.00 -1.58 -30.23 [長押し] j1 を +3.42° → +11.60° まで(目標を 1 回送信。止めます) [WARN] daemon_get_angles failed: daemon error: get_angles returned empty/invalid after 12 retries [WARN] daemon_get_angles failed: daemon error: get_angles returned empty/invalid after 12 retries [送信] j1 +1.0° → -25.32 +21.83 -26.42 +0.08 -1.00 -30.23 手前で止まった(次の押しは この目標の先から)(ずれ 1.9°) 届いた角度 -25.04 +22.93 -24.52 +0.08 +0.17 -30.23 [長押し] j1 を +22.93° → +29.79° まで(目標を 1 回送信。止めます) [関節] 上下で動かす関節を j2 にしました [関節] 上下で動かす関節を j3 にしました [関節] 上下で動かす関節を j4 にしました [長押し] j4 を +1.84° → -36.82° まで(目標を 4 回送信。止めます) [関節] 上下で動かす関節を j5 にしました [関節] 上下で動かす関節を j1 にしました [送信] j1 -1.0° → -25.32 +38.81 -26.42 +0.08 -36.65 -30.23 動かなかった(次の押しは この目標の先から)・無視されたので 2 回送り直した(ずれ 2.96°) 届いた角度 -25.04 +41.22 -23.46 +0.08 -36.38 -30.23 [長押し] j1 を +41.22° → +46.75° まで(目標を 1 回送信。止めます) [関節] 上下で動かす関節を j2 にしました [長押し] j2 を -23.99° → -23.11° まで(目標を 1 回送信。止めます) [長押し] j2 を -8.17° → -7.11° まで(目標を 1 回送信。止めます) [関節] 上下で動かす関節を j3 にしました [関節] 上下で動かす関節を j4 にしました [関節] 上下で動かす関節を j5 にしました [関節] 上下で動かす関節を j1 にしました [送信] j1 -1.0° → -25.32 +57.88 -2.81 +0.08 -36.65 -30.23 動かなかった(次の押しは この目標の先から)・無視されたので 2 回送り直した(ずれ 4.3°) 届いた角度 -25.04 +60.38 -2.81 +0.17 -40.95 -30.23 [長押し] j1 を +60.38° → +51.94° まで(目標を 1 回送信。止めます) [関節] 上下で動かす関節を j2 にしました [長押し] j2 を +0.43° → +0.43° まで(目標を 1 回送信。止めます) [送信] j2 +1.0° → -25.32 +50.00 +10.75 +0.08 -36.65 -30.23 届いた(ずれ 5.27°) 届いた角度 -25.04 +47.81 +10.72 +0.26 -41.92 -30.23 [長押し] j2 を +11.25° → +11.25° まで(目標を 1 回送信。止めます) [関節] 上下で動かす関節を j3 にしました [関節] 上下で動かす関節を j4 にしました [関節] 上下で動かす関節を j5 にしました [関節] 上下で動かす関節を j1 にしました [長押し] j1 を +48.42° → +48.07° まで(目標を 1 回送信。止めます) [長押し] j1 を +44.47° → +42.36° まで(目標を 1 回送信。止めます) [関節] 上下で動かす関節を j2 にしました [止める] stop(released_while_sending) 止まった角度 -25.04 +48.16 +24.34 -0.08 -44.64 -30.76 [長押し] j2 を +24.34° → +24.25° まで(目標を 1 回送信。止めます) [長押し] j2 を +18.01° → +17.75° まで(目標を 1 回送信。止めます) [関節] 上下で動かす関節を j3 にしました [関節] 上下で動かす関節を j4 にしました [関節] 上下で動かす関節を j5 にしました [関節] 上下で動かす関節を j1 にしました [送信] j1 +1.0° → -25.32 +52.76 +6.32 +0.08 -36.65 -30.23 手前で止まった(次の押しは この目標の先から)(ずれ 5.27°) 届いた角度 -25.04 +53.87 +4.21 +0.26 -41.92 -30.58 [長押し] j1 を +53.87° → +52.11° まで(目標を 1 回送信。止めます) [長押し] j1 を +42.89° → +42.62° まで(目標を 1 回送信。止めます) [送信] j1 +1.0° → -25.32 +53.47 +6.32 +0.08 -36.65 -30.23 届いた(ずれ 2.54°) 届いた角度 -25.04 +53.61 +5.53 +0.26 -39.19 -30.58 [送信] j1 +1.0° → -25.32 +54.47 +6.32 +0.08 -36.65 -30.23 手前で止まった(次の押しは この目標の先から)(ずれ 2.9°) 届いた角度 -25.04 +55.63 +4.65 +0.26 -39.55 -30.58 [送信] j1 +1.0° → -25.32 +55.47 +6.32 +0.08 -36.65 -30.23 届いた(ずれ 2.9°) 届いた角度 -25.04 +55.63 +4.65 +0.26 -39.55 -30.58 [送信] j1 +2.0° → -25.32 +57.47 +6.32 +0.08 -36.65 -30.23 届いた(ずれ 3.86°) 届いた角度 -25.04 +57.74 +4.57 +0.26 -40.51 -30.49 [関節] 上下で動かす関節を j2 にしました [送信] j2 -1.0° → -25.32 +57.47 +5.32 +0.08 -36.65 -30.23 届いた(ずれ 4.21°) 届いた角度 -25.04 +58.53 +4.83 +0.17 -40.86 -30.23 [送信] j2 -1.0° → -25.32 +57.47 +4.32 +0.08 -36.65 -30.23 動かなかった(次の押しは この目標の先から)・無視されたので 2 回送り直した(ずれ 5.44°) 届いた角度 -25.04 +58.53 +5.71 +0.00 -42.09 -30.23 [送信] j2 +1.0° → -25.32 +57.47 +5.32 +0.08 -36.65 -30.23 届いた(ずれ 5.44°) 届いた角度 -25.04 +58.53 +5.71 +0.00 -42.09 -30.23 [送信] j2 +1.0° → -25.32 +57.47 +6.32 +0.08 -36.65 -30.23 届いた(ずれ 5.44°) 届いた角度 -25.04 +58.53 +6.06 +0.00 -42.09 -30.23 [送信] j2 +2.0° → -25.32 +57.47 +8.32 +0.08 -36.65 -30.23 届いた(ずれ 7.2°) 届いた角度 -25.04 +58.53 +7.99 -0.17 -43.85 -30.23 [止める] stop(released_while_sending) 止まった角度 -25.04 +59.06 +7.99 -0.17 -44.47 -30.41 [送信] j2 +2.0° → -25.32 +57.47 +9.99 +0.08 -36.65 -30.23 手前で止まった(次の押しは この目標の先から)(ずれ 7.47°) 届いた角度 -25.04 +58.62 +9.05 -0.35 -44.12 -30.58 [関節] 上下で動かす関節を j3 にしました [送信] j3 -1.0° → -25.32 +57.47 +9.99 -0.92 -36.65 -30.23 届いた(ずれ 7.2°) 届いた角度 -25.04 +58.62 +9.05 -0.43 -43.85 -30.49 [送信] j3 -1.0° → -25.32 +57.47 +9.99 -1.92 -36.65 -30.23 手前で止まった(次の押しは この目標の先から)(ずれ 6.5°) 届いた角度 -25.31 +58.27 +9.05 -1.23 -43.15 -30.41 [関節] 上下で動かす関節を j4 にしました [送信] j4 -1.0° → -25.32 +57.47 +9.99 -1.92 -43.62 -30.23 動かなかった(次の押しは この目標の先から)・無視されたので 2 回送り直した(ずれ 1.0°) 届いた角度 -25.40 +58.18 +9.05 -1.40 -42.62 -30.32 [止める] stop(released_while_sending) 止まった角度 -25.40 +58.35 +9.05 -1.40 -43.76 -30.32 [長押し] j4 を -43.76° → -44.82° まで(目標を 1 回送信。止めます) [送信] j4 -1.0° → -25.32 +57.47 +9.99 -1.92 -48.28 -30.23 動かなかった(次の押しは この目標の先から)・無視されたので 2 回送り直した(ずれ 1.68°) 届いた角度 -25.40 +59.15 +9.84 -1.23 -47.37 -30.41 [送信] j4 -1.0° → -25.32 +57.47 +9.99 -1.92 -49.28 -30.23 手前で止まった(次の押しは この目標の先から)(ずれ 1.68°) 届いた角度 -25.40 +59.15 +9.84 -1.31 -47.72 -30.41 [長押し] j4 を -47.81° → -47.81° まで(目標を 1 回送信。止めます) [長押し] j4 を -51.41° → -57.39° まで(目標を 1 回送信。止めます) [関節] 上下で動かす関節を j5 にしました [関節] 上下で動かす関節を j1 にしました [送信] j1 +1.0° → -25.32 +62.25 +9.99 -1.92 -62.05 -30.23 手前で止まった(次の押しは この目標の先から)(ずれ 3.95°) 届いた角度 -25.40 +63.45 +10.01 -1.14 -66.00 -30.41 [送信] j1 +1.0° → -25.32 +63.25 +9.99 -1.92 -62.05 -30.23 届いた(ずれ 3.95°) 届いた角度 -25.40 +63.45 +10.01 -1.23 -66.00 -30.41 [長押し] j1 を +64.24° → +66.09° まで(目標を 1 回送信。止めます) [送信] j1 -1.0° → -25.32 +69.22 +9.99 -1.92 -62.05 -30.23 動かなかった(次の押しは この目標の先から)・無視されたので 2 回送り直した(ずれ 5.8°) 届いた角度 -25.40 +70.22 +10.01 -1.40 -67.85 -29.97 [送信] j1 -1.0° → -25.32 +68.22 +9.99 -1.92 -62.05 -30.23 動かなかった(次の押しは この目標の先から)・無視されたので 2 回送り直した(ずれ 5.53°) 届いた角度 -25.40 +70.04 +10.01 -1.40 -67.58 -29.97 [送信] j1 -1.0° → -25.32 +67.22 +9.99 -1.92 -62.05 -30.23 手前で止まった(次の押しは この目標の先から)(ずれ 3.78°) 届いた角度 -25.40 +68.90 +10.01 -1.40 -65.83 -30.05 [長押し] j1 を +68.90° → +66.88° まで(目標を 1 回送信。止めます) [送信] j1 +1.0° → -25.32 +60.58 +9.99 -1.92 -62.05 -30.23 手前で止まった(次の押しは この目標の先から)(ずれ 2.28°) 届いた角度 -25.40 +61.78 +10.01 -1.23 -64.33 -30.14 [送信] j1 +1.0° → -25.32 +61.58 +9.99 -1.92 -62.05 -30.23 届いた(ずれ 2.28°) 届いた角度 -25.40 +61.78 +10.01 -1.23 -64.33 -30.14 [送信] j1 +2.0° → -25.32 +63.58 +9.99 -1.92 -62.05 -30.23 届いた(ずれ 3.07°) 届いた角度 -25.40 +64.07 +10.10 -1.31 -65.12 -30.14 [送信] j1 +2.0° → -25.32 +65.58 +9.99 -1.92 -62.05 -30.23 手前で止まった(次の押しは この目標の先から)(ずれ 3.51°) 届いた角度 -25.40 +66.62 +10.10 -1.40 -65.56 -30.14 [関節] 上下で動かす関節を j2 にしました [送信] j2 +1.0° → -25.32 +65.58 +10.99 -1.92 -62.05 -30.23 届いた(ずれ 3.95°) 届いた角度 -25.40 +66.70 +11.07 -1.58 -66.00 -30.23 [送信] j2 -1.0° → -25.32 +65.58 +9.99 -1.92 -62.05 -30.23 動かなかった(次の押しは この目標の先から)・無視されたので 2 回送り直した(ずれ 1.75°) 届いた角度 -25.40 +66.70 +11.25 -1.58 -63.80 -30.14 [止める] stop(released_while_sending) 止まった角度 -25.40 +67.41 +9.31 -1.66 -62.05 -30.05 [長押し] j2 を +9.31° → +9.31° まで(目標を 1 回送信。止めます) [Pi] GRIPPER: VALUE=20 speed=100 result= None [爪] 爪を閉じる(待ち 0.8 秒のあと受付) [Pi] GRIPPER: OPEN result= None [爪] 爪を開く(待ち 0.8 秒のあと受付) [送信] j2 -1.0° → -25.32 +65.58 -2.93 -1.92 -50.71 -30.23 手前で止まった(次の押しは この目標の先から)(ずれ 12.48°) 届いた角度 -25.48 +68.20 -1.84 -1.40 -63.19 -30.14 [送信] j2 +1.0° → -25.32 +65.58 -1.93 -1.92 -63.19 -30.23 届いた(ずれ 2.62°) 届いた角度 -25.48 +68.20 -1.84 -1.40 -63.19 -30.14 [送信] j2 +1.0° → -25.32 +65.58 -0.93 -1.92 -63.19 -30.23 届いた(ずれ 2.62°) 届いた角度 -25.48 +68.20 -1.05 -1.40 -64.07 -30.14 [送信] j2 +1.0° → -25.32 +65.58 +0.07 -1.92 -63.19 -30.23 届いた(ずれ 2.62°) 届いた角度 -25.48 +68.20 -0.08 -1.40 -64.16 -30.14 [送信] j2 +2.0° → -25.32 +65.58 +2.07 -1.92 -63.19 -30.23 届いた(ずれ 2.62°) 届いた角度 -25.48 +68.20 +2.19 -1.40 -65.21 -30.14 [送信] j2 +2.0° → -25.32 +65.58 +4.07 -1.92 -63.19 -30.23 届いた(ずれ 2.62°) 届いた角度 -25.48 +68.20 +4.13 -1.40 -65.56 -30.14 [送信] j2 +2.0° → -25.32 +65.58 +6.07 -1.92 -63.19 -30.23 届いた(ずれ 2.64°) 届いた角度 -25.48 +68.20 +6.32 -1.40 -65.83 -30.14 [送信] j2 +2.0° → -25.32 +65.58 +8.07 -1.92 -63.19 -30.23 届いた(ずれ 2.81°) 届いた角度 -25.48 +68.20 +7.82 -1.40 -66.00 -30.14 [Pi] GRIPPER: VALUE=20 speed=100 result= None [爪] 爪を閉じる(待ち 0.8 秒のあと受付) [関節] 上下で動かす関節を j3 にしました [関節] 上下で動かす関節を j4 にしました [関節] 上下で動かす関節を j5 にしました [関節] 上下で動かす関節を j1 にしました [長押し] j1 を +68.20° → +47.19° まで(目標を 3 回送信。止めます) [Pi] GRIPPER: OPEN result= None [爪] 爪を開く(待ち 0.8 秒のあと受付) ^C [終了] Ctrl+C [終了] アームは動かしていません。記録: /Volumes/KIOXIA/r2r2r-data/runs/experiments/gamepad_teleop/teleop_20261109_122141 (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % >.... たので 2 回送り直した(ずれ 1.75°) 届いた角度 -25.40 +66.70 +11.25 -1.58 -63.80 -30.14 [止める] stop(released_while_sending) 止まった角度 -25.40 +67.41 +9.31 -1.66 -62.05 -30.05 [長押し] j2 を +9.31° → +9.31° まで(目標を 1 回送信。止めます) [Pi] GRIPPER: VALUE=20 speed=100 result= None [爪] 爪を閉じる(待ち 0.8 秒のあと受付) [Pi] GRIPPER: OPEN result= None [爪] 爪を開く(待ち 0.8 秒のあと受付) [送信] j2 -1.0° → -25.32 +65.58 -2.93 -1.92 -50.71 -30.23 手前で止まった(次の押しは この目標の先から)(ずれ 12.48°) 届いた角度 -25.48 +68.20 -1.84 -1.40 -63.19 -30.14 [送信] j2 +1.0° → -25.32 +65.58 -1.93 -1.92 -63.19 -30.23 届いた(ずれ 2.62°) 届いた角度 -25.48 +68.20 -1.84 -1.40 -63.19 -30.14 [送信] j2 +1.0° → -25.32 +65.58 -0.93 -1.92 -63.19 -30.23 届いた(ずれ 2.62°) 届いた角度 -25.48 +68.20 -1.05 -1.40 -64.07 -30.14 [送信] j2 +1.0° → -25.32 +65.58 +0.07 -1.92 -63.19 -30.23 届いた(ずれ 2.62°) 届いた角度 -25.48 +68.20 -0.08 -1.40 -64.16 -30.14 [送信] j2 +2.0° → -25.32 +65.58 +2.07 -1.92 -63.19 -30.23 届いた(ずれ 2.62°) 届いた角度 -25.48 +68.20 +2.19 -1.40 -65.21 -30.14 [送信] j2 +2.0° → -25.32 +65.58 +4.07 -1.92 -63.19 -30.23 届いた(ずれ 2.62°) 届いた角度 -25.48 +68.20 +4.13 -1.40 -65.56 -30.14 [送信] j2 +2.0° → -25.32 +65.58 +6.07 -1.92 -63.19 -30.23 届いた(ずれ 2.64°) 届いた角度 -25.48 +68.20 +6.32 -1.40 -65.83 -30.14 [送信] j2 +2.0° → -25.32 +65.58 +8.07 -1.92 -63.19 -30.23 届いた(ずれ 2.81°) 届いた角度 -25.48 +68.20 +7.82 -1.40 -66.00 -30.14 [Pi] GRIPPER: VALUE=20 speed=100 result= None [爪] 爪を閉じる(待ち 0.8 秒のあと受付) [関節] 上下で動かす関節を j3 にしました [関節] 上下で動かす関節を j4 にしました [関節] 上下で動かす関節を j5 にしました [関節] 上下で動かす関節を j1 にしました [長押し] j1 を +68.20° → +47.19° まで(目標を 3 回送信。止めます) [Pi] GRIPPER: OPEN result= None [爪] 爪を開く(待ち 0.8 秒のあと受付) ^C [終了] Ctrl+C [終了] アームは動かしていません。記録: /Volumes/KIOXIA/r2r2r-data/runs/experiments/gamepad_teleop/teleop_20261109_122141 (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % python3 tools/gamepad_teleop.py --execute zsh: parse error near `shimazueiichi@shimad...' (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % python3 tools/gamepad_teleop.py --execute /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/pkgdata.py:25: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81. from pkg_resources import resource_stream, resource_exists objc[15740]: Class SDLApplication is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1060bd2c8) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10edcc890). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[15740]: Class SDLAppDelegate is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1060bd318) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10edcc8e0). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[15740]: Class SDLTranslatorResponder is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1060bd390) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10edcc958). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[15740]: Class SDLMessageBoxPresenter is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1060bd3b8) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10edcc980). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[15740]: Class SDL_cocoametalview is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1060bd408) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10edcc9d0). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[15740]: Class SDLOpenGLContext is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1060bd458) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10edcca20). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[15740]: Class SDL_ShapeData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1060bd4d0) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10edcca98). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[15740]: Class SDL_CocoaClosure is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1060bd520) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10edccae8). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[15740]: Class SDL_VideoData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1060bd570) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10edccb38). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[15740]: Class SDL_WindowData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1060bd5c0) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10edccb88). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[15740]: Class SDLWindow is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1060bd5e8) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10edccbb0). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[15740]: Class Cocoa_WindowListener is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1060bd610) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10edccbd8). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[15740]: Class SDLView is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1060bd688) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10edccc50). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[15740]: Class METAL_RenderData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1060bd700) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10edcccc8). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[15740]: Class METAL_TextureData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1060bd750) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10edccd18). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[15740]: Class SDL_RumbleMotor is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1060bd778) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10edccd40). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[15740]: Class SDL_RumbleContext is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1060bd7c8) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10edccd90). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. [記録] /Volumes/KIOXIA/r2r2r-data/runs/experiments/gamepad_teleop/teleop_20261109_122554 [実機] daemon に送ります。起動したときの姿勢: -25.48 +43.06 +8.52 -2.10 -13.18 -30.23 コントローラーを待っています(つないでいなければ、今つないでください) [接続] PS4 Controller GUID=03008fe54c050000cc09000000016800 軸=6 ボタン=16 [HOME] 0.61 秒で離したので送りません(1 秒の長押しで送ります) [送信] HOME → +0.00 +0.00 +0.00 +0.00 +0.00 -30.00 届いた(ずれ 2.1°) 届いた角度 -0.08 +1.66 +2.10 -0.26 +0.70 -30.23 ^C [終了] Ctrl+C [終了] アームは動かしていません。記録: /Volumes/KIOXIA/r2r2r-data/runs/experiments/gamepad_teleop/teleop_20261109_122554 (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % scp -i ~/.ssh/id_rsa_pi /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/drag_v2_20261109_123000.json ubuntu@192.168.2.1:r2r2r-scripts/dynamic_tracking_limits/drag_teaching/ drag_v2_20261109_123000.json 100% 37KB 7.2MB/s 00:00 (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % python3 dynamic_tracking_limits/drag_teaching/record_teach_demo.py measure [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=[302, 1703] Y=[0, 949] [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.4px > 60px → 輪郭捨てて fallback [06f] DETECT: center=(1495,572) source=template_fallback score=0.655 angle=0° scale=0.85 size=(167x156) template=white_box_20260520_163838_005.png (eval 5.09s) [DETECT][1/5] box Unity=(-0.220,+0.191) score=0.6553379893302917 赤ブロック pixel=(881, 223) → Unity=(0.0540, 0.0197) [DETECT][1/5] block Unity=(+0.054,+0.020) score=null [06f] WARN: 輪郭中心とテンプレ中心の距離が閾値超 |Δ|=100.3px > 60px → 輪郭捨てて fallback [06f] DETECT: center=(1495,571) source=template_fallback score=0.655 angle=0° scale=0.85 size=(167x156) template=white_box_20260520_163838_005.png (eval 5.13s) [DETECT][2/5] box Unity=(-0.220,+0.191) score=0.655491054058075 赤ブロック pixel=(880, 226) → Unity=(0.0545, 0.0212) [DETECT][2/5] block Unity=(+0.054,+0.021) score=null [06f] WARN: 輪郭中心とテンプレ中心の距離が閾値超 |Δ|=100.3px > 60px → 輪郭捨てて fallback [06f] DETECT: center=(1496,571) source=template_fallback score=0.656 angle=0° scale=0.85 size=(167x156) template=white_box_20260520_163838_005.png (eval 5.13s) [DETECT][3/5] box Unity=(-0.221,+0.191) score=0.6559053659439087 赤ブロック pixel=(881, 221) → Unity=(0.0540, 0.0187) [DETECT][3/5] block Unity=(+0.054,+0.019) score=null [06f] WARN: 輪郭中心とテンプレ中心の距離が閾値超 |Δ|=100.3px > 60px → 輪郭捨てて fallback [06f] DETECT: center=(1495,571) source=template_fallback score=0.656 angle=0° scale=0.85 size=(167x156) template=white_box_20260520_163838_005.png (eval 5.12s) [DETECT][4/5] box Unity=(-0.220,+0.191) score=0.6560110449790955 赤ブロック pixel=(879, 283) → Unity=(0.0554, 0.0488) [DETECT][4/5] block Unity=(+0.055,+0.049) score=null [06f] WARN: 輪郭中心とテンプレ中心の距離が閾値超 |Δ|=100.3px > 60px → 輪郭捨てて fallback [06f] DETECT: center=(1495,571) source=template_fallback score=0.655 angle=0° scale=0.85 size=(167x156) template=white_box_20260520_163838_005.png (eval 5.15s) [DETECT][5/5] box Unity=(-0.220,+0.191) score=0.6551560163497925 赤ブロック pixel=(880, 281) → Unity=(0.0549, 0.0478) [DETECT][5/5] block Unity=(+0.055,+0.048) score=null [RTD ] measure: block = (+54.5, +21.2) mm [RTD ] measure: box = (-220.2, +190.9) mm score=0.655491054058075 [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/measure_20261109_122827.jpg [RTD ] homography のもとになった四隅と、測り直した四隅の差: 最大 2.24px(上限 15.0px・やり直し 1 回) [RTD ] [WARN] 検出したブロックがアームの根元から 58.4mm しか離れていません(120.0mm 以内は不可)。教示で使う位置は 200mm 以上離れているので、赤いケーブル等の別のものを拾っている可能性が高いです: (+54.5, +21.2) mm(WARN のみ・保存します) [RTD ] 何を拾ったかは確認画像で見てください: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/measure_20261109_122827.jpg [RTD ] ブロックのばらつき: 2.0px = 0.97mm(5 枚・上限 4.0mm) [RTD ] 元の検出と測り直しの差: 26.65mm(上限 3.0mm) [RTD ] [WARN] 元の検出 (+54.5, +21.2) mm と測り直し (+54.9, +47.8) mm が 26.65mm 食い違います(上限 3.0mm)。元の検出が外れている可能性があります(WARN のみ・保存します) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/measure_20261109_122827.jpg [RTD ] 保存しました: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/measure_20261109_122827.json [RTD ] [WARN] この measure には WARN が 2 件あります: block_too_close_to_base, vs_recheck_over [RTD ] [WARN] 値が外れている可能性があります。気になるなら取り直してください(保存はしてあります) [RTD ] 次は Pi で教示 → daemon 起動 → recorder.py --top --no-side 常駐 → run --teach --execute (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % python3 dynamic_tracking_limits/drag_teaching/record_teach_demo.py run --teach drag_v2_20261109_123000.json [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 ] モード: ドライラン(アームに何も送りません) [RTD ] Pi から教えた記録を取得します: ubuntu@192.168.2.1:r2r2r-scripts/dynamic_tracking_limits/drag_teaching/drag_v2_20261109_123000.json [RTD ] 取得しました → /var/folders/5w/2q2mc64n6yv63gfh31h34w6h0000gn/T/record_teach_demo_44o19u8o/drag_v2_20261109_123000.json [RTD ] 入力ファイル: drag_v2_20261109_123000.json [RTD ] 抽出ウェイポイント: APPROACH_PICK <- phase APPROACH_PICK argmax_idx=146 (start=146 end=194, gap=25.14°) angles = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] PICK <- gripper close mark idx=214(PICK phase 範囲内) angles = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] APPROACH_PLACE <- phase APPROACH_PLACE argmax_idx=286 (start=286 end=321, gap=20.83°) angles = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] PLACE <- gripper open mark idx=345(PLACE phase 範囲内) angles = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] [RTD ] JOINT_LIMITS 一括検証 OK(全 endpoint + HOME) [RTD ] 姿勢検査 OK(全 146 姿勢が 有限値 + JOINT_LIMITS + J4_SAFE [-90.0, +60.0] 内) [RTD ] j4 の余裕は最小 19.78°(しきい値 3.0° 以上) ============================================================================== [RTD ] 実行プラン(daemon 経由・区間ごとに 1 回送信 → 到達待ち) ============================================================================== [STEP 1] MOVE → HOME (single send + settle) speed=20 current = 未取得(ドライラン・daemon に接続していない) to HOME = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] [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 = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] max |Δ| = 66.53° 1 回送信 speed=20 (~ 3.3s @ 20°/s 目安・到達待ち 最大 12.0s) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage4_pick)] from = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] to = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] max |Δ| = 25.14° 1 回送信 speed=20 (~ 1.3s @ 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 = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] to = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] max |Δ| = 25.14° 1 回送信 speed=20 (~ 1.3s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE tol=3.0° [rpp.TOL_APPROACH_PLACE(stage7)] from = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 66.52° 1 回送信 speed=20 (~ 3.3s @ 20°/s 目安・到達待ち 最大 12.0s) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage8_place)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 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 = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME tol=2.5° [rpp.TOL_HOME(stage1_to_home / HOME 復帰)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 49.39° 1 回送信 speed=20 (~ 2.5s @ 20°/s 目安・到達待ち 最大 9.4s) ============================================================================== [RTD ] 送信 = 8 回(STEP 1 + move 7 区間), 想定所要時間 ≈ 30.7s(最悪 73.0s) [RTD ] 内訳: 先頭 settle 3.0s + 移動 13.7s(max|Δ| 合計 274.4° @ 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_122827.json [RTD ] measured_at = 2026-11-09T12:28:29.041753 block = (+54.5, +21.2) mm box = (-220.2, +190.9) mm [RTD ] 再生直前: 上カメラでマット四隅とブロック画素を確認します [RTD ] 再生直前: block = (+54.9, +48.3) mm(measure の homography で換算) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_122842.jpg [RTD ] 何を拾ったかは確認画像で見てください: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_122842.jpg [RTD ] [WARN] 検出したブロックがアームの根元から 73.1mm しか離れていません(120.0mm 以内は不可)。教示で使う位置は 200mm 以上離れているので、赤いケーブル等の別のものを拾っている可能性が高いです: (+54.9, +48.3) mm(**止めません**・WARN のみ) [RTD ] [WARN] ブロックが measure 時から動いています(止めません・項目8): ブロックが measure 時から 56.0px(≒27.1mm)動いています(許容 10.3px = 5.0mm)。ブロックを戻すか measure をやり直してください [RTD ] [WARN] 画素の差 56.0px(許容 10.3px = 5.0mm)/ mm 換算の差 27.13mm [RTD ] [WARN] つかみ損ねる可能性があります。気になるなら Enter の前に measure を取り直してください [RTD ] ドライランなので、ここで終了します(アームには何も送っていません) [RTD ] Pi 版と比べる点: 抽出ウェイポイント 4 姿勢と各区間の max|Δ| は同じ。送り方は単発(Pi 版は 0.1s 補間ストリーミング)なので n_steps / ticks は比較対象外。送信 8 回 / 想定所要 ≈ 30.7s (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % python3 tools/gamepad_teleop.py --execute /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/pkgdata.py:25: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81. from pkg_resources import resource_stream, resource_exists objc[16047]: Class SDLApplication is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1035352c8) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10d248890). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[16047]: Class SDLAppDelegate is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x103535318) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10d2488e0). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[16047]: Class SDLTranslatorResponder is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x103535390) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10d248958). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[16047]: Class SDLMessageBoxPresenter is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1035353b8) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10d248980). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[16047]: Class SDL_cocoametalview is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x103535408) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10d2489d0). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[16047]: Class SDLOpenGLContext is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x103535458) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10d248a20). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[16047]: Class SDL_ShapeData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1035354d0) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10d248a98). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[16047]: Class SDL_CocoaClosure is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x103535520) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10d248ae8). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[16047]: Class SDL_VideoData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x103535570) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10d248b38). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[16047]: Class SDL_WindowData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1035355c0) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10d248b88). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[16047]: Class SDLWindow is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1035355e8) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10d248bb0). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[16047]: Class Cocoa_WindowListener is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x103535610) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10d248bd8). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[16047]: Class SDLView is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x103535688) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10d248c50). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[16047]: Class METAL_RenderData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x103535700) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10d248cc8). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[16047]: Class METAL_TextureData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x103535750) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10d248d18). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[16047]: Class SDL_RumbleMotor is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x103535778) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10d248d40). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[16047]: Class SDL_RumbleContext is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x1035357c8) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10d248d90). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. [記録] /Volumes/KIOXIA/r2r2r-data/runs/experiments/gamepad_teleop/teleop_20261109_122924 [実機] daemon に送ります。起動したときの姿勢: -0.26 +1.66 +2.10 -0.26 -0.26 -30.23 コントローラーを待っています(つないでいなければ、今つないでください) [接続] PS4 Controller GUID=03008fe54c050000cc09000000016800 軸=6 ボタン=16 [送信] HOME → +0.00 +0.00 +0.00 +0.00 +0.00 -30.00 届いた(ずれ 2.1°) 届いた角度 -0.26 +1.66 +2.10 -0.26 -0.26 -30.23 ^C [終了] Ctrl+C [終了] アームは動かしていません。記録: /Volumes/KIOXIA/r2r2r-data/runs/experiments/gamepad_teleop/teleop_20261109_122924 (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % 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_123000.json [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=[302, 1703] Y=[0, 949] [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.4px > 60px → 輪郭捨てて fallback [06f] DETECT: center=(1495,572) source=template_fallback score=0.655 angle=0° scale=0.85 size=(167x156) template=white_box_20260520_163838_005.png (eval 5.46s) [DETECT][1/5] box Unity=(-0.220,+0.191) score=0.6554038524627686 赤ブロック pixel=(879, 284) → Unity=(0.0554, 0.0493) [DETECT][1/5] block Unity=(+0.055,+0.049) score=null [06f] WARN: 輪郭中心とテンプレ中心の距離が閾値超 |Δ|=99.4px > 60px → 輪郭捨てて fallback [06f] DETECT: center=(1495,572) source=template_fallback score=0.655 angle=0° scale=0.85 size=(167x156) template=white_box_20260520_163838_005.png (eval 5.95s) [DETECT][2/5] box Unity=(-0.220,+0.191) score=0.6552867293357849 赤ブロック pixel=(880, 230) → Unity=(0.0545, 0.0231) [DETECT][2/5] block Unity=(+0.054,+0.023) score=null [06f] WARN: 輪郭中心とテンプレ中心の距離が閾値超 |Δ|=99.4px > 60px → 輪郭捨てて fallback [06f] DETECT: center=(1495,572) source=template_fallback score=0.655 angle=0° scale=0.85 size=(167x156) template=white_box_20260520_163838_005.png (eval 5.51s) [DETECT][3/5] box Unity=(-0.220,+0.191) score=0.6552579998970032 赤ブロック pixel=(880, 282) → Unity=(0.0549, 0.0483) [DETECT][3/5] block Unity=(+0.055,+0.048) score=null [06f] WARN: 輪郭中心とテンプレ中心の距離が閾値超 |Δ|=99.4px > 60px → 輪郭捨てて fallback [06f] DETECT: center=(1495,572) source=template_fallback score=0.655 angle=0° scale=0.85 size=(167x156) template=white_box_20260520_163838_005.png (eval 6.63s) [DETECT][4/5] box Unity=(-0.220,+0.191) score=0.6553944945335388 赤ブロック pixel=(880, 281) → Unity=(0.0549, 0.0478) [DETECT][4/5] block Unity=(+0.055,+0.048) score=null [06f] WARN: 輪郭中心とテンプレ中心の距離が閾値超 |Δ|=99.7px > 60px → 輪郭捨てて fallback [06f] DETECT: center=(1495,572) source=template_fallback score=0.655 angle=0° scale=0.85 size=(167x156) template=white_box_20260520_163838_005.png (eval 5.56s) [DETECT][5/5] box Unity=(-0.220,+0.191) score=0.6553799510002136 赤ブロック pixel=(880, 204) → Unity=(0.0543, 0.0105) [DETECT][5/5] block Unity=(+0.054,+0.010) score=null [RTD ] measure: block = (+54.9, +47.8) mm [RTD ] measure: box = (-220.1, +191.4) mm score=0.6553799510002136 [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/measure_20261109_123031.jpg [RTD ] homography のもとになった四隅と、測り直した四隅の差: 最大 0.22px(上限 15.0px・やり直し 1 回) [RTD ] [WARN] 検出したブロックがアームの根元から 72.8mm しか離れていません(120.0mm 以内は不可)。教示で使う位置は 200mm 以上離れているので、赤いケーブル等の別のものを拾っている可能性が高いです: (+54.9, +47.8) mm(WARN のみ・保存します) [RTD ] 何を拾ったかは確認画像で見てください: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/measure_20261109_123031.jpg [RTD ] ブロックのばらつき: 113.0px = 54.85mm(5 枚・上限 4.0mm) [RTD ] [WARN] 検出が不安定です: ブロックのばらつきが 113.0px = 54.85mm(上限 4.0mm)。(WARN のみ・保存します) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/measure_20261109_123031.jpg [RTD ] 元の検出と測り直しの差: 0.00mm(上限 3.0mm) [RTD ] 保存しました: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/measure_20261109_123031.json [RTD ] [WARN] この measure には WARN が 2 件あります: block_too_close_to_base, block_spread_over [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 ] モード: ドライラン(アームに何も送りません) [RTD ] Pi から教えた記録を取得します: ubuntu@192.168.2.1:r2r2r-scripts/dynamic_tracking_limits/drag_teaching/drag_v2_20261109_123000.json [RTD ] 取得しました → /var/folders/5w/2q2mc64n6yv63gfh31h34w6h0000gn/T/record_teach_demo_n_pens_2/drag_v2_20261109_123000.json [RTD ] 入力ファイル: drag_v2_20261109_123000.json [RTD ] 抽出ウェイポイント: APPROACH_PICK <- phase APPROACH_PICK argmax_idx=146 (start=146 end=194, gap=25.14°) angles = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] PICK <- gripper close mark idx=214(PICK phase 範囲内) angles = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] APPROACH_PLACE <- phase APPROACH_PLACE argmax_idx=286 (start=286 end=321, gap=20.83°) angles = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] PLACE <- gripper open mark idx=345(PLACE phase 範囲内) angles = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] [RTD ] JOINT_LIMITS 一括検証 OK(全 endpoint + HOME) [RTD ] 姿勢検査 OK(全 146 姿勢が 有限値 + JOINT_LIMITS + J4_SAFE [-90.0, +60.0] 内) [RTD ] j4 の余裕は最小 19.78°(しきい値 3.0° 以上) ============================================================================== [RTD ] 実行プラン(daemon 経由・区間ごとに 1 回送信 → 到達待ち) ============================================================================== [STEP 1] MOVE → HOME (single send + settle) speed=20 current = 未取得(ドライラン・daemon に接続していない) to HOME = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] [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 = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] max |Δ| = 66.53° 1 回送信 speed=20 (~ 3.3s @ 20°/s 目安・到達待ち 最大 12.0s) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage4_pick)] from = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] to = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] max |Δ| = 25.14° 1 回送信 speed=20 (~ 1.3s @ 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 = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] to = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] max |Δ| = 25.14° 1 回送信 speed=20 (~ 1.3s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE tol=3.0° [rpp.TOL_APPROACH_PLACE(stage7)] from = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 66.52° 1 回送信 speed=20 (~ 3.3s @ 20°/s 目安・到達待ち 最大 12.0s) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage8_place)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 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 = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME tol=2.5° [rpp.TOL_HOME(stage1_to_home / HOME 復帰)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 49.39° 1 回送信 speed=20 (~ 2.5s @ 20°/s 目安・到達待ち 最大 9.4s) ============================================================================== [RTD ] 送信 = 8 回(STEP 1 + move 7 区間), 想定所要時間 ≈ 30.7s(最悪 73.0s) [RTD ] 内訳: 先頭 settle 3.0s + 移動 13.7s(max|Δ| 合計 274.4° @ 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_123031.json [RTD ] measured_at = 2026-11-09T12:30:33.117494 block = (+54.9, +47.8) mm box = (-220.1, +191.4) mm [RTD ] 再生直前: 上カメラでマット四隅とブロック画素を確認します [RTD ] 再生直前: block = (+54.9, +47.8) mm(measure の homography で換算) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_123035.jpg [RTD ] 何を拾ったかは確認画像で見てください: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_123035.jpg [RTD ] [WARN] 検出したブロックがアームの根元から 72.8mm しか離れていません(120.0mm 以内は不可)。教示で使う位置は 200mm 以上離れているので、赤いケーブル等の別のものを拾っている可能性が高いです: (+54.9, +47.8) mm(**止めません**・WARN のみ) [RTD ] ブロック位置の照合 OK(画素の差 0.0px <= 許容 10.3px = 5.0mm / mm 換算の差 0.00mm) [RTD ] マット四隅のずれ 最大 0.0px(上限 15.0px・やり直し 1 回) [RTD ] ドライランなので、ここで終了します(アームには何も送っていません) [RTD ] Pi 版と比べる点: 抽出ウェイポイント 4 姿勢と各区間の max|Δ| は同じ。送り方は単発(Pi 版は 0.1s 補間ストリーミング)なので n_steps / ticks は比較対象外。送信 8 回 / 想定所要 ≈ 30.7s (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % python3 dynamic_tracking_limits/drag_teaching/record_teach_demo.py measure [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=[302, 1703] Y=[0, 949] [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.4px > 60px → 輪郭捨てて fallback [06f] DETECT: center=(1495,572) source=template_fallback score=0.655 angle=0° scale=0.85 size=(167x156) template=white_box_20260520_163838_005.png (eval 6.32s) [DETECT][1/5] box Unity=(-0.220,+0.191) score=0.6553415656089783 赤ブロック pixel=(880, 282) → Unity=(0.0549, 0.0483) [DETECT][1/5] block Unity=(+0.055,+0.048) score=null [06f] WARN: 輪郭中心とテンプレ中心の距離が閾値超 |Δ|=99.4px > 60px → 輪郭捨てて fallback [06f] DETECT: center=(1495,572) source=template_fallback score=0.656 angle=0° scale=0.85 size=(167x156) template=white_box_20260520_163838_005.png (eval 5.43s) [DETECT][2/5] box Unity=(-0.220,+0.191) score=0.6555894017219543 赤ブロック pixel=(880, 282) → Unity=(0.0549, 0.0483) [DETECT][2/5] block Unity=(+0.055,+0.048) score=null [06f] WARN: 輪郭中心とテンプレ中心の距離が閾値超 |Δ|=99.4px > 60px → 輪郭捨てて fallback [06f] DETECT: center=(1495,572) source=template_fallback score=0.656 angle=0° scale=0.85 size=(167x156) template=white_box_20260520_163838_005.png (eval 5.61s) [DETECT][3/5] box Unity=(-0.220,+0.191) score=0.6555450558662415 赤ブロック pixel=(880, 226) → Unity=(0.0545, 0.0212) [DETECT][3/5] block Unity=(+0.054,+0.021) score=null [06f] WARN: 輪郭中心とテンプレ中心の距離が閾値超 |Δ|=100.3px > 60px → 輪郭捨てて fallback [06f] DETECT: center=(1495,571) source=template_fallback score=0.655 angle=0° scale=0.85 size=(167x156) template=white_box_20260520_163838_005.png (eval 5.28s) [DETECT][4/5] box Unity=(-0.220,+0.191) score=0.6551064252853394 赤ブロック pixel=(880, 281) → Unity=(0.0549, 0.0478) [DETECT][4/5] block Unity=(+0.055,+0.048) score=null [06f] WARN: 輪郭中心とテンプレ中心の距離が閾値超 |Δ|=99.4px > 60px → 輪郭捨てて fallback [06f] DETECT: center=(1495,572) source=template_fallback score=0.655 angle=0° scale=0.85 size=(167x156) template=white_box_20260520_163838_005.png (eval 5.32s) [DETECT][5/5] box Unity=(-0.220,+0.191) score=0.6553043127059937 赤ブロック pixel=(880, 281) → Unity=(0.0549, 0.0478) [DETECT][5/5] block Unity=(+0.055,+0.048) score=null [RTD ] measure: block = (+54.9, +47.8) mm [RTD ] measure: box = (-220.1, +191.4) mm score=0.6553415656089783 [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/measure_20261109_123220.jpg [RTD ] homography のもとになった四隅と、測り直した四隅の差: 最大 0.1px(上限 15.0px・やり直し 1 回) [RTD ] [WARN] 検出したブロックがアームの根元から 72.8mm しか離れていません(120.0mm 以内は不可)。教示で使う位置は 200mm 以上離れているので、赤いケーブル等の別のものを拾っている可能性が高いです: (+54.9, +47.8) mm(WARN のみ・保存します) [RTD ] 何を拾ったかは確認画像で見てください: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/measure_20261109_123220.jpg [RTD ] ブロックのばらつき: 1.0px = 0.48mm(5 枚・上限 4.0mm) [RTD ] 元の検出と測り直しの差: 0.00mm(上限 3.0mm) [RTD ] 保存しました: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/measure_20261109_123220.json [RTD ] [WARN] この measure には WARN が 1 件あります: block_too_close_to_base [RTD ] [WARN] 値が外れている可能性があります。気になるなら取り直してください(保存はしてあります) [RTD ] 次は Pi で教示 → daemon 起動 → recorder.py --top --no-side 常駐 → run --teach --execute (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % python3 dynamic_tracking_limits/drag_teaching/record_teach_demo.py measure [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=[302, 1702] Y=[0, 949] [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: 輪郭中心とテンプレ中心の距離が閾値超 |Δ|=100.3px > 60px → 輪郭捨てて fallback [06f] DETECT: center=(1495,571) source=template_fallback score=0.655 angle=0° scale=0.85 size=(167x156) template=white_box_20260520_163838_005.png (eval 5.34s) [DETECT][1/5] box Unity=(-0.220,+0.191) score=0.6553701758384705 赤ブロック pixel=(880, 280) → Unity=(0.0548, 0.0473) [DETECT][1/5] block Unity=(+0.055,+0.047) score=null [06f] WARN: 輪郭中心とテンプレ中心の距離が閾値超 |Δ|=100.3px > 60px → 輪郭捨てて fallback [06f] DETECT: center=(1495,571) source=template_fallback score=0.656 angle=0° scale=0.85 size=(167x156) template=white_box_20260520_163838_005.png (eval 5.47s) [DETECT][2/5] box Unity=(-0.220,+0.191) score=0.6557032465934753 赤ブロック pixel=(880, 280) → Unity=(0.0548, 0.0473) [DETECT][2/5] block Unity=(+0.055,+0.047) score=null [06f] WARN: 輪郭中心とテンプレ中心の距離が閾値超 |Δ|=100.3px > 60px → 輪郭捨てて fallback [06f] DETECT: center=(1495,571) source=template_fallback score=0.656 angle=0° scale=0.85 size=(167x156) template=white_box_20260520_163838_005.png (eval 5.45s) [DETECT][3/5] box Unity=(-0.220,+0.191) score=0.655527651309967 赤ブロック pixel=(880, 280) → Unity=(0.0548, 0.0473) [DETECT][3/5] block Unity=(+0.055,+0.047) score=null [06f] WARN: 輪郭中心とテンプレ中心の距離が閾値超 |Δ|=100.3px > 60px → 輪郭捨てて fallback [06f] DETECT: center=(1495,571) source=template_fallback score=0.656 angle=0° scale=0.85 size=(167x156) template=white_box_20260520_163838_005.png (eval 5.92s) [DETECT][4/5] box Unity=(-0.220,+0.191) score=0.6557596921920776 赤ブロック pixel=(880, 280) → Unity=(0.0548, 0.0473) [DETECT][4/5] block Unity=(+0.055,+0.047) score=null [06f] WARN: 輪郭中心とテンプレ中心の距離が閾値超 |Δ|=100.3px > 60px → 輪郭捨てて fallback [06f] DETECT: center=(1495,571) source=template_fallback score=0.655 angle=0° scale=0.85 size=(167x156) template=white_box_20260520_163838_005.png (eval 5.51s) [DETECT][5/5] box Unity=(-0.220,+0.191) score=0.6554656624794006 赤ブロック pixel=(880, 280) → Unity=(0.0548, 0.0473) [DETECT][5/5] block Unity=(+0.055,+0.047) score=null [RTD ] measure: block = (+54.8, +47.3) mm [RTD ] measure: box = (-220.3, +190.8) mm score=0.655527651309967 [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/measure_20261109_123559.jpg [RTD ] homography のもとになった四隅と、測り直した四隅の差: 最大 1.41px(上限 15.0px・やり直し 1 回) [RTD ] [WARN] 検出したブロックがアームの根元から 72.4mm しか離れていません(120.0mm 以内は不可)。教示で使う位置は 200mm 以上離れているので、赤いケーブル等の別のものを拾っている可能性が高いです: (+54.8, +47.3) mm(WARN のみ・保存します) [RTD ] 何を拾ったかは確認画像で見てください: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/measure_20261109_123559.jpg [RTD ] ブロックのばらつき: 1.0px = 0.45mm(5 枚・上限 4.0mm) [RTD ] 元の検出と測り直しの差: 0.00mm(上限 3.0mm) [RTD ] 保存しました: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/measure_20261109_123559.json [RTD ] [WARN] この measure には WARN が 1 件あります: block_too_close_to_base [RTD ] [WARN] 値が外れている可能性があります。気になるなら取り直してください(保存はしてあります) [RTD ] 次は Pi で教示 → daemon 起動 → recorder.py --top --no-side 常駐 → run --teach --execute (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % python3 dynamic_tracking_limits/drag_teaching/record_teach_demo.py run --teach drag_v2_20261109_123000.json --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_123000.json [RTD ] 取得しました → /var/folders/5w/2q2mc64n6yv63gfh31h34w6h0000gn/T/record_teach_demo_bvnahdtr/drag_v2_20261109_123000.json [RTD ] 入力ファイル: drag_v2_20261109_123000.json [RTD ] 抽出ウェイポイント: APPROACH_PICK <- phase APPROACH_PICK argmax_idx=146 (start=146 end=194, gap=25.14°) angles = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] PICK <- gripper close mark idx=214(PICK phase 範囲内) angles = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] APPROACH_PLACE <- phase APPROACH_PLACE argmax_idx=286 (start=286 end=321, gap=20.83°) angles = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] PLACE <- gripper open mark idx=345(PLACE phase 範囲内) angles = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] [RTD ] JOINT_LIMITS 一括検証 OK(全 endpoint + HOME) [RTD ] 姿勢検査 OK(全 146 姿勢が 有限値 + JOINT_LIMITS + J4_SAFE [-90.0, +60.0] 内) [RTD ] j4 の余裕は最小 19.78°(しきい値 3.0° 以上) [RTD ] 現在姿勢を daemon から取得します [RTD ] 現在姿勢 = [ -0.26, +1.66, +2.10, -0.26, -0.26, -30.23] ============================================================================== [RTD ] 実行プラン(daemon 経由・区間ごとに 1 回送信 → 到達待ち) ============================================================================== [STEP 1] MOVE → HOME (single send + settle) speed=20 current = [ -0.26, +1.66, +2.10, -0.26, -0.26, -30.23] to HOME = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 2.10° (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 = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] max |Δ| = 66.53° 1 回送信 speed=20 (~ 3.3s @ 20°/s 目安・到達待ち 最大 12.0s) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage4_pick)] from = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] to = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] max |Δ| = 25.14° 1 回送信 speed=20 (~ 1.3s @ 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 = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] to = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] max |Δ| = 25.14° 1 回送信 speed=20 (~ 1.3s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE tol=3.0° [rpp.TOL_APPROACH_PLACE(stage7)] from = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 66.52° 1 回送信 speed=20 (~ 3.3s @ 20°/s 目安・到達待ち 最大 12.0s) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage8_place)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 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 = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME tol=2.5° [rpp.TOL_HOME(stage1_to_home / HOME 復帰)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 49.39° 1 回送信 speed=20 (~ 2.5s @ 20°/s 目安・到達待ち 最大 9.4s) ============================================================================== [RTD ] 送信 = 8 回(STEP 1 + move 7 区間), 想定所要時間 ≈ 30.7s(最悪 73.0s) [RTD ] 内訳: 先頭 settle 3.0s + 移動 13.7s(max|Δ| 合計 274.4° @ 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_123559.json [RTD ] measured_at = 2026-11-09T12:36:01.355235 block = (+54.8, +47.3) mm box = (-220.3, +190.8) mm [RTD ] 再生直前: 上カメラでマット四隅とブロック画素を確認します [RTD ] 再生直前: block = (+54.8, +47.7) mm(measure の homography で換算) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_123651.jpg [RTD ] 何を拾ったかは確認画像で見てください: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_123651.jpg [RTD ] [WARN] 検出したブロックがアームの根元から 72.7mm しか離れていません(120.0mm 以内は不可)。教示で使う位置は 200mm 以上離れているので、赤いケーブル等の別のものを拾っている可能性が高いです: (+54.8, +47.7) mm(**止めません**・WARN のみ) [RTD ] ブロック位置の照合 OK(画素の差 1.0px <= 許容 10.3px = 5.0mm / mm 換算の差 0.48mm) [RTD ] マット四隅のずれ 最大 1.3px(上限 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_123655 [RTD ] 教えた記録のコピー: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_123655/teach/drag_v2_20261109_123000.json [RTD ] recorder に trial_start を送りました。1.0s 待ってから動き出します(mp4 writer が開くまで) [RTD ] 爪と肩の電流を 1 秒 10 回で記録します(爪を動かしている間は読みません)→ /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_123655/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|Δ| = 2.10° / 到達待ち 最大 8.0s [STEP 1] 3.0s 待ちます(settle) [RTD ] arrival OK (current → HOME, max|Δ|=2.10° <= 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.0s) [RTD ] 送信 OK(daemon 往復 1.028s) [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.030s) [RTD ] arrival OK (APPROACH_PICK → PICK, max|Δ|=0.88° <= 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.009s [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.041s) [RTD ] arrival OK (PICK → APPROACH_PICK (lift), max|Δ|=2.02° <= tol 3.0°) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_APPROACH_PLACE(stage7)] / 最大 12.0s) [RTD ] 送信 OK(daemon 往復 1.031s) [RTD ] arrival OK (APPROACH_PICK → APPROACH_PLACE, max|Δ|=2.55° <= 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.055s) [RTD ] arrival OK (APPROACH_PLACE → PLACE, max|Δ|=2.02° <= 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.015s [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.55° <= tol 3.0°) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME (1 回送信 speed=20 → 到達待ち 許容 2.5°[TOL_HOME(stage1_to_home / HOME 復帰)] / 最大 9.4s) [RTD ] 送信 OK(daemon 往復 1.028s) [RTD ] arrival OK (APPROACH_PLACE → HOME, max|Δ|=2.37° <= tol 2.5°) [Pi] fresh_mode=0 [RTD ] daemon_set_fresh_mode(0) 完了 [RTD ] 実測角の読み取り: ok 55/55 回, 実効 1.58 Hz(目標 3.0 Hz 以上) [RTD ] [WARN] 実測角の読み取りが目標 3.0 Hz を下回りました(1.58 Hz)。学習データの state 密度が 19 本より薄くなります [RTD ] send_angles の daemon 往復 (7 回): 平均 1.034s / p50 1.030s / 最大 1.055s(timeout 6.0s) [RTD ] [WARN] 送信 1 回に 1.055s かかった回があります。daemon は送信後に角度を読み直すので、動き始めで読めないと伸びます(単発送信なので試行全体への影響は小さい) [RTD ] 区間の所要(送信→到達確認まで)(8 区間): 平均 2.22s / 最大 4.62s [RECORD] 電流の記録終了 71 行 (2.04 行/秒. 本体が眠っている間だけ読む. 爪の間 14.043 秒は読まない. 見込み超え 0 回. read_servo) → /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_123655/recording/currents.csv ============================================================================== [RTD ] 再生 完了 ============================================================================== [RTD ] つかめたか (y/n) > y [RTD ] 箱に入ったか (y/n) > y [RTD ] 試行 JSON: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_123655/run_0001_20261109_123655.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_20261109_123655 --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_20261109_123000.json --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_123000.json [RTD ] 取得しました → /var/folders/5w/2q2mc64n6yv63gfh31h34w6h0000gn/T/record_teach_demo_4s9566yb/drag_v2_20261109_123000.json [RTD ] 入力ファイル: drag_v2_20261109_123000.json [RTD ] 抽出ウェイポイント: APPROACH_PICK <- phase APPROACH_PICK argmax_idx=146 (start=146 end=194, gap=25.14°) angles = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] PICK <- gripper close mark idx=214(PICK phase 範囲内) angles = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] APPROACH_PLACE <- phase APPROACH_PLACE argmax_idx=286 (start=286 end=321, gap=20.83°) angles = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] PLACE <- gripper open mark idx=345(PLACE phase 範囲内) angles = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] [RTD ] JOINT_LIMITS 一括検証 OK(全 endpoint + HOME) [RTD ] 姿勢検査 OK(全 146 姿勢が 有限値 + JOINT_LIMITS + J4_SAFE [-90.0, +60.0] 内) [RTD ] j4 の余裕は最小 19.78°(しきい値 3.0° 以上) [RTD ] 現在姿勢を daemon から取得します [RTD ] 現在姿勢 = [ -0.43, +1.49, +1.93, +0.08, -0.26, -30.23] ============================================================================== [RTD ] 実行プラン(daemon 経由・区間ごとに 1 回送信 → 到達待ち) ============================================================================== [STEP 1] MOVE → HOME (single send + settle) speed=20 current = [ -0.43, +1.49, +1.93, +0.08, -0.26, -30.23] to HOME = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 1.93° (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 = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] max |Δ| = 66.53° 1 回送信 speed=20 (~ 3.3s @ 20°/s 目安・到達待ち 最大 12.0s) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage4_pick)] from = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] to = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] max |Δ| = 25.14° 1 回送信 speed=20 (~ 1.3s @ 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 = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] to = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] max |Δ| = 25.14° 1 回送信 speed=20 (~ 1.3s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE tol=3.0° [rpp.TOL_APPROACH_PLACE(stage7)] from = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 66.52° 1 回送信 speed=20 (~ 3.3s @ 20°/s 目安・到達待ち 最大 12.0s) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage8_place)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 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 = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME tol=2.5° [rpp.TOL_HOME(stage1_to_home / HOME 復帰)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 49.39° 1 回送信 speed=20 (~ 2.5s @ 20°/s 目安・到達待ち 最大 9.4s) ============================================================================== [RTD ] 送信 = 8 回(STEP 1 + move 7 区間), 想定所要時間 ≈ 30.7s(最悪 73.0s) [RTD ] 内訳: 先頭 settle 3.0s + 移動 13.7s(max|Δ| 合計 274.4° @ 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_123559.json [RTD ] measured_at = 2026-11-09T12:36:01.355235 block = (+54.8, +47.3) mm box = (-220.3, +190.8) mm [RTD ] 再生直前: 上カメラでマット四隅とブロック画素を確認します [RTD ] 再生直前: block = (+140.0, +221.3) mm(measure の homography で換算) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_123753.jpg [RTD ] [WARN] ブロックが measure 時から動いています(止めません・項目8): ブロックが measure 時から 409.7px(≒193.7mm)動いています(許容 10.3px = 5.0mm)。ブロックを戻すか measure をやり直してください [RTD ] [WARN] 画素の差 409.7px(許容 10.3px = 5.0mm)/ mm 換算の差 193.73mm [RTD ] [WARN] つかみ損ねる可能性があります。気になるなら Enter の前に measure を取り直してください [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_123756 [RTD ] 教えた記録のコピー: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_123756/teach/drag_v2_20261109_123000.json [RTD ] recorder に trial_start を送りました。1.0s 待ってから動き出します(mp4 writer が開くまで) [RTD ] 爪と肩の電流を 1 秒 10 回で記録します(爪を動かしている間は読みません)→ /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_123756/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.93° / 到達待ち 最大 8.0s [STEP 1] 3.0s 待ちます(settle) [RTD ] arrival OK (current → HOME, max|Δ|=1.93° <= 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.0s) [RTD ] 送信 OK(daemon 往復 1.031s) [RTD ] arrival OK (HOME → APPROACH_PICK, max|Δ|=1.94° <= 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.035s) [RTD ] arrival OK (APPROACH_PICK → PICK, max|Δ|=0.88° <= 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.031s) [RTD ] arrival OK (PICK → APPROACH_PICK (lift), max|Δ|=2.02° <= tol 3.0°) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_APPROACH_PLACE(stage7)] / 最大 12.0s) [RTD ] 送信 OK(daemon 往復 1.055s) [RTD ] arrival OK (APPROACH_PICK → APPROACH_PLACE, max|Δ|=2.64° <= 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.76° <= tol 3.0°) [STEP 9] GRIPPER OPEN → daemon_set_gripper(0, 50, wait=0) [RTD ] 静止確認 OK(step9_open: 連続 3 回・連続差 最大 0.08° <= 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.032s) [RTD ] arrival OK (PLACE → APPROACH_PLACE (retreat), max|Δ|=2.64° <= tol 3.0°) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME (1 回送信 speed=20 → 到達待ち 許容 2.5°[TOL_HOME(stage1_to_home / HOME 復帰)] / 最大 9.4s) [RTD ] 送信 OK(daemon 往復 1.059s) [RTD ] arrival OK (APPROACH_PLACE → HOME, max|Δ|=2.46° <= 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.039s / p50 1.032s / 最大 1.059s(timeout 6.0s) [RTD ] [WARN] 送信 1 回に 1.059s かかった回があります。daemon は送信後に角度を読み直すので、動き始めで読めないと伸びます(単発送信なので試行全体への影響は小さい) [RTD ] 区間の所要(送信→到達確認まで)(8 区間): 平均 2.18s / 最大 4.42s [RECORD] 電流の記録終了 69 行 (2.0 行/秒. 本体が眠っている間だけ読む. 爪の間 14.044 秒は読まない. 見込み超え 0 回. read_servo) → /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_123756/recording/currents.csv ============================================================================== [RTD ] 再生 完了 ============================================================================== [RTD ] つかめたか (y/n) > y [RTD ] 箱に入ったか (y/n) > y [RTD ] 試行 JSON: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_123756/run_0001_20261109_123756.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_20261109_123756 --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_20261109_123000.json --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_123000.json [RTD ] 取得しました → /var/folders/5w/2q2mc64n6yv63gfh31h34w6h0000gn/T/record_teach_demo_xv19h0b5/drag_v2_20261109_123000.json [RTD ] 入力ファイル: drag_v2_20261109_123000.json [RTD ] 抽出ウェイポイント: APPROACH_PICK <- phase APPROACH_PICK argmax_idx=146 (start=146 end=194, gap=25.14°) angles = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] PICK <- gripper close mark idx=214(PICK phase 範囲内) angles = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] APPROACH_PLACE <- phase APPROACH_PLACE argmax_idx=286 (start=286 end=321, gap=20.83°) angles = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] PLACE <- gripper open mark idx=345(PLACE phase 範囲内) angles = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] [RTD ] JOINT_LIMITS 一括検証 OK(全 endpoint + HOME) [RTD ] 姿勢検査 OK(全 146 姿勢が 有限値 + JOINT_LIMITS + J4_SAFE [-90.0, +60.0] 内) [RTD ] j4 の余裕は最小 19.78°(しきい値 3.0° 以上) [RTD ] 現在姿勢を daemon から取得します [RTD ] 現在姿勢 = [ -0.26, +1.49, +1.93, +0.08, -0.26, -30.23] ============================================================================== [RTD ] 実行プラン(daemon 経由・区間ごとに 1 回送信 → 到達待ち) ============================================================================== [STEP 1] MOVE → HOME (single send + settle) speed=20 current = [ -0.26, +1.49, +1.93, +0.08, -0.26, -30.23] to HOME = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 1.93° (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 = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] max |Δ| = 66.53° 1 回送信 speed=20 (~ 3.3s @ 20°/s 目安・到達待ち 最大 12.0s) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage4_pick)] from = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] to = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] max |Δ| = 25.14° 1 回送信 speed=20 (~ 1.3s @ 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 = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] to = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] max |Δ| = 25.14° 1 回送信 speed=20 (~ 1.3s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE tol=3.0° [rpp.TOL_APPROACH_PLACE(stage7)] from = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 66.52° 1 回送信 speed=20 (~ 3.3s @ 20°/s 目安・到達待ち 最大 12.0s) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage8_place)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 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 = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME tol=2.5° [rpp.TOL_HOME(stage1_to_home / HOME 復帰)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 49.39° 1 回送信 speed=20 (~ 2.5s @ 20°/s 目安・到達待ち 最大 9.4s) ============================================================================== [RTD ] 送信 = 8 回(STEP 1 + move 7 区間), 想定所要時間 ≈ 30.7s(最悪 73.0s) [RTD ] 内訳: 先頭 settle 3.0s + 移動 13.7s(max|Δ| 合計 274.4° @ 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_123559.json [RTD ] measured_at = 2026-11-09T12:36:01.355235 block = (+54.8, +47.3) mm box = (-220.3, +190.8) mm [RTD ] 再生直前: 上カメラでマット四隅とブロック画素を確認します [RTD ] 再生直前: block = (+136.9, +226.1) mm(measure の homography で換算) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_123843.jpg [RTD ] [WARN] ブロックが measure 時から動いています(止めません・項目8): ブロックが measure 時から 415.5px(≒196.8mm)動いています(許容 10.3px = 5.0mm)。ブロックを戻すか measure をやり直してください [RTD ] [WARN] 画素の差 415.5px(許容 10.3px = 5.0mm)/ mm 換算の差 196.76mm [RTD ] [WARN] つかみ損ねる可能性があります。気になるなら Enter の前に measure を取り直してください [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_123848 [RTD ] 教えた記録のコピー: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_123848/teach/drag_v2_20261109_123000.json [RTD ] recorder に trial_start を送りました。1.0s 待ってから動き出します(mp4 writer が開くまで) [RTD ] 爪と肩の電流を 1 秒 10 回で記録します(爪を動かしている間は読みません)→ /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_123848/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.93° / 到達待ち 最大 8.0s [STEP 1] 3.0s 待ちます(settle) [RTD ] arrival OK (current → HOME, max|Δ|=1.93° <= 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.016s [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.0s) [RTD ] 送信 OK(daemon 往復 1.033s) [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.040s) [RTD ] arrival OK (APPROACH_PICK → PICK, max|Δ|=1.23° <= 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.014s [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.02° <= tol 3.0°) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_APPROACH_PLACE(stage7)] / 最大 12.0s) [RTD ] 送信 OK(daemon 往復 1.032s) [RTD ] arrival OK (APPROACH_PICK → APPROACH_PLACE, max|Δ|=2.64° <= 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.20° <= tol 3.0°) [STEP 9] GRIPPER OPEN → daemon_set_gripper(0, 50, wait=0) [RTD ] 静止確認 OK(step9_open: 連続 3 回・連続差 最大 0.08° <= 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.031s) [RTD ] arrival OK (PLACE → APPROACH_PLACE (retreat), max|Δ|=2.72° <= tol 3.0°) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME (1 回送信 speed=20 → 到達待ち 許容 2.5°[TOL_HOME(stage1_to_home / HOME 復帰)] / 最大 9.4s) [RTD ] 送信 OK(daemon 往復 1.030s) [RTD ] arrival OK (APPROACH_PLACE → HOME, max|Δ|=2.46° <= tol 2.5°) [Pi] fresh_mode=0 [RTD ] daemon_set_fresh_mode(0) 完了 [RTD ] 実測角の読み取り: ok 56/56 回, 実効 1.60 Hz(目標 3.0 Hz 以上) [RTD ] [WARN] 実測角の読み取りが目標 3.0 Hz を下回りました(1.60 Hz)。学習データの state 密度が 19 本より薄くなります [RTD ] send_angles の daemon 往復 (7 回): 平均 1.032s / p50 1.031s / 最大 1.040s(timeout 6.0s) [RTD ] [WARN] 送信 1 回に 1.040s かかった回があります。daemon は送信後に角度を読み直すので、動き始めで読めないと伸びます(単発送信なので試行全体への影響は小さい) [RTD ] 区間の所要(送信→到達確認まで)(8 区間): 平均 2.26s / 最大 4.61s [RECORD] 電流の記録終了 73 行 (2.08 行/秒. 本体が眠っている間だけ読む. 爪の間 14.062 秒は読まない. 見込み超え 0 回. read_servo) → /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_123848/recording/currents.csv ============================================================================== [RTD ] 再生 完了 ============================================================================== [RTD ] つかめたか (y/n) > y [RTD ] 箱に入ったか (y/n) > y [RTD ] 試行 JSON: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_123848/run_0001_20261109_123848.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_20261109_123848 --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_20261109_123000.json --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_123000.json [RTD ] 取得しました → /var/folders/5w/2q2mc64n6yv63gfh31h34w6h0000gn/T/record_teach_demo_mqlncefe/drag_v2_20261109_123000.json [RTD ] 入力ファイル: drag_v2_20261109_123000.json [RTD ] 抽出ウェイポイント: APPROACH_PICK <- phase APPROACH_PICK argmax_idx=146 (start=146 end=194, gap=25.14°) angles = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] PICK <- gripper close mark idx=214(PICK phase 範囲内) angles = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] APPROACH_PLACE <- phase APPROACH_PLACE argmax_idx=286 (start=286 end=321, gap=20.83°) angles = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] PLACE <- gripper open mark idx=345(PLACE phase 範囲内) angles = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] [RTD ] JOINT_LIMITS 一括検証 OK(全 endpoint + HOME) [RTD ] 姿勢検査 OK(全 146 姿勢が 有限値 + JOINT_LIMITS + J4_SAFE [-90.0, +60.0] 内) [RTD ] j4 の余裕は最小 19.78°(しきい値 3.0° 以上) [RTD ] 現在姿勢を daemon から取得します [RTD ] 現在姿勢 = [ -0.43, +1.49, +1.93, +0.08, -0.26, -30.23] ============================================================================== [RTD ] 実行プラン(daemon 経由・区間ごとに 1 回送信 → 到達待ち) ============================================================================== [STEP 1] MOVE → HOME (single send + settle) speed=20 current = [ -0.43, +1.49, +1.93, +0.08, -0.26, -30.23] to HOME = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 1.93° (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 = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] max |Δ| = 66.53° 1 回送信 speed=20 (~ 3.3s @ 20°/s 目安・到達待ち 最大 12.0s) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage4_pick)] from = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] to = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] max |Δ| = 25.14° 1 回送信 speed=20 (~ 1.3s @ 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 = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] to = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] max |Δ| = 25.14° 1 回送信 speed=20 (~ 1.3s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE tol=3.0° [rpp.TOL_APPROACH_PLACE(stage7)] from = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 66.52° 1 回送信 speed=20 (~ 3.3s @ 20°/s 目安・到達待ち 最大 12.0s) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage8_place)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 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 = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME tol=2.5° [rpp.TOL_HOME(stage1_to_home / HOME 復帰)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 49.39° 1 回送信 speed=20 (~ 2.5s @ 20°/s 目安・到達待ち 最大 9.4s) ============================================================================== [RTD ] 送信 = 8 回(STEP 1 + move 7 区間), 想定所要時間 ≈ 30.7s(最悪 73.0s) [RTD ] 内訳: 先頭 settle 3.0s + 移動 13.7s(max|Δ| 合計 274.4° @ 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_123559.json [RTD ] measured_at = 2026-11-09T12:36:01.355235 block = (+54.8, +47.3) mm box = (-220.3, +190.8) mm [RTD ] 再生直前: 上カメラでマット四隅とブロック画素を確認します [RTD ] 再生直前: block = (+137.1, +235.5) mm(measure の homography で換算) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_123937.jpg [RTD ] [WARN] ブロックが measure 時から動いています(止めません・項目8): ブロックが measure 時から 433.7px(≒205.5mm)動いています(許容 10.3px = 5.0mm)。ブロックを戻すか measure をやり直してください [RTD ] [WARN] 画素の差 433.7px(許容 10.3px = 5.0mm)/ mm 換算の差 205.46mm [RTD ] [WARN] つかみ損ねる可能性があります。気になるなら Enter の前に measure を取り直してください [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_123940 [RTD ] 教えた記録のコピー: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_123940/teach/drag_v2_20261109_123000.json [RTD ] recorder に trial_start を送りました。1.0s 待ってから動き出します(mp4 writer が開くまで) [RTD ] 爪と肩の電流を 1 秒 10 回で記録します(爪を動かしている間は読みません)→ /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_123940/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.93° / 到達待ち 最大 8.0s [STEP 1] 3.0s 待ちます(settle) [RTD ] arrival OK (current → HOME, max|Δ|=1.93° <= 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.0s) [RTD ] 送信 OK(daemon 往復 1.049s) [RTD ] arrival OK (HOME → APPROACH_PICK, max|Δ|=1.94° <= 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|Δ|=0.88° <= 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.002s [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.041s) [RTD ] arrival OK (PICK → APPROACH_PICK (lift), max|Δ|=2.02° <= tol 3.0°) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_APPROACH_PLACE(stage7)] / 最大 12.0s) [RTD ] 送信 OK(daemon 往復 1.031s) [RTD ] arrival OK (APPROACH_PICK → APPROACH_PLACE, max|Δ|=2.64° <= 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.056s) [RTD ] arrival OK (APPROACH_PLACE → PLACE, max|Δ|=2.02° <= tol 3.0°) [STEP 9] GRIPPER OPEN → daemon_set_gripper(0, 50, wait=0) [RTD ] 静止確認 OK(step9_open: 連続 3 回・連続差 最大 0.08° <= 1.0°) [Pi] GRIPPER: OPEN result= None [RTD ] gripper open (1/1 回目) の daemon 往復 = 2.014s [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.90° <= tol 3.0°) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME (1 回送信 speed=20 → 到達待ち 許容 2.5°[TOL_HOME(stage1_to_home / HOME 復帰)] / 最大 9.4s) [RTD ] 送信 OK(daemon 往復 1.031s) [RTD ] arrival OK (APPROACH_PLACE → HOME, max|Δ|=2.46° <= tol 2.5°) [Pi] fresh_mode=0 [RTD ] daemon_set_fresh_mode(0) 完了 [RTD ] 実測角の読み取り: ok 56/56 回, 実効 1.60 Hz(目標 3.0 Hz 以上) [RTD ] [WARN] 実測角の読み取りが目標 3.0 Hz を下回りました(1.60 Hz)。学習データの state 密度が 19 本より薄くなります [RTD ] send_angles の daemon 往復 (7 回): 平均 1.038s / p50 1.032s / 最大 1.056s(timeout 6.0s) [RTD ] [WARN] 送信 1 回に 1.056s かかった回があります。daemon は送信後に角度を読み直すので、動き始めで読めないと伸びます(単発送信なので試行全体への影響は小さい) [RTD ] 区間の所要(送信→到達確認まで)(8 区間): 平均 2.26s / 最大 4.41s [RECORD] 電流の記録終了 73 行 (2.08 行/秒. 本体が眠っている間だけ読む. 爪の間 14.048 秒は読まない. 見込み超え 0 回. read_servo) → /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_123940/recording/currents.csv ============================================================================== [RTD ] 再生 完了 ============================================================================== [RTD ] つかめたか (y/n) > y [RTD ] 箱に入ったか (y/n) > y [RTD ] 試行 JSON: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_123940/run_0001_20261109_123940.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_20261109_123940 --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_20261109_123000.json --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_123000.json [RTD ] 取得しました → /var/folders/5w/2q2mc64n6yv63gfh31h34w6h0000gn/T/record_teach_demo_buxu9ak6/drag_v2_20261109_123000.json [RTD ] 入力ファイル: drag_v2_20261109_123000.json [RTD ] 抽出ウェイポイント: APPROACH_PICK <- phase APPROACH_PICK argmax_idx=146 (start=146 end=194, gap=25.14°) angles = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] PICK <- gripper close mark idx=214(PICK phase 範囲内) angles = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] APPROACH_PLACE <- phase APPROACH_PLACE argmax_idx=286 (start=286 end=321, gap=20.83°) angles = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] PLACE <- gripper open mark idx=345(PLACE phase 範囲内) angles = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] [RTD ] JOINT_LIMITS 一括検証 OK(全 endpoint + HOME) [RTD ] 姿勢検査 OK(全 146 姿勢が 有限値 + JOINT_LIMITS + J4_SAFE [-90.0, +60.0] 内) [RTD ] j4 の余裕は最小 19.78°(しきい値 3.0° 以上) [RTD ] 現在姿勢を daemon から取得します [RTD ] 現在姿勢 = [ -0.43, +1.49, +1.93, +0.08, -0.26, -30.23] ============================================================================== [RTD ] 実行プラン(daemon 経由・区間ごとに 1 回送信 → 到達待ち) ============================================================================== [STEP 1] MOVE → HOME (single send + settle) speed=20 current = [ -0.43, +1.49, +1.93, +0.08, -0.26, -30.23] to HOME = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 1.93° (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 = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] max |Δ| = 66.53° 1 回送信 speed=20 (~ 3.3s @ 20°/s 目安・到達待ち 最大 12.0s) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage4_pick)] from = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] to = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] max |Δ| = 25.14° 1 回送信 speed=20 (~ 1.3s @ 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 = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] to = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] max |Δ| = 25.14° 1 回送信 speed=20 (~ 1.3s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE tol=3.0° [rpp.TOL_APPROACH_PLACE(stage7)] from = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 66.52° 1 回送信 speed=20 (~ 3.3s @ 20°/s 目安・到達待ち 最大 12.0s) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage8_place)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 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 = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME tol=2.5° [rpp.TOL_HOME(stage1_to_home / HOME 復帰)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 49.39° 1 回送信 speed=20 (~ 2.5s @ 20°/s 目安・到達待ち 最大 9.4s) ============================================================================== [RTD ] 送信 = 8 回(STEP 1 + move 7 区間), 想定所要時間 ≈ 30.7s(最悪 73.0s) [RTD ] 内訳: 先頭 settle 3.0s + 移動 13.7s(max|Δ| 合計 274.4° @ 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_123559.json [RTD ] measured_at = 2026-11-09T12:36:01.355235 block = (+54.8, +47.3) mm box = (-220.3, +190.8) mm [RTD ] 再生直前: 上カメラでマット四隅とブロック画素を確認します [RTD ] 再生直前: block = (+134.4, +234.6) mm(measure の homography で換算) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_124029.jpg [RTD ] [WARN] ブロックが measure 時から動いています(止めません・項目8): ブロックが measure 時から 429.4px(≒203.6mm)動いています(許容 10.3px = 5.0mm)。ブロックを戻すか measure をやり直してください [RTD ] [WARN] 画素の差 429.4px(許容 10.3px = 5.0mm)/ mm 換算の差 203.58mm [RTD ] [WARN] つかみ損ねる可能性があります。気になるなら Enter の前に measure を取り直してください [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_124032 [RTD ] 教えた記録のコピー: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_124032/teach/drag_v2_20261109_123000.json [RTD ] recorder に trial_start を送りました。1.0s 待ってから動き出します(mp4 writer が開くまで) [RTD ] 爪と肩の電流を 1 秒 10 回で記録します(爪を動かしている間は読みません)→ /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_124032/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.93° / 到達待ち 最大 8.0s [STEP 1] 3.0s 待ちます(settle) [RTD ] arrival OK (current → HOME, max|Δ|=1.93° <= 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.0s) [RTD ] 送信 OK(daemon 往復 1.028s) [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.031s) [RTD ] arrival OK (APPROACH_PICK → PICK, max|Δ|=0.88° <= 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.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.031s) [RTD ] arrival OK (PICK → APPROACH_PICK (lift), max|Δ|=2.02° <= tol 3.0°) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_APPROACH_PLACE(stage7)] / 最大 12.0s) [RTD ] 送信 OK(daemon 往復 1.042s) [RTD ] arrival OK (APPROACH_PICK → APPROACH_PLACE, max|Δ|=2.64° <= 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|Δ|=2.11° <= tol 3.0°) [STEP 9] GRIPPER OPEN → daemon_set_gripper(0, 50, wait=0) [RTD ] 静止確認 OK(step9_open: 連続 3 回・連続差 最大 0.08° <= 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.021s) [RTD ] arrival OK (PLACE → APPROACH_PLACE (retreat), max|Δ|=2.72° <= tol 3.0°) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME (1 回送信 speed=20 → 到達待ち 許容 2.5°[TOL_HOME(stage1_to_home / HOME 復帰)] / 最大 9.4s) [RTD ] 送信 OK(daemon 往復 1.040s) [RTD ] arrival OK (APPROACH_PLACE → HOME, max|Δ|=2.46° <= 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.042s(timeout 6.0s) [RTD ] [WARN] 送信 1 回に 1.042s かかった回があります。daemon は送信後に角度を読み直すので、動き始めで読めないと伸びます(単発送信なので試行全体への影響は小さい) [RTD ] 区間の所要(送信→到達確認まで)(8 区間): 平均 2.18s / 最大 4.46s [RECORD] 電流の記録終了 69 行 (2.0 行/秒. 本体が眠っている間だけ読む. 爪の間 14.04 秒は読まない. 見込み超え 0 回. read_servo) → /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_124032/recording/currents.csv ============================================================================== [RTD ] 再生 完了 ============================================================================== [RTD ] つかめたか (y/n) > y [RTD ] 箱に入ったか (y/n) > y [RTD ] 試行 JSON: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_124032/run_0001_20261109_124032.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_20261109_124032 --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_20261109_123000.json --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_123000.json [RTD ] 取得しました → /var/folders/5w/2q2mc64n6yv63gfh31h34w6h0000gn/T/record_teach_demo_htztmv7s/drag_v2_20261109_123000.json [RTD ] 入力ファイル: drag_v2_20261109_123000.json [RTD ] 抽出ウェイポイント: APPROACH_PICK <- phase APPROACH_PICK argmax_idx=146 (start=146 end=194, gap=25.14°) angles = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] PICK <- gripper close mark idx=214(PICK phase 範囲内) angles = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] APPROACH_PLACE <- phase APPROACH_PLACE argmax_idx=286 (start=286 end=321, gap=20.83°) angles = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] PLACE <- gripper open mark idx=345(PLACE phase 範囲内) angles = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] [RTD ] JOINT_LIMITS 一括検証 OK(全 endpoint + HOME) [RTD ] 姿勢検査 OK(全 146 姿勢が 有限値 + JOINT_LIMITS + J4_SAFE [-90.0, +60.0] 内) [RTD ] j4 の余裕は最小 19.78°(しきい値 3.0° 以上) [RTD ] 現在姿勢を daemon から取得します [RTD ] 現在姿勢 = [ -0.43, +1.49, +1.84, +0.00, -0.61, -30.32] ============================================================================== [RTD ] 実行プラン(daemon 経由・区間ごとに 1 回送信 → 到達待ち) ============================================================================== [STEP 1] MOVE → HOME (single send + settle) speed=20 current = [ -0.43, +1.49, +1.84, +0.00, -0.61, -30.32] to HOME = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 1.84° (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 = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] max |Δ| = 66.53° 1 回送信 speed=20 (~ 3.3s @ 20°/s 目安・到達待ち 最大 12.0s) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage4_pick)] from = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] to = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] max |Δ| = 25.14° 1 回送信 speed=20 (~ 1.3s @ 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 = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] to = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] max |Δ| = 25.14° 1 回送信 speed=20 (~ 1.3s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE tol=3.0° [rpp.TOL_APPROACH_PLACE(stage7)] from = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 66.52° 1 回送信 speed=20 (~ 3.3s @ 20°/s 目安・到達待ち 最大 12.0s) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage8_place)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 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 = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME tol=2.5° [rpp.TOL_HOME(stage1_to_home / HOME 復帰)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 49.39° 1 回送信 speed=20 (~ 2.5s @ 20°/s 目安・到達待ち 最大 9.4s) ============================================================================== [RTD ] 送信 = 8 回(STEP 1 + move 7 区間), 想定所要時間 ≈ 30.7s(最悪 73.0s) [RTD ] 内訳: 先頭 settle 3.0s + 移動 13.7s(max|Δ| 合計 274.4° @ 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_123559.json [RTD ] measured_at = 2026-11-09T12:36:01.355235 block = (+54.8, +47.3) mm box = (-220.3, +190.8) mm [RTD ] 再生直前: 上カメラでマット四隅とブロック画素を確認します [RTD ] 再生直前: block = (+133.4, +226.6) mm(measure の homography で換算) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_124113.jpg [RTD ] [WARN] ブロックが measure 時から動いています(止めません・項目8): ブロックが measure 時から 413.1px(≒195.8mm)動いています(許容 10.3px = 5.0mm)。ブロックを戻すか measure をやり直してください [RTD ] [WARN] 画素の差 413.1px(許容 10.3px = 5.0mm)/ mm 換算の差 195.80mm [RTD ] [WARN] つかみ損ねる可能性があります。気になるなら Enter の前に measure を取り直してください [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_124117 [RTD ] 教えた記録のコピー: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_124117/teach/drag_v2_20261109_123000.json [RTD ] recorder に trial_start を送りました。1.0s 待ってから動き出します(mp4 writer が開くまで) [RTD ] 爪と肩の電流を 1 秒 10 回で記録します(爪を動かしている間は読みません)→ /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_124117/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.84° / 到達待ち 最大 8.0s [STEP 1] 3.0s 待ちます(settle) [RTD ] arrival OK (current → HOME, max|Δ|=1.84° <= 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.0s) [RTD ] 送信 OK(daemon 往復 1.029s) [RTD ] arrival OK (HOME → APPROACH_PICK, max|Δ|=1.94° <= 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.05° <= 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.032s) [RTD ] arrival OK (PICK → APPROACH_PICK (lift), max|Δ|=2.02° <= tol 3.0°) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_APPROACH_PLACE(stage7)] / 最大 12.0s) [RTD ] 送信 OK(daemon 往復 1.057s) [RTD ] arrival OK (APPROACH_PICK → APPROACH_PLACE, max|Δ|=2.64° <= 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.032s) [RTD ] arrival OK (APPROACH_PLACE → PLACE, max|Δ|=2.29° <= 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.81° <= tol 3.0°) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME (1 回送信 speed=20 → 到達待ち 許容 2.5°[TOL_HOME(stage1_to_home / HOME 復帰)] / 最大 9.4s) [RTD ] 送信 OK(daemon 往復 1.050s) [RTD ] arrival OK (APPROACH_PLACE → HOME, max|Δ|=2.46° <= tol 2.5°) [Pi] fresh_mode=0 [RTD ] daemon_set_fresh_mode(0) 完了 [RTD ] 実測角の読み取り: ok 53/53 回, 実効 1.55 Hz(目標 3.0 Hz 以上) [RTD ] [WARN] 実測角の読み取りが目標 3.0 Hz を下回りました(1.55 Hz)。学習データの state 密度が 19 本より薄くなります [RTD ] send_angles の daemon 往復 (7 回): 平均 1.038s / p50 1.032s / 最大 1.057s(timeout 6.0s) [RTD ] [WARN] 送信 1 回に 1.057s かかった回があります。daemon は送信後に角度を読み直すので、動き始めで読めないと伸びます(単発送信なので試行全体への影響は小さい) [RTD ] 区間の所要(送信→到達確認まで)(8 区間): 平均 2.14s / 最大 4.41s [RECORD] 電流の記録終了 67 行 (1.96 行/秒. 本体が眠っている間だけ読む. 爪の間 14.055 秒は読まない. 見込み超え 0 回. read_servo) → /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_124117/recording/currents.csv ============================================================================== [RTD ] 再生 完了 ============================================================================== [RTD ] つかめたか (y/n) > y [RTD ] 箱に入ったか (y/n) > y [RTD ] 試行 JSON: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_124117/run_0001_20261109_124117.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_20261109_124117 --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_20261109_123000.json --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_123000.json [RTD ] 取得しました → /var/folders/5w/2q2mc64n6yv63gfh31h34w6h0000gn/T/record_teach_demo_l6l42858/drag_v2_20261109_123000.json [RTD ] 入力ファイル: drag_v2_20261109_123000.json [RTD ] 抽出ウェイポイント: APPROACH_PICK <- phase APPROACH_PICK argmax_idx=146 (start=146 end=194, gap=25.14°) angles = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] PICK <- gripper close mark idx=214(PICK phase 範囲内) angles = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] APPROACH_PLACE <- phase APPROACH_PLACE argmax_idx=286 (start=286 end=321, gap=20.83°) angles = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] PLACE <- gripper open mark idx=345(PLACE phase 範囲内) angles = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] [RTD ] JOINT_LIMITS 一括検証 OK(全 endpoint + HOME) [RTD ] 姿勢検査 OK(全 146 姿勢が 有限値 + JOINT_LIMITS + J4_SAFE [-90.0, +60.0] 内) [RTD ] j4 の余裕は最小 19.78°(しきい値 3.0° 以上) [RTD ] 現在姿勢を daemon から取得します [RTD ] 現在姿勢 = [ -0.43, +1.49, +1.93, +0.08, -0.35, -30.23] ============================================================================== [RTD ] 実行プラン(daemon 経由・区間ごとに 1 回送信 → 到達待ち) ============================================================================== [STEP 1] MOVE → HOME (single send + settle) speed=20 current = [ -0.43, +1.49, +1.93, +0.08, -0.35, -30.23] to HOME = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 1.93° (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 = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] max |Δ| = 66.53° 1 回送信 speed=20 (~ 3.3s @ 20°/s 目安・到達待ち 最大 12.0s) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage4_pick)] from = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] to = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] max |Δ| = 25.14° 1 回送信 speed=20 (~ 1.3s @ 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 = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] to = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] max |Δ| = 25.14° 1 回送信 speed=20 (~ 1.3s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE tol=3.0° [rpp.TOL_APPROACH_PLACE(stage7)] from = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 66.52° 1 回送信 speed=20 (~ 3.3s @ 20°/s 目安・到達待ち 最大 12.0s) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage8_place)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 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 = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME tol=2.5° [rpp.TOL_HOME(stage1_to_home / HOME 復帰)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 49.39° 1 回送信 speed=20 (~ 2.5s @ 20°/s 目安・到達待ち 最大 9.4s) ============================================================================== [RTD ] 送信 = 8 回(STEP 1 + move 7 区間), 想定所要時間 ≈ 30.7s(最悪 73.0s) [RTD ] 内訳: 先頭 settle 3.0s + 移動 13.7s(max|Δ| 合計 274.4° @ 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_123559.json [RTD ] measured_at = 2026-11-09T12:36:01.355235 block = (+54.8, +47.3) mm box = (-220.3, +190.8) mm [RTD ] 再生直前: 上カメラでマット四隅とブロック画素を確認します [RTD ] 再生直前: block = (+134.3, +227.0) mm(measure の homography で換算) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_124203.jpg [RTD ] [WARN] ブロックが measure 時から動いています(止めません・項目8): ブロックが measure 時から 414.8px(≒196.6mm)動いています(許容 10.3px = 5.0mm)。ブロックを戻すか measure をやり直してください [RTD ] [WARN] 画素の差 414.8px(許容 10.3px = 5.0mm)/ mm 換算の差 196.58mm [RTD ] [WARN] つかみ損ねる可能性があります。気になるなら Enter の前に measure を取り直してください [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_124207 [RTD ] 教えた記録のコピー: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_124207/teach/drag_v2_20261109_123000.json [RTD ] recorder に trial_start を送りました。1.0s 待ってから動き出します(mp4 writer が開くまで) [RTD ] 爪と肩の電流を 1 秒 10 回で記録します(爪を動かしている間は読みません)→ /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_124207/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.93° / 到達待ち 最大 8.0s [STEP 1] 3.0s 待ちます(settle) [RTD ] arrival OK (current → HOME, max|Δ|=1.93° <= 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.0s) [RTD ] 送信 OK(daemon 往復 1.040s) [RTD ] arrival OK (HOME → APPROACH_PICK, max|Δ|=1.85° <= 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.033s) [RTD ] arrival OK (APPROACH_PICK → PICK, max|Δ|=0.88° <= 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.030s) [RTD ] arrival OK (PICK → APPROACH_PICK (lift), max|Δ|=2.02° <= tol 3.0°) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_APPROACH_PLACE(stage7)] / 最大 12.0s) [RTD ] 送信 OK(daemon 往復 1.031s) [RTD ] arrival OK (APPROACH_PICK → APPROACH_PLACE, max|Δ|=2.55° <= 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|Δ|=2.02° <= tol 3.0°) [STEP 9] GRIPPER OPEN → daemon_set_gripper(0, 50, wait=0) [RTD ] 静止確認 OK(step9_open: 連続 3 回・連続差 最大 0.08° <= 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.46° <= tol 3.0°) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME (1 回送信 speed=20 → 到達待ち 許容 2.5°[TOL_HOME(stage1_to_home / HOME 復帰)] / 最大 9.4s) [RTD ] 送信 OK(daemon 往復 1.040s) [RTD ] arrival OK (APPROACH_PLACE → HOME, max|Δ|=2.28° <= 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.034s / p50 1.032s / 最大 1.040s(timeout 6.0s) [RTD ] [WARN] 送信 1 回に 1.040s かかった回があります。daemon は送信後に角度を読み直すので、動き始めで読めないと伸びます(単発送信なので試行全体への影響は小さい) [RTD ] 区間の所要(送信→到達確認まで)(8 区間): 平均 2.17s / 最大 4.42s [RECORD] 電流の記録終了 69 行 (2.01 行/秒. 本体が眠っている間だけ読む. 爪の間 14.044 秒は読まない. 見込み超え 0 回. read_servo) → /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_124207/recording/currents.csv ============================================================================== [RTD ] 再生 完了 ============================================================================== [RTD ] つかめたか (y/n) > y [RTD ] 箱に入ったか (y/n) > y [RTD ] 試行 JSON: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_124207/run_0001_20261109_124207.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_20261109_124207 --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_20261109_123000.json --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_123000.json [RTD ] 取得しました → /var/folders/5w/2q2mc64n6yv63gfh31h34w6h0000gn/T/record_teach_demo_b4kxq_6u/drag_v2_20261109_123000.json [RTD ] 入力ファイル: drag_v2_20261109_123000.json [RTD ] 抽出ウェイポイント: APPROACH_PICK <- phase APPROACH_PICK argmax_idx=146 (start=146 end=194, gap=25.14°) angles = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] PICK <- gripper close mark idx=214(PICK phase 範囲内) angles = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] APPROACH_PLACE <- phase APPROACH_PLACE argmax_idx=286 (start=286 end=321, gap=20.83°) angles = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] PLACE <- gripper open mark idx=345(PLACE phase 範囲内) angles = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] [RTD ] JOINT_LIMITS 一括検証 OK(全 endpoint + HOME) [RTD ] 姿勢検査 OK(全 146 姿勢が 有限値 + JOINT_LIMITS + J4_SAFE [-90.0, +60.0] 内) [RTD ] j4 の余裕は最小 19.78°(しきい値 3.0° 以上) [RTD ] 現在姿勢を daemon から取得します [RTD ] 現在姿勢 = [ -0.43, +1.49, +1.93, +0.08, -0.26, -30.23] ============================================================================== [RTD ] 実行プラン(daemon 経由・区間ごとに 1 回送信 → 到達待ち) ============================================================================== [STEP 1] MOVE → HOME (single send + settle) speed=20 current = [ -0.43, +1.49, +1.93, +0.08, -0.26, -30.23] to HOME = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 1.93° (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 = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] max |Δ| = 66.53° 1 回送信 speed=20 (~ 3.3s @ 20°/s 目安・到達待ち 最大 12.0s) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage4_pick)] from = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] to = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] max |Δ| = 25.14° 1 回送信 speed=20 (~ 1.3s @ 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 = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] to = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] max |Δ| = 25.14° 1 回送信 speed=20 (~ 1.3s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE tol=3.0° [rpp.TOL_APPROACH_PLACE(stage7)] from = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 66.52° 1 回送信 speed=20 (~ 3.3s @ 20°/s 目安・到達待ち 最大 12.0s) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage8_place)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 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 = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME tol=2.5° [rpp.TOL_HOME(stage1_to_home / HOME 復帰)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 49.39° 1 回送信 speed=20 (~ 2.5s @ 20°/s 目安・到達待ち 最大 9.4s) ============================================================================== [RTD ] 送信 = 8 回(STEP 1 + move 7 区間), 想定所要時間 ≈ 30.7s(最悪 73.0s) [RTD ] 内訳: 先頭 settle 3.0s + 移動 13.7s(max|Δ| 合計 274.4° @ 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_123559.json [RTD ] measured_at = 2026-11-09T12:36:01.355235 block = (+54.8, +47.3) mm box = (-220.3, +190.8) mm [RTD ] 再生直前: 上カメラでマット四隅とブロック画素を確認します [RTD ] 再生直前: block = (+128.7, +232.8) mm(measure の homography で換算) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_124253.jpg [RTD ] [WARN] ブロックが measure 時から動いています(止めません・項目8): ブロックが measure 時から 420.6px(≒199.7mm)動いています(許容 10.3px = 5.0mm)。ブロックを戻すか measure をやり直してください [RTD ] [WARN] 画素の差 420.6px(許容 10.3px = 5.0mm)/ mm 換算の差 199.71mm [RTD ] [WARN] つかみ損ねる可能性があります。気になるなら Enter の前に measure を取り直してください [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_124256 [RTD ] 教えた記録のコピー: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_124256/teach/drag_v2_20261109_123000.json [RTD ] recorder に trial_start を送りました。1.0s 待ってから動き出します(mp4 writer が開くまで) [RTD ] 爪と肩の電流を 1 秒 10 回で記録します(爪を動かしている間は読みません)→ /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_124256/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.93° / 到達待ち 最大 8.0s [STEP 1] 3.0s 待ちます(settle) [RTD ] arrival OK (current → HOME, max|Δ|=1.93° <= 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.016s [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.0s) [RTD ] 送信 OK(daemon 往復 1.032s) [RTD ] arrival OK (HOME → APPROACH_PICK, max|Δ|=1.14° <= 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.055s) [RTD ] arrival OK (APPROACH_PICK → PICK, max|Δ|=0.88° <= 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.032s) [RTD ] arrival OK (PICK → APPROACH_PICK (lift), max|Δ|=2.02° <= tol 3.0°) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_APPROACH_PLACE(stage7)] / 最大 12.0s) [RTD ] 送信 OK(daemon 往復 1.048s) [RTD ] arrival OK (APPROACH_PICK → APPROACH_PLACE, max|Δ|=2.55° <= 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.022s) [RTD ] arrival OK (APPROACH_PLACE → PLACE, max|Δ|=1.93° <= tol 3.0°) [STEP 9] GRIPPER OPEN → daemon_set_gripper(0, 50, wait=0) [RTD ] 静止確認 OK(step9_open: 連続 3 回・連続差 最大 0.08° <= 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.028s) [RTD ] arrival OK (PLACE → APPROACH_PLACE (retreat), max|Δ|=2.81° <= tol 3.0°) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME (1 回送信 speed=20 → 到達待ち 許容 2.5°[TOL_HOME(stage1_to_home / HOME 復帰)] / 最大 9.4s) [RTD ] 送信 OK(daemon 往復 1.031s) [RTD ] arrival OK (APPROACH_PLACE → HOME, max|Δ|=2.46° <= tol 2.5°) [Pi] fresh_mode=0 [RTD ] daemon_set_fresh_mode(0) 完了 [RTD ] 実測角の読み取り: ok 55/55 回, 実効 1.58 Hz(目標 3.0 Hz 以上) [RTD ] [WARN] 実測角の読み取りが目標 3.0 Hz を下回りました(1.58 Hz)。学習データの state 密度が 19 本より薄くなります [RTD ] send_angles の daemon 往復 (7 回): 平均 1.036s / p50 1.032s / 最大 1.055s(timeout 6.0s) [RTD ] [WARN] 送信 1 回に 1.055s かかった回があります。daemon は送信後に角度を読み直すので、動き始めで読めないと伸びます(単発送信なので試行全体への影響は小さい) [RTD ] 区間の所要(送信→到達確認まで)(8 区間): 平均 2.22s / 最大 4.60s [RECORD] 電流の記録終了 71 行 (2.04 行/秒. 本体が眠っている間だけ読む. 爪の間 14.06 秒は読まない. 見込み超え 0 回. read_servo) → /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_124256/recording/currents.csv ============================================================================== [RTD ] 再生 完了 ============================================================================== [RTD ] つかめたか (y/n) > y [RTD ] 箱に入ったか (y/n) > y [RTD ] 試行 JSON: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_124256/run_0001_20261109_124256.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_20261109_124256 --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_20261109_123000.json --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_123000.json [RTD ] 取得しました → /var/folders/5w/2q2mc64n6yv63gfh31h34w6h0000gn/T/record_teach_demo_7bjpxg62/drag_v2_20261109_123000.json [RTD ] 入力ファイル: drag_v2_20261109_123000.json [RTD ] 抽出ウェイポイント: APPROACH_PICK <- phase APPROACH_PICK argmax_idx=146 (start=146 end=194, gap=25.14°) angles = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] PICK <- gripper close mark idx=214(PICK phase 範囲内) angles = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] APPROACH_PLACE <- phase APPROACH_PLACE argmax_idx=286 (start=286 end=321, gap=20.83°) angles = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] PLACE <- gripper open mark idx=345(PLACE phase 範囲内) angles = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] [RTD ] JOINT_LIMITS 一括検証 OK(全 endpoint + HOME) [RTD ] 姿勢検査 OK(全 146 姿勢が 有限値 + JOINT_LIMITS + J4_SAFE [-90.0, +60.0] 内) [RTD ] j4 の余裕は最小 19.78°(しきい値 3.0° 以上) [RTD ] 現在姿勢を daemon から取得します [RTD ] 現在姿勢 = [ -0.43, +1.49, +1.84, +0.08, -0.26, -30.23] ============================================================================== [RTD ] 実行プラン(daemon 経由・区間ごとに 1 回送信 → 到達待ち) ============================================================================== [STEP 1] MOVE → HOME (single send + settle) speed=20 current = [ -0.43, +1.49, +1.84, +0.08, -0.26, -30.23] to HOME = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 1.84° (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 = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] max |Δ| = 66.53° 1 回送信 speed=20 (~ 3.3s @ 20°/s 目安・到達待ち 最大 12.0s) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage4_pick)] from = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] to = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] max |Δ| = 25.14° 1 回送信 speed=20 (~ 1.3s @ 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 = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] to = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] max |Δ| = 25.14° 1 回送信 speed=20 (~ 1.3s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE tol=3.0° [rpp.TOL_APPROACH_PLACE(stage7)] from = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 66.52° 1 回送信 speed=20 (~ 3.3s @ 20°/s 目安・到達待ち 最大 12.0s) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage8_place)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 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 = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME tol=2.5° [rpp.TOL_HOME(stage1_to_home / HOME 復帰)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 49.39° 1 回送信 speed=20 (~ 2.5s @ 20°/s 目安・到達待ち 最大 9.4s) ============================================================================== [RTD ] 送信 = 8 回(STEP 1 + move 7 区間), 想定所要時間 ≈ 30.7s(最悪 73.0s) [RTD ] 内訳: 先頭 settle 3.0s + 移動 13.7s(max|Δ| 合計 274.4° @ 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_123559.json [RTD ] measured_at = 2026-11-09T12:36:01.355235 block = (+54.8, +47.3) mm box = (-220.3, +190.8) mm [RTD ] 再生直前: 上カメラでマット四隅とブロック画素を確認します [RTD ] 再生直前: block = (+55.3, +46.8) mm(measure の homography で換算) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_124435.jpg [RTD ] 何を拾ったかは確認画像で見てください: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_124435.jpg [RTD ] [WARN] 検出したブロックがアームの根元から 72.4mm しか離れていません(120.0mm 以内は不可)。教示で使う位置は 200mm 以上離れているので、赤いケーブル等の別のものを拾っている可能性が高いです: (+55.3, +46.8) mm(**止めません**・WARN のみ) [RTD ] ブロック位置の照合 OK(画素の差 1.4px <= 許容 10.3px = 5.0mm / mm 換算の差 0.66mm) [RTD ] マット四隅のずれ 最大 0.7px(上限 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_124438 [RTD ] 教えた記録のコピー: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_124438/teach/drag_v2_20261109_123000.json [RTD ] recorder に trial_start を送りました。1.0s 待ってから動き出します(mp4 writer が開くまで) [RTD ] 爪と肩の電流を 1 秒 10 回で記録します(爪を動かしている間は読みません)→ /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_124438/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.84° / 到達待ち 最大 8.0s [STEP 1] 3.0s 待ちます(settle) [RTD ] arrival OK (current → HOME, max|Δ|=1.84° <= 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.012s [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.0s) [RTD ] 送信 OK(daemon 往復 1.032s) [RTD ] arrival OK (HOME → APPROACH_PICK, max|Δ|=1.23° <= 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.039s) [RTD ] arrival OK (APPROACH_PICK → PICK, max|Δ|=0.88° <= 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.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.031s) [RTD ] arrival OK (PICK → APPROACH_PICK (lift), max|Δ|=2.02° <= tol 3.0°) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_APPROACH_PLACE(stage7)] / 最大 12.0s) [RTD ] 送信 OK(daemon 往復 1.029s) [RTD ] arrival OK (APPROACH_PICK → APPROACH_PLACE, max|Δ|=2.64° <= 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.02° <= 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.029s) [RTD ] arrival OK (PLACE → APPROACH_PLACE (retreat), max|Δ|=2.72° <= tol 3.0°) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME (1 回送信 speed=20 → 到達待ち 許容 2.5°[TOL_HOME(stage1_to_home / HOME 復帰)] / 最大 9.4s) [RTD ] 送信 OK(daemon 往復 1.037s) [RTD ] arrival OK (APPROACH_PLACE → HOME, max|Δ|=2.46° <= tol 2.5°) [Pi] fresh_mode=0 [RTD ] daemon_set_fresh_mode(0) 完了 [RTD ] 実測角の読み取り: ok 54/54 回, 実効 1.51 Hz(目標 3.0 Hz 以上) [RTD ] [WARN] 実測角の読み取りが目標 3.0 Hz を下回りました(1.51 Hz)。学習データの state 密度が 19 本より薄くなります [RTD ] send_angles の daemon 往復 (7 回): 平均 1.032s / p50 1.031s / 最大 1.039s(timeout 6.0s) [RTD ] [WARN] 送信 1 回に 1.039s かかった回があります。daemon は送信後に角度を読み直すので、動き始めで読めないと伸びます(単発送信なので試行全体への影響は小さい) [RTD ] 区間の所要(送信→到達確認まで)(8 区間): 平均 2.34s / 最大 4.47s [RECORD] 電流の記録終了 69 行 (1.93 行/秒. 本体が眠っている間だけ読む. 爪の間 14.055 秒は読まない. 見込み超え 0 回. read_servo) → /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_124438/recording/currents.csv ============================================================================== [RTD ] 再生 完了 ============================================================================== [RTD ] つかめたか (y/n) > y [RTD ] 箱に入ったか (y/n) > y [RTD ] 試行 JSON: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_124438/run_0001_20261109_124438.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_20261109_124438 --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_20261109_123000.json --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_123000.json [RTD ] 取得しました → /var/folders/5w/2q2mc64n6yv63gfh31h34w6h0000gn/T/record_teach_demo_gl8upm_g/drag_v2_20261109_123000.json [RTD ] 入力ファイル: drag_v2_20261109_123000.json [RTD ] 抽出ウェイポイント: APPROACH_PICK <- phase APPROACH_PICK argmax_idx=146 (start=146 end=194, gap=25.14°) angles = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] PICK <- gripper close mark idx=214(PICK phase 範囲内) angles = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] APPROACH_PLACE <- phase APPROACH_PLACE argmax_idx=286 (start=286 end=321, gap=20.83°) angles = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] PLACE <- gripper open mark idx=345(PLACE phase 範囲内) angles = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] [RTD ] JOINT_LIMITS 一括検証 OK(全 endpoint + HOME) [RTD ] 姿勢検査 OK(全 146 姿勢が 有限値 + JOINT_LIMITS + J4_SAFE [-90.0, +60.0] 内) [RTD ] j4 の余裕は最小 19.78°(しきい値 3.0° 以上) [RTD ] 現在姿勢を daemon から取得します [RTD ] 現在姿勢 = [ -0.43, +1.49, +1.84, +0.08, -0.26, -30.23] ============================================================================== [RTD ] 実行プラン(daemon 経由・区間ごとに 1 回送信 → 到達待ち) ============================================================================== [STEP 1] MOVE → HOME (single send + settle) speed=20 current = [ -0.43, +1.49, +1.84, +0.08, -0.26, -30.23] to HOME = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 1.84° (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 = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] max |Δ| = 66.53° 1 回送信 speed=20 (~ 3.3s @ 20°/s 目安・到達待ち 最大 12.0s) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage4_pick)] from = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] to = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] max |Δ| = 25.14° 1 回送信 speed=20 (~ 1.3s @ 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 = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] to = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] max |Δ| = 25.14° 1 回送信 speed=20 (~ 1.3s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE tol=3.0° [rpp.TOL_APPROACH_PLACE(stage7)] from = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 66.52° 1 回送信 speed=20 (~ 3.3s @ 20°/s 目安・到達待ち 最大 12.0s) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage8_place)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 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 = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME tol=2.5° [rpp.TOL_HOME(stage1_to_home / HOME 復帰)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 49.39° 1 回送信 speed=20 (~ 2.5s @ 20°/s 目安・到達待ち 最大 9.4s) ============================================================================== [RTD ] 送信 = 8 回(STEP 1 + move 7 区間), 想定所要時間 ≈ 30.7s(最悪 73.0s) [RTD ] 内訳: 先頭 settle 3.0s + 移動 13.7s(max|Δ| 合計 274.4° @ 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_123559.json [RTD ] measured_at = 2026-11-09T12:36:01.355235 block = (+54.8, +47.3) mm box = (-220.3, +190.8) mm [RTD ] 再生直前: 上カメラでマット四隅とブロック画素を確認します [RTD ] 再生直前: block = (+142.1, +212.7) mm(measure の homography で換算) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_124527.jpg [RTD ] [WARN] ブロックが measure 時から動いています(止めません・項目8): ブロックが measure 時から 396.1px(≒187.0mm)動いています(許容 10.3px = 5.0mm)。ブロックを戻すか measure をやり直してください [RTD ] [WARN] 画素の差 396.1px(許容 10.3px = 5.0mm)/ mm 換算の差 187.04mm [RTD ] [WARN] つかみ損ねる可能性があります。気になるなら Enter の前に measure を取り直してください [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_124530 [RTD ] 教えた記録のコピー: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_124530/teach/drag_v2_20261109_123000.json [RTD ] recorder に trial_start を送りました。1.0s 待ってから動き出します(mp4 writer が開くまで) [RTD ] 爪と肩の電流を 1 秒 10 回で記録します(爪を動かしている間は読みません)→ /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_124530/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.84° / 到達待ち 最大 8.0s [STEP 1] 3.0s 待ちます(settle) [RTD ] arrival OK (current → HOME, max|Δ|=1.84° <= 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.0s) [RTD ] 送信 OK(daemon 往復 1.052s) [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.031s) [RTD ] arrival OK (APPROACH_PICK → PICK, max|Δ|=2.72° <= 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.029s) [RTD ] [WARN] arrival timeout (PICK → APPROACH_PICK (lift), max|Δ|=41.75° > tol 3.0°, 8.0s) [RTD ] [WARN] 到達確認タイムアウト(max|Δ|=41.75° > tol 3.0°)ですが pre→last max|Δ| 44.30° >= 1.0°(動いているので再送しない)。**止めずに次の区間へ進みます** [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_APPROACH_PLACE(stage7)] / 最大 12.0s) [RTD ] 送信 OK(daemon 往復 1.030s) [RTD ] [WARN] arrival timeout (APPROACH_PICK → APPROACH_PLACE, max|Δ|=36.48° > tol 3.0°, 12.0s) [RTD ] [WARN] 到達確認タイムアウト(max|Δ|=36.48° > tol 3.0°)ですが pre→last max|Δ| 67.13° >= 1.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.051s) [RTD ] arrival OK (APPROACH_PLACE → PLACE, max|Δ|=2.90° <= tol 3.0°) [STEP 9] GRIPPER OPEN → daemon_set_gripper(0, 50, wait=0) [RTD ] 静止確認 OK(step9_open: 連続 3 回・連続差 最大 1.76° <= 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.37° <= tol 3.0°) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME (1 回送信 speed=20 → 到達待ち 許容 2.5°[TOL_HOME(stage1_to_home / HOME 復帰)] / 最大 9.4s) [RTD ] 送信 OK(daemon 往復 1.041s) [RTD ] arrival OK (APPROACH_PLACE → HOME, max|Δ|=2.46° <= tol 2.5°) [Pi] fresh_mode=0 [RTD ] daemon_set_fresh_mode(0) 完了 [RTD ] 実測角の読み取り: ok 131/131 回, 実効 2.19 Hz(目標 3.0 Hz 以上) [RTD ] [WARN] 実測角の読み取りが目標 3.0 Hz を下回りました(2.19 Hz)。学習データの state 密度が 19 本より薄くなります [RTD ] send_angles の daemon 往復 (7 回): 平均 1.038s / p50 1.031s / 最大 1.052s(timeout 6.0s) [RTD ] [WARN] 送信 1 回に 1.052s かかった回があります。daemon は送信後に角度を読み直すので、動き始めで読めないと伸びます(単発送信なので試行全体への影響は小さい) [RTD ] 区間の所要(送信→到達確認まで)(8 区間): 平均 5.32s / 最大 13.32s [RECORD] 電流の記録終了 227 行 (3.79 行/秒. 本体が眠っている間だけ読む. 爪の間 14.057 秒は読まない. 見込み超え 0 回. read_servo) → /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_124530/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_124530/run_0001_20261109_124530.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_124530 --dataset mecharm_redblock_box_teach_v1 (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % python3 pi05/camera_align.py --raw-dir /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/align_ref [REF ] 基準画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/align_ref/run_0001_20261109_124117/frames/000000.jpg [REF ] お手本 run_0001_20261109_124117 (つかんだ瞬間が不明) ← --episode 未指定なので最初のエピソード [REF ] 重なった画像のブロックに実物のブロックを合わせると, お手本と同じ位置に置ける [ALIGN ] |dy| <= 20 なら OK. アームは HOME に置いた状態で合わせる. q または Esc で終了 (ファイルには何も書かない) [ALIGN ] dy= +0.9 dx= -0.8 response=0.671 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= -0.8 dx= -0.1 response=0.705 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +0.7 dx= -0.9 response=0.673 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [DONE ] 終了 (何も書いていません) (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % python3 dynamic_tracking_limits/drag_teaching/record_teach_demo.py run --teach drag_v2_20261109_123000.json --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_123000.json [RTD ] 取得しました → /var/folders/5w/2q2mc64n6yv63gfh31h34w6h0000gn/T/record_teach_demo_8ws6r9vs/drag_v2_20261109_123000.json [RTD ] 入力ファイル: drag_v2_20261109_123000.json [RTD ] 抽出ウェイポイント: APPROACH_PICK <- phase APPROACH_PICK argmax_idx=146 (start=146 end=194, gap=25.14°) angles = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] PICK <- gripper close mark idx=214(PICK phase 範囲内) angles = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] APPROACH_PLACE <- phase APPROACH_PLACE argmax_idx=286 (start=286 end=321, gap=20.83°) angles = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] PLACE <- gripper open mark idx=345(PLACE phase 範囲内) angles = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] [RTD ] JOINT_LIMITS 一括検証 OK(全 endpoint + HOME) [RTD ] 姿勢検査 OK(全 146 姿勢が 有限値 + JOINT_LIMITS + J4_SAFE [-90.0, +60.0] 内) [RTD ] j4 の余裕は最小 19.78°(しきい値 3.0° 以上) [RTD ] 現在姿勢を daemon から取得します [RTD ] 現在姿勢 = [ -0.43, +1.49, +1.84, -0.26, -0.26, -30.23] ============================================================================== [RTD ] 実行プラン(daemon 経由・区間ごとに 1 回送信 → 到達待ち) ============================================================================== [STEP 1] MOVE → HOME (single send + settle) speed=20 current = [ -0.43, +1.49, +1.84, -0.26, -0.26, -30.23] to HOME = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 1.84° (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 = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] max |Δ| = 66.53° 1 回送信 speed=20 (~ 3.3s @ 20°/s 目安・到達待ち 最大 12.0s) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage4_pick)] from = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] to = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] max |Δ| = 25.14° 1 回送信 speed=20 (~ 1.3s @ 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 = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] to = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] max |Δ| = 25.14° 1 回送信 speed=20 (~ 1.3s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE tol=3.0° [rpp.TOL_APPROACH_PLACE(stage7)] from = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 66.52° 1 回送信 speed=20 (~ 3.3s @ 20°/s 目安・到達待ち 最大 12.0s) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage8_place)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 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 = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME tol=2.5° [rpp.TOL_HOME(stage1_to_home / HOME 復帰)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 49.39° 1 回送信 speed=20 (~ 2.5s @ 20°/s 目安・到達待ち 最大 9.4s) ============================================================================== [RTD ] 送信 = 8 回(STEP 1 + move 7 区間), 想定所要時間 ≈ 30.7s(最悪 73.0s) [RTD ] 内訳: 先頭 settle 3.0s + 移動 13.7s(max|Δ| 合計 274.4° @ 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_123559.json [RTD ] measured_at = 2026-11-09T12:36:01.355235 block = (+54.8, +47.3) mm box = (-220.3, +190.8) mm [RTD ] 再生直前: 上カメラでマット四隅とブロック画素を確認します [RTD ] 再生直前: block = (+141.0, +229.3) mm(measure の homography で換算) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_124812.jpg [RTD ] [WARN] ブロックが measure 時から動いています(止めません・項目8): ブロックが measure 時から 425.8px(≒201.4mm)動いています(許容 10.3px = 5.0mm)。ブロックを戻すか measure をやり直してください [RTD ] [WARN] 画素の差 425.8px(許容 10.3px = 5.0mm)/ mm 換算の差 201.41mm [RTD ] [WARN] つかみ損ねる可能性があります。気になるなら Enter の前に measure を取り直してください [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_124817 [RTD ] 教えた記録のコピー: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_124817/teach/drag_v2_20261109_123000.json [RTD ] recorder に trial_start を送りました。1.0s 待ってから動き出します(mp4 writer が開くまで) [RTD ] 爪と肩の電流を 1 秒 10 回で記録します(爪を動かしている間は読みません)→ /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_124817/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.84° / 到達待ち 最大 8.0s [STEP 1] 3.0s 待ちます(settle) [RTD ] arrival OK (current → HOME, max|Δ|=1.84° <= 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.0s) [RTD ] 送信 OK(daemon 往復 1.031s) [RTD ] arrival OK (HOME → APPROACH_PICK, max|Δ|=1.14° <= 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.14° <= 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.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.02° <= tol 3.0°) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_APPROACH_PLACE(stage7)] / 最大 12.0s) [RTD ] 送信 OK(daemon 往復 1.054s) [RTD ] arrival OK (APPROACH_PICK → APPROACH_PLACE, max|Δ|=2.64° <= 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.040s) [RTD ] arrival OK (APPROACH_PLACE → PLACE, max|Δ|=2.37° <= tol 3.0°) [STEP 9] GRIPPER OPEN → daemon_set_gripper(0, 50, wait=0) [RTD ] 静止確認 OK(step9_open: 連続 3 回・連続差 最大 0.08° <= 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.039s) [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 復帰)] / 最大 9.4s) [RTD ] 送信 OK(daemon 往復 1.051s) [RTD ] arrival OK (APPROACH_PLACE → HOME, max|Δ|=2.37° <= tol 2.5°) [Pi] fresh_mode=0 [RTD ] daemon_set_fresh_mode(0) 完了 [RTD ] 実測角の読み取り: ok 56/56 回, 実効 1.59 Hz(目標 3.0 Hz 以上) [RTD ] [WARN] 実測角の読み取りが目標 3.0 Hz を下回りました(1.59 Hz)。学習データの state 密度が 19 本より薄くなります [RTD ] send_angles の daemon 往復 (7 回): 平均 1.040s / p50 1.039s / 最大 1.054s(timeout 6.0s) [RTD ] [WARN] 送信 1 回に 1.054s かかった回があります。daemon は送信後に角度を読み直すので、動き始めで読めないと伸びます(単発送信なので試行全体への影響は小さい) [RTD ] 区間の所要(送信→到達確認まで)(8 区間): 平均 2.27s / 最大 4.61s [RECORD] 電流の記録終了 73 行 (2.07 行/秒. 本体が眠っている間だけ読む. 爪の間 14.046 秒は読まない. 見込み超え 0 回. read_servo) → /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_124817/recording/currents.csv ============================================================================== [RTD ] 再生 完了 ============================================================================== [RTD ] つかめたか (y/n) > y [RTD ] 箱に入ったか (y/n) > y [RTD ] 試行 JSON: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_124817/run_0001_20261109_124817.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_20261109_124817 --dataset mecharm_redblock_box_teach_v1 (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % python3 pi05/camera_align.py --raw-dir /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/align_ref [REF ] 基準画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/align_ref/run_0001_20261109_124117/frames/000000.jpg [REF ] お手本 run_0001_20261109_124117 (つかんだ瞬間が不明) ← --episode 未指定なので最初のエピソード [REF ] 重なった画像のブロックに実物のブロックを合わせると, お手本と同じ位置に置ける [ALIGN ] |dy| <= 20 なら OK. アームは HOME に置いた状態で合わせる. q または Esc で終了 (ファイルには何も書かない) [ALIGN ] dy= +0.8 dx= -0.7 response=0.679 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [DONE ] 終了 (何も書いていません) (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % python3 dynamic_tracking_limits/drag_teaching/record_teach_demo.py run --teach drag_v2_20261109_123000.json --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_123000.json [RTD ] 取得しました → /var/folders/5w/2q2mc64n6yv63gfh31h34w6h0000gn/T/record_teach_demo_wcevrdkg/drag_v2_20261109_123000.json [RTD ] 入力ファイル: drag_v2_20261109_123000.json [RTD ] 抽出ウェイポイント: APPROACH_PICK <- phase APPROACH_PICK argmax_idx=146 (start=146 end=194, gap=25.14°) angles = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] PICK <- gripper close mark idx=214(PICK phase 範囲内) angles = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] APPROACH_PLACE <- phase APPROACH_PLACE argmax_idx=286 (start=286 end=321, gap=20.83°) angles = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] PLACE <- gripper open mark idx=345(PLACE phase 範囲内) angles = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] [RTD ] JOINT_LIMITS 一括検証 OK(全 endpoint + HOME) [RTD ] 姿勢検査 OK(全 146 姿勢が 有限値 + JOINT_LIMITS + J4_SAFE [-90.0, +60.0] 内) [RTD ] j4 の余裕は最小 19.78°(しきい値 3.0° 以上) [RTD ] 現在姿勢を daemon から取得します [RTD ] 現在姿勢 = [ -0.43, +1.49, +1.93, +0.08, -0.26, -30.23] ============================================================================== [RTD ] 実行プラン(daemon 経由・区間ごとに 1 回送信 → 到達待ち) ============================================================================== [STEP 1] MOVE → HOME (single send + settle) speed=20 current = [ -0.43, +1.49, +1.93, +0.08, -0.26, -30.23] to HOME = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 1.93° (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 = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] max |Δ| = 66.53° 1 回送信 speed=20 (~ 3.3s @ 20°/s 目安・到達待ち 最大 12.0s) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage4_pick)] from = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] to = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] max |Δ| = 25.14° 1 回送信 speed=20 (~ 1.3s @ 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 = [ -25.48, +68.20, +8.43, -1.58, -66.53, -30.14] to = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] max |Δ| = 25.14° 1 回送信 speed=20 (~ 1.3s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE tol=3.0° [rpp.TOL_APPROACH_PLACE(stage7)] from = [ -25.48, +43.06, +8.52, -1.58, -66.53, -30.14] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 66.52° 1 回送信 speed=20 (~ 3.3s @ 20°/s 目安・到達待ち 最大 12.0s) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage8_place)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 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 = [ +40.69, +61.78, +1.14, +4.13, -70.22, -31.28] to = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] max |Δ| = 20.83° 1 回送信 speed=20 (~ 1.0s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME tol=2.5° [rpp.TOL_HOME(stage1_to_home / HOME 復帰)] from = [ +41.04, +42.36, +1.66, +2.54, -49.39, -31.90] to = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 49.39° 1 回送信 speed=20 (~ 2.5s @ 20°/s 目安・到達待ち 最大 9.4s) ============================================================================== [RTD ] 送信 = 8 回(STEP 1 + move 7 区間), 想定所要時間 ≈ 30.7s(最悪 73.0s) [RTD ] 内訳: 先頭 settle 3.0s + 移動 13.7s(max|Δ| 合計 274.4° @ 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_123559.json [RTD ] measured_at = 2026-11-09T12:36:01.355235 block = (+54.8, +47.3) mm box = (-220.3, +190.8) mm [RTD ] 再生直前: 上カメラでマット四隅とブロック画素を確認します [RTD ] 再生直前: block = (+55.2, +45.3) mm(measure の homography で換算) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_124917.jpg [RTD ] 何を拾ったかは確認画像で見てください: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_124917.jpg [RTD ] [WARN] 検出したブロックがアームの根元から 71.4mm しか離れていません(120.0mm 以内は不可)。教示で使う位置は 200mm 以上離れているので、赤いケーブル等の別のものを拾っている可能性が高いです: (+55.2, +45.3) mm(**止めません**・WARN のみ) [RTD ] ブロック位置の照合 OK(画素の差 4.1px <= 許容 10.3px = 5.0mm / mm 換算の差 1.98mm) [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_124920 [RTD ] 教えた記録のコピー: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_124920/teach/drag_v2_20261109_123000.json [RTD ] recorder に trial_start を送りました。1.0s 待ってから動き出します(mp4 writer が開くまで) [RTD ] 爪と肩の電流を 1 秒 10 回で記録します(爪を動かしている間は読みません)→ /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_124920/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.93° / 到達待ち 最大 8.0s [STEP 1] 3.0s 待ちます(settle) [RTD ] arrival OK (current → HOME, max|Δ|=1.93° <= 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.0s) [RTD ] 送信 OK(daemon 往復 1.048s) [RTD ] arrival OK (HOME → APPROACH_PICK, max|Δ|=1.23° <= 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.23° <= 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.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.031s) [RTD ] arrival OK (PICK → APPROACH_PICK (lift), max|Δ|=2.02° <= tol 3.0°) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_APPROACH_PLACE(stage7)] / 最大 12.0s) [RTD ] 送信 OK(daemon 往復 1.030s) [RTD ] arrival OK (APPROACH_PICK → APPROACH_PLACE, max|Δ|=2.64° <= 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.037s) [RTD ] arrival OK (APPROACH_PLACE → PLACE, max|Δ|=2.29° <= tol 3.0°) [STEP 9] GRIPPER OPEN → daemon_set_gripper(0, 50, wait=0) [RTD ] 静止確認 OK(step9_open: 連続 3 回・連続差 最大 0.08° <= 1.0°) [Pi] GRIPPER: OPEN result= None [RTD ] gripper open (1/1 回目) の daemon 往復 = 2.015s [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.041s) [RTD ] arrival OK (PLACE → APPROACH_PLACE (retreat), max|Δ|=2.72° <= tol 3.0°) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME (1 回送信 speed=20 → 到達待ち 許容 2.5°[TOL_HOME(stage1_to_home / HOME 復帰)] / 最大 9.4s) [RTD ] 送信 OK(daemon 往復 1.031s) [RTD ] arrival OK (APPROACH_PLACE → HOME, max|Δ|=2.46° <= tol 2.5°) [Pi] fresh_mode=0 [RTD ] daemon_set_fresh_mode(0) 完了 [RTD ] 実測角の読み取り: ok 54/54 回, 実効 1.56 Hz(目標 3.0 Hz 以上) [RTD ] [WARN] 実測角の読み取りが目標 3.0 Hz を下回りました(1.56 Hz)。学習データの state 密度が 19 本より薄くなります [RTD ] send_angles の daemon 往復 (7 回): 平均 1.035s / p50 1.031s / 最大 1.048s(timeout 6.0s) [RTD ] [WARN] 送信 1 回に 1.048s かかった回があります。daemon は送信後に角度を読み直すので、動き始めで読めないと伸びます(単発送信なので試行全体への影響は小さい) [RTD ] 区間の所要(送信→到達確認まで)(8 区間): 平均 2.19s / 最大 4.54s [RECORD] 電流の記録終了 69 行 (1.99 行/秒. 本体が眠っている間だけ読む. 爪の間 14.052 秒は読まない. 見込み超え 0 回. read_servo) → /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_124920/recording/currents.csv ============================================================================== [RTD ] 再生 完了 ============================================================================== [RTD ] つかめたか (y/n) > y [RTD ] 箱に入ったか (y/n) > y [RTD ] 試行 JSON: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_124920/run_0001_20261109_124920.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_20261109_124920 --dataset mecharm_redblock_box_teach_v1 (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % python3 pi05/camera_align.py --raw-dir /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes --episode 193825 [REF ] 基準画像: /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes/run_0001_20261019_193825/frames/000000.jpg [REF ] お手本 run_0001_20261019_193825 (つかんだ瞬間の j0 = -61.5°) [REF ] 重なった画像のブロックに実物のブロックを合わせると, お手本と同じ位置に置ける [ALIGN ] |dy| <= 20 なら OK. アームは HOME に置いた状態で合わせる. q または Esc で終了 (ファイルには何も書かない) [ALIGN ] dy= +3.2 dx= -3.5 response=0.859 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +1.8 dx= +6.2 response=0.927 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +0.7 dx= +3.6 response=0.946 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +2.2 dx= -3.6 response=0.895 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +3.8 dx= -3.9 response=0.888 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +5.0 dx= -3.4 response=0.894 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +3.9 dx= -3.2 response=0.885 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +1.7 dx= -2.0 response=0.930 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +0.7 dx= -4.4 response=0.929 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +1.7 dx= -7.4 response=0.892 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +0.4 dx= -3.8 response=0.892 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +2.7 dx= -4.2 response=0.898 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +3.9 dx= -3.5 response=0.877 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +2.2 dx= -2.3 response=0.912 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +0.2 dx= -0.1 response=0.912 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= -1.0 dx= -1.1 response=0.935 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [DONE ] 終了 (何も書いていません) (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % python3 dynamic_tracking_limits/drag_teaching/record_teach_demo.py run --teach drag_v2_20221013_232345.json --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_20221013_232345.json [RTD ] 取得しました → /var/folders/5w/2q2mc64n6yv63gfh31h34w6h0000gn/T/record_teach_demo__zfoteg1/drag_v2_20221013_232345.json [RTD ] 入力ファイル: drag_v2_20221013_232345.json [RTD ] 抽出ウェイポイント: APPROACH_PICK <- phase APPROACH_PICK argmax_idx=123 (start=123 end=197, gap=18.89°) angles = [ -59.94, +54.31, +22.67, +1.49, -78.04, -32.34] PICK <- gripper close mark idx=223(PICK phase 範囲内) angles = [ -62.05, +61.69, +13.71, +0.87, -59.15, -32.34] APPROACH_PLACE <- phase APPROACH_PLACE argmax_idx=304 (start=304 end=352, gap=18.81°) angles = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] PLACE <- gripper open mark idx=367(PLACE phase 範囲内) angles = [ +43.85, +62.22, -4.83, +7.82, -63.01, -36.12] [RTD ] JOINT_LIMITS 一括検証 OK(全 endpoint + HOME) [RTD ] 姿勢検査 OK(全 165 姿勢が 有限値 + JOINT_LIMITS + J4_SAFE [-90.0, +60.0] 内) [RTD ] j4 の余裕は最小 11.96°(しきい値 3.0° 以上) [RTD ] 現在姿勢を daemon から取得します [RTD ] 現在姿勢 = [ -0.43, +1.49, +1.84, +0.08, -0.26, -30.23] ============================================================================== [RTD ] 実行プラン(daemon 経由・区間ごとに 1 回送信 → 到達待ち) ============================================================================== [STEP 1] MOVE → HOME (single send + settle) speed=20 current = [ -0.43, +1.49, +1.84, +0.08, -0.26, -30.23] to HOME = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 1.84° (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 = [ -59.94, +54.31, +22.67, +1.49, -78.04, -32.34] max |Δ| = 78.04° 1 回送信 speed=20 (~ 3.9s @ 20°/s 目安・到達待ち 最大 13.7s) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage4_pick)] from = [ -59.94, +54.31, +22.67, +1.49, -78.04, -32.34] to = [ -62.05, +61.69, +13.71, +0.87, -59.15, -32.34] max |Δ| = 18.89° 1 回送信 speed=20 (~ 0.9s @ 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 = [ -62.05, +61.69, +13.71, +0.87, -59.15, -32.34] to = [ -59.94, +54.31, +22.67, +1.49, -78.04, -32.34] max |Δ| = 18.89° 1 回送信 speed=20 (~ 0.9s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE tol=3.0° [rpp.TOL_APPROACH_PLACE(stage7)] from = [ -59.94, +54.31, +22.67, +1.49, -78.04, -32.34] to = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] max |Δ| = 102.91° 1 回送信 speed=20 (~ 5.1s @ 20°/s 目安・到達待ち 最大 17.4s) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage8_place)] from = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] to = [ +43.85, +62.22, -4.83, +7.82, -63.01, -36.12] max |Δ| = 18.81° 1 回送信 speed=20 (~ 0.9s @ 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.85, +62.22, -4.83, +7.82, -63.01, -36.12] to = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] max |Δ| = 18.81° 1 回送信 speed=20 (~ 0.9s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME tol=2.5° [rpp.TOL_HOME(stage1_to_home / HOME 復帰)] from = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] to = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 54.58° 1 回送信 speed=20 (~ 2.7s @ 20°/s 目安・到達待ち 最大 10.2s) ============================================================================== [RTD ] 送信 = 8 回(STEP 1 + move 7 区間), 想定所要時間 ≈ 32.5s(最悪 73.0s) [RTD ] 内訳: 先頭 settle 3.0s + 移動 15.5s(max|Δ| 合計 310.9° @ 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_123559.json [RTD ] measured_at = 2026-11-09T12:36:01.355235 block = (+54.8, +47.3) mm box = (-220.3, +190.8) mm [RTD ] 再生直前: 上カメラでマット四隅とブロック画素を確認します [RTD ] [WARN] 再生直前: 四隅が最大 16.5px ずれています(1 回目 / 上限 15.0px)。測り直します [RTD ] [WARN] 再生直前: 四隅が最大 16.5px ずれています(2 回目 / 上限 15.0px)。測り直します [RTD ] [WARN] 再生直前: 四隅が最大 16.5px ずれています(3 回目 / 上限 15.0px)。やり直しの上限に達しました [RTD ] 再生直前: block = (+237.4, +106.4) mm(measure の homography で換算) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_125202.jpg [RTD ] 弾いた理由と各回の記録を残しました: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_125202_rejected.json [RTD ] [WARN] マット四隅が measure 時から最大 16.5px ずれています(上限 15.0px・最大 3 回やり直しても収まらず)。カメラが動いた可能性があるので止めます。measure を取り直してください(各隅のずれ: 4.0, 10.0, 14.8, 16.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_20261109_125209 [RTD ] 教えた記録のコピー: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_125209/teach/drag_v2_20221013_232345.json [RTD ] recorder に trial_start を送りました。1.0s 待ってから動き出します(mp4 writer が開くまで) [RTD ] 爪と肩の電流を 1 秒 10 回で記録します(爪を動かしている間は読みません)→ /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_125209/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.84° / 到達待ち 最大 8.0s [STEP 1] 3.0s 待ちます(settle) [RTD ] arrival OK (current → HOME, max|Δ|=1.84° <= 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.014s [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 系)] / 最大 13.7s) [RTD ] 送信 OK(daemon 往復 1.029s) [RTD ] arrival OK (HOME → APPROACH_PICK, max|Δ|=1.14° <= 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|Δ|=2.90° <= tol 3.0°) [STEP 5] GRIPPER CLOSE → daemon_set_gripper_value(20, 50) [RTD ] 静止確認 OK(step5_close: 連続 3 回・連続差 最大 0.44° <= 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.028s) [RTD ] [WARN] arrival timeout (PICK → APPROACH_PICK (lift), max|Δ|=10.72° > tol 3.0°, 8.0s) [RTD ] [WARN] 到達確認タイムアウト(max|Δ|=10.72° > tol 3.0°)ですが pre→last max|Δ| 8.97° >= 1.0°(動いているので再送しない)。**止めずに次の区間へ進みます** [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_APPROACH_PLACE(stage7)] / 最大 17.4s) [RTD ] 送信 OK(daemon 往復 1.039s) [RTD ] [WARN] arrival timeout (APPROACH_PICK → APPROACH_PLACE, max|Δ|=7.39° > tol 3.0°, 17.5s) [RTD ] [WARN] 到達確認タイムアウト(max|Δ|=7.39° > tol 3.0°)ですが pre→last max|Δ| 103.35° >= 1.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.034s) [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.016s [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.028s) [RTD ] arrival OK (PLACE → APPROACH_PLACE (retreat), max|Δ|=2.11° <= tol 3.0°) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME (1 回送信 speed=20 → 到達待ち 許容 2.5°[TOL_HOME(stage1_to_home / HOME 復帰)] / 最大 10.2s) [RTD ] 送信 OK(daemon 往復 1.034s) [RTD ] arrival OK (APPROACH_PLACE → HOME, max|Δ|=2.46° <= tol 2.5°) [Pi] fresh_mode=0 [RTD ] daemon_set_fresh_mode(0) 完了 [RTD ] 実測角の読み取り: ok 150/150 回, 実効 2.27 Hz(目標 3.0 Hz 以上) [RTD ] [WARN] 実測角の読み取りが目標 3.0 Hz を下回りました(2.27 Hz)。学習データの state 密度が 19 本より薄くなります [RTD ] send_angles の daemon 往復 (7 回): 平均 1.032s / p50 1.030s / 最大 1.039s(timeout 6.0s) [RTD ] [WARN] 送信 1 回に 1.039s かかった回があります。daemon は送信後に角度を読み直すので、動き始めで読めないと伸びます(単発送信なので試行全体への影響は小さい) [RTD ] 区間の所要(送信→到達確認まで)(8 区間): 平均 6.14s / 最大 18.83s [RECORD] 電流の記録終了 265 行 (4.0 行/秒. 本体が眠っている間だけ読む. 爪の間 14.065 秒は読まない. 見込み超え 0 回. read_servo) → /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_125209/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_125209/run_0001_20261109_125209.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_125209 --dataset mecharm_redblock_box_teach_v1 (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % python3 pi05/camera_align.py --raw-dir /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes --episode 193825 [REF ] 基準画像: /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes/run_0001_20261019_193825/frames/000000.jpg [REF ] お手本 run_0001_20261019_193825 (つかんだ瞬間の j0 = -61.5°) [REF ] 重なった画像のブロックに実物のブロックを合わせると, お手本と同じ位置に置ける [ALIGN ] |dy| <= 20 なら OK. アームは HOME に置いた状態で合わせる. q または Esc で終了 (ファイルには何も書かない) [ALIGN ] dy= -1.2 dx= -1.6 response=0.836 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [DONE ] 終了 (何も書いていません) (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % scp -i ~/.ssh/id_rsa_pi /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/drag_v2_20261109_130000.json ubuntu@192.168.2.1:r2r2r-scripts/dynamic_tracking_limits/drag_teaching/ python3 dynamic_tracking_limits/drag_teaching/record_teach_demo.py run --teach drag_v2_20261109_130000.json drag_v2_20261109_130000.json 100% 38KB 2.2MB/s 00:00 [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 ] モード: ドライラン(アームに何も送りません) [RTD ] Pi から教えた記録を取得します: ubuntu@192.168.2.1:r2r2r-scripts/dynamic_tracking_limits/drag_teaching/drag_v2_20261109_130000.json [RTD ] 取得しました → /var/folders/5w/2q2mc64n6yv63gfh31h34w6h0000gn/T/record_teach_demo_jlsxds3m/drag_v2_20261109_130000.json [RTD ] 入力ファイル: drag_v2_20261109_130000.json [RTD ] 抽出ウェイポイント: APPROACH_PICK <- phase APPROACH_PICK argmax_idx=123 (start=123 end=197, gap=20.00°) angles = [ -62.05, +41.69, +13.71, +0.87, -59.15, -32.34] PICK <- gripper close mark idx=223(PICK phase 範囲内) angles = [ -62.05, +61.69, +13.71, +0.87, -59.15, -32.34] APPROACH_PLACE <- phase APPROACH_PLACE argmax_idx=304 (start=304 end=352, gap=18.81°) angles = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] PLACE <- gripper open mark idx=367(PLACE phase 範囲内) angles = [ +43.85, +62.22, -4.83, +7.82, -63.01, -36.12] [RTD ] JOINT_LIMITS 一括検証 OK(全 endpoint + HOME) [RTD ] 姿勢検査 OK(全 158 姿勢が 有限値 + JOINT_LIMITS + J4_SAFE [-90.0, +60.0] 内) [RTD ] j4 の余裕は最小 26.99°(しきい値 3.0° 以上) ============================================================================== [RTD ] 実行プラン(daemon 経由・区間ごとに 1 回送信 → 到達待ち) ============================================================================== [STEP 1] MOVE → HOME (single send + settle) speed=20 current = 未取得(ドライラン・daemon に接続していない) to HOME = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] [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 = [ -62.05, +41.69, +13.71, +0.87, -59.15, -32.34] max |Δ| = 62.05° 1 回送信 speed=20 (~ 3.1s @ 20°/s 目安・到達待ち 最大 11.3s) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage4_pick)] from = [ -62.05, +41.69, +13.71, +0.87, -59.15, -32.34] to = [ -62.05, +61.69, +13.71, +0.87, -59.15, -32.34] max |Δ| = 20.00° 1 回送信 speed=20 (~ 1.0s @ 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 = [ -62.05, +61.69, +13.71, +0.87, -59.15, -32.34] to = [ -62.05, +41.69, +13.71, +0.87, -59.15, -32.34] max |Δ| = 20.00° 1 回送信 speed=20 (~ 1.0s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE tol=3.0° [rpp.TOL_APPROACH_PLACE(stage7)] from = [ -62.05, +41.69, +13.71, +0.87, -59.15, -32.34] to = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] max |Δ| = 105.02° 1 回送信 speed=20 (~ 5.3s @ 20°/s 目安・到達待ち 最大 17.8s) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage8_place)] from = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] to = [ +43.85, +62.22, -4.83, +7.82, -63.01, -36.12] max |Δ| = 18.81° 1 回送信 speed=20 (~ 0.9s @ 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.85, +62.22, -4.83, +7.82, -63.01, -36.12] to = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] max |Δ| = 18.81° 1 回送信 speed=20 (~ 0.9s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME tol=2.5° [rpp.TOL_HOME(stage1_to_home / HOME 復帰)] from = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] to = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 54.58° 1 回送信 speed=20 (~ 2.7s @ 20°/s 目安・到達待ち 最大 10.2s) ============================================================================== [RTD ] 送信 = 8 回(STEP 1 + move 7 区間), 想定所要時間 ≈ 32.0s(最悪 73.0s) [RTD ] 内訳: 先頭 settle 3.0s + 移動 15.0s(max|Δ| 合計 299.3° @ 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_123559.json [RTD ] measured_at = 2026-11-09T12:36:01.355235 block = (+54.8, +47.3) mm box = (-220.3, +190.8) mm [RTD ] 再生直前: 上カメラでマット四隅とブロック画素を確認します [RTD ] [WARN] 再生直前: 四隅が最大 16.5px ずれています(1 回目 / 上限 15.0px)。測り直します [RTD ] [WARN] 再生直前: 四隅が最大 16.7px ずれています(2 回目 / 上限 15.0px)。測り直します [RTD ] [WARN] 再生直前: 四隅が最大 16.6px ずれています(3 回目 / 上限 15.0px)。やり直しの上限に達しました [RTD ] 再生直前: block = (+235.6, +100.7) mm(measure の homography で換算) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_125530.jpg [RTD ] 弾いた理由と各回の記録を残しました: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_125530_rejected.json [RTD ] [WARN] マット四隅が measure 時から最大 16.6px ずれています(上限 15.0px・最大 3 回やり直しても収まらず)。カメラが動いた可能性があるので止めます。measure を取り直してください(各隅のずれ: 4.0, 10.0, 16.6, 16.5)(**止めません**・WARN のみ) [RTD ] ドライランなので、ここで終了します(アームには何も送っていません) [RTD ] Pi 版と比べる点: 抽出ウェイポイント 4 姿勢と各区間の max|Δ| は同じ。送り方は単発(Pi 版は 0.1s 補間ストリーミング)なので n_steps / ticks は比較対象外。送信 8 回 / 想定所要 ≈ 32.0s (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % python3 dynamic_tracking_limits/drag_teaching/record_teach_demo.py run --teach drag_v2_20221013_232345.json --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_20221013_232345.json [RTD ] 取得しました → /var/folders/5w/2q2mc64n6yv63gfh31h34w6h0000gn/T/record_teach_demo_solcgfb7/drag_v2_20221013_232345.json [RTD ] 入力ファイル: drag_v2_20221013_232345.json [RTD ] 抽出ウェイポイント: APPROACH_PICK <- phase APPROACH_PICK argmax_idx=123 (start=123 end=197, gap=18.89°) angles = [ -59.94, +54.31, +22.67, +1.49, -78.04, -32.34] PICK <- gripper close mark idx=223(PICK phase 範囲内) angles = [ -62.05, +61.69, +13.71, +0.87, -59.15, -32.34] APPROACH_PLACE <- phase APPROACH_PLACE argmax_idx=304 (start=304 end=352, gap=18.81°) angles = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] PLACE <- gripper open mark idx=367(PLACE phase 範囲内) angles = [ +43.85, +62.22, -4.83, +7.82, -63.01, -36.12] [RTD ] JOINT_LIMITS 一括検証 OK(全 endpoint + HOME) [RTD ] 姿勢検査 OK(全 165 姿勢が 有限値 + JOINT_LIMITS + J4_SAFE [-90.0, +60.0] 内) [RTD ] j4 の余裕は最小 11.96°(しきい値 3.0° 以上) [RTD ] 現在姿勢を daemon から取得します [RTD ] 現在姿勢 = [ -0.43, +1.49, +2.46, +0.26, -0.26, -30.23] ============================================================================== [RTD ] 実行プラン(daemon 経由・区間ごとに 1 回送信 → 到達待ち) ============================================================================== [STEP 1] MOVE → HOME (single send + settle) speed=20 current = [ -0.43, +1.49, +2.46, +0.26, -0.26, -30.23] to HOME = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 2.46° (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 = [ -59.94, +54.31, +22.67, +1.49, -78.04, -32.34] max |Δ| = 78.04° 1 回送信 speed=20 (~ 3.9s @ 20°/s 目安・到達待ち 最大 13.7s) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage4_pick)] from = [ -59.94, +54.31, +22.67, +1.49, -78.04, -32.34] to = [ -62.05, +61.69, +13.71, +0.87, -59.15, -32.34] max |Δ| = 18.89° 1 回送信 speed=20 (~ 0.9s @ 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 = [ -62.05, +61.69, +13.71, +0.87, -59.15, -32.34] to = [ -59.94, +54.31, +22.67, +1.49, -78.04, -32.34] max |Δ| = 18.89° 1 回送信 speed=20 (~ 0.9s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE tol=3.0° [rpp.TOL_APPROACH_PLACE(stage7)] from = [ -59.94, +54.31, +22.67, +1.49, -78.04, -32.34] to = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] max |Δ| = 102.91° 1 回送信 speed=20 (~ 5.1s @ 20°/s 目安・到達待ち 最大 17.4s) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage8_place)] from = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] to = [ +43.85, +62.22, -4.83, +7.82, -63.01, -36.12] max |Δ| = 18.81° 1 回送信 speed=20 (~ 0.9s @ 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.85, +62.22, -4.83, +7.82, -63.01, -36.12] to = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] max |Δ| = 18.81° 1 回送信 speed=20 (~ 0.9s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME tol=2.5° [rpp.TOL_HOME(stage1_to_home / HOME 復帰)] from = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] to = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 54.58° 1 回送信 speed=20 (~ 2.7s @ 20°/s 目安・到達待ち 最大 10.2s) ============================================================================== [RTD ] 送信 = 8 回(STEP 1 + move 7 区間), 想定所要時間 ≈ 32.5s(最悪 73.0s) [RTD ] 内訳: 先頭 settle 3.0s + 移動 15.5s(max|Δ| 合計 310.9° @ 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_123559.json [RTD ] measured_at = 2026-11-09T12:36:01.355235 block = (+54.8, +47.3) mm box = (-220.3, +190.8) mm [RTD ] 再生直前: 上カメラでマット四隅とブロック画素を確認します [RTD ] [WARN] 再生直前: 四隅が最大 16.5px ずれています(1 回目 / 上限 15.0px)。測り直します [RTD ] [WARN] 再生直前: 四隅が最大 16.5px ずれています(2 回目 / 上限 15.0px)。測り直します [RTD ] [WARN] 再生直前: 四隅が最大 16.5px ずれています(3 回目 / 上限 15.0px)。やり直しの上限に達しました [RTD ] 再生直前: block = (+235.6, +100.7) mm(measure の homography で換算) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_125558.jpg [RTD ] 弾いた理由と各回の記録を残しました: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_125558_rejected.json [RTD ] [WARN] マット四隅が measure 時から最大 16.5px ずれています(上限 15.0px・最大 3 回やり直しても収まらず)。カメラが動いた可能性があるので止めます。measure を取り直してください(各隅のずれ: 4.0, 10.0, 15.7, 16.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_20261109_125607 [RTD ] 教えた記録のコピー: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_125607/teach/drag_v2_20221013_232345.json [RTD ] recorder に trial_start を送りました。1.0s 待ってから動き出します(mp4 writer が開くまで) [RTD ] 爪と肩の電流を 1 秒 10 回で記録します(爪を動かしている間は読みません)→ /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_125607/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|Δ| = 2.46° / 到達待ち 最大 8.0s [STEP 1] 3.0s 待ちます(settle) [RTD ] arrival OK (current → HOME, max|Δ|=2.46° <= 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.014s [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 系)] / 最大 13.7s) [RTD ] 送信 OK(daemon 往復 1.032s) [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.054s) [RTD ] arrival OK (APPROACH_PICK → PICK, max|Δ|=2.98° <= tol 3.0°) [STEP 5] GRIPPER CLOSE → daemon_set_gripper_value(20, 50) [RTD ] 静止確認 OK(step5_close: 連続 3 回・連続差 最大 0.08° <= 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.031s) [RTD ] arrival OK (PICK → APPROACH_PICK (lift), max|Δ|=2.37° <= tol 3.0°) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_APPROACH_PLACE(stage7)] / 最大 17.4s) [RTD ] 送信 OK(daemon 往復 1.029s) [RTD ] [WARN] arrival timeout (APPROACH_PICK → APPROACH_PLACE, max|Δ|=35.51° > tol 3.0°, 17.5s) [RTD ] [WARN] 到達確認タイムアウト(max|Δ|=35.51° > tol 3.0°)ですが pre→last max|Δ| 103.53° >= 1.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.029s) [RTD ] arrival OK (APPROACH_PLACE → PLACE, max|Δ|=2.19° <= tol 3.0°) [STEP 9] GRIPPER OPEN → daemon_set_gripper(0, 50, wait=0) [RTD ] 静止確認 OK(step9_open: 連続 3 回・連続差 最大 0.17° <= 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.031s) [RTD ] arrival OK (PLACE → APPROACH_PLACE (retreat), max|Δ|=2.19° <= tol 3.0°) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME (1 回送信 speed=20 → 到達待ち 許容 2.5°[TOL_HOME(stage1_to_home / HOME 復帰)] / 最大 10.2s) [RTD ] 送信 OK(daemon 往復 1.030s) [RTD ] arrival OK (APPROACH_PLACE → HOME, max|Δ|=2.10° <= tol 2.5°) [Pi] fresh_mode=0 [RTD ] daemon_set_fresh_mode(0) 完了 [RTD ] 実測角の読み取り: ok 139/139 回, 実効 2.21 Hz(目標 3.0 Hz 以上) [RTD ] [WARN] 実測角の読み取りが目標 3.0 Hz を下回りました(2.21 Hz)。学習データの state 密度が 19 本より薄くなります [RTD ] send_angles の daemon 往復 (7 回): 平均 1.034s / p50 1.031s / 最大 1.054s(timeout 6.0s) [RTD ] [WARN] 送信 1 回に 1.054s かかった回があります。daemon は送信後に角度を読み直すので、動き始めで読めないと伸びます(単発送信なので試行全体への影響は小さい) [RTD ] 区間の所要(送信→到達確認まで)(8 区間): 平均 5.72s / 最大 18.86s [RECORD] 電流の記録終了 239 行 (3.8 行/秒. 本体が眠っている間だけ読む. 爪の間 14.057 秒は読まない. 見込み超え 2 回. read_servo) → /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_125607/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_125607/run_0001_20261109_125607.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_125607 --dataset mecharm_redblock_box_teach_v1 (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % python3 pi05/camera_align.py --raw-dir /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes --episode 193825 [REF ] 基準画像: /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes/run_0001_20261019_193825/frames/000000.jpg [REF ] お手本 run_0001_20261019_193825 (つかんだ瞬間の j0 = -61.5°) [REF ] 重なった画像のブロックに実物のブロックを合わせると, お手本と同じ位置に置ける [ALIGN ] |dy| <= 20 なら OK. アームは HOME に置いた状態で合わせる. q または Esc で終了 (ファイルには何も書かない) [ALIGN ] dy= -1.2 dx= -1.7 response=0.432 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [DONE ] 終了 (何も書いていません) (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % python3 dynamic_tracking_limits/drag_teaching/record_teach_demo.py run --teach drag_v2_20261109_130000.json --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_130000.json [RTD ] 取得しました → /var/folders/5w/2q2mc64n6yv63gfh31h34w6h0000gn/T/record_teach_demo_0c3b7wly/drag_v2_20261109_130000.json [RTD ] 入力ファイル: drag_v2_20261109_130000.json [RTD ] 抽出ウェイポイント: APPROACH_PICK <- phase APPROACH_PICK argmax_idx=123 (start=123 end=197, gap=20.00°) angles = [ -62.05, +41.69, +13.71, +0.87, -59.15, -32.34] PICK <- gripper close mark idx=223(PICK phase 範囲内) angles = [ -62.05, +61.69, +13.71, +0.87, -59.15, -32.34] APPROACH_PLACE <- phase APPROACH_PLACE argmax_idx=304 (start=304 end=352, gap=18.81°) angles = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] PLACE <- gripper open mark idx=367(PLACE phase 範囲内) angles = [ +43.85, +62.22, -4.83, +7.82, -63.01, -36.12] [RTD ] JOINT_LIMITS 一括検証 OK(全 endpoint + HOME) [RTD ] 姿勢検査 OK(全 158 姿勢が 有限値 + JOINT_LIMITS + J4_SAFE [-90.0, +60.0] 内) [RTD ] j4 の余裕は最小 26.99°(しきい値 3.0° 以上) [RTD ] 現在姿勢を daemon から取得します [RTD ] 現在姿勢 = [ -0.43, +1.49, +2.10, -0.26, -0.26, -29.70] ============================================================================== [RTD ] 実行プラン(daemon 経由・区間ごとに 1 回送信 → 到達待ち) ============================================================================== [STEP 1] MOVE → HOME (single send + settle) speed=20 current = [ -0.43, +1.49, +2.10, -0.26, -0.26, -29.70] to HOME = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 2.10° (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 = [ -62.05, +41.69, +13.71, +0.87, -59.15, -32.34] max |Δ| = 62.05° 1 回送信 speed=20 (~ 3.1s @ 20°/s 目安・到達待ち 最大 11.3s) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage4_pick)] from = [ -62.05, +41.69, +13.71, +0.87, -59.15, -32.34] to = [ -62.05, +61.69, +13.71, +0.87, -59.15, -32.34] max |Δ| = 20.00° 1 回送信 speed=20 (~ 1.0s @ 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 = [ -62.05, +61.69, +13.71, +0.87, -59.15, -32.34] to = [ -62.05, +41.69, +13.71, +0.87, -59.15, -32.34] max |Δ| = 20.00° 1 回送信 speed=20 (~ 1.0s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE tol=3.0° [rpp.TOL_APPROACH_PLACE(stage7)] from = [ -62.05, +41.69, +13.71, +0.87, -59.15, -32.34] to = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] max |Δ| = 105.02° 1 回送信 speed=20 (~ 5.3s @ 20°/s 目安・到達待ち 最大 17.8s) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage8_place)] from = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] to = [ +43.85, +62.22, -4.83, +7.82, -63.01, -36.12] max |Δ| = 18.81° 1 回送信 speed=20 (~ 0.9s @ 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.85, +62.22, -4.83, +7.82, -63.01, -36.12] to = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] max |Δ| = 18.81° 1 回送信 speed=20 (~ 0.9s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME tol=2.5° [rpp.TOL_HOME(stage1_to_home / HOME 復帰)] from = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] to = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 54.58° 1 回送信 speed=20 (~ 2.7s @ 20°/s 目安・到達待ち 最大 10.2s) ============================================================================== [RTD ] 送信 = 8 回(STEP 1 + move 7 区間), 想定所要時間 ≈ 32.0s(最悪 73.0s) [RTD ] 内訳: 先頭 settle 3.0s + 移動 15.0s(max|Δ| 合計 299.3° @ 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_123559.json [RTD ] measured_at = 2026-11-09T12:36:01.355235 block = (+54.8, +47.3) mm box = (-220.3, +190.8) mm [RTD ] 再生直前: 上カメラでマット四隅とブロック画素を確認します [RTD ] [WARN] 再生直前: 四隅が最大 16.8px ずれています(1 回目 / 上限 15.0px)。測り直します [RTD ] [WARN] 再生直前: 四隅が最大 16.5px ずれています(2 回目 / 上限 15.0px)。測り直します [RTD ] [WARN] 再生直前: 四隅が最大 16.5px ずれています(3 回目 / 上限 15.0px)。やり直しの上限に達しました [RTD ] 再生直前: block = (+234.3, +104.0) mm(measure の homography で換算) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_125818.jpg [RTD ] 弾いた理由と各回の記録を残しました: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_125818_rejected.json [RTD ] [WARN] マット四隅が measure 時から最大 16.5px ずれています(上限 15.0px・最大 3 回やり直しても収まらず)。カメラが動いた可能性があるので止めます。measure を取り直してください(各隅のずれ: 4.0, 10.0, 15.9, 16.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_20261109_125825 [RTD ] 教えた記録のコピー: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_125825/teach/drag_v2_20261109_130000.json [RTD ] recorder に trial_start を送りました。1.0s 待ってから動き出します(mp4 writer が開くまで) [RTD ] 爪と肩の電流を 1 秒 10 回で記録します(爪を動かしている間は読みません)→ /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_125825/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|Δ| = 2.10° / 到達待ち 最大 8.0s [STEP 1] 3.0s 待ちます(settle) [RTD ] arrival OK (current → HOME, max|Δ|=2.10° <= 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 系)] / 最大 11.3s) [RTD ] 送信 OK(daemon 往復 1.031s) [RTD ] arrival OK (HOME → APPROACH_PICK, max|Δ|=1.94° <= 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.98° <= 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.031s) [RTD ] [WARN] arrival timeout (PICK → APPROACH_PICK (lift), max|Δ|=23.30° > tol 3.0°, 8.0s) [RTD ] [WARN] 到達確認タイムアウト(max|Δ|=23.30° > tol 3.0°)ですが pre→last max|Δ| 26.28° >= 1.0°(動いているので再送しない)。**止めずに次の区間へ進みます** [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_APPROACH_PLACE(stage7)] / 最大 17.8s) [RTD ] 送信 OK(daemon 往復 1.038s) [RTD ] [WARN] arrival timeout (APPROACH_PICK → APPROACH_PLACE, max|Δ|=39.20° > tol 3.0°, 17.7s) [RTD ] [WARN] 到達確認タイムアウト(max|Δ|=39.20° > tol 3.0°)ですが pre→last max|Δ| 104.58° >= 1.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|Δ|=2.81° <= tol 3.0°) [STEP 9] GRIPPER OPEN → daemon_set_gripper(0, 50, wait=0) [RTD ] 静止確認 OK(step9_open: 連続 3 回・連続差 最大 0.26° <= 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.040s) [RTD ] arrival OK (PLACE → APPROACH_PLACE (retreat), max|Δ|=2.19° <= tol 3.0°) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME (1 回送信 speed=20 → 到達待ち 許容 2.5°[TOL_HOME(stage1_to_home / HOME 復帰)] / 最大 10.2s) [RTD ] 送信 OK(daemon 往復 1.030s) [RTD ] arrival OK (APPROACH_PLACE → HOME, max|Δ|=2.19° <= tol 2.5°) [Pi] fresh_mode=0 [RTD ] daemon_set_fresh_mode(0) 完了 [RTD ] 実測角の読み取り: ok 152/152 回, 実効 2.27 Hz(目標 3.0 Hz 以上) [RTD ] [WARN] 実測角の読み取りが目標 3.0 Hz を下回りました(2.27 Hz)。学習データの state 密度が 19 本より薄くなります [RTD ] send_angles の daemon 往復 (7 回): 平均 1.033s / p50 1.031s / 最大 1.040s(timeout 6.0s) [RTD ] [WARN] 送信 1 回に 1.040s かかった回があります。daemon は送信後に角度を読み直すので、動き始めで読めないと伸びます(単発送信なので試行全体への影響は小さい) [RTD ] 区間の所要(送信→到達確認まで)(8 区間): 平均 6.23s / 最大 18.83s [RECORD] 電流の記録終了 269 行 (4.01 行/秒. 本体が眠っている間だけ読む. 爪の間 14.056 秒は読まない. 見込み超え 0 回. read_servo) → /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_125825/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_125825/run_0001_20261109_125825.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_125825 --dataset mecharm_redblock_box_teach_v1 (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % python3 pi05/camera_align.py --raw-dir /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes --episode 193825 [REF ] 基準画像: /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2/raw_episodes/run_0001_20261019_193825/frames/000000.jpg [REF ] お手本 run_0001_20261019_193825 (つかんだ瞬間の j0 = -61.5°) [REF ] 重なった画像のブロックに実物のブロックを合わせると, お手本と同じ位置に置ける [ALIGN ] |dy| <= 20 なら OK. アームは HOME に置いた状態で合わせる. q または Esc で終了 (ファイルには何も書かない) [ALIGN ] dy= -1.0 dx= -1.7 response=0.883 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [DONE ] 終了 (何も書いていません) (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % python3 tools/gamepad_teleop.py --execute /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/pkgdata.py:25: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81. from pkg_resources import resource_stream, resource_exists objc[17606]: Class SDLApplication is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106cf12c8) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10fa60890). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[17606]: Class SDLAppDelegate is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106cf1318) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10fa608e0). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[17606]: Class SDLTranslatorResponder is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106cf1390) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10fa60958). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[17606]: Class SDLMessageBoxPresenter is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106cf13b8) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10fa60980). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[17606]: Class SDL_cocoametalview is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106cf1408) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10fa609d0). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[17606]: Class SDLOpenGLContext is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106cf1458) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10fa60a20). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[17606]: Class SDL_ShapeData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106cf14d0) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10fa60a98). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[17606]: Class SDL_CocoaClosure is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106cf1520) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10fa60ae8). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[17606]: Class SDL_VideoData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106cf1570) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10fa60b38). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[17606]: Class SDL_WindowData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106cf15c0) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10fa60b88). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[17606]: Class SDLWindow is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106cf15e8) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10fa60bb0). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[17606]: Class Cocoa_WindowListener is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106cf1610) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10fa60bd8). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[17606]: Class SDLView is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106cf1688) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10fa60c50). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[17606]: Class METAL_RenderData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106cf1700) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10fa60cc8). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[17606]: Class METAL_TextureData is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106cf1750) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10fa60d18). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[17606]: Class SDL_RumbleMotor is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106cf1778) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10fa60d40). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. objc[17606]: Class SDL_RumbleContext is implemented in both /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/pygame/.dylibs/libSDL2-2.0.0.dylib (0x106cf17c8) and /opt/homebrew/Caskroom/miniforge/base/lib/python3.12/site-packages/cv2/.dylibs/libSDL2-2.0.0.dylib (0x10fa60d90). This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed. [記録] /Volumes/KIOXIA/r2r2r-data/runs/experiments/gamepad_teleop/teleop_20261109_130126 [実機] daemon に送ります。起動したときの姿勢: -0.43 +1.58 +2.19 -0.26 -0.26 -30.23 コントローラーを待っています(つないでいなければ、今つないでください) [接続] PS4 Controller GUID=03008fe54c050000cc09000000016800 軸=6 ボタン=16 [長押し] j0 を -0.43° → -54.22° まで(目標を 5 回送信。止めます) [送信] j0 -1.0° → -54.87 +1.58 +2.19 -0.26 -0.26 -30.23 届いた(ずれ 1.75°) 届いた角度 -54.40 +1.58 +2.02 -0.17 +1.49 -30.23 [送信] j0 -2.0° → -56.87 +1.58 +2.19 -0.26 -0.26 -30.23 届いた(ずれ 1.75°) 届いた角度 -56.77 +1.58 +2.02 -0.17 +1.49 -30.23 [送信] j0 -2.0° → -58.87 +1.58 +2.19 -0.26 -0.26 -30.23 届いた(ずれ 1.75°) 届いた角度 -58.97 +1.58 +2.02 -0.17 +1.49 -30.32 [送信] j0 -2.0° → -60.87 +1.58 +2.19 -0.26 -0.26 -30.23 届いた(ずれ 1.66°) 届いた角度 -61.08 +1.58 +2.02 -0.17 +1.40 -30.32 [関節] 上下で動かす関節を j2 にしました [関節] 上下で動かす関節を j3 にしました [関節] 上下で動かす関節を j4 にしました [長押し] j4 を +0.52° → -28.30° まで(目標を 3 回送信。止めます) [関節] 上下で動かす関節を j5 にしました [関節] 上下で動かす関節を j1 にしました [長押し] j1 を +2.63° → +2.10° まで(目標を 1 回送信。止めます) [WARN] daemon_get_angles failed: daemon error: get_angles returned empty/invalid after 12 retries [WARN] daemon_get_angles failed: daemon error: get_angles returned empty/invalid after 12 retries [WARN] daemon_get_angles failed: daemon error: get_angles returned empty/invalid after 12 retries [WARN] daemon_get_angles failed: daemon error: get_angles returned empty/invalid after 12 retries [送信] j1 +1.0° → -60.87 +21.21 +2.19 -0.26 -38.58 -30.23 手前で止まった(次の押しは この目標の先から)(ずれ 1.2°) 届いた角度 -61.08 +22.41 +1.84 -0.08 -37.79 -30.32 [送信] j1 +2.0° → -60.87 +23.21 +2.19 -0.26 -38.58 -30.23 手前で止まった(次の押しは この目標の先から)(ずれ 1.22°) 届いた角度 -61.17 +24.43 +1.75 +0.00 -37.96 -30.32 [長押し] j1 を +24.43° → +35.15° まで(目標を 2 回送信。止めます) [関節] 上下で動かす関節を j2 にしました [長押し] j2 を +2.63° → +2.63° まで(目標を 1 回送信。止めます) [長押し] j2 を +3.42° → +3.42° まで(目標を 1 回送信。止めます) [送信] j0 +1.0° → -59.87 +40.69 +18.89 -0.26 -38.58 -30.23 届いた(ずれ 0.96°) 届いた角度 -60.20 +41.30 +18.89 +0.70 -38.23 -29.61 [送信] j0 +1.0° → -58.87 +40.69 +18.89 -0.26 -38.58 -30.23 届いた(ずれ 0.78°) 届いた角度 -58.53 +41.30 +18.89 +0.52 -38.32 -29.61 [関節] 上下で動かす関節を j3 にしました [関節] 上下で動かす関節を j4 にしました [送信] j4 -1.0° → -58.87 +40.69 +18.89 -0.26 -39.58 -30.23 届いた(ずれ 0.61°) 届いた角度 -58.88 +41.30 +18.89 +0.17 -39.63 -30.05 [送信] j4 -1.0° → -58.87 +40.69 +18.89 -0.26 -40.58 -30.23 届いた(ずれ 0.61°) 届いた角度 -58.88 +41.30 +18.89 +0.17 -40.69 -30.05 [長押し] j4 を -41.83° → -41.83° まで(目標を 1 回送信。止めます) [長押し] j4 を -45.61° → -48.42° まで(目標を 1 回送信。止めます) [関節] 上下で動かす関節を j5 にしました [関節] 上下で動かす関節を j1 にしました [関節] 上下で動かす関節を j2 にしました [関節] 上下で動かす関節を j3 にしました [関節] 上下で動かす関節を j4 にしました [長押し] j4 を -25.83° → -49.39° まで(目標を 3 回送信。止めます) [長押し] j4 を -49.39° → -56.95° まで(目標を 1 回送信。止めます) [関節] 上下で動かす関節を j5 にしました [関節] 上下で動かす関節を j1 にしました [長押し] j1 を +42.53° → +47.10° まで(目標を 1 回送信。止めます) [長押し] j1 を +52.64° → +53.70° まで(目標を 1 回送信。止めます) [送信] j1 +1.0° → -58.87 +57.68 +18.89 -0.26 -60.02 -30.23 届いた(ずれ 3.26°) 届いた角度 -58.88 +58.00 +18.89 +0.43 -63.28 -30.23 [送信] j1 +1.0° → -58.87 +58.68 +18.89 -0.26 -60.02 -30.23 届いた(ずれ 3.26°) 届いた角度 -58.88 +58.71 +18.89 +0.52 -63.28 -30.23 [関節] 上下で動かす関節を j2 にしました [送信] j2 +1.0° → -58.87 +58.68 +19.89 -0.26 -60.02 -30.23 届いた(ずれ 5.54°) 届いた角度 -58.88 +59.67 +20.30 +0.35 -65.56 -30.23 [送信] j2 -1.0° → -58.87 +58.68 +18.89 -0.26 -60.02 -30.23 動かなかった(次の押しは この目標の先から)・無視されたので 2 回送り直した(ずれ 5.54°) 届いた角度 -58.88 +59.67 +20.21 +0.35 -65.56 -30.23 [長押し] j2 を +20.21° → +20.21° まで(目標を 1 回送信。止めます) [長押し] j2 を +20.12° → +20.12° まで(目標を 1 回送信。止めます) [Pi] GRIPPER: VALUE=20 speed=100 result= None [爪] 爪を閉じる(待ち 0.8 秒のあと受付) [関節] 上下で動かす関節を j3 にしました [関節] 上下で動かす関節を j4 にしました [関節] 上下で動かす関節を j5 にしました [関節] 上下で動かす関節を j1 にしました [長押し] j1 を +61.87° → +45.87° まで(目標を 3 回送信。止めます) [Pi] GRIPPER: OPEN result= None [爪] 爪を開く(待ち 0.8 秒のあと受付) [送信] HOME → +0.00 +0.00 +0.00 +0.00 +0.00 -30.00 届いた(ずれ 2.1°) 届いた角度 -0.35 +1.49 +2.10 -0.08 +0.61 -30.32 [受付なし] HOME: 前の操作が終わっていません(押し直してください) [受付なし] HOME: 前の操作が終わっていません(押し直してください) [受付なし] HOME: 前の操作が終わっていません(押し直してください) [関節] 上下で動かす関節を j2 にしました [関節] 上下で動かす関節を j3 にしました [関節] 上下で動かす関節を j4 にしました [送信] HOME → +0.00 +0.00 +0.00 +0.00 +0.00 -30.00 届かなかった(ずれ 53.34°) 届いた角度 -0.43 +1.49 +2.10 -0.17 +53.34 -30.23 [送信] j4 -1.0° → +0.00 +0.00 +0.00 +0.00 +52.34 -30.00 届いた(ずれ 2.1°) 届いた角度 -0.43 +1.49 +2.10 -0.17 +51.94 -30.23 [長押し] j4 を +51.94° → -3.86° まで(目標を 7 回送信。止めます) [送信] HOME → +0.00 +0.00 +0.00 +0.00 +0.00 -30.00 届いた(ずれ 2.9°) 届いた角度 -0.43 +1.49 +1.84 -0.17 -2.90 -30.23 ^C [終了] Ctrl+C [終了] アームは動かしていません。記録: /Volumes/KIOXIA/r2r2r-data/runs/experiments/gamepad_teleop/teleop_20261109_130126 (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % scp -i ~/.ssh/id_rsa_pi /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/drag_v2_20261109_130300.json ubuntu@192.168.2.1:r2r2r-scripts/dynamic_tracking_limits/drag_teaching/ python3 dynamic_tracking_limits/drag_teaching/record_teach_demo.py run --teach drag_v2_20261109_130300.json drag_v2_20261109_130300.json 100% 38KB 9.2MB/s 00:00 [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 ] モード: ドライラン(アームに何も送りません) [RTD ] Pi から教えた記録を取得します: ubuntu@192.168.2.1:r2r2r-scripts/dynamic_tracking_limits/drag_teaching/drag_v2_20261109_130300.json [RTD ] 取得しました → /var/folders/5w/2q2mc64n6yv63gfh31h34w6h0000gn/T/record_teach_demo_w52iq5a0/drag_v2_20261109_130300.json [RTD ] 入力ファイル: drag_v2_20261109_130300.json [RTD ] 抽出ウェイポイント: APPROACH_PICK <- phase APPROACH_PICK argmax_idx=123 (start=123 end=197, gap=20.13°) angles = [ -58.88, +41.74, +9.31, +0.08, -54.05, -30.14] PICK <- gripper close mark idx=223(PICK phase 範囲内) angles = [ -58.88, +61.87, +9.31, +0.08, -54.05, -30.14] APPROACH_PLACE <- phase APPROACH_PLACE argmax_idx=304 (start=304 end=352, gap=18.81°) angles = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] PLACE <- gripper open mark idx=367(PLACE phase 範囲内) angles = [ +43.85, +62.22, -4.83, +7.82, -63.01, -36.12] [RTD ] JOINT_LIMITS 一括検証 OK(全 endpoint + HOME) [RTD ] 姿勢検査 OK(全 156 姿勢が 有限値 + JOINT_LIMITS + J4_SAFE [-90.0, +60.0] 内) [RTD ] j4 の余裕は最小 26.99°(しきい値 3.0° 以上) ============================================================================== [RTD ] 実行プラン(daemon 経由・区間ごとに 1 回送信 → 到達待ち) ============================================================================== [STEP 1] MOVE → HOME (single send + settle) speed=20 current = 未取得(ドライラン・daemon に接続していない) to HOME = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] [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 = [ -58.88, +41.74, +9.31, +0.08, -54.05, -30.14] max |Δ| = 58.88° 1 回送信 speed=20 (~ 2.9s @ 20°/s 目安・到達待ち 最大 10.8s) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage4_pick)] from = [ -58.88, +41.74, +9.31, +0.08, -54.05, -30.14] to = [ -58.88, +61.87, +9.31, +0.08, -54.05, -30.14] max |Δ| = 20.13° 1 回送信 speed=20 (~ 1.0s @ 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 = [ -58.88, +61.87, +9.31, +0.08, -54.05, -30.14] to = [ -58.88, +41.74, +9.31, +0.08, -54.05, -30.14] max |Δ| = 20.13° 1 回送信 speed=20 (~ 1.0s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE tol=3.0° [rpp.TOL_APPROACH_PLACE(stage7)] from = [ -58.88, +41.74, +9.31, +0.08, -54.05, -30.14] to = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] max |Δ| = 101.85° 1 回送信 speed=20 (~ 5.1s @ 20°/s 目安・到達待ち 最大 17.3s) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage8_place)] from = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] to = [ +43.85, +62.22, -4.83, +7.82, -63.01, -36.12] max |Δ| = 18.81° 1 回送信 speed=20 (~ 0.9s @ 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.85, +62.22, -4.83, +7.82, -63.01, -36.12] to = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] max |Δ| = 18.81° 1 回送信 speed=20 (~ 0.9s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME tol=2.5° [rpp.TOL_HOME(stage1_to_home / HOME 復帰)] from = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] to = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 54.58° 1 回送信 speed=20 (~ 2.7s @ 20°/s 目安・到達待ち 最大 10.2s) ============================================================================== [RTD ] 送信 = 8 回(STEP 1 + move 7 区間), 想定所要時間 ≈ 31.7s(最悪 73.0s) [RTD ] 内訳: 先頭 settle 3.0s + 移動 14.7s(max|Δ| 合計 293.2° @ 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_123559.json [RTD ] measured_at = 2026-11-09T12:36:01.355235 block = (+54.8, +47.3) mm box = (-220.3, +190.8) mm [RTD ] 再生直前: 上カメラでマット四隅とブロック画素を確認します [RTD ] [WARN] 再生直前: 四隅が最大 16.3px ずれています(1 回目 / 上限 15.0px)。測り直します [RTD ] 再生直前: 四隅が 2 回目で収まりました(最大 14.9px <= 15.0px) [RTD ] 再生直前: block = (+238.7, +106.4) mm(measure の homography で換算) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_130520.jpg [RTD ] [WARN] ブロックが measure 時から動いています(止めません・項目8): ブロックが measure 時から 431.8px(≒193.2mm)動いています(許容 10.3px = 5.0mm)。ブロックを戻すか measure をやり直してください [RTD ] [WARN] 画素の差 431.8px(許容 10.3px = 5.0mm)/ mm 換算の差 193.17mm [RTD ] [WARN] つかみ損ねる可能性があります。気になるなら Enter の前に measure を取り直してください [RTD ] ドライランなので、ここで終了します(アームには何も送っていません) [RTD ] Pi 版と比べる点: 抽出ウェイポイント 4 姿勢と各区間の max|Δ| は同じ。送り方は単発(Pi 版は 0.1s 補間ストリーミング)なので n_steps / ticks は比較対象外。送信 8 回 / 想定所要 ≈ 31.7s (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % python3 dynamic_tracking_limits/drag_teaching/record_teach_demo.py run --teach drag_v2_20261109_130300.json --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_130300.json [RTD ] 取得しました → /var/folders/5w/2q2mc64n6yv63gfh31h34w6h0000gn/T/record_teach_demo_gh64qcxm/drag_v2_20261109_130300.json [RTD ] 入力ファイル: drag_v2_20261109_130300.json [RTD ] 抽出ウェイポイント: APPROACH_PICK <- phase APPROACH_PICK argmax_idx=123 (start=123 end=197, gap=20.13°) angles = [ -58.88, +41.74, +9.31, +0.08, -54.05, -30.14] PICK <- gripper close mark idx=223(PICK phase 範囲内) angles = [ -58.88, +61.87, +9.31, +0.08, -54.05, -30.14] APPROACH_PLACE <- phase APPROACH_PLACE argmax_idx=304 (start=304 end=352, gap=18.81°) angles = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] PLACE <- gripper open mark idx=367(PLACE phase 範囲内) angles = [ +43.85, +62.22, -4.83, +7.82, -63.01, -36.12] [RTD ] JOINT_LIMITS 一括検証 OK(全 endpoint + HOME) [RTD ] 姿勢検査 OK(全 156 姿勢が 有限値 + JOINT_LIMITS + J4_SAFE [-90.0, +60.0] 内) [RTD ] j4 の余裕は最小 26.99°(しきい値 3.0° 以上) [RTD ] 現在姿勢を daemon から取得します [RTD ] 現在姿勢 = [ -0.52, +1.49, +1.75, -0.17, +0.17, -30.23] ============================================================================== [RTD ] 実行プラン(daemon 経由・区間ごとに 1 回送信 → 到達待ち) ============================================================================== [STEP 1] MOVE → HOME (single send + settle) speed=20 current = [ -0.52, +1.49, +1.75, -0.17, +0.17, -30.23] to HOME = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 1.75° (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 = [ -58.88, +41.74, +9.31, +0.08, -54.05, -30.14] max |Δ| = 58.88° 1 回送信 speed=20 (~ 2.9s @ 20°/s 目安・到達待ち 最大 10.8s) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage4_pick)] from = [ -58.88, +41.74, +9.31, +0.08, -54.05, -30.14] to = [ -58.88, +61.87, +9.31, +0.08, -54.05, -30.14] max |Δ| = 20.13° 1 回送信 speed=20 (~ 1.0s @ 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 = [ -58.88, +61.87, +9.31, +0.08, -54.05, -30.14] to = [ -58.88, +41.74, +9.31, +0.08, -54.05, -30.14] max |Δ| = 20.13° 1 回送信 speed=20 (~ 1.0s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE tol=3.0° [rpp.TOL_APPROACH_PLACE(stage7)] from = [ -58.88, +41.74, +9.31, +0.08, -54.05, -30.14] to = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] max |Δ| = 101.85° 1 回送信 speed=20 (~ 5.1s @ 20°/s 目安・到達待ち 最大 17.3s) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage8_place)] from = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] to = [ +43.85, +62.22, -4.83, +7.82, -63.01, -36.12] max |Δ| = 18.81° 1 回送信 speed=20 (~ 0.9s @ 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.85, +62.22, -4.83, +7.82, -63.01, -36.12] to = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] max |Δ| = 18.81° 1 回送信 speed=20 (~ 0.9s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME tol=2.5° [rpp.TOL_HOME(stage1_to_home / HOME 復帰)] from = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] to = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 54.58° 1 回送信 speed=20 (~ 2.7s @ 20°/s 目安・到達待ち 最大 10.2s) ============================================================================== [RTD ] 送信 = 8 回(STEP 1 + move 7 区間), 想定所要時間 ≈ 31.7s(最悪 73.0s) [RTD ] 内訳: 先頭 settle 3.0s + 移動 14.7s(max|Δ| 合計 293.2° @ 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_123559.json [RTD ] measured_at = 2026-11-09T12:36:01.355235 block = (+54.8, +47.3) mm box = (-220.3, +190.8) mm [RTD ] 再生直前: 上カメラでマット四隅とブロック画素を確認します [RTD ] [WARN] 再生直前: 四隅が最大 15.5px ずれています(1 回目 / 上限 15.0px)。測り直します [RTD ] [WARN] 再生直前: 四隅が最大 15.9px ずれています(2 回目 / 上限 15.0px)。測り直します [RTD ] [WARN] 再生直前: 四隅が最大 15.5px ずれています(3 回目 / 上限 15.0px)。やり直しの上限に達しました [RTD ] 再生直前: block = (+238.7, +105.9) mm(measure の homography で換算) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_130534.jpg [RTD ] 弾いた理由と各回の記録を残しました: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_130534_rejected.json [RTD ] [WARN] マット四隅が measure 時から最大 15.5px ずれています(上限 15.0px・最大 3 回やり直しても収まらず)。カメラが動いた可能性があるので止めます。measure を取り直してください(各隅のずれ: 4.0, 10.0, 15.1, 15.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_20261109_130542 [RTD ] 教えた記録のコピー: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_130542/teach/drag_v2_20261109_130300.json [RTD ] recorder に trial_start を送りました。1.0s 待ってから動き出します(mp4 writer が開くまで) [RTD ] 爪と肩の電流を 1 秒 10 回で記録します(爪を動かしている間は読みません)→ /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_130542/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.75° / 到達待ち 最大 8.0s [STEP 1] 3.0s 待ちます(settle) [RTD ] arrival OK (current → HOME, max|Δ|=1.75° <= 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.016s [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 系)] / 最大 10.8s) [RTD ] 送信 OK(daemon 往復 1.021s) [RTD ] arrival OK (HOME → APPROACH_PICK, max|Δ|=1.15° <= 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.042s) [RTD ] arrival OK (APPROACH_PICK → PICK, max|Δ|=1.23° <= 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.034s) [RTD ] arrival OK (PICK → APPROACH_PICK (lift), max|Δ|=2.11° <= tol 3.0°) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_APPROACH_PLACE(stage7)] / 最大 17.3s) [RTD ] 送信 OK(daemon 往復 1.049s) [RTD ] arrival OK (APPROACH_PICK → APPROACH_PLACE, max|Δ|=1.84° <= 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.035s) [RTD ] arrival OK (APPROACH_PLACE → PLACE, max|Δ|=1.58° <= tol 3.0°) [STEP 9] GRIPPER OPEN → daemon_set_gripper(0, 50, wait=0) [RTD ] 静止確認 OK(step9_open: 連続 3 回・連続差 最大 0.00° <= 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.63° <= tol 3.0°) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME (1 回送信 speed=20 → 到達待ち 許容 2.5°[TOL_HOME(stage1_to_home / HOME 復帰)] / 最大 10.2s) [RTD ] 送信 OK(daemon 往復 1.053s) [RTD ] arrival OK (APPROACH_PLACE → HOME, max|Δ|=2.28° <= tol 2.5°) [Pi] fresh_mode=0 [RTD ] daemon_set_fresh_mode(0) 完了 [RTD ] 実測角の読み取り: ok 59/59 回, 実効 1.63 Hz(目標 3.0 Hz 以上) [RTD ] [WARN] 実測角の読み取りが目標 3.0 Hz を下回りました(1.63 Hz)。学習データの state 密度が 19 本より薄くなります [RTD ] send_angles の daemon 往復 (7 回): 平均 1.038s / p50 1.035s / 最大 1.053s(timeout 6.0s) [RTD ] [WARN] 送信 1 回に 1.053s かかった回があります。daemon は送信後に角度を読み直すので、動き始めで読めないと伸びます(単発送信なので試行全体への影響は小さい) [RTD ] 区間の所要(送信→到達確認まで)(8 区間): 平均 2.39s / 最大 4.63s [RECORD] 電流の記録終了 79 行 (2.18 行/秒. 本体が眠っている間だけ読む. 爪の間 14.045 秒は読まない. 見込み超え 0 回. read_servo) → /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_130542/recording/currents.csv ============================================================================== [RTD ] 再生 完了 ============================================================================== [RTD ] つかめたか (y/n) > y [RTD ] 箱に入ったか (y/n) > y [RTD ] 試行 JSON: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_130542/run_0001_20261109_130542.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_20261109_130542 --dataset mecharm_redblock_box_teach_v1 (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % python3 pi05/camera_align.py --raw-dir /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/align_ref --episode 130542 python3 dynamic_tracking_limits/drag_teaching/record_teach_demo.py run --teach drag_v2_20261109_130300.json --execute [REF ] 基準画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/align_ref/run_0001_20261109_130542/frames/000000.jpg [REF ] お手本 run_0001_20261109_130542 (つかんだ瞬間が不明) [REF ] 重なった画像のブロックに実物のブロックを合わせると, お手本と同じ位置に置ける [ALIGN ] |dy| <= 20 なら OK. アームは HOME に置いた状態で合わせる. q または Esc で終了 (ファイルには何も書かない) [ALIGN ] dy= +1.8 dx= +6.7 response=0.577 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +0.3 dx= +6.0 response=0.587 → 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 ] モード: EXECUTE(実機) 記録: ON [RTD ] Pi から教えた記録を取得します: ubuntu@192.168.2.1:r2r2r-scripts/dynamic_tracking_limits/drag_teaching/drag_v2_20261109_130300.json [RTD ] 取得しました → /var/folders/5w/2q2mc64n6yv63gfh31h34w6h0000gn/T/record_teach_demo_0yz2jwh1/drag_v2_20261109_130300.json [RTD ] 入力ファイル: drag_v2_20261109_130300.json [RTD ] 抽出ウェイポイント: APPROACH_PICK <- phase APPROACH_PICK argmax_idx=123 (start=123 end=197, gap=20.13°) angles = [ -58.88, +41.74, +9.31, +0.08, -54.05, -30.14] PICK <- gripper close mark idx=223(PICK phase 範囲内) angles = [ -58.88, +61.87, +9.31, +0.08, -54.05, -30.14] APPROACH_PLACE <- phase APPROACH_PLACE argmax_idx=304 (start=304 end=352, gap=18.81°) angles = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] PLACE <- gripper open mark idx=367(PLACE phase 範囲内) angles = [ +43.85, +62.22, -4.83, +7.82, -63.01, -36.12] [RTD ] JOINT_LIMITS 一括検証 OK(全 endpoint + HOME) [RTD ] 姿勢検査 OK(全 156 姿勢が 有限値 + JOINT_LIMITS + J4_SAFE [-90.0, +60.0] 内) [RTD ] j4 の余裕は最小 26.99°(しきい値 3.0° 以上) [RTD ] 現在姿勢を daemon から取得します [RTD ] 現在姿勢 = [ -0.08, +1.49, +2.02, +0.26, -0.26, -30.23] ============================================================================== [RTD ] 実行プラン(daemon 経由・区間ごとに 1 回送信 → 到達待ち) ============================================================================== [STEP 1] MOVE → HOME (single send + settle) speed=20 current = [ -0.08, +1.49, +2.02, +0.26, -0.26, -30.23] to HOME = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 2.02° (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 = [ -58.88, +41.74, +9.31, +0.08, -54.05, -30.14] max |Δ| = 58.88° 1 回送信 speed=20 (~ 2.9s @ 20°/s 目安・到達待ち 最大 10.8s) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage4_pick)] from = [ -58.88, +41.74, +9.31, +0.08, -54.05, -30.14] to = [ -58.88, +61.87, +9.31, +0.08, -54.05, -30.14] max |Δ| = 20.13° 1 回送信 speed=20 (~ 1.0s @ 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 = [ -58.88, +61.87, +9.31, +0.08, -54.05, -30.14] to = [ -58.88, +41.74, +9.31, +0.08, -54.05, -30.14] max |Δ| = 20.13° 1 回送信 speed=20 (~ 1.0s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE tol=3.0° [rpp.TOL_APPROACH_PLACE(stage7)] from = [ -58.88, +41.74, +9.31, +0.08, -54.05, -30.14] to = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] max |Δ| = 101.85° 1 回送信 speed=20 (~ 5.1s @ 20°/s 目安・到達待ち 最大 17.3s) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage8_place)] from = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] to = [ +43.85, +62.22, -4.83, +7.82, -63.01, -36.12] max |Δ| = 18.81° 1 回送信 speed=20 (~ 0.9s @ 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.85, +62.22, -4.83, +7.82, -63.01, -36.12] to = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] max |Δ| = 18.81° 1 回送信 speed=20 (~ 0.9s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME tol=2.5° [rpp.TOL_HOME(stage1_to_home / HOME 復帰)] from = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] to = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 54.58° 1 回送信 speed=20 (~ 2.7s @ 20°/s 目安・到達待ち 最大 10.2s) ============================================================================== [RTD ] 送信 = 8 回(STEP 1 + move 7 区間), 想定所要時間 ≈ 31.7s(最悪 73.0s) [RTD ] 内訳: 先頭 settle 3.0s + 移動 14.7s(max|Δ| 合計 293.2° @ 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_123559.json [RTD ] measured_at = 2026-11-09T12:36:01.355235 block = (+54.8, +47.3) mm box = (-220.3, +190.8) mm [RTD ] 再生直前: 上カメラでマット四隅とブロック画素を確認します [RTD ] [WARN] 再生直前: 四隅が最大 16.7px ずれています(1 回目 / 上限 15.0px)。測り直します [RTD ] [WARN] 再生直前: 四隅が最大 16.7px ずれています(2 回目 / 上限 15.0px)。測り直します [RTD ] [WARN] 再生直前: 四隅が最大 16.8px ずれています(3 回目 / 上限 15.0px)。やり直しの上限に達しました [RTD ] 再生直前: block = (+240.0, +102.0) mm(measure の homography で換算) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_130716.jpg [RTD ] 弾いた理由と各回の記録を残しました: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_130716_rejected.json [RTD ] [WARN] マット四隅が measure 時から最大 16.8px ずれています(上限 15.0px・最大 3 回やり直しても収まらず)。カメラが動いた可能性があるので止めます。measure を取り直してください(各隅のずれ: 4.0, 10.0, 16.8, 15.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_20261109_130723 [RTD ] 教えた記録のコピー: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_130723/teach/drag_v2_20261109_130300.json [RTD ] recorder に trial_start を送りました。1.0s 待ってから動き出します(mp4 writer が開くまで) [RTD ] 爪と肩の電流を 1 秒 10 回で記録します(爪を動かしている間は読みません)→ /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_130723/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|Δ| = 2.02° / 到達待ち 最大 8.0s [STEP 1] 3.0s 待ちます(settle) [RTD ] arrival OK (current → HOME, max|Δ|=2.02° <= 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.012s [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 系)] / 最大 10.8s) [RTD ] 送信 OK(daemon 往復 1.033s) [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.029s) [RTD ] arrival OK (APPROACH_PICK → PICK, max|Δ|=1.14° <= 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.031s) [RTD ] arrival OK (PICK → APPROACH_PICK (lift), max|Δ|=2.11° <= tol 3.0°) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_APPROACH_PLACE(stage7)] / 最大 17.3s) [RTD ] 送信 OK(daemon 往復 1.053s) [RTD ] arrival OK (APPROACH_PICK → APPROACH_PLACE, max|Δ|=1.75° <= 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|Δ|=1.50° <= 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.014s [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.048s) [RTD ] arrival OK (PLACE → APPROACH_PLACE (retreat), max|Δ|=2.54° <= tol 3.0°) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME (1 回送信 speed=20 → 到達待ち 許容 2.5°[TOL_HOME(stage1_to_home / HOME 復帰)] / 最大 10.2s) [RTD ] 送信 OK(daemon 往復 1.029s) [RTD ] arrival OK (APPROACH_PLACE → HOME, max|Δ|=2.19° <= tol 2.5°) [Pi] fresh_mode=0 [RTD ] daemon_set_fresh_mode(0) 完了 [RTD ] 実測角の読み取り: ok 57/57 回, 実効 1.61 Hz(目標 3.0 Hz 以上) [RTD ] [WARN] 実測角の読み取りが目標 3.0 Hz を下回りました(1.61 Hz)。学習データの state 密度が 19 本より薄くなります [RTD ] send_angles の daemon 往復 (7 回): 平均 1.036s / p50 1.031s / 最大 1.053s(timeout 6.0s) [RTD ] [WARN] 送信 1 回に 1.053s かかった回があります。daemon は送信後に角度を読み直すので、動き始めで読めないと伸びます(単発送信なので試行全体への影響は小さい) [RTD ] 区間の所要(送信→到達確認まで)(8 区間): 平均 2.31s / 最大 4.46s [RECORD] 電流の記録終了 75 行 (2.11 行/秒. 本体が眠っている間だけ読む. 爪の間 14.052 秒は読まない. 見込み超え 0 回. read_servo) → /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_130723/recording/currents.csv ============================================================================== [RTD ] 再生 完了 ============================================================================== [RTD ] つかめたか (y/n) > y [RTD ] 箱に入ったか (y/n) > y [RTD ] 試行 JSON: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_130723/run_0001_20261109_130723.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_20261109_130723 --dataset mecharm_redblock_box_teach_v1 (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % python3 pi05/camera_align.py --raw-dir /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/align_ref --episode 130542 python3 dynamic_tracking_limits/drag_teaching/record_teach_demo.py run --teach drag_v2_20261109_130300.json --execute [REF ] 基準画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/align_ref/run_0001_20261109_130542/frames/000000.jpg [REF ] お手本 run_0001_20261109_130542 (つかんだ瞬間が不明) [REF ] 重なった画像のブロックに実物のブロックを合わせると, お手本と同じ位置に置ける [ALIGN ] |dy| <= 20 なら OK. アームは HOME に置いた状態で合わせる. q または Esc で終了 (ファイルには何も書かない) [ALIGN ] dy= +1.1 dx= +7.8 response=0.598 → 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 ] モード: EXECUTE(実機) 記録: ON [RTD ] Pi から教えた記録を取得します: ubuntu@192.168.2.1:r2r2r-scripts/dynamic_tracking_limits/drag_teaching/drag_v2_20261109_130300.json [RTD ] 取得しました → /var/folders/5w/2q2mc64n6yv63gfh31h34w6h0000gn/T/record_teach_demo_3cwlo00h/drag_v2_20261109_130300.json [RTD ] 入力ファイル: drag_v2_20261109_130300.json [RTD ] 抽出ウェイポイント: APPROACH_PICK <- phase APPROACH_PICK argmax_idx=123 (start=123 end=197, gap=20.13°) angles = [ -58.88, +41.74, +9.31, +0.08, -54.05, -30.14] PICK <- gripper close mark idx=223(PICK phase 範囲内) angles = [ -58.88, +61.87, +9.31, +0.08, -54.05, -30.14] APPROACH_PLACE <- phase APPROACH_PLACE argmax_idx=304 (start=304 end=352, gap=18.81°) angles = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] PLACE <- gripper open mark idx=367(PLACE phase 範囲内) angles = [ +43.85, +62.22, -4.83, +7.82, -63.01, -36.12] [RTD ] JOINT_LIMITS 一括検証 OK(全 endpoint + HOME) [RTD ] 姿勢検査 OK(全 156 姿勢が 有限値 + JOINT_LIMITS + J4_SAFE [-90.0, +60.0] 内) [RTD ] j4 の余裕は最小 26.99°(しきい値 3.0° 以上) [RTD ] 現在姿勢を daemon から取得します [RTD ] 現在姿勢 = [ -0.08, +1.49, +2.02, +0.26, -0.26, -30.23] ============================================================================== [RTD ] 実行プラン(daemon 経由・区間ごとに 1 回送信 → 到達待ち) ============================================================================== [STEP 1] MOVE → HOME (single send + settle) speed=20 current = [ -0.08, +1.49, +2.02, +0.26, -0.26, -30.23] to HOME = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 2.02° (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 = [ -58.88, +41.74, +9.31, +0.08, -54.05, -30.14] max |Δ| = 58.88° 1 回送信 speed=20 (~ 2.9s @ 20°/s 目安・到達待ち 最大 10.8s) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage4_pick)] from = [ -58.88, +41.74, +9.31, +0.08, -54.05, -30.14] to = [ -58.88, +61.87, +9.31, +0.08, -54.05, -30.14] max |Δ| = 20.13° 1 回送信 speed=20 (~ 1.0s @ 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 = [ -58.88, +61.87, +9.31, +0.08, -54.05, -30.14] to = [ -58.88, +41.74, +9.31, +0.08, -54.05, -30.14] max |Δ| = 20.13° 1 回送信 speed=20 (~ 1.0s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE tol=3.0° [rpp.TOL_APPROACH_PLACE(stage7)] from = [ -58.88, +41.74, +9.31, +0.08, -54.05, -30.14] to = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] max |Δ| = 101.85° 1 回送信 speed=20 (~ 5.1s @ 20°/s 目安・到達待ち 最大 17.3s) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage8_place)] from = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] to = [ +43.85, +62.22, -4.83, +7.82, -63.01, -36.12] max |Δ| = 18.81° 1 回送信 speed=20 (~ 0.9s @ 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.85, +62.22, -4.83, +7.82, -63.01, -36.12] to = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] max |Δ| = 18.81° 1 回送信 speed=20 (~ 0.9s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME tol=2.5° [rpp.TOL_HOME(stage1_to_home / HOME 復帰)] from = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] to = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 54.58° 1 回送信 speed=20 (~ 2.7s @ 20°/s 目安・到達待ち 最大 10.2s) ============================================================================== [RTD ] 送信 = 8 回(STEP 1 + move 7 区間), 想定所要時間 ≈ 31.7s(最悪 73.0s) [RTD ] 内訳: 先頭 settle 3.0s + 移動 14.7s(max|Δ| 合計 293.2° @ 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_123559.json [RTD ] measured_at = 2026-11-09T12:36:01.355235 block = (+54.8, +47.3) mm box = (-220.3, +190.8) mm [RTD ] 再生直前: 上カメラでマット四隅とブロック画素を確認します [RTD ] [WARN] 再生直前: 四隅が最大 16.7px ずれています(1 回目 / 上限 15.0px)。測り直します [RTD ] [WARN] 再生直前: 四隅が最大 16.7px ずれています(2 回目 / 上限 15.0px)。測り直します [RTD ] [WARN] 再生直前: 四隅が最大 16.7px ずれています(3 回目 / 上限 15.0px)。やり直しの上限に達しました [RTD ] 再生直前: block = (+239.6, +103.0) mm(measure の homography で換算) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_130817.jpg [RTD ] 弾いた理由と各回の記録を残しました: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_130817_rejected.json [RTD ] [WARN] マット四隅が measure 時から最大 16.7px ずれています(上限 15.0px・最大 3 回やり直しても収まらず)。カメラが動いた可能性があるので止めます。measure を取り直してください(各隅のずれ: 4.0, 10.0, 16.7, 15.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_20261109_130824 [RTD ] 教えた記録のコピー: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_130824/teach/drag_v2_20261109_130300.json [RTD ] recorder に trial_start を送りました。1.0s 待ってから動き出します(mp4 writer が開くまで) [RTD ] 爪と肩の電流を 1 秒 10 回で記録します(爪を動かしている間は読みません)→ /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_130824/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|Δ| = 2.02° / 到達待ち 最大 8.0s [STEP 1] 3.0s 待ちます(settle) [RTD ] arrival OK (current → HOME, max|Δ|=2.02° <= 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 系)] / 最大 10.8s) [RTD ] 送信 OK(daemon 往復 1.030s) [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.620s) [RTD ] arrival OK (APPROACH_PICK → PICK, max|Δ|=1.14° <= 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.033s) [RTD ] arrival OK (PICK → APPROACH_PICK (lift), max|Δ|=2.11° <= tol 3.0°) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_APPROACH_PLACE(stage7)] / 最大 17.3s) [RTD ] 送信 OK(daemon 往復 1.047s) [RTD ] arrival OK (APPROACH_PICK → APPROACH_PLACE, max|Δ|=1.75° <= 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.055s) [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.00° <= 1.0°) [Pi] GRIPPER: OPEN result= None [RTD ] gripper open (1/1 回目) の daemon 往復 = 2.017s [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.54° <= tol 3.0°) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME (1 回送信 speed=20 → 到達待ち 許容 2.5°[TOL_HOME(stage1_to_home / HOME 復帰)] / 最大 10.2s) [RTD ] 送信 OK(daemon 往復 1.030s) [RTD ] arrival OK (APPROACH_PLACE → HOME, max|Δ|=2.28° <= tol 2.5°) [Pi] fresh_mode=0 [RTD ] daemon_set_fresh_mode(0) 完了 [RTD ] 実測角の読み取り: ok 57/57 回, 実効 1.58 Hz(目標 3.0 Hz 以上) [RTD ] [WARN] 実測角の読み取りが目標 3.0 Hz を下回りました(1.58 Hz)。学習データの state 密度が 19 本より薄くなります [RTD ] send_angles の daemon 往復 (7 回): 平均 1.121s / p50 1.033s / 最大 1.620s(timeout 6.0s) [RTD ] [WARN] 送信 1 回に 1.620s かかった回があります。daemon は送信後に角度を読み直すので、動き始めで読めないと伸びます(単発送信なので試行全体への影響は小さい) [RTD ] 区間の所要(送信→到達確認まで)(8 区間): 平均 2.38s / 最大 4.46s [RECORD] 電流の記録終了 75 行 (2.08 行/秒. 本体が眠っている間だけ読む. 爪の間 14.05 秒は読まない. 見込み超え 0 回. read_servo) → /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_130824/recording/currents.csv ============================================================================== [RTD ] 再生 完了 ============================================================================== [RTD ] つかめたか (y/n) > y [RTD ] 箱に入ったか (y/n) > y [RTD ] 試行 JSON: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_130824/run_0001_20261109_130824.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_20261109_130824 --dataset mecharm_redblock_box_teach_v1 (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % python3 pi05/camera_align.py --raw-dir /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/align_ref --episode 130542 python3 dynamic_tracking_limits/drag_teaching/record_teach_demo.py run --teach drag_v2_20261109_130300.json --execute [REF ] 基準画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/align_ref/run_0001_20261109_130542/frames/000000.jpg [REF ] お手本 run_0001_20261109_130542 (つかんだ瞬間が不明) [REF ] 重なった画像のブロックに実物のブロックを合わせると, お手本と同じ位置に置ける [ALIGN ] |dy| <= 20 なら OK. アームは HOME に置いた状態で合わせる. q または Esc で終了 (ファイルには何も書かない) [ALIGN ] dy= +1.9 dx= +7.0 response=0.600 → 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 ] モード: EXECUTE(実機) 記録: ON [RTD ] Pi から教えた記録を取得します: ubuntu@192.168.2.1:r2r2r-scripts/dynamic_tracking_limits/drag_teaching/drag_v2_20261109_130300.json [RTD ] 取得しました → /var/folders/5w/2q2mc64n6yv63gfh31h34w6h0000gn/T/record_teach_demo_x5tqexdu/drag_v2_20261109_130300.json [RTD ] 入力ファイル: drag_v2_20261109_130300.json [RTD ] 抽出ウェイポイント: APPROACH_PICK <- phase APPROACH_PICK argmax_idx=123 (start=123 end=197, gap=20.13°) angles = [ -58.88, +41.74, +9.31, +0.08, -54.05, -30.14] PICK <- gripper close mark idx=223(PICK phase 範囲内) angles = [ -58.88, +61.87, +9.31, +0.08, -54.05, -30.14] APPROACH_PLACE <- phase APPROACH_PLACE argmax_idx=304 (start=304 end=352, gap=18.81°) angles = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] PLACE <- gripper open mark idx=367(PLACE phase 範囲内) angles = [ +43.85, +62.22, -4.83, +7.82, -63.01, -36.12] [RTD ] JOINT_LIMITS 一括検証 OK(全 endpoint + HOME) [RTD ] 姿勢検査 OK(全 156 姿勢が 有限値 + JOINT_LIMITS + J4_SAFE [-90.0, +60.0] 内) [RTD ] j4 の余裕は最小 26.99°(しきい値 3.0° 以上) [RTD ] 現在姿勢を daemon から取得します [RTD ] 現在姿勢 = [ +0.00, +1.49, +2.02, +0.26, -0.26, -30.23] ============================================================================== [RTD ] 実行プラン(daemon 経由・区間ごとに 1 回送信 → 到達待ち) ============================================================================== [STEP 1] MOVE → HOME (single send + settle) speed=20 current = [ +0.00, +1.49, +2.02, +0.26, -0.26, -30.23] to HOME = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 2.02° (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 = [ -58.88, +41.74, +9.31, +0.08, -54.05, -30.14] max |Δ| = 58.88° 1 回送信 speed=20 (~ 2.9s @ 20°/s 目安・到達待ち 最大 10.8s) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage4_pick)] from = [ -58.88, +41.74, +9.31, +0.08, -54.05, -30.14] to = [ -58.88, +61.87, +9.31, +0.08, -54.05, -30.14] max |Δ| = 20.13° 1 回送信 speed=20 (~ 1.0s @ 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 = [ -58.88, +61.87, +9.31, +0.08, -54.05, -30.14] to = [ -58.88, +41.74, +9.31, +0.08, -54.05, -30.14] max |Δ| = 20.13° 1 回送信 speed=20 (~ 1.0s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE tol=3.0° [rpp.TOL_APPROACH_PLACE(stage7)] from = [ -58.88, +41.74, +9.31, +0.08, -54.05, -30.14] to = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] max |Δ| = 101.85° 1 回送信 speed=20 (~ 5.1s @ 20°/s 目安・到達待ち 最大 17.3s) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage8_place)] from = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] to = [ +43.85, +62.22, -4.83, +7.82, -63.01, -36.12] max |Δ| = 18.81° 1 回送信 speed=20 (~ 0.9s @ 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.85, +62.22, -4.83, +7.82, -63.01, -36.12] to = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] max |Δ| = 18.81° 1 回送信 speed=20 (~ 0.9s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME tol=2.5° [rpp.TOL_HOME(stage1_to_home / HOME 復帰)] from = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] to = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 54.58° 1 回送信 speed=20 (~ 2.7s @ 20°/s 目安・到達待ち 最大 10.2s) ============================================================================== [RTD ] 送信 = 8 回(STEP 1 + move 7 区間), 想定所要時間 ≈ 31.7s(最悪 73.0s) [RTD ] 内訳: 先頭 settle 3.0s + 移動 14.7s(max|Δ| 合計 293.2° @ 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_123559.json [RTD ] measured_at = 2026-11-09T12:36:01.355235 block = (+54.8, +47.3) mm box = (-220.3, +190.8) mm [RTD ] 再生直前: 上カメラでマット四隅とブロック画素を確認します [RTD ] [WARN] 再生直前: 四隅が最大 15.5px ずれています(1 回目 / 上限 15.0px)。測り直します [RTD ] [WARN] 再生直前: 四隅が最大 15.5px ずれています(2 回目 / 上限 15.0px)。測り直します [RTD ] [WARN] 再生直前: 四隅が最大 15.9px ずれています(3 回目 / 上限 15.0px)。やり直しの上限に達しました [RTD ] 再生直前: block = (+241.8, +104.4) mm(measure の homography で換算) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_130922.jpg [RTD ] 弾いた理由と各回の記録を残しました: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_130922_rejected.json [RTD ] [WARN] マット四隅が measure 時から最大 15.9px ずれています(上限 15.0px・最大 3 回やり直しても収まらず)。カメラが動いた可能性があるので止めます。measure を取り直してください(各隅のずれ: 4.0, 10.0, 15.9, 15.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_20261109_130929 [RTD ] 教えた記録のコピー: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_130929/teach/drag_v2_20261109_130300.json [RTD ] recorder に trial_start を送りました。1.0s 待ってから動き出します(mp4 writer が開くまで) [RTD ] 爪と肩の電流を 1 秒 10 回で記録します(爪を動かしている間は読みません)→ /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_130929/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|Δ| = 2.02° / 到達待ち 最大 8.0s [STEP 1] 3.0s 待ちます(settle) [RTD ] arrival OK (current → HOME, max|Δ|=2.02° <= 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.014s [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 系)] / 最大 10.8s) [RTD ] 送信 OK(daemon 往復 1.034s) [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.041s) [RTD ] arrival OK (APPROACH_PICK → PICK, max|Δ|=1.14° <= tol 3.0°) [STEP 5] GRIPPER CLOSE → daemon_set_gripper_value(20, 50) [RTD ] 静止確認 OK(step5_close: 連続 3 回・連続差 最大 0.08° <= 1.0°) [Pi] GRIPPER: VALUE=20 speed=50 result= None [RTD ] gripper close (1/1 回目) の daemon 往復 = 0.010s [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.11° <= tol 3.0°) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_APPROACH_PLACE(stage7)] / 最大 17.3s) [RTD ] 送信 OK(daemon 往復 1.031s) [RTD ] arrival OK (APPROACH_PICK → APPROACH_PLACE, max|Δ|=1.75° <= 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.055s) [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.016s [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.038s) [RTD ] arrival OK (PLACE → APPROACH_PLACE (retreat), max|Δ|=2.54° <= tol 3.0°) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME (1 回送信 speed=20 → 到達待ち 許容 2.5°[TOL_HOME(stage1_to_home / HOME 復帰)] / 最大 10.2s) [RTD ] 送信 OK(daemon 往復 1.031s) [RTD ] arrival OK (APPROACH_PLACE → HOME, max|Δ|=2.19° <= tol 2.5°) [Pi] fresh_mode=0 [RTD ] daemon_set_fresh_mode(0) 完了 [RTD ] 実測角の読み取り: ok 57/57 回, 実効 1.61 Hz(目標 3.0 Hz 以上) [RTD ] [WARN] 実測角の読み取りが目標 3.0 Hz を下回りました(1.61 Hz)。学習データの state 密度が 19 本より薄くなります [RTD ] send_angles の daemon 往復 (7 回): 平均 1.037s / p50 1.034s / 最大 1.055s(timeout 6.0s) [RTD ] [WARN] 送信 1 回に 1.055s かかった回があります。daemon は送信後に角度を読み直すので、動き始めで読めないと伸びます(単発送信なので試行全体への影響は小さい) [RTD ] 区間の所要(送信→到達確認まで)(8 区間): 平均 2.31s / 最大 4.46s [RECORD] 電流の記録終了 75 行 (2.11 行/秒. 本体が眠っている間だけ読む. 爪の間 14.059 秒は読まない. 見込み超え 0 回. read_servo) → /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_130929/recording/currents.csv ============================================================================== [RTD ] 再生 完了 ============================================================================== [RTD ] つかめたか (y/n) > y [RTD ] 箱に入ったか (y/n) > y [RTD ] 試行 JSON: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_130929/run_0001_20261109_130929.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_20261109_130929 --dataset mecharm_redblock_box_teach_v1 (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts % python3 pi05/camera_align.py --raw-dir /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/align_ref --episode 130542 python3 dynamic_tracking_limits/drag_teaching/record_teach_demo.py run --teach drag_v2_20261109_130300.json --execute [REF ] 基準画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/align_ref/run_0001_20261109_130542/frames/000000.jpg [REF ] お手本 run_0001_20261109_130542 (つかんだ瞬間が不明) [REF ] 重なった画像のブロックに実物のブロックを合わせると, お手本と同じ位置に置ける [ALIGN ] |dy| <= 20 なら OK. アームは HOME に置いた状態で合わせる. q または Esc で終了 (ファイルには何も書かない) [ALIGN ] dy= +0.8 dx= +6.9 response=0.628 → OK (|dy|<=20 / |dx|<=20 / response>=0.20) [ALIGN ] dy= +1.9 dx= +6.7 response=0.586 → 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 ] モード: EXECUTE(実機) 記録: ON [RTD ] Pi から教えた記録を取得します: ubuntu@192.168.2.1:r2r2r-scripts/dynamic_tracking_limits/drag_teaching/drag_v2_20261109_130300.json [RTD ] 取得しました → /var/folders/5w/2q2mc64n6yv63gfh31h34w6h0000gn/T/record_teach_demo_7l1gks85/drag_v2_20261109_130300.json [RTD ] 入力ファイル: drag_v2_20261109_130300.json [RTD ] 抽出ウェイポイント: APPROACH_PICK <- phase APPROACH_PICK argmax_idx=123 (start=123 end=197, gap=20.13°) angles = [ -58.88, +41.74, +9.31, +0.08, -54.05, -30.14] PICK <- gripper close mark idx=223(PICK phase 範囲内) angles = [ -58.88, +61.87, +9.31, +0.08, -54.05, -30.14] APPROACH_PLACE <- phase APPROACH_PLACE argmax_idx=304 (start=304 end=352, gap=18.81°) angles = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] PLACE <- gripper open mark idx=367(PLACE phase 範囲内) angles = [ +43.85, +62.22, -4.83, +7.82, -63.01, -36.12] [RTD ] JOINT_LIMITS 一括検証 OK(全 endpoint + HOME) [RTD ] 姿勢検査 OK(全 156 姿勢が 有限値 + JOINT_LIMITS + J4_SAFE [-90.0, +60.0] 内) [RTD ] j4 の余裕は最小 26.99°(しきい値 3.0° 以上) [RTD ] 現在姿勢を daemon から取得します [RTD ] 現在姿勢 = [ -0.08, +1.49, +2.02, +0.26, -0.26, -30.23] ============================================================================== [RTD ] 実行プラン(daemon 経由・区間ごとに 1 回送信 → 到達待ち) ============================================================================== [STEP 1] MOVE → HOME (single send + settle) speed=20 current = [ -0.08, +1.49, +2.02, +0.26, -0.26, -30.23] to HOME = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 2.02° (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 = [ -58.88, +41.74, +9.31, +0.08, -54.05, -30.14] max |Δ| = 58.88° 1 回送信 speed=20 (~ 2.9s @ 20°/s 目安・到達待ち 最大 10.8s) [STEP 4] MOVE → PICK segment APPROACH_PICK → PICK [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage4_pick)] from = [ -58.88, +41.74, +9.31, +0.08, -54.05, -30.14] to = [ -58.88, +61.87, +9.31, +0.08, -54.05, -30.14] max |Δ| = 20.13° 1 回送信 speed=20 (~ 1.0s @ 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 = [ -58.88, +61.87, +9.31, +0.08, -54.05, -30.14] to = [ -58.88, +41.74, +9.31, +0.08, -54.05, -30.14] max |Δ| = 20.13° 1 回送信 speed=20 (~ 1.0s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE tol=3.0° [rpp.TOL_APPROACH_PLACE(stage7)] from = [ -58.88, +41.74, +9.31, +0.08, -54.05, -30.14] to = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] max |Δ| = 101.85° 1 回送信 speed=20 (~ 5.1s @ 20°/s 目安・到達待ち 最大 17.3s) [STEP 8] MOVE → PLACE segment APPROACH_PLACE → PLACE [critical] tol=3.0° [rpp.TOL_PICK_PLACE(stage8_place)] from = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] to = [ +43.85, +62.22, -4.83, +7.82, -63.01, -36.12] max |Δ| = 18.81° 1 回送信 speed=20 (~ 0.9s @ 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.85, +62.22, -4.83, +7.82, -63.01, -36.12] to = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] max |Δ| = 18.81° 1 回送信 speed=20 (~ 0.9s @ 20°/s 目安・到達待ち 最大 8.0s) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME tol=2.5° [rpp.TOL_HOME(stage1_to_home / HOME 復帰)] from = [ +42.97, +43.41, +4.13, +7.20, -54.58, -35.33] to = [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] max |Δ| = 54.58° 1 回送信 speed=20 (~ 2.7s @ 20°/s 目安・到達待ち 最大 10.2s) ============================================================================== [RTD ] 送信 = 8 回(STEP 1 + move 7 区間), 想定所要時間 ≈ 31.7s(最悪 73.0s) [RTD ] 内訳: 先頭 settle 3.0s + 移動 14.7s(max|Δ| 合計 293.2° @ 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_123559.json [RTD ] measured_at = 2026-11-09T12:36:01.355235 block = (+54.8, +47.3) mm box = (-220.3, +190.8) mm [RTD ] 再生直前: 上カメラでマット四隅とブロック画素を確認します [RTD ] [WARN] 再生直前: 四隅が最大 16.7px ずれています(1 回目 / 上限 15.0px)。測り直します [RTD ] [WARN] 再生直前: 四隅が最大 16.8px ずれています(2 回目 / 上限 15.0px)。測り直します [RTD ] [WARN] 再生直前: 四隅が最大 16.8px ずれています(3 回目 / 上限 15.0px)。やり直しの上限に達しました [RTD ] 再生直前: block = (+239.1, +102.1) mm(measure の homography で換算) [RTD ] 確認画像: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_131056.jpg [RTD ] 弾いた理由と各回の記録を残しました: /Volumes/KIOXIA/r2r2r-data/mecharm_calibration/teach_poses_20261109/prerun_20261109_131056_rejected.json [RTD ] [WARN] マット四隅が measure 時から最大 16.8px ずれています(上限 15.0px・最大 3 回やり直しても収まらず)。カメラが動いた可能性があるので止めます。measure を取り直してください(各隅のずれ: 4.0, 10.0, 16.8, 15.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_20261109_131103 [RTD ] 教えた記録のコピー: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_131103/teach/drag_v2_20261109_130300.json [RTD ] recorder に trial_start を送りました。1.0s 待ってから動き出します(mp4 writer が開くまで) [RTD ] 爪と肩の電流を 1 秒 10 回で記録します(爪を動かしている間は読みません)→ /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_131103/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|Δ| = 2.02° / 到達待ち 最大 8.0s [STEP 1] 3.0s 待ちます(settle) [RTD ] arrival OK (current → HOME, max|Δ|=2.02° <= 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.012s [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 系)] / 最大 10.8s) [RTD ] 送信 OK(daemon 往復 1.031s) [RTD ] arrival OK (HOME → APPROACH_PICK, max|Δ|=1.15° <= 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.028s) [RTD ] arrival OK (APPROACH_PICK → PICK, max|Δ|=1.23° <= 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.038s) [RTD ] arrival OK (PICK → APPROACH_PICK (lift), max|Δ|=2.11° <= tol 3.0°) [STEP 7] MOVE → APPROACH_PLACE segment APPROACH_PICK → APPROACH_PLACE (1 回送信 speed=20 → 到達待ち 許容 3.0°[TOL_APPROACH_PLACE(stage7)] / 最大 17.3s) [RTD ] 送信 OK(daemon 往復 1.032s) [RTD ] arrival OK (APPROACH_PICK → APPROACH_PLACE, max|Δ|=1.84° <= 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.039s) [RTD ] arrival OK (APPROACH_PLACE → PLACE, max|Δ|=1.50° <= 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.014s [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.54° <= tol 3.0°) [STEP 11] MOVE → HOME segment APPROACH_PLACE → HOME (1 回送信 speed=20 → 到達待ち 許容 2.5°[TOL_HOME(stage1_to_home / HOME 復帰)] / 最大 10.2s) [RTD ] 送信 OK(daemon 往復 1.028s) [RTD ] arrival OK (APPROACH_PLACE → HOME, max|Δ|=2.19° <= tol 2.5°) [Pi] fresh_mode=0 [RTD ] daemon_set_fresh_mode(0) 完了 [RTD ] 実測角の読み取り: ok 58/58 回, 実効 1.62 Hz(目標 3.0 Hz 以上) [RTD ] [WARN] 実測角の読み取りが目標 3.0 Hz を下回りました(1.62 Hz)。学習データの state 密度が 19 本より薄くなります [RTD ] send_angles の daemon 往復 (7 回): 平均 1.032s / p50 1.031s / 最大 1.040s(timeout 6.0s) [RTD ] [WARN] 送信 1 回に 1.040s かかった回があります。daemon は送信後に角度を読み直すので、動き始めで読めないと伸びます(単発送信なので試行全体への影響は小さい) [RTD ] 区間の所要(送信→到達確認まで)(8 区間): 平均 2.34s / 最大 4.46s [RECORD] 電流の記録終了 77 行 (2.15 行/秒. 本体が眠っている間だけ読む. 爪の間 14.051 秒は読まない. 見込み超え 0 回. read_servo) → /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_131103/recording/currents.csv ============================================================================== [RTD ] 再生 完了 ============================================================================== [RTD ] つかめたか (y/n) > y [RTD ] 箱に入ったか (y/n) > y [RTD ] 試行 JSON: /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/run_0001_20261109_131103/run_0001_20261109_131103.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_20261109_131103 --dataset mecharm_redblock_box_teach_v1 (base) shimazueiichi@shimadzueiichinoMacBook-Pro r2r2r-scripts %