Nota
Hola, ¡bienvenido a la comunidad de entusiastas de SunFounder Raspberry Pi, Arduino y ESP32 en Facebook! Sumérgete en el mundo de Raspberry Pi, Arduino y ESP32 con otros entusiastas.
¿Por qué unirte?
Soporte de expertos: Resuelve problemas post-venta y desafíos técnicos con la ayuda de nuestra comunidad y equipo.
Aprende y comparte: Intercambia consejos y tutoriales para mejorar tus habilidades.
Preestrenos exclusivos: Obtén acceso anticipado a nuevos anuncios de productos y avances exclusivos.
Descuentos especiales: Disfruta de descuentos exclusivos en nuestros productos más recientes.
Promociones festivas y sorteos: Participa en sorteos y promociones especiales durante las festividades.
👉 ¿Listo para explorar y crear con nosotros? Haz clic en [here] y únete hoy mismo.
21. Coche Asistente de Voz con IA
Esta lección convierte tu PiCar-X en un asistente de voz sobre ruedas impulsado por IA. El robot puede activarse con tu voz, reconocer lo que dices, responder con emoción y expresar sus “sentimientos” mediante movimientos, gestos y luces.
Construirás un coche asistente de voz totalmente interactivo usando:
LLM - Modelo de Lenguaje Grande (OpenAI GPT o Doubao).
STT - Reconocimiento de voz a texto (Speech-to-Text).
TTS - Conversión de texto a voz (Text-to-Speech).
Sensores + Acciones - Ultrasonido, cámara y acciones expresivas integradas.
Antes de Empezar
Asegúrate de haber completado:
Instalar Todos los Módulos (Importante) — Instala los módulos
robot-hat,vilib,picar-xy luego ejecuta el scripti2samp.sh.1. Probar Piper — Verifica los idiomas compatibles de Piper TTS.
2. Probar Vosk — Verifica los idiomas compatibles de Vosk STT.
18. Conectarse a LLMs en Línea — Este paso es muy importante: obtén tu clave API de OpenAI o Doubao, o la clave API de cualquier otro LLM compatible.
Ya deberías tener:
Un micrófono y altavoz funcionando en tu PiCar-X.
Una clave API válida guardada en
secret.py.Una conexión de red estable (se recomienda conexión por cable para mayor estabilidad).
Ejecutar el Ejemplo
Ambas versiones de idioma están ubicadas en el mismo directorio:
cd ~/picar-x/example
Versión en inglés (OpenAI GPT, instrucciones en inglés):
sudo python3 21.voice_active_car_gpt.py
LLM:
OpenAI GPT-4o-miniTTS:
en_US-ryan-low(Piper)STT: Vosk (
en-us)
Palabra de activación:
"Hey buddy"
—
Versión en chino (Doubao, instrucciones en chino):
sudo python3 21.voice_active_car_doubao_cn.py
LLM:
Doubao-seed-1-6-250615TTS:
zh_CN-huayan-x_low(Piper)STT: Vosk (
cn)
Palabra de activación:
"你好 滴滴"
Nota
Puedes modificar la palabra de activación y el nombre del robot en el código:
NAME = "Buddy" o NAME = "滴滴"
WAKE_WORD = ["hey buddy"] o WAKE_WORD = ["你好 滴滴"]
Qué Sucederá
Cuando ejecutes este ejemplo correctamente:
El robot esperará la palabra de activación (por ejemplo, “Hey Buddy” / “你好 滴滴”).
Cuando escuche la palabra de activación:
Los LED parpadearán y permanecerán encendidos.
El robot te saludará con una voz alegre.
Luego comenzará a escuchar tu voz en tiempo real.
Después de reconocer lo que dijiste:
Envía tu voz al LLM (OpenAI o Doubao).
Piensa y parpadea los LED mientras procesa.
Responde con voz TTS.
Ejecuta acciones correspondientes (por ejemplo, asentir, girar, celebrar).
Si te acercas demasiado, el sensor ultrasónico:
Activa un movimiento automático hacia atrás por seguridad.
Interrumpe la interacción actual con una respuesta de advertencia.
Ejemplo de interacción
Tú: Hey Buddy
Robot: ¡Hola!
Tú: Gira a la izquierda y mira alrededor.
Robot: ¡Recibido, girando mi cabeza a la izquierda como un gato curioso!
ACCIONES: turn_left, look_left
Cambiar a Otros LLM o TTS
Puedes cambiar fácilmente a otros LLM, TTS o idiomas de STT con solo unas pocas ediciones:
LLM compatibles:
OpenAI
Doubao
Deepseek
Gemini
Qwen
Grok
1. Probar Piper — Verifica los idiomas compatibles de Piper TTS.
2. Probar Vosk — Verifica los idiomas compatibles de Vosk STT.
Para cambiar, simplemente modifica la parte de inicialización en el código:
from picarx.llm import Gemini as LLM
llm = LLM(api_key="YOUR_KEY", model="gemini-pro")
# Establecer modelos e idiomas
TTS_MODEL = "en_US-ryan-low"
STT_LANGUAGE = "en-us"
Referencia de Acciones y Sonidos
A continuación se muestran las palabras clave de acción que el LLM puede devolver (después de la línea ACTIONS:) y lo que hacen en el robot.
Acción |
Qué hace (según preset_actions.py) |
Efecto / Notas |
|---|---|---|
|
Mueve rápidamente el ángulo de la cámara de derecha↔izquierda en pasos decrecientes y luego se centra. |
Gesto de “No”; las ruedas permanecen detenidas. |
|
Inclina la cámara arriba↔abajo dos veces y luego se centra. |
Gesto de “Sí”; las ruedas permanecen detenidas. |
|
Inclina la cámara y luego gira la dirección izquierda/derecha dos veces (±25°) y centra. |
Saludo juguetón (usa el servo de dirección como “brazos”). |
|
Pequeña inclinación; alterna (giro ±15°, paneo ±15°) 3 veces; se detiene y centra. |
Movimiento de “rechazo” o defensa. |
|
Cabeza inclinada hacia abajo; pequeños movimientos hacia adelante y atrás (pulsos cortos de motor), luego restablece. |
Movimiento “tierno” y alegre; movimientos muy cortos. |
|
Oscilación pequeña de la dirección (±6°) repetida cinco veces; restablece. |
Imita “frotarse las manos”. |
|
Paneo suave a la derecha + inclinación hacia abajo + giro a la derecha; breve pausa; pose pensativa; restablece. |
Usado como animación de “pensar”. |
|
Tres ciclos de avanzar corto/parar/pan-izquierda/giro-izquierda, luego retroceder corto/parar/pan-derecha/giro-derecha. |
Da una sensación de “giro de cuerpo”. |
|
Inclina hacia arriba; dos florituras a la derecha (paneo/giro), luego dos a la izquierda; vuelve al centro. |
Floritura festiva y simétrica. |
|
Serie de inclinaciones descendentes con ángulos y pausas variables; termina tras una pausa larga y restablece. |
Secuencia de “postura triste”. |
Movimiento y Utilidades
Acción |
Qué hace |
Notas |
|---|---|---|
|
Avanza a baja velocidad durante ~1 segundo, luego se detiene. |
Implementado por |
|
Retrocede a baja velocidad durante ~1 segundo, luego se detiene. |
Implementado por |
Efectos de Sonido
Sonido |
Qué hace |
Notas |
|---|---|---|
|
Reproduce |
Activado mediante |
|
Reproduce |
Señal de inicio/listo. |
Disparadores de Sensores (Automático)
Proximidad ultrasónica
Disparador: distancia < 10 cm
Efecto secundario:
backwardautomático + desactivar imagen para esta rondaMensaje inyectado:
<<<Ultrasonic sense too close: {distance}cm>>>
Ciclos de Vida (Indicadores LED)
before_listen→ parpadea dos veces (listo para escuchar)before_think→ parpadeando (pensando)before_say→ LED encendido (hablando)after_say→ espera acciones → LED apagadoon_stop→ detener acciones, cerrar dispositivos
Solución de Problemas
El robot no responde a la palabra de activación
Verifica si el micrófono funciona.
Asegúrate de que
WAKE_ENABLE = True.Ajusta la palabra de activación para que coincida con tu pronunciación.
No sale sonido por el altavoz
Verifica la configuración del modelo TTS.
Prueba Piper o Espeak manualmente.
Revisa la conexión del altavoz y el volumen.
Error de clave API o tiempo de espera agotado
Revisa tu clave en
secret.py.Asegura la conexión de red.
Confirma que el LLM sea compatible.
Picar-X no se mueve ni actúa
Comprueba que el nombre de la acción coincida con
actions_dict.Verifica las conexiones de los motores y servos.
El sensor ultrasónico se activa inesperadamente.
Revisa la altura y el ángulo de instalación del sensor.
Ajusta el umbral de distancia
TOO_CLOSEen el código.