ゆるふわロボのマイクとスピーカー
ゆるふわロボに音声会話の機能を実装する上で、マイクやスピーカーのことを考える必要がありました。普通のパソコンであれば、その辺の悩みはほとんどなかったと思うのですが、Raspberry Pi に関してはすぐにはあまりよい解は見つかりませんでした。下では、ゆるふわロボに音声会話の機能を実装するにあたって検討した幾つかの選択肢を記しておきたいと思います。
マイク
私は基本的にラズパイ派だったので、マイクに関しては USB端子を使って付けてしまうのが最も簡単に思えました。マイクらしい形をしたものが、目の前にあると、自然とそのマイクに向かって話したくなるので、逆にこちらの方が良いとも思えます。ロボットが移動したりしないタイプのロボット、例えば「お喋りロボ」や「見守りロボ」のようなものであれば、この方法は悪くない感じがします。

ただ、上のような線の長いものだと、移動するロボットには不向きです。その場合は、USB端子のところに直結できるような超小型の USB マイクもあったりしますので、そちらも検討してみるとよいかもしれません。
ウェブカメラ
もうひとつの簡単な方法としては、マイク内蔵しているウェブカメラを使う方法も挙げられると思います。私がよく使っている ロジクールの C270 はあまり音が良くないですが、下の C922n は割と音も良いです。ちょっと高価な点が難点ですが、ロボに使わないときには PC でオンライン会議等にも使える上に、カメラとマイクの機能の両方が使えると考えると、悪くない選択肢のように思えます。

また、ロボが机の上にいるときには、ウェブカメラはロボから外さずに USB だけを繋ぎ変えて使う…という使い方もできます(ロボを三脚代わりに使う!)。ゆるふわロボでは、こうしたウェブカメラが取り付けられる専用のマウントが作ってありますので、使う場合はそこに取り付けて使って下さい。
アンプモジュール(MAX98357A)
おしゃべりロボのような会話機能を持ったロボを作るとすると、ロボには人間の声を聞き取る機能だけでなく、実際に声を出して喋る機能も必要です。特に、高齢者の方と会話するようなロボットや、店先で店の案内をするようなロボットでは、多少大きな声でしゃべる機能が必要になってきます。つまり、アンプの付いたスピーカーが必要になるのですが、移動するロボットにも付けられるようなアンプ付きのスピーカーはあまり多くはありませんでした。以前は、100均にちょうどよいくらいのサイズのものがあったのですが、いつの間にかなくなっていました。
ネット上を探すと、MAX98357A というモジュールを使って、スピーカーを鳴らしておられる方がいらっしゃいましたので、ここではこちらの方のブログを紹介します。
このモジュールは半田付けが必要なのですが、ゆるふわロボの開発キットには、次のようなミニブレッドボード用の固定パーツがあるので、そのパーツで固定すればロボの中にはうまく固定できそうな気がします。

ちなみに、ミニブレッドボード(BB-601)は開発キットには含まれておりません。
ReSpeaker 2-Mic Pi HAT
Raspberry Pi の HAT には、ReSpeaker 2-Mic Pi HAT というものがあり、これを使うことでかなりスマートにマイクとスピーカーの機能を同時にロボに載せてやることができます(元々は、スマートスピーカーみたいなものを自作するために開発されたもののようです)。

ただ、この製品は新旧の両方のバージョンの製品が流通しているようでして、その点はちょっと注意が必要です。旧バージョンを買ってしまった場合には少し古めのハードと OS を組み合わせてやる必要があります。当方でうまく動いたのは、次の組み合わせでした。
- Raspberry Pi 3 model A+
- Bullseye ベースの 32bit OS
基本的には、古めの Raspberry Pi と古めの 32bit OS を組み合わせて使うのが良いボードのように思います。一旦動いてしまえば、JST-2.0 端子経由でスピーカーを接続できたりするので、きれいにまとまります。
ちなみに、旧バージョンのものを Raspberry Pi 5 に搭載して、ソフトウェアをインストールするとラズパイが起動しなくなりました(汗)。また、Bookwarm のような新しい OS と組み合わせてもアウトです。
私は Amazon で、このボードと同じくらいの大きさのスピーカーを見つけてきて、この HAT に接続しました。音楽を聴くのによいスピーカーではないかもしれませんが、音が割れずにそこそこ大きな音を出すことはできました。出力としては 3W くらいが出るらしいです。

電力の問題
上の実験が割とうまく行ったので、次にサーボドライバーを接続してみました。接続には、Seeed 社の次のコードを利用しています。
接続自体はうまくできて、動きそうではあったのですが、実はここで新しい問題が出てきました。電力の問題です。

私が今回実験に使っていたのは、Raspberry Pi 3 といった少し古いラズパイで、こうした古いラズパイは電源供給に micro USB を使っています。しかし、この規格はそもそも大電力を供給するようにできていません。特に、安価な USB ケーブルなどを使うと、電源供給の能力が結構低くなってしまうようで、いわゆる「⚡(低電圧警告)」が出るようになります。
また、Raspberry Pi 3 は演算性能を上げるために、micro USB が供給できる電力のギリギリのところまで攻めているようで、同時にいろいろなものを使おうとすると、途端に動作が不安定になってしまいました。特に、PCA9685 のようなサーボドライバーは瞬間的に消費電力が大きくなることがあるようで、ラズパイ自体が落ちてしまったり、動作が不安定になってしまうことがありました。
Raspberry Pi Zero 2 WH
そんな感じで、壁に突き当たった訳ですが、実はこの問題を解決してくれたのは Raspberry Pi Zero 2 WH でした。これまでは、演算能力があまり高くない Zero 系のラズパイは全く眼中になかったのですが、実は消費電力をかなり抑えることができて、今回のような ラズパイの HAT であったり、サーボドライバーなどと組み合わせるには結構向いているのではないか?という印象を持ちました。
これまでは「Zero 系のラズパイは Headless でインストールするのが面倒臭い」という印象があったのですが、最近の Raspberry Pi Imager を使うと驚くほど簡単にインストールができて、すっかり印象が変わってしまいました。ラズパイに慣れていなくても、普段 Ubuntu をターミナルで使っている方なら、すぐになじむことができそうな気がします(そして、意外にサクサク動く!)。
本当に高速な演算は PC やクラウドに任せて、ローカルマシンの演算性能はグッと絞ることで、あまり費用をかけずにロボットの稼働時間を延ばしたりすることができるのではないか?というのが、今回の実験を通して感じたことでした。
Atom Echo
私は使ったことがないのですが、M5Stack の製品にもスマートスピーカー開発キットのようなものがあるようです。
このような製品をうまく使うことで、音声会話機能をスマートに実装することができるかもしれません。但し、スピーカーの出力は 0.5W 程度のようですので、比較的静かな場所で使う方がよいように思います。
秋月電子のアンプキット
もっとベタな方法としては、Raspberry Pi からのスピーカー出力をアンプに繋いでしまうことも考えられます。ロボの内部でどういう風に固定したらよいかわかりませんが、ボリュームが付いているので、音量調節をつまみで行えるのは非常に実用的かつ直感的だと思いました。
Raspberry Pi からのスピーカー出力は、あまりきれいではない…という説もあるので、それをアンプで増幅するのはどうかとも思うのですが、このつまみは非常に Good と思いました(特に、高齢者とかにはわかりやすそう…)。