robo8080さんのAIスタックチャンをベースに、以下のような機能拡張を行っています。
- 対応AIサービスの追加 (太字が追加対応したもの)
- LLM: OpenAI ChatGPT / ModuleLLM
- STT: OpenAI Whisper / Google Cloud STT / ModuleLLM ASR
- TTS: OpenAI TTS / WEB VOICEVOX / ElevenLabs / AquesTalk / ModuleLLM TTS
- Wake Word: SimpleVox / ModuleLLM KWS
- stackchan-arduinoライブラリに対応
- これにより、YAMLによる初期設定や、シリアルサーボへの対応が可能になりました。
- ユーザアプリケーションを追加作成しやすいクラス設計
スタックチャンはししかわさんが開発、公開している、手乗りサイズのスーパーカワイイコミュニケーションロボットです。
Table of Contents
- デバイス:M5Stack Core2 / CoreS3
- IDE:VSCode Platformio (Arduino)
会話に必要な各種AIサービスの対応状況を示します。
どのAIサービスを利用するかは、SDカード上のYAMLファイルの設定で選択できます(APIキーは別途取得していただく必要があります)。
| ローカル実行 | 日本語 | 英語 | 備考 | |
|---|---|---|---|---|
| OpenAI ChatGPT | × | 〇 | 〇 | ・Function Callingに対応詳細ページ ・CoreS3のカメラ画像を入力可能詳細ページ |
| ModuleLLM | 〇 | 〇 | 〇 | ModuleLLMを使用する際の設定方法をご確認ください 英語ですがFunction Callingにも対応できます(同ページの付録A参照) |
| ローカル実行 | 日本語 | 英語 | 備考 | |
|---|---|---|---|---|
| Google Cloud STT | × | 〇 | 〇 | |
| OpenAI Whisper | × | 〇 | 〇 | |
| ModuleLLM ASR | 〇 | × | 〇 | ModuleLLMを使用する際の設定方法をご確認ください |
| ローカル実行 | 日本語 | 英語 | 備考 | |
|---|---|---|---|---|
| Web版VoiceVox | × | 〇 | × | |
| ElevenLabs | × | 〇 | 〇 | |
| OpenAI TTS | × | 〇 | 〇 | |
| AquesTalk | 〇 | 〇 | × | 別途ライブラリと辞書データのダウンロードが必要。詳細ページ |
| ModuleLLM TTS | 〇 | × | 〇 | ModuleLLMを使用する際の設定方法をご確認ください |
| ローカル実行 | 日本語 | 英語 | 備考 | |
|---|---|---|---|---|
| SimpleVox | × | 〇 | 〇 | 詳細ページ |
| ModuleLLM KWS | 〇 | × | 〇 | ・ModuleLLMを使用する際の設定方法をご確認ください ・"Hi Stack"等、日本語環境でも使いやすいワードにすることは可 |
SDカードに保存するYAMLファイルで各種設定を行います。
YAMLファイルは次の3種類があります。
- SC_SecConfig.yaml
Wi-Fiパスワード、APIキーの設定。(扱いに注意が必要な情報) - SC_BasicConfig.yaml
サーボに関する設定。 - SC_ExConfig.yaml
その他、アプリ固有の設定。
SDカードフォルダ:/yaml
ファイル名:SC_SecConfig.yaml
Wi-Fiパスワード、各種AIサービスのAPIキーを設定します。
wifi:
ssid: "********"
password: "********"
apikey:
stt: "********" # ApiKey of SpeechToText Service (OpenAI Whisper/ Google Cloud STT 何れかのキー)
aiservice: "********" # ApiKey of AIService (OpenAI ChatGPT)
tts: "********" # ApiKey of TextToSpeech Service (VoiceVox / ElevenLabs/ OpenAI 何れかのキー)
SDカードフォルダ:/yaml
ファイル名:SC_BasicConfig.yaml
サーボに関する設定をします。
servo:
pin:
# ServoPin
# Core1 PortA X:22,Y:21 PortC X:16,Y:17
# Core2 PortA X:33,Y:32 PortC X:13,Y:14
# CoreS3 PortC X:18,Y:17
# Stack-chanPCB Core1 X:5,Y:2 Core2 X:19,Y27
# When using SCS0009, x:RX, y:TX (not used).(StackchanRT Version:Core1 x16,y17, Core2: x13,y14)
x: 33
y: 32
center:
# SG90 X:90, Y:90
# SCS0009 X:150, Y:150
# Dynamixel X:180, Y:270
x: 90
y: 90
offset:
# Specified by +- from 90 degree during servo initialization
x: 0
y: 0
servo_type: "PWM" # "PWM": SG90PWMServo, "SCS": Feetech SCS0009
SC_BasicConfig.yamlには他にも様々な基本設定が記述されていますが、現状、本ソフトが対応しているのは上記の設定のみです。
SDカードフォルダ:/app/AiStackChanEx
ファイル名:SC_ExConfig.yaml
AIサービスの選択や、サービス毎のパラメータを設定します。
llm:
type: 0 # 0:ChatGPT 1:ModuleLLM
tts:
type: 0 # 0:VOICEVOX 1:ElevenLabs 2:OpenAI TTS 3:AquesTalk 4:ModuleLLM
model: "" # VOICEVOX (modelは未対応)
#model: "eleven_multilingual_v2" # ElevenLabs
#model: "tts-1" # OpenAI TTS
#model: "" # AquesTalk (modelは未対応)
voice: "3" # VOICEVOX (ずんだもん)
#voice: "AZnzlk1XvdvUeBnXmlld" # ElevenLabs
#voice: "alloy" # OpenAI TTS
#voice: "" # AquesTalk (voiceは未対応)
stt:
type: 0 # 0:Google STT 1:OpenAI Whisper 2:ModuleLLM(ASR)
wakeword:
type: 0 # 0:SimpleVox 1:ModuleLLM(KWS)
keyword: "" # SimpleVox (初期設定は不可。ボタンB長押しで登録)
#keyword: "HI STUCK" # ModuleLLM(KWS)
# ModuleLLM
moduleLLM:
# Serial Pin
# Core2 Rx:13,Tx:14
# CoreS3 Rx:18,Tx:17
rxPin: 13
txPin: 14
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でご連絡ください。
- フォルダ名が長いため、ワークスペースの場所によってはライブラリのインクルードパスが通らない場合があります。なるべくCドライブ直下に近い場所をワークスペースにしてください。(例 C:\Git)

