@rintoHasegawa rintoHasegawa authored 19 days ago
GitHub committed 19 days ago
docs [add] テスト方針ドキュメントを作成し CLAUDE.md に参照を追記 19 days ago
src [add] dual_norm 各ステップの処理時間内訳を3秒間隔でコンソール出力 20 days ago
tests [clean] 操舵テスト追加・マジックナンバー集約・引数整理・テレメトリバージョニング 20 days ago
.env.example [add] プロジェクト初期構成(ドキュメント・環境設定) 28 days ago
.gitignore [add] 十字路検出用の二値画像データ収集機能を追加 21 days ago
CLAUDE.md [add] テスト方針ドキュメントを作成し CLAUDE.md に参照を追記 19 days ago
LICENSE [add] README.md と MIT LICENSE を作成 19 days ago
README.md [add] README.md と MIT LICENSE を作成 19 days ago
deploy.sh [add] Pi 側で検出手法・制御手法の切り替えに対応 20 days ago
pytest.ini [add] 全モジュールのユニットテスト48件とpytest環境を追加 23 days ago
requirements_pc.txt [add] 十字路分類モデルの学習・評価スクリプトを追加 21 days ago
requirements_pi.txt [add] Pi 側で検出手法・制御手法の切り替えに対応 20 days ago
README.md

RobotCar — カメラ搭載ライントレース自律走行システム

カメラ画像のみを用いて黒線コースを自律走行するロボットカーの制御システム. Raspberry Pi がリアルタイム制御を担当し,PC が GUI モニタリング・パラメータ調整を担当する.

システム概要

Raspberry Pi                         PC
────────────                         ──
カメラ撮影                           テレメトリ受信
    │                                │
画像処理・線検出                     映像・状態表示
    │                                │
操舵量計算(3手法切替)              パラメータ調整
    │                                │
モーター制御                         コマンド送信
    │                            (モード切替・手動操作)
    └──── テレメトリ(ZMQ) ──────>     │
    ┌──── コマンド受信   <──────      │
  • 制御ループ(カメラ取得 → 画像処理 → 操舵計算 → モーター制御)は Pi 内で完結し,通信遅延の影響を受けない
  • PC はモニタリング GUI・パラメータ調整・手動操作のみを担当

主な機能

機能概要
線検出5 種類の検出手法を GUI から切替可能(CLAHE,Black-hat,二重正規化,ロバスト,谷検出)
操舵制御PD 制御・2点パシュート制御・Theil-Sen PD 制御の 3 手法を切替可能
速度制御カーブの度合いに応じて動的に減速・加速
十字路判定SVM 分類器で十字路を検出し直進に切替
コースアウト復帰線を見失った場合に自動で復帰動作を実行
パラメータ調整GUI スライダーでリアルタイムに変更・プリセット保存
手動操作キーボード入力による手動走行モード

ハードウェア構成

  • メインコンピュータ: Raspberry Pi
  • カメラ: Raspberry Pi カメラモジュール(車体前方,真下向き)
  • モータードライバ: TB6612FNG
  • 駆動方式: 差動 2 輪駆動(左右モーターの回転速度差で旋回)

技術スタック

用途ライブラリ
通信ZeroMQ (pyzmq) — PUB/SUB + CONFLATE
GUIPySide6
画像処理OpenCV
数値計算NumPy
カメラ制御Picamera2
モーター制御RPi.GPIO
十字路分類scikit-learn
環境変数python-dotenv

ディレクトリ構成

RobotCar/
├── src/
│   ├── common/          共通設定・画像処理・操舵量計算
│   │   ├── vision/      線検出パイプライン・検出手法・十字路分類
│   │   └── steering/    PD制御・パシュート制御・Theil-Sen PD制御・復帰制御
│   ├── pc/              PC側(GUI・テレメトリ受信・コマンド送信)
│   └── pi/              Pi側(カメラ・モーター・自律制御ループ)
├── docs/                ドキュメント
├── tests/               ユニットテスト
├── params/              パラメータ・モデル
├── data/                学習データ(十字路分類用)
├── deploy.sh            Pi への転送スクリプト
├── requirements_pc.txt  PC 用依存パッケージ
└── requirements_pi.txt  Pi 用依存パッケージ

セットアップ

PC

python -m venv .venv
source .venv/bin/activate
pip install -r requirements_pc.txt
cp .env.example .env   # IP アドレス・ポート番号を設定

Raspberry Pi

# PC から Pi へファイルを転送
./deploy.sh

# Pi 上で仮想環境を構築
python -m venv .venv
source .venv/bin/activate
pip install -r requirements_pi.txt

詳細は docs/04_ENV/ を参照.

実行方法

# Pi 側(自律制御ループ)
python -m src.pi.main

# PC 側(GUI)
python -m src.pc.main

ドキュメント

詳細な仕様は docs/ 以下を参照.

ガイドライン(01_GUIDE)

ファイル内容
GUIDE_01_ドキュメント作成ガイド句読点は「,」「.」,見出し書式等
GUIDE_02_ドキュメント命名規則[カテゴリ]_[連番]_[ファイル名].txt
GUIDE_03_Git運用ルールブランチ命名,コミットメッセージ規約
GUIDE_04_コーディング規則PEP 8 ベース,snake_case,型ヒント必須
GUIDE_05_コードコメント規則docstring は日本語,Google スタイル

プロジェクト計画(02_PLAN)

ファイル内容
PLAN_01_プロジェクト概要目的・最終目標・ハードウェア構成・システム概要

技術仕様(03_TECH)

ファイル内容
TECH_01_操舵量計算仕様PD 制御・パシュート制御・Theil-Sen PD 制御,速度制御,レートリミッター
TECH_02_システム構成仕様Pi/PC の役割分担,通信フロー,ZMQ プロトコル詳細
TECH_03_デバッグオーバーレイ仕様オーバーレイ表示項目,描画色,GUI 操作
TECH_04_線検出精度向上方針線検出の課題(照明・影),5 種類の検出手法の方針
TECH_05_コースアウト復帰仕様復帰判定ロジック,復帰動作,パラメータ一覧
TECH_06_十字路分類モデル評価モデル比較結果,採用モデル,F1 スコア(学習時に自動生成)

環境構築(04_ENV)

ファイル内容
ENV_01_技術スタック選定ZMQ,PySide6,OpenCV,Picamera2 等の選定理由
ENV_02_PC環境構築手順venv 作成,ライブラリインストール
ENV_03_RaspPi環境構築手順SSH 接続,deploy.sh による転送,venv 構築
ENV_04_ディレクトリ構成src/ の詳細構成と各ファイルの役割

テスト(05_TEST)

ファイル内容
TEST_01_テスト方針テスト方針,実行方法,構成,追加ルール

作成者

Rinto Hasegawa

ライセンス

MIT License