カメラ画像のみを用いて黒線コースを自律走行するロボットカーの制御システム.
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 |
| GUI | PySide6 |
| 画像処理 | 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 用依存パッケージ
python -m venv .venv
source .venv/bin/activate
pip install -r requirements_pc.txt
cp .env.example .env # IP アドレス・ポート番号を設定
# 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/ 以下を参照.
Rinto Hasegawa
MIT License