0. 結論(いま何ができているか)
- SCOUTは
/cmd_velを自由に握れないが、/UtilNode/algo_moveと/UtilNode/algo_actionで確実に動かせる。 - カメラは SCOUT側の
/CoreNode/h264から、h264_to_image.pyで/scout/camera/image_rawに変換して使える(保存はしない=流すだけ)。 - Teach/Repeatのデータ整形(bag→画像、cmd突合、ROT除外、clean list)は一式揃っており、VPR評価(edges/windowed/benchmark)までのパイプラインは成立。
auto_step_and_check.pyにより、実機で 「0.1m前進 → 停止確認 → 1枚撮影 → VPR照合 → 判定 → 次へ」 が回る。ログ(auto_log.csv/vpr_match.csv/ step画像)が残る。- 実走行では 壁に接触して進めなくなったときに
hold_window_failが連続し、HOLDで安全停止できた(狙い通り)。 - ToF
/SensorNode/tofはrange: -infで 現状は衝突回避に使えない(無効値)。
1. 現状の運用フロー(実機)
1) 画像トピックを作る(必須)
h264_to_image.py:/CoreNode/h264→/scout/camera/image_raw- 保存はしない(流すだけ)
2) 自動ステップ走行(実験の中核)
auto_step_and_check.py で:
/UtilNode/algo_moveで 0.1m 前進/MotorNode/baselink_odom_relativeなどで停止確認/scout/camera/image_rawから1枚保存vpr_windowed.pyを呼び出して teach 対応 idx を推定- 失敗指標(HOLD/LOWGAP/JUMP/REVERSEなど)で停止
auto_log.csvとvpr_match.csvと step画像が残る
2. いま出ている重要な観測(研究的に強い)
A) 「壁に当たる→視界が変わらない→HOLD停止」
最後のログではhold_window_fail が連続し、reason_code=HOLD で停止。
これは「位置推定が正しい」よりも、“進行不能の検出”として強い成果。
B) 「見た目は一致しないのに idx が張り付く」
人間の目では teach画像と repeat画像が一致しない場面でも、VPRが同じbest_teach_idx に張り付くことがある。
これは異常というより、
- 近接で視界が単調になる
- windowedが局所に張り付く という現象で、“失敗(進行不能)局在化”の指標として使える。
C) ToF は使えない(現状)
/SensorNode/tof が -inf を返しており、現状は VPR単独停止で成立している。
3. 現状の課題(ただし優先度を付ける)
すぐ直さなくて良い
- 起動が遅い(初期キャリブレーションが重い) → 研究としては本質ではない。あとで最適化でOK。
近いうちに必ず必要
- 「ぶつかる前に止める」安全層
- ToFが無効なら、別手段が必要(例:ToFの有効化条件調査、あるいは別センサ/別topic)。
- 停止地点の “再現性” を取る
- 同じ teach を使って別日に repeatし、どの idx で止まるかが再現できれば、研究として一気に強くなる。
- ログの位置情報が 0 の件(odom)
- 解析のため、少なくとも「step数」「teach_idx」「画像」を主軸にし、odomは使えるなら後で改善。
4. 今後どう進めるべきか(最短ロードマップ)
ここからは「実験→結果→改善」のループを回すのが最短です。Phase 1:再現性のある“停止実験”を確立(最優先)
目的:「どこで止まるか」を成果にする- 同じ teach(
teach_20260109_route1)で repeatを複数回 - 得るもの:
stop_step_idstop_best_teach_idxstop_reason_code(多分HOLD)vpr_match.csvの停止直前3行- 停止時画像(step_XXXXX.png)
成果の言い方(論文向き)
- “VPR-driven failure detection / failure localization”
- “hold_window_fail as an operational failure metric”
Phase 2:安全層(衝突前停止)を作る
目的:壁ドンを減らす(実験の回転率を上げる) 優先順はこう:- ToFが -inf になる条件を調べる
- patrol/モード/設定/障害物検出のON/OFFで変わる可能性が高い
rangeが正常値になるなら一番簡単に解決
- ToFがダメなら次善策
- stepを小さく(0.10 → 0.05)
- “直進しないで止める”ルール(VPRの兆候を早めに使う)
hold_window_failが 1回出たら「次の step を半分」にする、など
Phase 3:復帰(回避・バック・旋回)の研究へ
目的:止まったあとにどうするか(ここが次の論文ネタ) 最初は単純でOK:- STOPしたら
nav_cancel- 5cm後退(algo_move y=-0.05)
- 小旋回(algo_action rot 0.4 rad/s × 0.5s)
- もう一回VPR
- これを “recovery policy” としてログ化
5. 次にやる具体タスク(あなた向けチェックリスト)
すぐやる(おすすめ)
- repeatを 同じ環境で3回回して、停止時の
- auto_log最後3行
- vpr_match最後3行
- 停止画像 を集める
- 停止の teach_idx の分布を見る(±何で収束するか)
その次
- ToFが
-infじゃなくなる条件調査(設定/モード/トピック) - ぶつかる前停止が可能なら
auto_step_and_checkに前段フィルタとして実装
必要なら、あなたがアップした
auto_log.csv を元に「停止idxの分布」「hold連発の長さ」「sim/gapの推移」をこちらで表にして、研究結果として見える形に整形します。




