注釈

こんにちは、SunFounderのRaspberry Pi & Arduino & ESP32愛好家コミュニティへようこそ!Facebook上でRaspberry Pi、Arduino、ESP32についてもっと深く掘り下げ、他の愛好家と交流しましょう。

参加する理由は?

  • エキスパートサポート:コミュニティやチームの助けを借りて、販売後の問題や技術的な課題を解決します。

  • 学び&共有:ヒントやチュートリアルを交換してスキルを向上させましょう。

  • 独占的なプレビュー:新製品の発表や先行プレビューに早期アクセスしましょう。

  • 特別割引:最新製品の独占割引をお楽しみください。

  • 祭りのプロモーションとギフト:ギフトや祝日のプロモーションに参加しましょう。

👉 私たちと一緒に探索し、創造する準備はできていますか?[here]をクリックして今すぐ参加しましょう!

21. AI音声アシスタントカー

このレッスンでは、PiCar-Xを AI搭載の移動型音声アシスタント に変身させます。 ロボットはあなたの声で起動し、話した内容を認識し、感情をこめて話し返し、 さらに動き・ジェスチャー・ライトでその「気持ち」を表現します。

以下を使って、完全インタラクティブな音声アシスタントカー を構築します:

  • LLM - 大規模言語モデル(OpenAI GPT または Doubao)

  • STT - Speech-to-Text(音声→テキスト)

  • TTS - Text-to-Speech(テキスト→音声)

  • センサー + アクション - 超音波センサー、カメラ、内蔵の表現アクション


始める前に

以下を完了していることを確認してください:

以下がすでに準備できている必要があります:

  • PiCar-Xに接続された マイクスピーカー

  • secret.py に保存された 有効なAPIキー

  • 安定したネットワーク接続(有線接続 推奨)


サンプルの実行

両方の言語バージョンは同じディレクトリにあります:

cd ~/picar-x/example

英語版 (OpenAI GPT、英語の指示):

sudo python3 21.voice_active_car_gpt.py
  • LLM: OpenAI GPT-4o-mini

  • TTS: en_US-ryan-low (Piper)

  • STT: Vosk (en-us)

起動ワード:

"Hey buddy"

---

中国語版 (Doubao、中国語の指示):

sudo python3 21.voice_active_car_doubao_cn.py
  • LLM: Doubao-seed-1-6-250615

  • TTS: zh_CN-huayan-x_low (Piper)

  • STT: Vosk (cn)

起動ワード:

"你好 滴滴"

注釈

起動ワード および ロボット名 はコード内で変更可能です: NAME = "Buddy" または NAME = "滴滴" WAKE_WORD = ["hey buddy"] または WAKE_WORD = ["你好 滴滴"]


何が起こるのか

このサンプルを正常に実行すると:

  • ロボットは 起動ワードを待機 します(例:「Hey Buddy」/「你好 滴滴」)。

  • 起動ワードを聞くと:

    • LEDが 点滅 し、そのまま点灯します。

    • ロボットが 元気よく挨拶 します。

  • 続いて、ロボットは あなたの声をリアルタイムで聞き取り ます。

  • 発話内容を認識すると、次の処理を行います:

    • あなたの音声を LLM (OpenAI または Doubao)に送信。

    • 処理中に LEDを点滅 させながら「思考」します。

    • TTS音声 で応答します。

    • 対応するアクション (例:うなずく、回転する、喜ぶ)を実行します。

  • もしあなたがロボットに近づきすぎた場合、超音波センサーが:

    • 安全のため、自動で 後退 します。

    • 現在のラウンドを中断し、警告の応答を行います。

対話の例

You: Hey Buddy
Robot: Hi there!

You: Turn left and look around.
Robot: Roger that, turning my head left like a curious cat!
ACTIONS: turn_left, look_left

他のLLMまたはTTSへの切り替え

LLM・TTS・STT言語は、わずかなコード変更で簡単に切り替えることができます:

切り替えるには、コードの初期化部分を以下のように変更します:

from picarx.llm import Gemini as LLM
llm = LLM(api_key="YOUR_KEY", model="gemini-pro")

# モデルと言語の設定
TTS_MODEL = "en_US-ryan-low"
STT_LANGUAGE = "en-us"

アクション & サウンド リファレンス

以下は、LLM が ACTIONS: 行の後に返すことができる アクションキーワード と、それがロボットで何を行うかの一覧です。

アクション

動作内容(per preset_actions.py)

効果 / メモ

shake head

カメラのパン角を左右に素早く振りながら振幅を減らし、最後に中央へ戻す。

「ノー」のジェスチャー;車輪は停止したまま。

nod

カメラのチルトを上下に2回動かし、中央へ戻す。

「イエス」のジェスチャー;車輪は停止したまま。

wave hands

カメラを傾けた後、ハンドルを左右に2回(±25°)振って中央へ戻す。

おどけた「手を振る」動作(操舵サーボを“腕”として使用)。

resist

軽いチルト;左右(ステア±15°、パン±15°)を3回交互に繰り返し、停止後センターに戻す。

「拒否」や防御の動き。

act cute

頭を下げ、前後に小刻みに移動(モーターパルス短時間)してリセット。

ぴょんぴょんした「かわいい」動き。

rub hands

ステアを小さく(±6°)5回振ってリセット。

「手をこすり合わせる」ような動作。

think

なめらかに右パン+下チルト+右ステア→少しホールド→考えるようなポーズ→リセット。

単一の「考える」アニメーション。

twist body

前進→停止→左パン・左ステア→後退→右パン・右ステア、これを3サイクル。

体を「ひねる」ような動き。

celebrate

チルトアップ→右側で2回パン・ステアのフラリッシュ→左側も2回→中央へ。

お祝い風の華やかな動き。

depressed

チルトを下方向に角度と間隔を変えながら何度か動かし、長い間をおいてリセット。

「悲しい」姿勢のシーケンス。

移動 & ユーティリティ

アクション

動作内容

メモ

forward

低速で約1秒間前進して停止。

forward(car) (速度5%、1秒)で実装。

backward

低速で約1秒間後退して停止。

backward(car) (速度5%、1秒)で実装。

サウンドエフェクト

サウンド

動作内容

メモ

honking

car-double-horn.wav を非同期で再生(音量約100)。

Music.sound_play_threading でトリガー。

start engine

car-start-engine.wav を非同期で再生(音量約50)。

起動/準備の合図。

センサーによる自動トリガー

  • 超音波近接センサー

    • トリガー:距離 < 10 cm

    • 副作用:自動 backward + このラウンドの画像処理を無効化

    • 注入メッセージ: <<<Ultrasonic sense too close: {distance}cm>>>

ライフサイクルフック(LEDインジケーター)

  • before_listen → 2回点滅(リスニング準備)

  • before_think → 点滅(思考中)

  • before_say → LED点灯(発話中)

  • after_say → アクション待機 → LED消灯

  • on_stop → アクション停止、デバイスクローズ


トラブルシューティング

  • ロボットが起動ワードに反応しない

    • マイクが動作しているか確認してください。

    • WAKE_ENABLE = True になっていることを確認。

    • 発音に合うように起動ワードを調整します。

  • スピーカーから音が出ない

    • TTSモデルの設定を確認。

    • Piper または Espeak を手動でテスト。

    • スピーカーの接続と音量をチェック。

  • APIキーのエラーまたはタイムアウト

    • secret.py のキーを確認。

    • ネットワーク接続を確認。

    • 使用している LLM がサポート対象か確認。

  • Picar-X が動作・アクションしない

    • アクション名が actions_dict と一致しているか確認。

    • モーターおよびサーボの配線を確認。

  • 超音波センサーが予期せず作動し続ける

    • センサーの取り付け高さと角度を確認。

    • コード内の TOO_CLOSE 距離しきい値を調整。