👻

【連載#1】Raspberry Pi × FlutterでフィジカルAI:動くデモから使える形へ(全体像と設計の型)

に公開

【連載#1】Raspberry Pi × FlutterでフィジカルAI:動くデモから使える形へ(全体像と設計の型)

この連載について(狙い)

この連載では、Raspberry Pi と Flutter を使って、カメラ入力から推論、ダッシュボード表示、そしてGPIOによる出力までを一つの作品として作ります。初回から設計も扱いますが、狙いは難しい理屈ではなく、手を動かして最後まで完成させることです。

単にAIモデルを動かすのではなく、実際に動かす場所で必要になりがちな要素を、最小構成で一通り押さえます。

  • 現実世界の入力(照明変動・ブレ・設置条件)
  • エッジ上の推論(計算資源・熱・遅延)
  • 状態表示(今どうなっているかを見せるUI)
  • 機械の行動(GPIO出力、状態機械で誤作動抑制、安全設計)
  • 使い続けるための仕組み(自動起動、ログ、切り分け、更新手順)

フィジカルAIとは何か(この連載での定義)

本連載では、フィジカルAIを次の閉ループとして定義します。

  1. センシング:カメラ等で物理世界を観測
  2. 推論:観測データから状態を推定(分類/検出など)
  3. アクション:人または機械が行動できる形に変換(UI/通知/GPIO制御)
  4. 使い続ける:落ちない・追える・直せる(ログ、復旧、更新)

重要なのは、モデル精度だけではなく「使う人が安心して動かせる形になっているか」です。
このため、序盤から安定して動かす条件や責務分割を前提に組み立てます。


なぜフィジカルAIは難しいのか(論点整理)

机上で動いても、実際に動かす場所では破綻しやすい理由がいくつかあります。

  • 入力が不安定:照明、反射、ブレ、汚れ、個体差
  • 計算資源が限定:GPU前提が使えない、熱で性能が落ちる
  • リアルタイム性:平均よりも安定した遅延が重要
  • 見える化不足:状態が分からないと使い続けられない
  • 使い続ける工夫が必要:再起動復帰、ログ、切り分けが必須

この連載は、これらを後回しにせず、章立ての中で順に潰します。


完成形(この連載で作るもの)

最終的な完成形は、次の構成です。

  • Raspberry Pi(エッジ)

    • カメラ入力取得
    • 軽量推論(TFLite等を想定)
    • FastAPIで推論結果と状態を配信(REST+リアルタイム)
    • GPIOでLED/ブザー等の機械出力(状態機械+安全設計込み)
    • ログ・スナップショット保存(再現性)
  • Flutter Web(UI)

    • 状態監視(死活、遅延、温度など)
    • 推論結果の一覧とライブ表示(オーバーレイ)
    • 自動/手動、停止/解除などの運用操作


全体アーキテクチャ図

Raspberry Pi上でカメラ入力を前処理し、TFLiteで推論し、その結果をFastAPIで配信します。Flutterは状態を表示し、操作はAPI経由でPi側のGPIO制御に反映します。

アーキテクチャ(最小構成・責務分割)

フィジカルAIは差し替えが前提です。モデルもUIも変わるため、責務で分けます。パーツを分けておくと、後からカメラやモデルだけ交換しても全体が崩れません。工作で言えば、基板ごと作り直さずに部品交換で済む状態を作ります。

  • Camera:フレーム取得(Pi Camera/USB)
  • Inference:推論(モデル差し替え可能)
  • API:配信(UI・外部連携の境界)
  • UI:可視化・操作(意思決定を支援)
  • Actuator:機械出力(GPIO)
  • Ops:ログ、復旧、自動起動、更新

データフロー(基本形)

  1. カメラからフレーム取得
  2. 推論(ラベル/スコア/bboxなど)
  3. APIで配信(JSON + 必要ならストリーム)
  4. UI表示/状態機械が必要に応じて機械出力
  5. ログ保存(原因追跡と改善に使う)

連載の設計方針(書籍化前提の固定ルール)

この連載では、各回の末尾に次を固定で入れます。

  • チェックリスト:その回でできるようになること
  • よくあるつまずき:詰まりやすい点と回避策
  • 次回の前提:次回に進む前に整っているべき状態

また、序盤から以下を「安定して動かす条件」として扱います。

  • 起動時OFF(安全側)
  • 異常時OFF(フェイルセーフ)
  • ログで追える(原因が分かる)
  • 再起動で復帰(止まりっぱなしにしない)
  • 安定遅延優先(ピークより安定)

リポジトリ雛形(この形で固定)

まずは、章としても流用しやすい形を確定します。

physical-ai-rpi/
backend/
app/
main.py
core/
services/
requirements.txt
README.md
frontend/
physical_ai_dashboard/
lib/
pubspec.yaml
README.md
docs/
architecture.md
scripts/
dev.ps1
dev.sh

  • backend:推論・API・ログ・機械出力(GPIO)
  • frontend:Flutter Web ダッシュボード
  • docs:書籍化時にそのまま使う設計資料
  • scripts:属人性を排除する実行手順

14章構成(この連載の全体ロードマップ)

本連載は 14章 で進めます。機械アクション(GPIO/状態機械/安全設計)を独立章にして、フィジカルAIとしての輪郭を明確にします。
1.フィジカルAI入門(本記事)
2.Raspberry Pi セットアップ標準化
3.カメラ入力パイプライン(安定取得)
4.推論基盤(軽量モデルで動かす)
5.推論API(FastAPI)
6.リアルタイム配信(映像+結果ストリーミング)
7.Flutterダッシュボード①(状態監視・結果一覧)
8.GPIO入門(LED/ブザーで機械を動かす)
9.状態機械(誤作動を潰す)
10.安全設計(フェイルセーフ/非常停止/監査ログ)
11.Flutterダッシュボード②(ライブ+オーバーレイ+制御UI)
12.ログとスナップショット(再現性)
13.自動起動と運用(systemd、更新、死活)
14.性能最適化と応用パターン(横展開できる型)

次回予告(第2章)

次回は Raspberry Pi を「動く」ではなく運用前提で標準化します。
SSH、時刻、ネットワーク、最低限のセキュリティまで整備し、現場に置ける地盤を作ります。

Discussion