robo8080さんのAIスタックチャンをベースに、次のように機能拡張しています。
- AI機能の拡張
- Module LLM(M5Stackの拡張モジュール)によるAI会話機能の完全ローカル化
- OpenAI Realtime APIによる遅延のない会話
- stackchan-arduinoライブラリに対応
- これにより、YAMLによる初期設定や、シリアルサーボへの対応が可能になりました。
- ユーザアプリケーションを追加作成しやすいクラス設計
スタックチャンはししかわさんが開発、公開している、手乗りサイズのスーパーカワイイコミュニケーションロボットです。
Table of Contents
- ターゲットデバイス:M5Stack Core2 / CoreS3
- 開発PC:
- OS: Windows11
- IDE:VSCode + PlatformIO
robo8080さんのAIスタックチャンの仕組みを継承した基本的なAI会話機能(LLM、STT、TTSのWeb APIの連携によるAI会話)を利用する場合はこちらのページに従って設定、ビルドしてください。
LLM、STT、TTSをModule LLMのAPIに置き換えることで、AI会話機能を完全ローカル化することができます。
上記の基本的な利用方法をご確認の上、こちらのページに従って設定してください。
上記の従来のAI会話機能は、STTで音声をテキストに変換→テキストをLLMに入力→LLMのテキスト出力をTTSで音声に変換というステップが必要なため各APIにおける遅延が重なり応答に10秒以上かかっていました。Realtime APIを利用すると、音声データを直接LLMに入力でき、応答も音声データで返ってくるため、遅延を最小限に抑えられます。
Realtime APIを利用する際は、こちらのページに従って設定してください。
moddable版スタックチャン(本家と呼ばれている、ししかわさん公開のリポジトリ)のMODを参考に、ユーザアプリケーションを作成できるようにしました。
ユーザアプリケーションのソースコードはmodフォルダに格納しており、すでに下表に示すアプリケーションが入っています。 これらを参考に新たなアプリケーションを作成し追加することも可能です。
| No. | アプリ名 | 説明(使い方) | 補足 |
|---|---|---|---|
| 1 | AIスタックチャン | 本リポジトリのメインアプリです。 | |
| 2 | ポモドーロタイマ | 25分のアラームと5分のアラームを交互に繰り返すアプリです。 ボタンA:スタート/ストップ ボタンC:無音モード解除/設定 |
初期状態は無音モードです。 |
| 3 | デジタルフォトフレーム | SDカードのフォルダ "/app/AiStackChanEx/photo" に保存したJPEGファイルをLCDに表示します。 ボタンA:次の写真を表示 ボタンC:スライドショー開始 |
・SDカードに保存するJPEGファイルはサイズを320x240にしておく必要があります。 ・開発中、SDカードがマウント不可になり、再フォーマットしないと復旧しない事象が発生していました。改善したつもりですが、念のためSDカードのデータはバックアップをお願いします。 |
| 4 | ステータスモニタ | 各種システム情報を表示します。 |
アプリケーションは下記コードのように複数登録できます。実行中にLCDを左右にフリックすることで切り替えることができます(Xの動画)。
[main.cpp]
ModBase* init_mod(void)
{
ModBase* mod;
add_mod(new AiStackChanMod()); // AI Stack-chan
add_mod(new PomodoroMod()); // Pomodoro Timer
add_mod(new StatusMonitorMod()); // Status Monitor
mod = get_current_mod();
mod->init();
return mod;
}SD Updaterに対応し、NoRiさんのBinsPack-for-StackChan-Core2で公開されている他のSD Updater対応アプリとの切り替えが可能になりました。
【適用方法】
① env:m5stack-core2-sduでビルドする。
② ビルド結果の.pio/build/m5stack-core2-sdu/firmware.binを適切な名前(AiStackChanEx.bin等)に変更し、SDカードのルートディレクトリにコピーする。
・現状、Core2 V1.1ではランチャーソフトが動作しないため切り替えはできません。
- 顔を検出すると音声認識を起動します。
- LCD中央左側をタッチするとサイレントモードになり、顔検出しても起動しません。(代わりに、顔検出している間スタックチャンが笑顔になります。)
- LCDの左上隅にカメラ画像が表示されます。画像部分をタッチすると表示ON/OFFできます。
※顔検出は初期状態ではplatformio.iniで以下のようにコメントアウトし無効化しています。有効化する際はDENABLE_CAMERAとDENABLE_FACE_DETECTを有効化してください。
build_flags=
-DBOARD_HAS_PSRAM
-DARDUINO_M5STACK_CORES3
;-DENABLE_CAMERA
;-DENABLE_FACE_DETECT
-DENABLE_WAKEWORD
issue、プルリクエストも歓迎です。問題や改善案がありましたら、まずはissueでご連絡ください。
また、Sponsorとしてご支援いただけると大変助かります。日々のトラブルシューティング、お問い合わせへの対応、新しいハードウェアのサポートなどに役立てさせていただきます。
ご支援いただく際は、次に示す本リポジトリの方針もご理解いただけますと幸いです。
現状、趣味の範囲での活動ではありますが、次のような方針のもとに開発しています。
- AI音声アシスタントとしての性能の追求
生成AI関連のニュースが次々と発表され、スタックチャンをAI音声アシスタントとして実用的なレベルに近づけられる可能性が高まっています。これまでの開発でリアルタイム音声会話、MCPによる機能拡張を実現しており、今後は長期記憶(電源を入れなおしても最近の会話内容を覚えている)の実装を目指しています。 - 派生開発のベースとしての公開
本リポジトリの成果をたくさんの方々のAIスタックチャン開発のベースとして役立てていただけるよう、シンプルで汎用的な設計を目指しています。 - 新しいハードウェアへの対応
上記の方針に影響しない範囲で、ModuleLLMのような今後の発展が期待できる新しいハードウェアもカバーしていきたいと考えています。 - 本家スタックチャン リポジトリへの貢献
本リポジトリは、いわゆる「本家」や「TypeScript版」と呼ばれるししかわ氏のリポジトリをリスペクトし、一部の設計はその影響を受けています。本リポジトリで得られた成果を用いて、本家スタックチャンの発展にも貢献したいと考えています(私がTypeScriptのスキルがないため、現状はあまり実現できていません。スキルのある方はぜひご検討ください)。