diff --git "a/docs/02_PLAN/PLAN_01_\343\203\227\343\203\255\343\202\270\343\202\247\343\202\257\343\203\210\346\246\202\350\246\201.txt" "b/docs/02_PLAN/PLAN_01_\343\203\227\343\203\255\343\202\270\343\202\247\343\202\257\343\203\210\346\246\202\350\246\201.txt" index d071520..b5b3a30 100644 --- "a/docs/02_PLAN/PLAN_01_\343\203\227\343\203\255\343\202\270\343\202\247\343\202\257\343\203\210\346\246\202\350\246\201.txt" +++ "b/docs/02_PLAN/PLAN_01_\343\203\227\343\203\255\343\202\270\343\202\247\343\202\257\343\203\210\346\246\202\350\246\201.txt" @@ -59,16 +59,18 @@ 3-2. 操舵量計算の方針 - ・制御方式: PD 制御(ルールベース)を基本とする. + ・制御方式: PD 制御,2点パシュート制御,Theil-Sen PD 制御の + 3手法を切り替えて使用する(デフォルトは Theil-Sen PD). ・偏差の算出: カメラ画像から黒線の位置を検出し, 画像中心からのずれを偏差として用いる. - ・操舵: 偏差に基づく PD 制御で操舵量を決定する. - ・速度: 操舵量が大きいほど減速し,直線では加速する. + ・操舵: 偏差に基づく制御で操舵量を決定する. + ・速度: カーブの度合いに応じて動的に調整する(カーブ減速,直線加速). ※ 詳細な計算方法・パラメータは別ドキュメントにて定義する. 3-3. 実行環境 ・Raspberry Pi を使用する. - ・Raspberry Pi 単体で完結させるか,PC と連携させるかは未定. - ※ 現状は Raspberry Pi をメインの実行環境として想定する. + ・制御ループ(カメラ取得→画像処理→操舵計算→モーター制御)は + Pi 内で完結させ,通信遅延の影響を排除する. + ・PC はモニタリング GUI・パラメータ調整・手動操作を担当する. 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 b1730a3..e7158ae 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" @@ -230,7 +230,8 @@ ・全パラメータ(画像処理 + PD 制御 + 速度制御)を タイトル・メモ付きで JSON ファイルに保存できる. ・GUI のコンボボックスで保存済みパラメータを選択・読み込み可能. - ・保存ファイル: pd_params.json(.gitignore に登録済み) + ・保存ファイル: params/ ディレクトリ配下の各 JSON ファイル + (control.json,detect_*.json,pursuit.json,ts_pd.json 等) 7. 2点パシュート制御 (Two-Point Pursuit Control) @@ -278,7 +279,8 @@ 7-5. 実装ファイル - ・src/pc/steering/pursuit_control.py: PursuitControl クラス + ・src/pc/steering/pursuit_control.py: PursuitControl クラス(PC 側) + ・src/pi/steering/pursuit_control.py: PursuitControl クラス(Pi 側) ・src/pc/gui/main_window.py: 制御手法の切替 UI @@ -336,7 +338,8 @@ 8-6. 実装ファイル - ・src/pc/steering/ts_pd_control.py: TsPdControl クラス + ・src/pc/steering/ts_pd_control.py: TsPdControl クラス(PC 側) + ・src/pi/steering/ts_pd_control.py: TsPdControl クラス(Pi 側) ・src/pc/gui/main_window.py: 制御手法の切替 UI @@ -359,6 +362,8 @@ 9-3. 実装ファイル - ・src/pc/steering/recovery.py: RecoveryParams,RecoveryController + ・src/pc/steering/recovery.py: RecoveryParams,RecoveryController(PC 側) + ・src/pi/steering/recovery.py: RecoveryController(Pi 側) + ・src/pi/main.py: Pi 側での復帰ロジックの統合 ・src/pc/gui/panels/recovery_panel.py: RecoveryPanel - ・src/pc/gui/main_window.py: 復帰ロジックの統合 + ・src/pc/gui/main_window.py: 復帰パラメータ管理・Pi への送信 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 8555bb2..1ecda51 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" @@ -24,7 +24,7 @@ │ │ 画像処理・線検出 映像・状態表示 │ │ - 操舵量計算(PD 制御) パラメータ調整 + 操舵量計算(3手法切替) パラメータ調整 │ │ モーター制御 コマンド送信 │ (モード切替・手動操作) 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 23d8b3e..44eb31f 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" @@ -15,8 +15,8 @@ 1-1. 基本方針 ・オーバーレイはカメラ映像に重ねて描画する. - ・線検出は接続中は常に実行し,検出情報は映像下のラベルに表示する. - ・自動操縦中は操舵量計算で実行済みの検出結果を再利用する. + ・線検出は Pi 側で実行し,結果をテレメトリで PC に送信する. + ・検出情報は映像下のラベルに表示する. 2. 表示項目 (Overlay Items) @@ -61,6 +61,6 @@ 3-2. 動作モードとの関係 - ・手動操作中: 線検出を常に実行し,検出情報ラベルを更新する - ・自動操縦中: 操舵量計算の線検出結果をそのまま使用する + ・手動操作中・自動操縦中: Pi からのテレメトリに含まれる + 検出結果・二値画像を使用してオーバーレイを描画する ・未接続時: オーバーレイは表示されない(映像がないため) 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 b7c3e89..ba4689a 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" @@ -15,9 +15,10 @@ 1-1. 基本方針 ・全制御手法(PD / 2点パシュート / Theil-Sen PD)に共通で適用する - ・制御手法の外側(MainWindow)で復帰判定と操舵量の上書きを行う + ・Pi 側のメインループ(pi/main.py)で復帰判定と操舵量の上書きを行う ・復帰パラメータは GUI の折りたたみパネルでリアルタイムに調整可能 ・パラメータは JSON ファイルに自動保存・復元される + ・PC から復帰パラメータを更新すると Pi に送信され,即座に反映される 2. 復帰判定 (Recovery Trigger) @@ -64,13 +65,13 @@ 用途に応じて GUI で調整する. - 3-3. 処理フロー + 3-3. 処理フロー(Pi 側メインループ) 1. 各制御手法の compute() を通常通り呼び出す 2. 検出結果を RecoveryController.update() に渡す 3. update() が SteeringOutput を返した場合, 制御手法の出力を復帰用の出力で上書きする - 4. 上書きされた操舵量を Pi に送信する + 4. 上書きされた操舵量でモーターを制御する 4. パラメータ一覧 (Parameters) @@ -116,7 +117,9 @@ 6. 実装ファイル (Implementation Files) ------------------------------------------------------------------------ - ・src/pc/steering/recovery.py: RecoveryParams,RecoveryController + ・src/pi/steering/recovery.py: RecoveryController(Pi 側で復帰判定・操舵上書き) + ・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: 復帰ロジックの統合 + ・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 91f95fe..14c716c 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" @@ -15,7 +15,7 @@ 1-1. 全体方針 ・言語: Python で統一する(Pi 側・PC 側ともに). - ・既存資産: モーター制御コード(`src_old/pi/motor.py`)を参考にする. + ・既存資産: モーター制御コード(`src/pi/motor/driver.py`)を参考にする. ・選定基準: 低遅延・軽量・Python との親和性を重視する. @@ -28,8 +28,8 @@ ・通信パターン: PUB/SUB ・オプション: ZMQ_CONFLATE=1(受信側で最新メッセージのみ保持) ・用途: - - Pi → PC: カメラ画像の送信 - - PC → Pi: 操舵量(throttle,steer)の送信 + - Pi → PC: テレメトリ(カメラ画像・検出結果・操舵量)の送信 + - PC → Pi: コマンド(モード切替・パラメータ更新・手動操作)の送信 ■ 選定理由 ・ブローカー不要で軽量,低遅延に適している. @@ -63,11 +63,11 @@ 2-3. 画像処理: OpenCV(cv2) - ・用途: PC 側での画像処理・線検出 + ・用途: Pi 側・PC 側での画像処理・線検出 - グレースケール変換 - ガウシアンブラー - 二値化 - - 重心算出 + - 多項式フィッティング・Theil-Sen 近似 ■ 選定理由 ・ライントレースに必要な処理がすべて揃っている. @@ -87,14 +87,14 @@ ・用途: Pi 側での TB6612FNG モータードライバ制御 ■ 選定理由 - ・既存コード(`src/pi/motor.py`)をそのまま流用できる. + ・既存コード(`src/pi/motor/driver.py`)をそのまま流用できる. ・PWM 制御・GPIO 出力に必要な機能が揃っている. 2-6. 機械学習: scikit-learn ・ライブラリ: scikit-learn, joblib - ・用途: PC 側での十字路分類モデルの学習・推論 + ・用途: 十字路分類モデルの学習(PC 側)・推論(Pi 側・PC 側) - 複数モデルの交差検証による比較評価 - 最良モデルの保存・読み込み diff --git "a/docs/04_ENV/ENV_03_RaspPi\347\222\260\345\242\203\346\247\213\347\257\211\346\211\213\351\240\206.txt" "b/docs/04_ENV/ENV_03_RaspPi\347\222\260\345\242\203\346\247\213\347\257\211\346\211\213\351\240\206.txt" index 5b4f0ce..0a72ae5 100644 --- "a/docs/04_ENV/ENV_03_RaspPi\347\222\260\345\242\203\346\247\213\347\257\211\346\211\213\351\240\206.txt" +++ "b/docs/04_ENV/ENV_03_RaspPi\347\222\260\345\242\203\346\247\213\347\257\211\346\211\213\351\240\206.txt" @@ -59,8 +59,8 @@ $ bash deploy.sh 処理内容: - 1. Pi 側の common/,pi/ を削除 - 2. src/common/,src/pi/ を転送 + 1. Pi 側の common/,pi/,params/ を削除 + 2. src/common/,src/pi/,params/ を転送 3. .env,requirements_pi.txt を転送 ※ パスワードを複数回入力する必要がある. @@ -133,7 +133,7 @@ $ source .venv/bin/activate (.venv) $ python -m pi.main - 「Pi: カメラ・通信を開始」と表示されれば成功. + 「Pi: カメラ・通信・モーターを開始(自律モード)」と表示されれば成功. 4-2. PC 側の起動 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 525b5fd..c1294e2 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" @@ -28,13 +28,14 @@ ├── requirements_pi.txt ├── deploy.sh Pi への転送スクリプト ├── .env.example 環境変数テンプレート - ├── pd_params.json パラメータ保存ファイル(.gitignore) ├── docs/ ドキュメント + ├── params/ パラメータ・モデル(.gitignore) + ├── tests/ ユニットテスト ├── src/ 自律走行用ソースコード │ ├── common/ 共通設定(PC・Pi 両方で使用) │ ├── pc/ PC 側 │ └── pi/ Pi 側 - └── src_old/ 旧コード(参照用) + └── .venv/ 仮想環境(.gitignore) 2-2. src/common/ @@ -63,6 +64,7 @@ ├── comm/ 通信関連 │ └── zmq_client.py ZMQ テレメトリ受信・コマンド送信 ├── data/ 学習データ収集・仕分け・学習 + │ ├── __main__.py データ収集エントリーポイント │ ├── collector.py 二値画像のラベル付き保存 │ ├── reviewer.py 仕分けレビュー GUI │ ├── dataset.py データ読み込み