今回構成したシステムの図は以上のようになります。
デバイス(詳細はストーリーをご確認ください)
- Atom Echo
- SSD1306
- Proto kit
- Atom Mate for toio
- toio
サービス
- Google Speech to Text:音声テキスト化
- ChatGPT: AI機能
- VoiceVox: 発声
AIスタックチャンミニマルを改造してtoioと合体させてみました。
M5Stackとジョイスティックを使って、toioを動かすことができます!!
今回構成したシステムの図は以上のようになります。
デバイス(詳細はストーリーをご確認ください)
サービス
みなさん、スタックチャン(Stack-chan)してますか? わたしは、AIスタックチャンとお話しているとほっこりします。
今回、一番小さくてお安いスタックチャンであるAIスタックチャンミニマルを改造して遊んでいるので、そのことについて報告したいと思います。
以下、製品の価格を紹介する場合は、スイッチサイエンスの2024/11/30調べのものですので、参考にしてください。
AIスタックチャン - ミニマル(AI Stack-chan Minimal)は@UtaAoyaさんが開発されているAIスタックチャンの仲間です。 AIスタックチャンミニマルは、AIが使えるスタックチャンの中で、誰でも簡単に導入できるように、できるだけ安い価格で実現できるようにしたシステムです。
主要な構成は以下のようになります。
この素敵なAIスタックチャンをむとうが若干改造してみました。
M5Stackには、ATOMICプロトキット(¥605)というAtomシリーズで自分の回路を作成するためのキットが売られています。 このキットは、Atomを接続できるだけではなく、LEGO穴も提供されています。
https://twitter.com/610t/status/1860839252101304328
toio(スイッチサイエンス,¥7,128)は小型のロボットで、専用マットを使うと、位置や向きをきっちりと決めたりすることができます。 その他に、フルカラーLEDが光り、音も出せるようになっています。
toioをAtomシリーズから用いるための製品として、 Atom Mate for toio(¥5,060) があります。 これについているLEGO穴はATOMICプロトキットと同じ間隔のため、副作用としてProto版と接続できるようになりました。 このため、AIスタックチャンがtoioと合体できるのです!!
Atom Mate for toioにはバッテリーがついており、Grove端子経由でAtom Echoに給電することが可能です。 これで、電源問題も解決ですね!! 手元では、Atom Mate for toioのバッテリーを使うと、90 mAh版では30分程度、160 mAh版では1時間程度、利用することができました。
https://twitter.com/610t/status/1861521531731616243
はじめにごめんなさいなのですが、ここで紹介する構成では、Atom Echoからtoioを操作しているわけではありません。他のM5Stackシリーズからtoioを操縦するという構成になっています。
https://www.youtube.com/watch?v=-lgxvZjHF7A
M5StackToioは、M5Stackを使ってtoioを操作するためのライブラリです。 このライブラリのexampleとして、Joystickでtoioを動かすプログラムが提供されています。
https://twitter.com/610t/status/1861934900271833134
むとうはこのプログラムを変更して、M5Stack Faces用ジョイスティックパネル(¥1,023;EoL)を使えるようにしました。
(2024/12/16追記) また、M5Stack用 I2Cジョイスティックユニット RGB LED付き (STM32G030)(¥836)にも対応しています。
これら3つのジョイスティックのうちで、いずれか一つが繋がっていると、そのジョイスティックを使うようになっています。 これらの優先順位は以下のようになっています。
- Faces Joystick
- Joystick2 unit
- Joystick unit
https://twitter.com/610t/status/1862033915336437960
これで、M5Stackからtoioが操縦できるようになり、AIでの応答をさせながらスタックチャンをお散歩させることができます!!
(2024/12/11追記) Joystick以外にも、M5Stackシリーズの中には加速度センサー(IMU)が付いたものがあるため、これで操縦することも可能です。 この例は、M5StackToioとわたくしのおまけとして紹介していますので、興味のある方はご覧ください。
https://twitter.com/610t/status/1866006985378062660
(2024/12/11追記):さらに、UIFlowから加速度センサーを使って操縦することも可能です。以下のコードを参照してください。
AIスタックチャンミニマルでは、音声での質問のほかにもWebインタフェース(テキストで会話)を使って質問の入力が可能です。 普段はスタックチャンの答えをちゃんと聞いているのですが、時にはボーッとしていて返事を聞き逃してその内容が気になることがあります。
そこで、質問と答えの内容をこのWebインタフェースに表示して残しておけるようにしてみました。
だんだん、自分で質問を入力するのがめんどくさくなってきたので、自動で質問をし続けるスクリプトを作成してみました。
以下のようなコマンドで、ユーザー610t
のPostを取得することができます。
<bearer>
部分は、自分のBearer IDを使ってください。
$ curl --request GET --url 'https://api.x.com/2/tweets/search/recent?query=from:610t' --header 'authorization: Bearer <bearer>' > tweet.json
以下のようなコードで、ランダムにPostを選んでスタックチャンに尋ねることができます。192.168.11.126
部分はあなたのスタックチャンのIPアドレスに置き換えてください。
# coding: utf-8
import random
import json
import requests
import time
IP = '192.168.11.126'
POST_URL = 'http://'+IP+'/text_chat_set'
HEADER = {'Content-Type': 'text/plain;charset=UTF-8'}
file = open('tweet.json','r')
tweet = json.load(file)
num = len(tweet['data'])
while True:
pos = random.randrange(num)
msg = tweet['data'][pos]['text']
print('msg:{}'.format(msg))
try:
requests.post(POST_URL, headers=HEADER, data=msg)
except requests.exceptions.RequestException:
print("Maybe Response Error.")
time.sleep(60)
ただ、提供されている例のJoystickでtoioを動かすプログラムは、M5Stack Core(Basic)シリーズのみの対応となっているので、大幅な改修が必要です。
具体的には以下の点で改修が必要です。
その上で、M5StickC Joystick Hat(¥1,485)にも対応したいと考えています。
(2024/12/16追記) XのAPIは、無料枠では月間100postまでしか取得できません。 そこで、何回かに分けて取得したPostをファイルに保存して、全てを読み込んで使うことで、質問のバラエティーを増やします。
このスクリプトも作成して、現在テスト中です。
以下のプロジェクトを利用させていただいています。 ありがとうございました。
M5Stack Japan Creativity Contest 2025(ProtoPedia)があれば、応募したいなぁ…
ヒーローズリーグ2025も、あったら出そうかなぁ。