「ぴよ将棋」に登場する「ひよこ」のロボットを作成しました。
音声で会話ができます。
動いたり、会話している様子は以下の動画を見てください。
音声認識AI、文章生成AI、音声合成AI、物体検出AIを組み合わせています。
音声認識AI: OpenAI Whisper
文章生成AI: OpenAI ChatGPT API
音声合成AI: VOICEVOX:ずんだもん
物体検出AI: YOLOv8
上記はサーバで動作しています。(OpenAI ChatGPT APIはOpenAIのサーバを利用し、他は自前のサーバ上で動作)
ロボット側からサーバに送られてきたカメラ画像と音声から、返答の音声や人物を認識した座標をロボットに返します。
下図はサーバー側の画面です。物体検出AIのYOLOv8にて人物が認識されています。
認識した人物の座標を元に、目や顔が人物の方を向いたりします。また、呼んだら近寄って来たり、人の後をついて行ったりします。
ロボット側の使用パーツ
■CPU周り
CPU:Raspberry Pi 2
画面(顔):OSOYOO HDMI 3.5インチLCD (480×320)
カメラ・マイク:Logicool C270
Wifiドングル:IO-DATA WN-G300UA
スピーカー:KKHMF PAM8403
バッテリー:Anker PowerCore Slim 10000
■制御周り
マイコン:Raspberry Pi Pico
サーボ:GWS MINI x 4
モータードライバー:TB6612
モーター: DAISEN ギヤドモーター 60:1 x 2
バッテリー:単3 eneloop x 4 (4.8V)
ロボットの説明
ロボット側のCPUはRaspberry Pi 2を使用しました。
最新版のRaspberry Pi 4が入手困難なため、手元にあったPi 2を使用しましたが、ロボット側ではそれほど重い処理は行わないので、電力消費を考えると意外とマッチしていたかもしれません。
Raspberry Pi 2とRaspberry Pi Picoはシリアルで接続しています。
サーバ側のプログラムAとRaspberry Piで動作するプログラムBはソケット通信で接続し、通信します。プログラムはPythonで作成しました。
Raspberry Pi PicoのプログラムCはArduino開発環境で作成しました。
カメラにはLogicool C270を使用していますが、画角が狭かったので、広角レンズ(エレコム P-SL04BK)をグルーガンで張り付けました。画質が少し悪くなりましたがYOLOv8で問題なく認識でき、広角になっったことで人を発見しやすくなりました。
顔はHDMI接続の小型の液晶ディスプレーを使用しました。2017年に購入したものです(笑)
OSOYOO HDMI 3.5インチLCDディスプレイモニターを購入してみた
PythonでTkinterを使用して表情を描画しています。
台車には、昔BeagleBoardというRaspberry Piのようなシングルボードコンピュータで遊んでいた時に作ったものを流用しました。
自走BeagleBoard(その7:カメラにサーボをつけた)
ChatGPTの返答をすべて受け取ってから音声を合成すると、数十秒かかる場合があるため、ChatGPTの返答は順次受け取って、句読点(。、)や改行で区切った文ごとに音声合成・再生しています。
こうすると、返答のスタートが短くなり、待ち時間が短くなります。また、音声の再生中にも並行して音声合成ができるので、トータルの時間も短縮できます。ChatGPT APIで返答を逐次受け取る方法については以下の記事に書きました。
ChatGPT APIで返答を逐次受け取る方法
呼んだら後をついてきます。物体検出にはYOLOv8を使っています。
音声で会話ができるロボ、呼んだらついてきます
物体検出にはYOLOv8を使っています pic.twitter.com/3v2r2fIuW5
— PONTA@電子工作⚡️ロボット制作⚡️プログラミング (@Elec_Robot) May 7, 2023
続き ⇒ 部屋のSLAM(地図作成)に挑戦
写真集w
ロボットに使用したパーツなどのリンク
■Raspberry Pi Picoの関連記事
Raspberry Pi Pico+Arduinoでサーボをたくさん動かしたい
会話ができる「ぴよロボ」作りました! (Raspberry Pi + Pico + ChatGPT)
Raspberry Pi Pico W でPCとBluetooth(シリアル)接続する
Raspberry Pi Pico/Pico WをArduino開発環境で使うためのメモ
超音波距離センサー + Raspberry Pi Picoで潜水艦ソナー風
コップの水がこぼれない台 MPU6050 + Raspberry Pi Pico(Arduino)
MPU6050 + Raspberry Pi Pico(Arduino) -> PCで3Dのキューブを回転表示