スタックチャンにシンプルなText-to-Speech機能を実装して喋ってもらう

はじめに 概要 今回はシンプルなText-to-Speech機能(フォルマント合成)を実装してスタックチャンに喋ってもらおうと思います。 音声合成のライブラリは性能が高いものがいろいろあるとは思うのですが、 勉強も兼ねてシンプルな音声合成機能を実装してみます(実装の大枠はGeminiにお願いします)。 過去の記事 M5Stack製のスタックチャンをmicro-ROSとArduinoで動かす方法を記事にまとめました。 スタックチャンをmicro-ROSで動かす - Arduino編 移動ロボットとスタックチャンの連携もやってみました。 スタックチャンをラズパイマウスに搭載してカメラを使った顔の検出と追従 Geminiに音声合成機能を実装してもらった 「勉強も兼ねて実装する」と言いつつ、音声合成機能のプログラムはGeminiに書いてもらいました。 この記事ではGeminiに実装してもらったプログラムを読み解いていこうと思います。 Geminiに実装してもらったプログラムは下記リンクで公開しています。 GitHub - stack-chan_micro-ros_arduino/speech.ino ちなみにプログラム全体の流れとしては下記の通りです。 トピックで文字列を受け取る 文字列を音声に変換する スピーカーで音声を出力する この記事では基本的なArduinoのお作法やmicro-ROSの処理の説明は省いて、 音声合成機能部分を読み解いていきます。 プログラムを読み解く 注意: 音声合成について素人なので説明が間違っていたらすみません。 フォルマント このプログラムではフォルマント合成でテキストを音声に変換して、 人工的に人間の声を模倣しています。 フォルマントについては下記のWikipediaの「フォルマント」ページを参照します。 Wikipedia - フォルマント フォルマントは人間の音声内で周囲よりも強度が高い周波数帯域のことです。 フォルマントは音声内に複数存在することもあり、周波数の低いほうから「第一フォルマント(F1)」、「第二フォルマント(F2)」、…と続いていきます。 私の理解だとフォルマントがその音声の特徴になるかと思います。 つまり逆に考えると、フォルマントを人工的に再現できるとその音声が生み出せるということになります。 ちなみに人間の音声におけるフォルマントは、主に口腔や鼻腔等での共鳴によって発生するようです。 特に、第一フォルマントは口の開きの大きさ、第二フォルマントは舌の前後の位置に影響されるとのことです。 そして今回のプログラムでは、この第一フォルマントと第二フォルマントの周波数を再現することで母音(a,i,u,e,o)の音を模倣しています。 周波数は下記のように設定されています。 1列目が第一フォルマント、2列目が第二フォルマントです。 母音のa,i,u,e,oの5つそれぞれに値を設定します。 const float VOWEL_FREQ[5][2] = { {800.0, 1200.0}, // a {300.0, 2300.0}, // i {300.0, 1200.0}, // u {500.0, 1900.0}, // e {500.0, 800.0} // o }; これらの周波数は下記リンクの研究で計測されています。 日本語母音のフォルマント周波数の年齢による変化(粕谷ら、2006) Biquad Filter このプログラムでは、Biquad Filterというフィルタを使って、 音のベースとなる非対称の矩形波(声帯の模倣となるパルス波)を入力し、指定した周波数帯(第一フォルマント、第二フォルマント)を強調させた滑らかな波形を出力します。 そして第一フォルマントと第二フォルマントのそれぞれの波形を足し合わせて母音(a,i,u,e,o)の音声を作成します。 ...

作成日: 2026年5月22日 · 最終更新日: 2026年5月23日 · Yusuke Kato

スタックチャンをラズパイマウスに搭載してカメラを使った顔の検出と追従

はじめに 概要 M5Stack製のStackChan(スタックチャン)をアールティの小型移動ロボットRaspberry Pi Mouse(ラズパイマウス)に搭載して、 スタックチャンのカメラを使った顔の検出と追従を行いました。 スタックチャンのカメラ画像をmicro-ROSでトピックとして配信、 ラズパイマウス側のROS 2で画像を受け取ってOpenCVで顔を検出、 顔の位置が画像の中心かつ顔の大きさが範囲内に収まるようにスタックチャンとラズパイマウスを動かします。 注意: ちなみにラズパイマウスは自社製品ですが今回は個人開発です。宣伝とかではないです。 これまでにやったこと、今回やること まずラズパイマウスをROS 2で動かせるようにセットアップしました。 Raspberry Pi Mouseをセットアップ 次にmicro-ROSとArduinoを使ってROS 2のトピック経由でスタックチャンのモータを動かせるようにしました。 スタックチャンをmicro-ROSで動かす - Arduino編 そして今回はスタックチャンのカメラ画像をトピックで配信してOpenCVによる顔の検出を行い、 スタックチャンとラズパイマウスのモータを動かして顔を追従させます。 開発環境 開発環境は前回と同様なので前回の記事を参照ください。 スタックチャンをmicro-ROSで動かす - Arduino編(再掲) スタックチャンのカメラ画像をトピックで配信 まずはスタックチャンのカメラから画像を取得してmicro-ROSで配信します。 カメラ画像の取得方法は下記の公式のサンプルプログラムを参考にしました。 M5Stack - StackChan Camera カメラ 実際に作成したプログラムは下記です(だいたいはGeminiに書いてもらいました)。 GitHub - stack-chan_micro-ros_arduino/camera_node.ino 注意点としては画像は比較的にデータサイズが大きいため、マイコンで処理する場合は扱う画像を小さくするなどの対策が必要になることがあります。 また、micro-ROSで画像をトピックとして配信するわけですが、ここでもデータサイズに制限があってあまり大きなデータは扱えないようです。 そのため今回は.frame_size = FRAMESIZE_QQVGAのように解像度は160x120に設定して、 fmt2jpg()でjpg形式に圧縮してからCompressedImageとして配信しています。 画像がグレースケールで問題なければPIXFORMAT_GRAYSCALEを設定したり、 解像度がもっと小さくてもよければFRAMESIZE_96X96を設定したりもできます。 また、配信周期は一応5Hzに設定していますが、実際は1~2Hz程度になっていました。 以上のプログラムでスタックチャンのカメラ画像を/stackchan/camera/image/compressedというトピック名で配信できました。 スタックチャンにプログラムを書き込んでmicro-ROS agentを起動した後、rqtを使って配信されているカメラ画像を確認できました。 実行方法は下記のREADMEを参照ください。 GitHub - stack-chan_micro-ROS_arduino/README#camera 顔を検出してスタックチャンとラズパイマウスで追従する カメラ画像が取得できたので本題の顔の検出と追従を行います。 ROS 2のトピックのpublish/subscribeを行うので専用のROS 2パッケージを作成しました。 下記のGitHubリポジトリとして公開しています。 GitHub - YusukeKato/stackchan_on_raspimouse ...

作成日: 2026年5月16日 · Yusuke Kato

スタックチャンをmicro-ROSで動かす - Arduino編

はじめに KickStarterでM5Stack製のスタックチャンを手に入れたので、 micro-ROSとROS 2、Arduino IDEを使ってスタックチャンのモータの制御と現在角度の取得をやってみようと思います。 KickStarterのM5Stack製スタックチャンの情報は下記リンクです。 KickStarter: M5Stack - スタックチャン 開発環境 下記の環境で開発しています。 ROS 2を使用するためUbuntu PCが必要になります。 PC Ubuntu 24.04 LTS ROS 2 Jazzy Arduino IDE 2.3.8 Docker 29.5.0 Arduino IDE - Boards esp32 3.3.8 M5Stack 3.3.7 Arduino IDE - Library micro_ros_arduino 2.0.7-humble 2026/05/17追記:3.0.0-ironでも動作確認済み M5StackChan 1.0.1 M5Stack製スタックチャン用のプログラムはGitHubでも公開しています。 GitHub - YusukeKato/stack-chan_micro-ros_arduino ROS 2のインストール ROS 2 Jazzyの公式チュートリアルは下記リンクです。 ROS 2 Jazzy Tutorials ROS 2 Jazzyのインストールについては私のほうでも別の記事に書いたので、そちらを参考にしていただければと思います。 ROS 2 Jazzy公式チュートリアル01: ROS 2 Jazzyのインストールから動作確認まで M5Stack製スタックチャンのスペック M5Stack製スタックチャンの詳細は下記リンクの公式ページで確認できます。 ...

作成日: 2026年5月13日 · 最終更新日: 2026年5月17日 · Yusuke Kato

Raspberry Pi Mouseをセットアップ

はじめに せっかくのゴールデンウィークなので家でもロボット開発をしてみようということで、 アールティのRaspberry Pi Mouse V3(通称:ラズパイマウス)を購入してみました。 最終的にはM5Stack製のスタックチャンと連携させるところまでやりたいと思っています。 注意: ちなみにラズパイマウスは自社製品ですが今回は個人開発です。宣伝とかではないです。 ラズパイマウスについて 下記写真がラズパイマウスです。ROS 2対応で2つの車輪が付いた移動ロボットです。 詳しい情報については下記リンクの公式ページで説明されています。 株式会社アールティ - Raspberry Pi Mouse V3 ラズパイマウスの上にスタックチャンを乗せたかったのでオプションキットのマルチLiDARマウントも追加で購入してみました。 ラズパイマウスのセットアップ 開封 私はラズパイマウスのフルキットを購入しました。 ちょうどRaspberry Piも欲しかったので手に入って良かったです。 環境 今回は下記環境をセットアップしました。 Ubuntu Server 24.04 LTS ROS 2 Jazzy セットアップに使用したPCはWindows 11です。 セットアップ セットアップ手順は下記の公式チュートリアルに従いました。 基本的にはチュートリアル通りにセットアップを行ったのでこの記事では細かい説明は省略します。 RT Corporation Software Tutorials - Raspberry Pi Mouse Raspberry Pi Imagerを久しぶりに使いましたが、Wi-Fiやsshの設定も一緒にできてやっぱり便利ですね。 OSを書き込んでラズパイマウスを起動した後、まずはデバイスドライバをインストールしました。 ちなみにRaspberry Pi 4Bをディスプレイに繋ぐためにはmicroHDMIケーブルが必要です。 私はディスプレイに繋ぐのが少々手間だったので最初からsshで接続しました。 デバイスドライバのインストールが完了したら次にROS 2 Jazzyをインストールします。 CLI版のUbuntu Serverを使用しているので、ROS 2もros-jazzy-ros-baseのほう(desktop版ではないほう)をインストールしました。 ...

作成日: 2026年5月2日 · Yusuke Kato