diff --git "a/docs/03_TECH/TECH_01_\346\223\215\350\210\265\351\207\217\350\250\210\347\256\227\344\273\225\346\247\230.txt" "b/docs/03_TECH/TECH_01_\346\223\215\350\210\265\351\207\217\350\250\210\347\256\227\344\273\225\346\247\230.txt" index dcafd87..5ca614b 100644 --- "a/docs/03_TECH/TECH_01_\346\223\215\350\210\265\351\207\217\350\250\210\347\256\227\344\273\225\346\247\230.txt" +++ "b/docs/03_TECH/TECH_01_\346\223\215\350\210\265\351\207\217\350\250\210\347\256\227\344\273\225\346\247\230.txt" @@ -179,7 +179,7 @@ 詳細は `TECH_04_線検出精度向上方針.txt` を参照する. 1. 現行手法(CLAHE + 固定閾値) - ・画像解像度: 320x240 + ・撮影解像度: 320×240(処理時は 40×30 に縮小) ・CLAHE 強度(clahe_clip): 2.0 ・CLAHE 分割数(clahe_grid): 8 ・ブラーカーネルサイズ(blur_size): 5 @@ -212,6 +212,26 @@ ・距離変換閾値(dist_thresh): 3.0 ・最小線幅(min_line_width): 3 ・RANSAC 閾値(ransac_thresh): 5.0 + ・RANSAC 反復回数(ransac_iter): 50 + + 5. 案D: 谷検出+追跡型 + ・行ごとガウシアンカーネルサイズ(valley_gauss_ksize): 15 + ・谷として認識する最小深度(valley_min_depth): 15.0 + ・追跡予測からの最大許容偏差(valley_max_deviation): 40.0 + ・検出失敗時の予測継続フレーム数(valley_coast_frames): 3 + ・多項式係数の指数移動平均係数(valley_ema_alpha): 0.7 + + ■ 共通後処理パラメータ(案A〜D で使用,GUI で調整可能) + + ・段階クロージング第1段サイズ(stage_close_small): 5 + ・孤立除去の最小面積(stage_min_area): 0(0 で無効) + ・段階クロージング第2段サイズ(stage_close_large): 0(0 で無効) + ・画像下端での期待線幅(width_near): 0(0 で無効) + ・画像上端での期待線幅(width_far): 0(0 で無効) + ・幅フィルタの上限倍率(width_tolerance): 1.8 + ・中心点列の移動メディアンフィルタサイズ(median_ksize): 7 + ・近傍外れ値除去の閾値(neighbor_thresh): 10.0 + ・残差反復除去の閾値(residual_thresh): 8.0 ■ PD 制御パラメータ(GUI で調整可能) diff --git "a/docs/03_TECH/TECH_02_\343\202\267\343\202\271\343\203\206\343\203\240\346\247\213\346\210\220\344\273\225\346\247\230.txt" "b/docs/03_TECH/TECH_02_\343\202\267\343\202\271\343\203\206\343\203\240\346\247\213\346\210\220\344\273\225\346\247\230.txt" index 5f0c308..836ba62 100644 --- "a/docs/03_TECH/TECH_02_\343\202\267\343\202\271\343\203\206\343\203\240\346\247\213\346\210\220\344\273\225\346\247\230.txt" +++ "b/docs/03_TECH/TECH_02_\343\202\267\343\202\271\343\203\206\343\203\240\346\247\213\346\210\220\344\273\225\346\247\230.txt" @@ -42,16 +42,17 @@ 2-2. 画像処理・線検出 - ・取得した画像から黒線の位置を検出する. - ・処理手順: - 1. CLAHE によるコントラスト強調 - 2. ガウシアンブラー(ノイズ除去) - 3. 固定閾値で二値化 - 4. オープニングで孤立ノイズ除去 - 5. 横方向クロージングで途切れ補間 - 6. 白ピクセルに2次多項式フィッティング - ・位置偏差・傾きを算出する. - ・詳細は `TECH_01_操舵量計算仕様.txt` を参照する. + ・取得した画像を 40×30 に縮小し,黒線の位置を検出する. + ・5 種類の検出手法を GUI から切り替えて使用できる: + - 現行(CLAHE + 固定閾値) + - 案A(Black-hat 中心) + - 案B(二重正規化) + - 案C(最高ロバスト) + - 案D(谷検出+追跡) + ・各手法の処理パイプラインは異なるが, + 出力は共通のデータ構造(位置偏差・傾き・二値画像等)に統一される. + ・詳細は `TECH_01_操舵量計算仕様.txt` および + `TECH_04_線検出精度向上方針.txt` を参照する. 2-3. 操舵量計算 @@ -186,6 +187,8 @@ - is_intersection: 十字路判定結果 - is_recovering: 復帰動作中か - fps: Pi 側の処理 FPS + - intersection_available: 十字路分類器の読み込み済み状態 + - compute_ms: 操舵計算の平均処理時間(ミリ秒) ・PC 側はバージョン不一致のメッセージを破棄する. ■ コマンド(PC → Pi,ZMQ PUB/SUB) diff --git "a/docs/03_TECH/TECH_03_\343\203\207\343\203\220\343\203\203\343\202\260\343\202\252\343\203\274\343\203\220\343\203\274\343\203\254\343\202\244\344\273\225\346\247\230.txt" "b/docs/03_TECH/TECH_03_\343\203\207\343\203\220\343\203\203\343\202\260\343\202\252\343\203\274\343\203\220\343\203\274\343\203\254\343\202\244\344\273\225\346\247\230.txt" index 44eb31f..4259891 100644 --- "a/docs/03_TECH/TECH_03_\343\203\207\343\203\220\343\203\203\343\202\260\343\202\252\343\203\274\343\203\220\343\203\274\343\203\254\343\202\244\344\273\225\346\247\230.txt" +++ "b/docs/03_TECH/TECH_03_\343\203\207\343\203\220\343\203\203\343\202\260\343\202\252\343\203\274\343\203\220\343\203\274\343\203\254\343\202\244\344\273\225\346\247\230.txt" @@ -33,6 +33,8 @@ ・パシュート目標点: 2点パシュートの near/far 目標点をシアンの 円(半径 2px)で描画.制御手法がパシュートのとき有効 (手動操作中は検出結果からプレビュー表示) + ・十字路判定枠: 十字路と判定された場合に画像全体の枠を赤色で + 描画する(常時有効,チェックボックスによる切替なし) 2-2. 検出情報ラベル(常時表示) @@ -47,6 +49,7 @@ ・行中心点: (0, 165, 255) オレンジ ・Theil-Sen 直線: (255, 0, 255) マゼンタ ・パシュート目標点: (255, 255, 0) シアン + ・十字路判定枠: (0, 0, 255) 赤 ・二値化オーバーレイ: 赤チャンネルに二値化画像を割り当て diff --git "a/docs/03_TECH/TECH_05_\343\202\263\343\203\274\343\202\271\343\202\242\343\202\246\343\203\210\345\276\251\345\270\260\344\273\225\346\247\230.txt" "b/docs/03_TECH/TECH_05_\343\202\263\343\203\274\343\202\271\343\202\242\343\202\246\343\203\210\345\276\251\345\270\260\344\273\225\346\247\230.txt" index ba4689a..6b9902b 100644 --- "a/docs/03_TECH/TECH_05_\343\202\263\343\203\274\343\202\271\343\202\242\343\202\246\343\203\210\345\276\251\345\270\260\344\273\225\346\247\230.txt" +++ "b/docs/03_TECH/TECH_05_\343\202\263\343\203\274\343\202\271\343\202\242\343\202\246\343\203\210\345\276\251\345\270\260\344\273\225\346\247\230.txt" @@ -117,9 +117,8 @@ 6. 実装ファイル (Implementation Files) ------------------------------------------------------------------------ - ・src/pi/steering/recovery.py: RecoveryController(Pi 側で復帰判定・操舵上書き) + ・src/common/steering/recovery.py: RecoveryParams,RecoveryController ・src/pi/main.py: Pi 側メインループでの復帰ロジック統合 - ・src/pc/steering/recovery.py: RecoveryParams,RecoveryController(PC 側) ・src/pc/gui/panels/recovery_panel.py: RecoveryPanel ・src/pc/gui/main_window.py: 復帰パラメータ管理・Pi への送信 ・src/pc/steering/auto_params.py: save_recovery / load_recovery diff --git "a/docs/04_ENV/ENV_01_\346\212\200\350\241\223\343\202\271\343\202\277\343\203\203\343\202\257\351\201\270\345\256\232.txt" "b/docs/04_ENV/ENV_01_\346\212\200\350\241\223\343\202\271\343\202\277\343\203\203\343\202\257\351\201\270\345\256\232.txt" index 14c716c..5a48670 100644 --- "a/docs/04_ENV/ENV_01_\346\212\200\350\241\223\343\202\271\343\202\277\343\203\203\343\202\257\351\201\270\345\256\232.txt" +++ "b/docs/04_ENV/ENV_01_\346\212\200\350\241\223\343\202\271\343\202\277\343\203\203\343\202\257\351\201\270\345\256\232.txt" @@ -126,6 +126,9 @@ ・Picamera2: カメラフレーム取得 ・RPi.GPIO: モーター制御 + ・OpenCV: 画像処理・線検出 + ・scikit-learn: 十字路分類モデルの推論 + ・joblib: モデルとスケーラの読み込み ・pyzmq: PC との通信 ・python-dotenv: 環境変数管理 diff --git "a/docs/04_ENV/ENV_02_PC\347\222\260\345\242\203\346\247\213\347\257\211\346\211\213\351\240\206.txt" "b/docs/04_ENV/ENV_02_PC\347\222\260\345\242\203\346\247\213\347\257\211\346\211\213\351\240\206.txt" index 3c8a5eb..86621d4 100644 --- "a/docs/04_ENV/ENV_02_PC\347\222\260\345\242\203\346\247\213\347\257\211\346\211\213\351\240\206.txt" +++ "b/docs/04_ENV/ENV_02_PC\347\222\260\345\242\203\346\247\213\347\257\211\346\211\213\351\240\206.txt" @@ -73,6 +73,9 @@ ・pyzmq (27.1.0): ZMQ 通信 ・numpy (2.4.3): 数値計算(OpenCV の依存ライブラリ) ・python-dotenv (1.2.2): .env ファイルからの環境変数読み込み + ・scikit-learn (1.6.1): 十字路分類モデルの学習・推論 + ・joblib (1.4.2): モデルのシリアライズ + ・pytest (9.0.2): ユニットテスト 3-3. インストール確認 diff --git "a/docs/04_ENV/ENV_04_\343\203\207\343\202\243\343\203\254\343\202\257\343\203\210\343\203\252\346\247\213\346\210\220.txt" "b/docs/04_ENV/ENV_04_\343\203\207\343\202\243\343\203\254\343\202\257\343\203\210\343\203\252\346\247\213\346\210\220.txt" index f0efba8..2e61175 100644 --- "a/docs/04_ENV/ENV_04_\343\203\207\343\202\243\343\203\254\343\202\257\343\203\210\343\203\252\346\247\213\346\210\220.txt" +++ "b/docs/04_ENV/ENV_04_\343\203\207\343\202\243\343\203\254\343\202\257\343\203\210\343\203\252\346\247\213\346\210\220.txt" @@ -26,10 +26,16 @@ ├── CLAUDE.md ├── requirements_pc.txt ├── requirements_pi.txt + ├── pytest.ini テスト設定(pythonpath・testpaths) ├── deploy.sh Pi への転送スクリプト ├── .env.example 環境変数テンプレート ├── docs/ ドキュメント ├── params/ パラメータ・モデル(.gitignore) + ├── data/ 学習データ(.gitignore) + │ ├── raw/ 収集した二値画像(未仕分け) + │ └── confirmed/ 仕分け済み画像 + │ ├── intersection/ 十字路画像 + │ └── normal/ 通常画像 ├── tests/ ユニットテスト ├── src/ 自律走行用ソースコード │ ├── common/ 共通設定(PC・Pi 両方で使用) @@ -87,7 +93,7 @@ ├── comm/ 通信関連 │ └── zmq_client.py ZMQ テレメトリ受信・コマンド送信 ├── data/ 学習データ収集・仕分け・学習 - │ ├── __main__.py データ収集エントリーポイント + │ ├── __main__.py 学習スクリプトエントリーポイント │ ├── collector.py 二値画像のラベル付き保存 │ ├── reviewer.py 仕分けレビュー GUI │ ├── dataset.py データ読み込み