Controlar reBot Arm usando la voz con reSpeaker Flex
Este documento te llevará de la mano desde cero para construir un sistema inteligente de brazo robótico que "escucha y se mueve". Incluso si nunca has tocado un brazo robótico ni hecho desarrollo de hardware, mientras sigas los pasos podrás reproducir este proyecto con éxito.
Hardware necesario
| reSpeaker Flex XVF3800 Circular | reBot Arm B601-DM |
|---|---|
![]() | ![]() |
1. Descripción general del proyecto
1.1 ¿Qué es este proyecto?
Este proyecto es un sistema inteligente de control de brazo robótico impulsado por voz. Imagina esta escena:
🎬Demostración de escenario
Cuando le dices "hola" al brazo robótico sobre la mesa, el brazo robótico girará inmediatamente hacia tu dirección y asentirá como un humano. Cuando dices "baila", se balancea alegremente. Si vas al otro lado de la habitación y aplaudes, inmediatamente "oirá" la dirección del sonido y girará para mirarte: ¡este es el robot inteligente que queremos construir!
En resumen, este sistema hace tres cosas:
-
Escuchar: captura tu voz a través de la matriz de micrófonos y también puede determinar de qué dirección proviene el sonido
-
Entender: identifica lo que dices mediante IA y comprende tu intención
-
Moverse: controla el brazo mecánico para realizar acciones correspondientes (girar, asentir, bailar, saludar, etc.)
1.2 Dos modos de interacción
El sistema proporciona dos modos de funcionamiento principales, que puedes elegir según tus necesidades:
| Modo | Nombre | Interacción | Escenario adecuado |
|---|---|---|---|
| Modo 1 | Seguimiento de fuente sonora DOA | Detecta automáticamente la dirección del sonido y gira | Demostración en sala de exposiciones, dispositivo interactivo |
| Modo 2 | Control por comandos de voz | Mantén presionada la tecla Enter para controlar | Asistente de voz, demostración didáctica |
1.3 ¿Cómo funciona el sistema?
Describamos la arquitectura de todo el sistema en términos sencillos:
You speak / make a sound
↓
[ reSpeaker Flex ] —— An array composed of 4 "ears" can hear and determine the direction of sound.
↓
[ Ubuntu ] ——
↓
There are two paths:
├─→ DOA Mode: Locally directly calculate the sound direction → Control the robotic arm to turn
└─→ Voice mode: Upload to cloud AI for recognition → Understand your intention → Control the movement of the robotic arm
↓
[ reBot Arm ] —— An arm composed of 7 "joints" performs various actions.
Un diagrama de arquitectura más especializado se describe de la siguiente manera:
Capa de hardware (dispositivos que puedes tocar):
-
reSpeaker Flex (matriz de 4 micrófonos con controlador XIAO ESP32S3)
-
reBot Arm B601-DM (manipulador de 6 GDL)
-
Ordenador con Ubuntu 22.04 (ejecuta el programa principal)
Capa de controladores (permite que el hardware se comunique):
-
Comunicación de audio USB (pyusb/libusb): conecta la matriz de micrófonos
-
Comunicación serie (MotorBridge): conecta el brazo mecánico
-
Web API (Groq Cloud): conecta con servicios de IA en la nube
Capa de algoritmos (el "cerebro" que procesa los datos):
-
Localización de fuente sonora DOA (cálculo local en tiempo real)
-
Reconocimiento de voz Whisper (Groq Cloud)
-
Comprensión de intención con Llama-3.3 (Groq Cloud)
-
Planificación de movimiento con interpolación (control local suavizado)
Capa de aplicación (donde puedes ver el efecto):
- Modo de seguimiento DOA, modo de control por voz, animación de espera con respiración, síntesis de voz
2. Preparación de hardware
2.1 ¿Qué necesitas preparar?
Antes de comenzar, asegúrate de tener listo todo el hardware siguiente. Si es la primera vez que entras en contacto con este tipo de proyecto, se recomienda comprar directamente el paquete completo para evitar problemas de compatibilidad.
| Componente | Modelo | Cantidad | Características aproximadas | Recomendaciones de compra |
|---|---|---|---|---|
| Brazo mecánico | reBot Arm B601-DM | 1 juego | El "cuerpo" que ejecuta las acciones | Oficial de Seeed Studio |
| Matriz de micrófonos | reSpeaker Flex XVF3800 | 1 | Escucha el sonido y determina la dirección | Oficial de Seeed Studio |
| PC principal | PC con Ubuntu 22.04 | 1 | Ejecuta el "cerebro" del programa | Arquitectura x86_64 |
| Cable USB | USB-A a USB-C | 2 | Conecta los dispositivos | Generalmente incluido con el dispositivo |
| Mordaza de carpintería | 3 pulgadas o más | 2 | Fija la base del brazo mecánico | Ferretería o incluido en el kit |
| Fuente de alimentación | 24V 15A (interfaz XT30) | 1 | Alimenta el brazo mecánico | Generalmente incluida en el paquete |
2.2 Breve introducción de cada hardware
2.2.1 Brazo reBot Arm B601-DM
Este es un brazo mecánico de escritorio con 7 "articulaciones" (llamadas profesionalmente 7 grados de libertad), que al igual que un brazo humano puede realizar diversos movimientos flexibles.
Descripción de las articulaciones (de arriba hacia abajo):
| Articulación | Nombre coloquial | Qué puede hacer | Rango de movimiento |
|---|---|---|---|
| J1 | Cintura (rotación de la base) | Rotación izquierda y derecha de todo el cuerpo | ± 149 ° |
| J2 | Elevación del brazo superior | Elevar o bajar el brazo superior | 0 ° ~ -206 ° |
| J3 | Extensión del antebrazo | Extensión o flexión del antebrazo | 0 ° ~ -206 ° |
| J4 | Rotación de muñeca | Rotación izquierda y derecha de la muñeca | ± 85.9 ° |
| J5 | Inclinación de muñeca | Balanceo de la muñeca hacia arriba y hacia abajo | ± 85.9 ° |
| J6 | Guiñada de muñeca | Ajuste de la dirección de la muñeca | ± 85.9 ° |
| J7 | Pinza | Agarra objetos | Control de apertura y cierre |
💡Puedes entenderlo así: J1 es como la rotación de la cintura de una persona, J2 como la elevación del hombro, J3 como la flexión del codo, J4/J5/J6 como las distintas rotaciones de la muñeca, y J7 como un dedo. Combinando estas articulaciones, el brazo robótico puede realizar movimientos muy ricos.
⚠Advertencia de montaje: Si compras un kit de piezas que necesitas montar tú mismo, presta especial atención:
-
El kit contiene una gran cantidad de tornillos y piezas estructurales, y algunas piezas son muy similares en apariencia
-
Se recomienda encarecidamente usar un destornillador eléctrico, con el par ajustado a un rango medio-bajo (3 ~ 6 kgf.cm)
-
Un par excesivo puede provocar fácilmente que el tornillo se pase de rosca
-
Presta atención a la seguridad durante el montaje para evitar pellizcos o aplastamientos en las manos
2.2.2 Matriz de micrófonos reSpeaker Flex XVF3800
Este es un módulo inteligente de procesamiento de voz con 4 micrófonos, cuyas características principales son:
-
Diseño dividido: la placa principal y la placa de la matriz de micrófonos se pueden separar, lo que te permite disponerlas de forma flexible en distintos dispositivos
-
Captación de 360 °: los 4 micrófonos están dispuestos en anillo y pueden recibir sonido desde todas las direcciones
-
Procesamiento inteligente integrado: integra el chip XMOS XVF3800, con funciones de cancelación de eco, supresión de ruido, localización de fuente sonora (DOA), entre otras
-
Interfaz USB dual: dispone de dos modos de conexión: interfaz USB-C e interfaz con conector de bloqueo PH2.0
-
Amplificador de potencia integrado: puede accionar directamente un altavoz de 10 W (a través de la interfaz JST)
Componentes principales:
| Componente | Función |
|---|---|
| Chip XMOS XVF3800 | El "cerebro" responsable de todo el procesamiento de audio |
| Códec TLV320AIC3104 | Convierte señales de sonido analógicas en señales digitales |
| Interfaz FPC de 24 pines | Conecta la placa de matriz de micrófonos y la placa principal |
| Interfaz USB-C | Conecta al ordenador, transmite audio y alimentación |
| Conector de auriculares de 3,5 mm | Permite conectar auriculares para monitorización |
| Conector de altavoz JST | Permite conectar altavoces externos |
💡Comprensión por analogía: Puedes pensar en él como un "oído muy fino": no solo tiene 4 oídos para escuchar sonidos desde todas las direcciones, sino que también puede analizar de qué dirección viene el sonido y filtrar el ruido, centrándose solo en el sonido que quieres escuchar.
2.2.3 Ordenador con Ubuntu 22.04
Ubuntu es un sistema operativo libre y de código abierto (similar a Windows, pero más popular entre los desarrolladores). Requisitos para este proyecto:
-
Sistema operativo: Ubuntu 22.04 LTS (versión de 64 bits)
-
Arquitectura: x86_64 (es decir, un ordenador normal con procesador Intel/AMD)
-
Recomendaciones de configuración mínima:
-
CPU: 4 núcleos o más
-
Memoria: 8 GB o más
-
Disco duro: 50 GB de espacio libre
-
Red: debe poder acceder a Internet (se usa para llamar a la IA en la nube)
💡**¿Y si tu ordenador tiene sistema Windows?**
Tienes dos opciones:
-
Instalar sistema dual: mantener Windows y Ubuntu en el ordenador al mismo tiempo (recomendado)
-
Usar máquina virtual: ejecutar Ubuntu de forma virtual con software (como VMware) dentro de Windows (habrá cierta pérdida de rendimiento, no recomendado para este proyecto)
Tutorial de instalación de Ubuntu 22.04: https://ubuntu.com/download/desktop
2.3 Diagrama de conexión del hardware
Antes de comenzar, familiarízate con cómo deben conectarse todos los dispositivos. La conexión general es muy sencilla, solo se necesitan dos cables USB:
┌─────────────────────────────────────┐
│ Ubuntu 22.04 │
│ ┌──────────┐ │
│ │ Python │ ←── Run the main program │
│ │ 3.10 │ │
│ └──────────┘ │
│ │ │
│ ┌──────┴──────┐ │
│ │ Groq API │ ←── Cloud AI Service │
│ │ (Internet) │ │
│ └─────────────┘ │
└─────┬────────┬────────────────────┘
│ │
USB-C Cable USB-C Cable
│ │
┌─────┴──┐ ┌─┴──────────┐
│reSpeaker│ │ reBot Arm │
│ Flex │ │ B601-DM │
│(Microphone) │ │ (Robot Arm) │
│ │ │ │
│ 4-Microphone Array │ │ 7DOF │
└────────┘ └────────────┘
│
┌─────┴──────┐
│ Speaker/Headphone │ (Optional, used for voice broadcast)
└─────────────┘
Pasos de conexión:
-
Conecta el reSpeaker Flex al ordenador mediante un cable USB-C
-
Conecta el reBot Arm al ordenador mediante un cable USB-C
-
(Opcional) conecta altavoces o auriculares al conector de salida de audio del reSpeaker Flex
-
Asegúrate de que el ordenador está conectado a Internet
3. Preparación del entorno
Antes de instalar el software, necesitamos confirmar si el entorno de tu sistema cumple los requisitos. Abre la terminal de Ubuntu (Terminal, similar al "símbolo del sistema" de Windows) y sigue los pasos siguientes para comprobar uno por uno.
3.1 Confirmar versión de Ubuntu
# Enter the following command in the terminal to view the system version
lsb_release -a
✅Salida esperada (algo como esto):
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04 LTS
Release: 22.04
Codename: jammy
💡**¿Qué pasa si no se muestra Ubuntu 22.04?**
-
Si es Ubuntu 20.04 u otras versiones, se recomienda actualizar a 22.04, porque este proyecto se ha probado en esta versión
-
Si no es Ubuntu, necesitas instalar Ubuntu 22.04
3.2 Confirmar versión de Python
# Check the default Python version in the system
python3 --version
✅Salida esperada:
Python 3.10.12
Siempre que la versión sea 3.10.x (x es cualquier número).
💡**¿Qué pasa si no es Python 3.10?**
No te preocupes, más adelante usaremos Miniforge para crear un entorno especial de Python 3.10, lo que no afectará al Python predeterminado del sistema.
3.3 Comprobar puerto USB
Antes de conectar el hardware, asegúrate de que el ordenador puede reconocer normalmente el dispositivo USB:
# View the list of currently connected USB devices
lsusb
✅Salida esperada (algo como esto, mostrando tu dispositivo USB):
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 003: ID 2886:0018 Seeed Studio reSpeaker Flex ← Microphone Array
Bus 002 Device 005: ID 1234:5678 STMicroelectronics Virtual COM Port ← Robot Arm
💡**¿Qué pasa si no veo el dispositivo?**
No te asustes, puede que el dispositivo aún no se haya conectado. Continúa con el siguiente paso y vuelve para comprobarlo después de instalar el software.
3.4 Comprobar conexión de red
# Test whether the Internet can be accessed
ping -c 3 baidu.com
✅Salida esperada:
PING baidu.com (xxx.xxx.xxx.xxx) 56(84) bytes of data.
64 bytes from ...: icmp_seq=1 ttl=54 time=25.3 ms
64 bytes from ...: icmp_seq=2 ttl=54 time=24.8 ms
64 bytes from ...: icmp_seq=3 ttl=54 time=25.1 ms
💡**¿Y si no puedes acceder a Internet?**
El modo de voz requiere conexión a la red para llamar a la Groq API, asegúrate de que la red sea fluida. Si se trata de una red de campus/empresa, puede ser necesaria una configuración de proxy adicional (se explicará más adelante).
4. Instalación de software
⚠️ Nota importante: Todos los siguientes comandos deben ejecutarse en la terminal. Se recomienda confirmar que no haya errores después de cada paso antes de continuar con el siguiente.
4.1 Paso 1: Instalar Miniforge (herramienta de gestión de entornos de Python)
¿Qué es Miniforge?
Miniforge es una herramienta de gestión de entornos de Python, similar a un "gestor de versiones tipo App Store" para Python. Puede ayudarte a:
-
Crear un entorno independiente de Python 3.10 sin afectar al Python predeterminado del sistema
-
Instalar con un solo clic todas las dependencias del proyecto
-
Cambiar entre diferentes versiones de Python para distintos proyectos
Comando de instalación:
# Download the Miniforge installation script
wget "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-$(uname)-$(uname -m).sh"
# Perform the installation (follow the prompts)
bash Miniforge3-$(uname)-$(uname -m).sh
El asistente de instalación aparece después de la ejecución:
-
Pulsa 'Enter' para ver el acuerdo de licencia
-
Escribe 'yes' para aceptar el acuerdo
-
Pulsa 'Enter' para confirmar la ruta de instalación (predeterminada)
-
Escribe 'yes' para inicializar conda (recomendado)
Después de que la instalación se complete, cierra la ventana de terminal actual y abre una nueva terminal para que la variable de entorno surta efecto.
✅Verificar instalación:
# Enter in the new terminal
conda --version
Salida esperada: 'conda 24.x. x' (el número de versión puede ser diferente, siempre que se pueda mostrar la versión, la instalación es correcta)
4.2 Paso 2: Clonar la base de código del proyecto
# Download the main codebase of the project (voice control part)
git clone https://github.com/xr686/reBot-Arm-reSpeaker-Flex.git
# Enter the project directory
cd reBot-Arm-reSpeaker-Flex
✅Salida esperada:
Cloning into 'reBot-Arm-reSpeaker-Flex'...
remote: Enumerating objects: ...
...
Resolving deltas: 100% (...)
💡**¿Qué pasa si git clone es lento o falla?**
Puede ser un problema de red, puedes intentar:
# Use domestic mirroring for acceleration (if available)
git clone https://ghproxy.com/https://github.com/xr686/reBot-Arm-reSpeaker-Flex.git
4.3 Paso 3: Crear un entorno Conda
El proyecto proporciona un archivo 'environment.yml' que enumera todos los paquetes de dependencias necesarios. Solo necesitamos un comando para instalar automáticamente todas las dependencias:
# Make sure you are in the reBot-Arm-reSpeaker-Flex directory.
# One-click to create an environment and install all dependencies
conda env create -f environment.yml
Este proceso puede tardar 10-30 minutos, dependiendo de la velocidad de tu red. Automáticamente:
-
Creará un entorno Python 3.10.2 llamado 'flex'
-
Instalará pinocchio, numpy y otras bibliotecas de computación científica desde el canal conda-forge
-
Instalará pyusb para la comunicación USB
✅Señal de instalación correcta (las últimas líneas se ven así):
Executing transaction: ... done
#
# To activate this environment, use
#
# $ conda activate flex
#
# To deactivate an active environment, use
#
# $ conda deactivate
#
4.4 Paso 4: Activar el entorno Conda
# Activate the newly created flex environment
conda activate flex
✅Indicador de activación correcta: aparece '(flex)' delante del prompt de la terminal:
(flex) user@computer:~/reBot-Arm-reSpeaker-Flex$
💡Recordatorio importante: Cada vez que abras una nueva terminal, necesitas volver a ejecutar 'conda activate flex' para activar el entorno.
4.5 Paso 5: Instalar dependencias del sistema
# Update the system package list and install ffmpeg
sudo apt-get update && sudo apt-get install -y ffmpeg
¿Qué es ffmpeg?
ffmpeg es una herramienta de procesamiento de audio y vídeo; este proyecto la utiliza para procesar archivos de audio después de la síntesis de voz. En pocas palabras, es "para permitir que el ordenador reproduzca y procese sonido".
✅Señal de instalación correcta:
ffmpeg is already the newest version (x.x.x).
4.6 Paso 6: Instalar uv (herramienta de gestión de paquetes de Python)
# Install uv (a fast Python package management tool)
curl -LsSf https://astral.sh/uv/install.sh | sh
¿Por qué necesitas uv?
uv es una herramienta de gestión de paquetes de Python muy rápida que puede utilizarse para instalar paquetes en formato pip. La biblioteca 'motorbridge' utilizada en el proyecto necesita instalarse a través de uv.
✅Después de que la instalación sea correcta, cierra la terminal y vuelve a abrirla.
4.7 Paso 7: Clonar la biblioteca de control del brazo robótico
# Cloning robotic arm control library
git clone https://github.com/vectorBH6/reBotArm_control_py.git
# Enter the robotic arm control library directory
cd reBotArm_control_py
# Use uv to install dependencies
uv sync
✅Salida esperada: Muestra el progreso de la instalación sin informar de ningún error.
4.8 Paso 8: Configurar variables de entorno PYTHONPATH
# Add the robotic arm control library to the Python search path
export PYTHONPATH="$PWD:$PYTHONPATH"
¿Qué significa eso?
Cuando Python importa una biblioteca, busca en el directorio especificado por PYTHONPATH. Este comando le dice a Python que "además de la ruta de búsqueda predeterminada, busque también en este directorio".
⚠️ Recordatorio importante: 'export PYTHONPATH' ¡Esta configuración quedará inválida cada vez que se cierre la terminal! Necesitas:
Esquema A (temporal, para ejecutar cada vez): Ejecutar manualmente el comando export anterior cada vez que se abra una nueva terminal
Esquema B (recomendado, permanente): Escribir esta configuración en el archivo '~/.bashrc':
# Write environment variables to the configuration file so that they will be automatically set every time the terminal is opened.
echo 'export PYTHONPATH="'$PWD':$PYTHONPATH"' >> ~/.bashrc
# Make the configuration take effect immediately
source ~/.bashrc
4.9 Paso 9: Configurar permisos del puerto serie
Para que el usuario actual pueda acceder al dispositivo serie USB (utilizado para comunicarse con el brazo robótico), necesitas configurar permisos:
# Set USB serial device permissions (to allow the current user to access without sudo)
sudo chmod 666 /dev/ttyACM*
✅No se debe informar de ningún error después de la ejecución.
💡**¿Por qué necesitas esto?**
El sistema Linux tiene una gestión de permisos estricta para los dispositivos de hardware. De forma predeterminada, los usuarios normales no pueden acceder directamente a los dispositivos serie. Este comando permite que todos los usuarios lean y escriban en estos dispositivos.
⚠️ Esta configuración quedará inválida después de reiniciar. Si quieres que sea permanente, puedes añadir tu usuario al grupo 'dialout':
# Add the current user to the dialout group (permanently resolve the permission issue)
sudo usermod -a -G dialout $USER
La modificación requiere cerrar sesión e iniciar sesión de nuevo para que surta efecto.
4.10 Paso 10: Configurar la Groq API Key
Este proyecto utiliza el servicio de IA en la nube de Groq para el reconocimiento de voz y la comprensión de intenciones. Necesitas registrar una cuenta de Groq y obtener la API Key.
Para obtener la API Key:
-
Abre el navegador y visita https://console.groq.com/keys
-
Registra una cuenta (puedes usar correo electrónico o cuenta de GitHub)
-
Después de iniciar sesión, haz clic en "Create API Key"
-
Copia la clave generada (el formato es similar a 'gsk_xxxxxxxxxxxx)
Configura la API Key en el código:
# First return to the main project directory
cd ~/reBot-Arm-reSpeaker-Flex
# Edit the main program file
nano sound_tracking_arm.py
Encuentra la siguiente sección en el archivo (aproximadamente alrededor de la línea 60):
VOICE_CFG = {
"api_key": "12345678", # ← Replace this line with your actual API Key
...
}
Reemplaza '"12345678"' con la API Key que acabas de copiar, por ejemplo:
"api_key": "gsk_aBcDeFgHiJkLmNoPqRsTuVwXyZ",
Guarda el archivo: pulsa 'Ctrl O', luego 'Enter', y después 'Ctrl X' para salir.
⚠️ Recordatorio de seguridad:
-
No compartas tu API Key en un repositorio de código público o foro
-
No envíes capturas de pantalla de la API Key a redes sociales
-
Si la API Key se filtra, elimínala en la consola de Groq y genera una nueva.
4.11 Paso 11: Configuración de proxy de red (si es necesario)
Si estás en la China continental o en ciertos entornos de red, es posible que no puedas acceder directamente a los servicios de Groq. Pruébalo primero:
# Test whether Groq can be accessed
ping console.groq.com -c 3
Si puedes recibir una respuesta (muestra el tiempo), significa que la red es normal y puedes omitir este paso.
Si aparece 'unknown host' o 'Request Timeout', es necesario configurar el proxy.
Cómo configurar el proxy:
Edita de nuevo 'sound_tracking_arm.py' y encuentra la entrada 'proxy' en 'VOICE_CFG:
VOICE_CFG = {
...
"proxy": None, # ← Change it to your proxy address
}
Por ejemplo, si tu dirección de proxy es 'http:// 192.168.4.7:7897':
"proxy": "http://192.168.4.7:7897",
💡**¿Cómo sé mi dirección de proxy?**
-
Si usas Clash: normalmente es 'http:// 127.0.0.1:7890'
-
Si usas v2rayN: normalmente es 'http:// 127.0.0.1:10809'
-
Si es un servidor proxy de LAN: pregunta al administrador de red
-
El formato del proxy suele ser: 'http:// dirección IP: número de puerto'
5. Conexión y montaje del hardware
5.1 Pasos de conexión del hardware
Ahora que todo el software se ha instalado, conectemos el hardware.
Paso 1: Conectar reSpeaker Flex
-
Conecta reSpeaker Flex al ordenador con un cable USB-A a USB-C
-
Después de la conexión, la luz indicadora en el reSpeaker Flex debería encenderse
-
Introduce 'lsusb' en la terminal y deberías poder ver el dispositivo de Seeed Studio.
Paso 2: Conectar el reBot Arm
-
Asegúrate de que la base del brazo mecánico esté firmemente fijada al escritorio con una mordaza de carpintería
-
Conecta el brazo robótico al ordenador con un cable USB-A a USB-C
-
Conecta la fuente de alimentación de 24 V (interfaz XT30), pero no enciendas todavía
⚠️ Lista de comprobación de seguridad antes de encender:
-
La base del brazo mecánico está firmemente fijada (sujeta con una mordaza de carpintería)
-
No hay obstáculos en el rango de movimiento del brazo robótico
-
No hay personal cerca del rango de movimiento del brazo robótico
-
Cable USB conectado
-
Cableado de la fuente de alimentación correcto
PASO 3: ENCENDIDO
-
Después de la comprobación, enciende el interruptor de alimentación de 24 V
-
El brazo mecánico emitirá un ligero sonido de encendido del motor
-
Introduce 'ls /dev/ttyUSB *' en la terminal, y deberías poder ver dispositivos similares a '/dev/ttyUSB0'
5.2 Verificar conexiones de hardware
# View USB audio device (reSpeaker)
arecord -l
✅Salida esperada (similar):
**** List of CAPTURE Hardware Devices ****
card 2: XVF3800 [reSpeaker XVF3800], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0
# View USB serial device (robotic arm)
ls -la /dev/ttyUSB0
O:
ls -la /dev/ttyACM0
✅Salida esperada:
crw-rw-rw- 1 root dialout 188, 0 ... /dev/ttyUSB0
💡**¿No puedes ver el dispositivo?**
-
Comprueba si el cable USB está bien conectado
-
Intenta cambiar a otro puerto USB
-
Comprueba si el cable es de datos (algunos cables solo cargan y no pueden transmitir datos)
-
Consulta la 9. guía de resolución de problemas
6. Primera ejecución
6.1 Verificación antes de la operación
Antes del inicio oficial, hagamos algunas verificaciones sencillas para asegurarnos de que todos los componentes funcionen correctamente.
Verificación 1: Comprobar dependencias de Python
Asegúrate de estar en el entorno 'flex' y en el directorio principal del proyecto:
# Activate the environment
conda activate flex
# Enter the project directory
cd ~/reBot-Arm-reSpeaker-Flex
# Verify pyusb and numpy
python -c "import usb.core; import numpy; print('pyusb + numpy OK')"
✅Salida esperada:
pyusb + numpy OK
Verificación 2: Validar la librería del brazo robótico
# Ensure that PYTHONPATH is set
export PYTHONPATH="$HOME/reBotArm_control_py:$PYTHONPATH"
# Verify the robotic arm library
python -c "from reBotArm_control_py.actuator import RobotArm; print('Robot Arm Library OK')"
✅Salida esperada:
Robot Arm Library OK
💡**¿El error es 'ModuleNotFoundError'?**
Significa que PYTHONPATH no está configurado correctamente. Por favor confirma:
-
El directorio reBotArm_control_py sí existe.
-
Se ejecutó el comando 'export PYTHONPATH'
-
Si no, intenta usar la ruta completa:
export PYTHONPATH="/home/Your username/reBotArm_control_py:$PYTHONPATH"
Verificación 3: Probar el micrófono
# Record a 3-second test audio
arecord -D plughw:2,0 -c 6 -r 16000 -f S16_LE -d 3 /tmp/test.wav
# Play the recorded audio (if a speaker/headphone is connected)
aplay -D plughw:2,0 /tmp/test.wav
Si puedes oír el sonido grabado, la matriz de micrófonos funciona correctamente.
6.2 Procedimiento de inicio
Después de pasar todas las verificaciones, ¡se puede iniciar el programa oficialmente!
# Ensure in the flex environment
cd ~/reBot-Arm-reSpeaker-Flex
# Start the program (a mode selection menu will pop up)
python sound_tracking_arm.py
✅Salida esperada:
==================================================
reBot Arm B601-DM + reSpeaker Flex
Please select the operating mode:
==================================================
[1] DOA Interaction Mode (Sound Source Tracking + Standby Animation)
[2] Voice control mode (button trigger + AI LLM control)
==================================================
Please enter the mode number (1 or 2):
En este momento, introduce '1' para entrar en el modo de seguimiento de fuente de sonido DOA, o introduce '2' para entrar en el modo de control por voz.
Especificar directamente el modo al iniciar
También puedes especificar el modo directamente en el comando de inicio, omitiendo el menú de selección:
# DOA Sound Source Tracking Mode
python sound_tracking_arm.py --mode doa
# Voice command control mode
python sound_tracking_arm.py --mode voice
6.3 Prueba de la primera ejecución
Prueba del modo DOA
Cuando se selecciona el modo 1, el programa:
-
Inicializa el dispositivo USB
-
Conecta el brazo mecánico
-
Entra en estado de espera
Método de prueba: Ponte al lado del brazo robótico y habla o aplaude para observar si el brazo robótico:
-
Gira en la dirección en la que estás
-
Realiza movimientos de asentimiento
-
Luego vuelve al estado de espera
Prueba del modo de voz
Cuando se selecciona el modo 2, el programa:
-
Inicializa todos los componentes
-
Espera a que pulses Enter
Método de prueba:
-
Pulsa la tecla 'Enter'
-
Después de ver el aviso de "recording", di "hello" o "say hello"
-
Espera unos 5 segundos
-
Observa si:
-
Reconoce tu voz
-
El brazo mecánico realiza la acción de saludo
-
Oyes la respuesta por voz
7. Explicación detallada de la función
7.1 Modo 1: modo de seguimiento de fuente de sonido DOA
¿Qué es DOA?
El nombre completo de DOA es Direction of Arrival (dirección de llegada de la onda sonora), que en pocas palabras es: juzgar desde qué dirección viene el sonido. Así como tú puedes usar ambos oídos para determinar aproximadamente si el sonido está a la izquierda o a la derecha, reSpeaker Flex utiliza cuatro micrófonos para calcular la dirección del sonido con mayor precisión.
Flujo de trabajo
Start the system
↓
Initialize USB device
↓
Connect reSpeaker Flex ←──→ Connect reBot Arm
↓
Loop Execution:
├─ Read DOA angle data (0°~360°)
├─ Is a valid sound source detected?
│ ├─ No → Breathing Standby Animation → Continue Reading
│ └─ Yes → 4-frame Angle Buffer Queue → Calculate Weighted Average Angle
│ → Cosine Similarity Smoothing Filtering
│ → Angle change > Trigger Threshold?
│ ├─ No → Continue Reading
│ └─ Yes → The robotic arm turns towards the target direction
│ → Perform a nodding motion
│ → Enter Cool Down
│ → Continue Reading
↓
Exit (Press Ctrl+C)
Explicación detallada de los puntos técnicos clave
Cola de búfer de ángulo de 4 fotogramas
Imagina que estás escuchando a una persona en movimiento hablar, y si cada fotograma (unos 50 milisegundos) de cambio de ángulo impulsa directamente el brazo robótico, este temblará y vibrará. El sistema utiliza un "búfer circular" para almacenar los datos de ángulo DOA de los últimos 4 fotogramas y luego promedia para que el movimiento sea más suave.
Filtro de suavizado por similitud de coseno
A veces el micrófono juzgará mal la dirección (como un ruido repentino). Este filtro comprobará si los ángulos de los últimos fotogramas son "coherentes": si la diferencia es demasiado grande, puede ser un juicio erróneo y no responderá. Igual que cuando oyes un sonido, confirmarás la dirección antes de girar la cabeza.
Umbral de disparo
Solo cuando el cambio de ángulo supera el umbral establecido (15 ° por defecto) se activará el movimiento del brazo. Esto evita movimientos frecuentes debidos a pequeñas fluctuaciones de ángulo.
Período de enfriamiento
Después de cada acción, el sistema entrará en un período de enfriamiento (3 segundos por defecto), durante el cual no responderá a nuevas fuentes de sonido. Esto evita que el brazo robótico tiemble debido a disparos continuos.
Animación de espera de respiración
Cuando nadie está hablando, el brazo robótico no estará completamente quieto, sino que entrará en un estado de "respiración", ligeramente similar al de un ser humano. Esto es a la vez estético y permite al usuario saber que el sistema está en funcionamiento.
7.2 Modo 2: Modo de control por voz
Bucle cerrado de interacción completa
El modo de control por voz admite el bucle cerrado completo de grabación → reconocimiento → comprensión → ejecución → difusión.
Flujo de trabajo
The user presses the Enter key.
↓
arecord starts recording (6 channels, 16kHz, 5 seconds)
↓
User releases Enter → Stop recording
↓
NumPy Audio Normalization Processing (Extract First Channel + Gain Amplification)
↓
Upload to Groq API
↓
Whisper model performs speech-to-text (STT) recognition
↓
Obtain text commands (e.g., "turn left")
↓
Send to Llama-3.3-70B large language model
↓
LLM understands intent + outputs JSON structured results
↓
Analysis results
├─ Invalid → Broadcast "Sorry, I didn't catch that. Could you please repeat?"
└─ Valid → Execute the corresponding robotic arm action
↓
Edge-TTS Voice Announcement Execution Result
↓
Return to standby state
Comandos de voz compatibles
| Tipo de instrucción | Ejemplo de frase | Acción ejecutada | Descripción |
|---|---|---|---|
| girar a la izquierda | "girar a la izquierda"/"mirar a la izquierda"/"girar a la izquierda" | la base del brazo robótico gira 45 grados hacia la izquierda | el ángulo se puede ajustar mediante parámetros |
| girar a la derecha | "girar a la derecha"/"mirar a la derecha"/"girar a la derecha" | la base del brazo robótico gira 45 grados hacia la derecha | igual que arriba |
| saludo | "di hola"/"hola"/"hi" | realizar un saludo con inclinación de cabeza | asiente dos veces seguidas |
| despedida con la mano | "saluda con la mano"/"di adiós"/"adiós" | realizar un gesto de despedida con la mano | agita la mano 2 veces a izquierda y derecha |
| volver a cero | "volver a la posición inicial"/"restablecer"/"volver a cero" | todas las articulaciones vuelven a la posición cero | volver a la postura inicial |
| detener | "detente"/"no te muevas"/"para" | detener ahora la acción actual | comando de parada de emergencia |
Ejemplo de interacción
$ python sound_tracking_arm.py --mode voice
========================================
🤖 reBot Arm Voice Control System has been activated
Press Enter to start recording, release to stop.
Press Ctrl+C to exit
========================================
[Interaction] >>> 🟢 System is idle, please press Enter to start recording... <<< [User presses Enter]
🔴 Recording... Please speak (5 seconds)
[User says: "Turn to the left a bit"]
[User releases Enter]
🟢 Recording completed, processing...
--- Speech Recognition ---
📝 Recognition result: "turn left"
--- Intent Understanding ---
🤖 Parsed action: turn_left, parameters: {"angle": 45}
--- Execute Action ---
=> Start executing action: turn_left
--- Voice Announcement ---
=======================================================
🤖 [Voice Output] Okay, turning left.
=======================================================
[Interaction] >>> 🟢 System is idle, press Enter to start recording... <<< [Waiting for next input]
¿Cómo entiende la IA tus palabras?
El proyecto utiliza un Prompt bien diseñado que permite a un modelo de lenguaje grande (Llama-3.3-70B) entender diversas expresiones en lenguaje natural y traducirlas en instrucciones estructuradas.
Por ejemplo, si dices "ayúdame a girar la cabeza hacia la izquierda", la IA lo entenderá así:
{"action": "turn_left", "params": {"angle": 45}, "reply": "Okay, turning left."}
La ventaja de este diseño es que no necesitas decir palabras de comando fijas, ¡solo habla de forma natural como si estuvieras charlando!
8. parámetros de línea de comandos
8.1 tabla completa de parámetros
Cuando inicies el programa, puedes añadir varios parámetros para personalizar el comportamiento:
python sound_tracking_arm.py [Parameter]
| Parámetro | Corto | Predeterminado | Descripción |
|---|---|---|---|
| '-- mode' | '-m' | 'doa' | Modo de operación: 'doa' (seguimiento de fuente de sonido) o 'voice' (control por voz) |
| '-- device' | '-d' | '0' | ID de dispositivo reSpeaker Flex USB |
| '-- port' | '-p' | '/dev/ttyUSB0' | Ruta del dispositivo de puerto serie del brazo mecánico |
| '-- threshold' | '-t' | '15' | Umbral de activación del ángulo DOA (en grados) |
| '-- cooldown' | '-c' | '3' | Tiempo de enfriamiento de la acción (en segundos) |
| '-- buffer-size' | '-B ' | '4' | Fotogramas del búfer de ángulo DOA |
| '-- groq-key' | '-k' | 'None' | Groq API Key (también se puede configurar por código) |
| '-- tts-voice' | '-v' | 'zh-CN-XiaoxiaoNeural | Voz de Edge-TTS |
| '-- debug' | - | 'False' | Habilitar salida de registro de depuración |
8.2 ejemplo de uso
Uso básico
# DOA Tracking Mode (Default)
python sound_tracking_arm.py
# Voice control mode
python sound_tracking_arm.py --mode voice
Ajustar la sensibilidad DOA
# Increase the trigger threshold (requires a larger change in sound direction to respond, reducing false triggers)
python sound_tracking_arm.py --threshold 25
# Lower the trigger threshold (more sensitive, but also more prone to false triggering)
python sound_tracking_arm.py --threshold 10
# Extend Cool Down (longer "rest time" after action)
python sound_tracking_arm.py --cooldown 5
# Adjust multiple parameters simultaneously
python sound_tracking_arm.py --threshold 20 --cooldown 5
Especificar el dispositivo de hardware
# The robotic arm is connected to different serial ports.
python sound_tracking_arm.py --port /dev/ttyACM0
# Specify Groq API Key (command-line input will override the configuration in the code)
python sound_tracking_arm.py --mode voice --groq-key gsk_xxxxxxxxxxx
Cambiar el timbre de voz
# Use Chinese male voice (Yun Jian)
python sound_tracking_arm.py --mode voice --tts-voice zh-CN-YunjianNeural
# Use Chinese female voice (Xiaoxiao, default)
python sound_tracking_arm.py --mode voice --tts-voice zh-CN-XiaoxiaoNeural
# Use Chinese female voice (Xiaoxiao, multi-emotional)
python sound_tracking_arm.py --mode voice --tts-voice zh-CN-XiaoxiaoMultilingualNeural
Lista completa de voces compatibles con Edge-TTS:https://github.com/rany2/edge-tts#changing-the-voice
Habilitar modo de depuración
# Enable detailed log output (helpful for troubleshooting)
python sound_tracking_arm.py --debug
9. guía de resolución de problemas FAQ
Esta sección recopila los problemas y soluciones más comunes encontrados por usuarios principiantes. Si no puedes encontrar tu problema aquí, comprueba si la conexión de hardware es correcta y luego revisa el mensaje de error que muestra el terminal.
9.1 problemas en la fase de instalación
P1: 'conda command not found'
Problema: Después de instalar Miniforge, al introducir el comando 'conda' aparece el aviso de que no se puede encontrar.
Causa: La variable de entorno no está configurada correctamente.
Solución:
# Option 1: Reinitialize the shell
~/miniforge3/bin/conda init bash
# Then close the terminal and reopen it.
# Option 2: Manual Activation
source ~/miniforge3/etc/profile.d/conda.sh
conda activate base
P2: Error al crear el entorno para 'environment.yml'
Problema: Se informa de un error cuando ejecutas 'conda env create -f environment.yml.
Posibles causas y soluciones:
- Problemas de red (lo más común):
# Switch to domestic mirroring source
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes
# Then try again
conda env create -f environment.yml
- Espacio en disco insuficiente:
# Check disk space
df -h
# Ensure there is at least 5GB of available space.
- La versión de conda es demasiado antigua:
conda update conda
P3: 'uv: command not found'
Problema: Después de instalar uv, el sistema indica que no se puede encontrar el comando.
Solución:
# Check if uv is installed
ls ~/.cargo/bin/uv
# If it exists, add it to PATH
echo 'export PATH="$HOME/.cargo/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
P4: 'uv sync' informó de un error
Problema: No se pudo ejecutar 'uv sync' en el directorio 'reBotArm_control_py.
Posibles causas:
-
No estás en el directorio correcto
-
La versión de Python no coincide.
Solución:
# Confirm that the directory is correct
ls -la pyproject.toml
# If it doesn't exist, it means you're not in the correct directory.
cd ~/reBotArm_control_py
# Confirm the Python version
python --version # 应该是 3.10.x
9.2 Problemas de reconocimiento de dispositivos USB
P5: 'lsusb' no muestra reSpeaker Flex
Pasos de diagnóstico:
-
Comprueba si el cable USB está bien conectado: Vuelve a conectar el cable USB-C
-
Cambia de puerto USB: Prueba otros puertos USB de tu ordenador (especialmente el puerto azul USB 3.0)
-
Comprueba el cable: Asegúrate de que estás usando un cable de datos (algunos cables solo sirven para cargar)
-
Ver el registro del sistema:
# View USB connection logs
dmesg | tail -20
- Comprueba si se requiere un controlador:
# View detailed information of USB devices
lsusb -v -d 2886:
P6: 'lsusb' no muestra el brazo
Pasos de diagnóstico:
-
Confirma que el cable USB está conectado correctamente
-
Confirma que la alimentación del brazo robótico está encendida (interruptor de alimentación de 24V)
-
Comprueba si el indicador de alimentación está encendido
-
Ver los registros del sistema:
dmesg | grep -i "ttyUSB\|ttyACM\|usb"
P7: 'Permission denied: /dev/ttyUSB0'
Problema: No tienes permiso para acceder al dispositivo serie.
Solución:
# Temporary solution
sudo chmod 666 /dev/ttyUSB0
# Permanently resolve (recommended)
sudo usermod -a -G dialout $USER
# Then log out and log back in.
9.3 Problemas de ejecución de Python
P8: 'ModuleNotFoundError: No module named 'usb.core''
Problema: No se encuentra el módulo Pyusb.
Solución:
# Confirm in the flex environment
conda activate flex
# Manually install pyusb
conda install -c conda-forge pyusb
# If it still doesn't work, check the Python path.
which python # Confirm that the output contains miniforge3/envs/flex
P9: 'ImportError: cannot import name 'RobotArm''
Problema: No se puede encontrar la biblioteca de control del brazo robótico.
Solución:
# Confirm that reBotArm_control_py has been correctly cloned
ls ~/reBotArm_control_py
# Confirm that PYTHONPATH has been set
echo $PYTHONPATH # should include the path to reBotArm_control_py
# If not, set it manually
export PYTHONPATH="/home/your_username/reBotArm_control_py:$PYTHONPATH"
# Or directly verify the path using Python
python -c "import sys; print(sys.path)"
P10: 'libusb-1.0.so. 0: cannot open shared object file'
Problema: Falta la biblioteca del sistema libusb.
Solución:
# Install the libusb development library
sudo apt-get update
sudo apt-get install -y libusb-1.0-0-dev
# If it still doesn't work, try
conda install -c conda-forge libusb
9.4 problemas de red/API
P11: 'Groq API Key not set'
Problema: El programa indica que la API Key no está configurada.
Solución:
-
Comprueba si el VOICE_CFG["api_key"] en "sound_tracking_arm.py" ha sido modificado
-
Confirma que el formato de la API Key es correcto (debe comenzar con 'gsk_')
-
También puedes configurar variables de entorno:
export GROQ_API_KEY="gsk_xxxxxxxxxxxx"
P12: Cuando 'Connection error' o 'Timeout' llama a Groq API
Problema: No se puede conectar con el servidor de Groq.
Pasos de diagnóstico:
- Probar la conectividad de red:
ping console.groq.com -c 3
-
-
- Si el ping falla, necesitas configurar un proxy **:
-
Edita el 'VOICE_CFG en 'sound_tracking_arm.py ':
proxy": "http://your proxy IP:port", # e.g., "http://127.0.0.1:7890
- Si el proxy no funciona, comprueba si el proxy está funcionando correctamente:
# Test via proxy
curl -x http://your_proxy_IP:port https://console.groq.com
P13: 'Rate limit exceeded' / 'Quota exceeded'
Problema: La frecuencia de llamadas a la API supera el límite o la cuota se ha agotado.
Solución:
-
Accede a https://console.groq.com/settings/limits para ver los límites
-
Las cuentas gratuitas de Groq tienen un límite en el número de solicitudes por minuto, reduce la frecuencia de uso.
-
Si es un problema de cuota, puede que necesites actualizar a una cuenta de pago.
P14: 'TTS broadcast failure'/'aplay not found'
Problema: La función de difusión de voz no funciona con normalidad.
Solución:
# Install alsa-utils (including aplay)
sudo apt-get install -y alsa-utils
# Check audio output device
aplay -l
# If the device is not visible, you may need to configure the default audio output.
9.5 problema del brazo mecánico
P15: El brazo mecánico no responde/no se mueve
Pasos de diagnóstico:
- Comprobar el dispositivo serie:
ls -la /dev/ttyUSB*
# or
ls -la /dev/ttyACM*
- Comprobar permisos:
# Ensure read and write permissions
ls -la /dev/ttyUSB0 # should show crw-rw-rw-
-
Comprobar la fuente de alimentación: Confirma que la fuente de alimentación de 24V está encendida
-
Comprueba el registro del programa: ¿Hay algún mensaje de error sobre 'ArmCtrl' al ejecutar el programa?
-
Intenta especificar el puerto serie correcto:
python sound_tracking_arm.py --port /dev/ttyACM0
# or
python sound_tracking_arm.py --port /dev/ttyUSB1
P16: Movimiento anormal/jitter del brazo mecánico
Posibles causas:
-
El brazo mecánico no está bien fijado: comprueba si la base es firme
-
Hay obstáculos en el rango de movimiento: despeja el espacio de movimiento
-
Ángulo de articulación anormal: intenta restablecerlo: di "volver a la posición inicial" o reinicia el programa
P17: Calentamiento anormal del motor
⚠️Advertencia: Si el motor se calienta de forma anormal, ¡apaga la alimentación inmediatamente!
Posibles causas:
-
El brazo mecánico está bloqueado por una fuerza externa y el motor sigue ejerciendo fuerza
-
Movimiento demasiado rápido
-
Funcionamiento continuo prolongado
Solución:
-
Apaga la alimentación y espera a que el motor se enfríe
-
Comprueba si hay obstrucciones mecánicas
-
Reduce la frecuencia de movimiento
9.6 problemas relacionados con el audio
P18: No hay sonido en la grabación del micrófono
Pasos de diagnóstico:
- Comprueba si el dispositivo es reconocido:
arecord -l # Should see reSpeaker XVF3800
- Comprobar el número de dispositivo:
# View detailed device information
cat /proc/asound/cards
- Prueba de grabación manual:
# Record with a specified device number (adjust the card and device numbers according to the actual situation)
arecord -D plughw:2,0 -c 6 -r 16000 -f S16_LE -d 3 /tmp/test.wav
- Comprueba si la matriz de micrófonos está correctamente conectada: Confirma que el cable FPC está bien enchufado
P19: Ángulo DOA no estable/saltos
Posibles causas y soluciones:
-
El entorno es demasiado ruidoso: Haz la prueba en un entorno silencioso
-
La matriz de micrófonos no está plana: Asegúrate de que el reSpeaker esté colocado en posición horizontal
-
Fuerte interferencia de fuentes de sonido cercanas: Aléjate de ventiladores, altavoces y otros equipos
-
Ajusta el umbral de disparo: Sube el parámetro '-- threshold'.
9.7 otras preguntas
P20: Ctrl C no puede salir
Solución:
# Try pressing Ctrl+C multiple times
# Or open another terminal
killall python
P21: Bloqueo durante la ejecución del programa
Pasos de diagnóstico:
-
Consulta los últimos mensajes de error antes del bloqueo.
-
Usa el modo '-- debug' para obtener más registros
-
Comprueba si hay memoria insuficiente: 'free -h'
-
Comprueba si la conexión USB es inestable
P22: Cómo empezar de nuevo por completo
Si quieres reconfigurar desde cero:
# 1. Delete Conda Environment
conda activate base
conda env remove -n flex
# 2. Delete the code directory
rm -rf ~/reBot-Arm-reSpeaker-Flex
rm -rf ~/reBotArm_control_py
# 3. Re-execute the installation steps according to this Wiki.
10. precauciones de seguridad
⚠️ Al utilizar este producto, asegúrate de leer detenidamente todas las siguientes instrucciones de seguridad. Un manejo inadecuado puede provocar daños en el equipo o lesiones personales.
10.1 seguridad del brazo mecánico
Reglas básicas de seguridad
| Regla | Descripción | Consecuencias |
|---|---|---|
| No mover el brazo mecánico a la fuerza | La articulación del brazo mecánico está accionada por un motor de precisión, y la rotación manual forzada puede causar daños en los engranajes | Daño del motor, alto coste de mantenimiento |
| Garantizar que el rango de movimiento esté libre de obstáculos | Antes de la operación, comprueba que no haya personas, paredes u otros objetos en el rango de movimiento del brazo robótico | Las colisiones causan daños al brazo robótico o a los objetos circundantes |
| Desenchufar el cable USB en caso de emergencia | En caso de emergencia, desenchufa inmediatamente el cable USB del brazo mecánico para cortar la señal de control | El brazo mecánico deja de moverse |
| La carga no debe superar los 1500g | No sujetes objetos que superen 1,5kg con las pinzas | Daño por sobrecarga del motor |
| Mantener una distancia de seguridad de 1,5m | Mantén una distancia de al menos 1,5m cuando el brazo robótico esté en funcionamiento | Evitar lesiones por colisión |
Límites de ángulo de las articulaciones
El sistema tiene protección de límite de articulación incorporada, la siguiente tabla es solo de referencia. Ten en cuenta que en el código se utiliza la unidad de radianes (rad).
| Articulación | Nombre | Mín (Ángulo) | Máx (Ángulo) | Descripción |
|---|---|---|---|---|
| J1 | Rotación de la base | -149.0 ° | 149.0 ° | Rotación horizontal, rango máximo |
| J2 | Inclinación del hombro | -206.3 ° | 0 ° | Pluma hacia arriba, solo hacia arriba |
| J3 | Inclinación del codo | -206.3 ° | 0 ° | Antebrazo extendido, solo hacia delante |
| J4 | Rotación de la muñeca | -85.9 ° | 85.9 ° | Rotación del extremo izquierda y derecha |
| J5 | Inclinación de la muñeca | -85.9 ° | 85.9 ° | Balanceo del extremo arriba y abajo |
| J6 | Guiñada de la muñeca | -85.9 ° | 85.9 ° | Ajuste de la dirección del extremo |
| J7 | Apertura y cierre de la pinza | -320.9 | 0 | Control de la pinza, el número negativo es abrir |
10.2 seguridad eléctrica
-
No enchufar ni desenchufar con tensión: Antes de enchufar o desenchufar la interfaz de alimentación XT30 2 2, se debe apagar primero la alimentación
-
No conectar/desconectar el motor en caliente: No enchufes ni desenchufes el cable del motor cuando la alimentación esté encendida
-
Usar la fuente de alimentación correcta: Solo se puede utilizar una fuente de alimentación de 24V 15A, el uso de otras fuentes puede causar daños al equipo
-
Evitar entornos húmedos: No utilizar en entornos húmedos, polvorientos y de alta temperatura
-
Comprobar el cable: Antes de usar, comprueba si el cable de alimentación y la línea de señal están intactos y sin daños
10.3 seguridad del entorno de uso
-
Los menores deben usarlo bajo la supervisión de un adulto: el brazo mecánico tiene cierta fuerza, un uso inadecuado puede causar lesiones
-
Banco de trabajo estable: Asegúrate de que el brazo robótico esté fijado en una mesa horizontal estable
-
Espacio suficiente: Reserva al menos 1 metro de espacio seguro alrededor del brazo robótico
-
Buena iluminación: Facilita la observación del estado de funcionamiento del brazo robótico
-
Mantenerse alejado de fuentes de agua: El equipo electrónico y el agua no deben entrar en contacto
10.4 instrucciones de seguridad para el reinicio del motor
Antes de reiniciar el motor:
-
2 útiles de sujeción (tamaño ≥ 3 pulgadas)
-
Mantener una distancia de seguridad de al menos 1 m durante la puesta en marcha y el funcionamiento
-
Está prohibido conectar/desconectar el motor en caliente; se debe desconectar la alimentación antes de enchufar o desenchufar la interfaz XT30 2 2
-
Prohibir la sobrecarga del motor y el funcionamiento a exceso de velocidad
-
Comprobar el cableado y los elementos de fijación antes de arrancar el equipo
-
No utilizar en entornos húmedos, de alta temperatura o polvorientos
11. Introducción a los principios técnicos
Esta sección presenta brevemente los principios técnicos centrales implicados en el proyecto para ayudar a los usuarios interesados a comprender la "magia que hay detrás". No es necesario comprenderlo por completo para utilizar este producto.
11.1 principio de localización de la fuente sonora DOA
Pregunta: ¿Cómo saber de qué dirección viene el sonido?
reSpeaker Flex tiene 4 micrófonos dispuestos en un anillo. Cuando el sonido proviene de una determinada dirección, hay una ligera diferencia en el tiempo de llegada a los distintos micrófonos (llamada "diferencia de tiempo" o TDOA).
Explicación popular: Igual que cuando cierras los ojos, si alguien aplaude a tu izquierda, tu oído izquierdo lo oirá primero y tu oído derecho lo oirá un poco más tarde. Basándose en esta diferencia de tiempo, el cerebro puede saber que el sonido está a la izquierda.
El chip XVF3800 integrado en reSpeaker Flex se utiliza para lo siguiente:
-
4 micrófonos al mismo tiempo
-
El chip analiza la diferencia de fase/tiempo de 4 señales
-
Calcula la dirección (0 ° ~ 360 °) de la que es más probable que provenga el sonido.
-
Envía los datos del ángulo DOA al ordenador a través de USB
11.2 Proceso de reconocimiento de voz
Pregunta: ¿Cómo se convierte lo que dices en palabras?
El proyecto utiliza el modelo Whisper de OpenAI y usa llamadas de API aceleradas de Groq. El proceso general es:
-
Grabación: se recopilan 6 canales de audio de 16kHz con
arecorddesde la matriz de micrófonos -
Preprocesamiento: usar NumPy para extraer el primer canal (la señal después del beamforming), normalizar y amplificar la ganancia
-
Subida: subir el archivo de audio procesado al servidor de Groq
-
Reconocimiento: el modelo Whisper transcribe las formas de onda de audio en texto.
-
Devolución: obtener el resultado del reconocimiento (por ejemplo, "turn left")
El modelo Whisper es uno de los modelos de reconocimiento de voz más avanzados, admite múltiples idiomas y tiene una alta precisión de reconocimiento.
11.3 Principio de comprensión de intención
Pregunta: ¿Cómo puede la IA entender lo que quieres que haga el brazo mecánico?
El proyecto utiliza el gran modelo de lenguaje Llama-3.3-70B de Meta, llamado a través de la API de Groq.
Tecnología central: Ingeniería de prompts
En el código, damos a la IA una "plantilla de instrucciones" detallada y le decimos:
-
Qué acciones se pueden realizar (girar a la izquierda, girar a la derecha, saludar, etc.)
-
El significado de cada acción
-
Requisitos de formato de salida (JSON)
Por ejemplo, cuando el usuario dice "ayúdame a girar la cabeza hacia la izquierda":
-
El texto se envía a Llama-3.3-70B
-
La IA, combinada con los prompts del sistema, entiende la intención
-
Produce un JSON estructurado:
{"action": "turn_left", "params": {"angle": 45}, "reply": "Okay, turning left."} -
El programa analiza el JSON y ejecuta la acción correspondiente
11.4 Principio de control del manipulador
Pregunta: ¿Cómo controla el ordenador el brazo mecánico?
Cinemática (Kinematics):
El núcleo del control del brazo robótico es la cinemática: dado el ángulo de articulación objetivo, calcular la posición del extremo del brazo robótico en el espacio (cinemática directa); o, a la inversa, dada la posición objetivo del extremo, calcular cuánto debe girar cada articulación (cinemática inversa).
El proyecto utiliza la biblioteca Pinocchio para cálculos cinemáticos y planificación de trayectorias.
Interpolación de movimiento:
El manipulador no "salta" directamente del punto A al punto B, sino que realiza una transición suave mediante un algoritmo de interpolación. En el código se utiliza la función de suavizado coseno (cosine easing):
# Easing formula: makes motion smoother and more natural
ease = -(math.cos(math.pi * t) - 1) / 2.0
Esto hace que el brazo robótico comience acelerando lentamente y desacelere lentamente antes de detenerse, como un movimiento humano natural.
Protección de límites de articulación:
Todos los ángulos de articulación objetivo se recortan dentro de un rango seguro:
np.clip(target_angle, JOINT_LIMITS_MIN, JOINT_LIMITS_MAX)
Esto garantiza que el brazo robótico no exceda los límites físicos, evitando daños.
12. Referencias
12.1 Enlaces relacionados con el proyecto
| Recurso | Enlace | Descripción |
|---|---|---|
| Repositorio principal del proyecto | https://github.com/xr686/reBot-Arm-reSpeaker-Flex | Programa maestro de control por voz |
| Biblioteca de control del brazo robótico | https://github.com/vectorBH6/reBotArm_control_py | Biblioteca de control del brazo robótico en Python |
| reBot Arm Oficial | https://www.rebotix.com/ | Sitio web oficial del brazo robótico |
| Seeed Studio | https://www.seeedstudio.com/ | Compra de reSpeaker Flex y soporte técnico |
12.2 Wiki relacionada con reSpeaker Flex
| Recursos | Enlaces |
|---|---|
| Wiki oficial de reSpeaker Flex | https://wiki.seeedstudio.com/es/reSpeaker_USB_Mic_Array/ |
| Documentación técnica de XMOS XVF3800 | https://www.xmos.com/xvf3800 |
| Guía de usuario de XVF3800 | https://www.xmos.com/download/XVF3800-User-Guide (1).pdf |
| Descripción del algoritmo DOA de la matriz de micrófonos | Ver la documentación oficial de reSpeaker Flex |
12.3 Wiki relacionada con el brazo robótico
| Recurso | Enlace |
|---|---|
| reBot-DevArm GitHub | https://github.com/Seeed-Projects/reBot-DevArm |
| Guía de montaje de ReBot Arm | Ver la Wiki oficial de Seeed Studio |
| Biblioteca de cinemática Pinocchio | https://github.com/stack-of-tasks/pinocchio |
12.4 Documentación de API y herramientas
| Recurso | Enlace | Descripción |
|---|---|---|
| Consola de Groq | https://console.groq.com/keys | Gestión de API Key |
| Documentación de Groq API | https://console.groq.com/docs | Instrucciones de la API |
| Comunidad de desarrolladores de Groq | https://discord.gg/groq | Comunidad de soporte técnico |
| Proyecto Edge-TTS | https://github.com/rany2/edge-tts | Herramienta de síntesis de voz |
| Artículos de Whisper | https://arxiv.org/abs/2212.04356 | Artículos técnicos de reconocimiento de voz |
| Modelo Llama | https://ai.meta.com/llama/ | Modelo de lenguaje grande oficial |
12.5 Recursos de aprendizaje de tecnología
| Temas | Recursos recomendados |
|---|---|
| Conceptos básicos de Python | https://docs.python.org/zh-cn/3/tutorial/ |
| Uso de Conda | https://docs.conda.io/projects/conda/en/latest/user-guide/getting-started.html |
| Conceptos básicos de Ubuntu | https://ubuntu.com/tutorials/command-line-for-beginners |
| Conceptos básicos de Git | https://www.progit.cc/ |
| Introducción a la robótica | Modern Robotics (Kevin Lynch) |
| Introducción al reconocimiento de voz | Curso de Deep Learning de Andrew Ng - Sequence Model |
12.6 Comunidad y soporte
-
GitHub Issues: si encuentras un problema que no está cubierto por este documento, puedes enviar un Issue en el repositorio GitHub del proyecto.
-
Foro de Seeed Studio:https://forum.seeedstudio.com/ (discusiones técnicas relacionadas con reSpeaker)
-
Groq Discord:https://discord.gg/groq (problemas relacionados con la API)
Palabras finales
¡Felicidades por haber llegado al final del documento! Si sigues esta Wiki paso a paso, creo que habrás construido con éxito tu propio sistema de brazo robótico de voz inteligente.
Este proyecto implica tecnologías de procesamiento de sonido, interacción de voz con IA, control de movimiento de robots y otros campos, y es un buen proyecto de práctica integral para principiantes. Espero que puedas seguir explorando lo siguiente:
-
Intenta modificar los comandos de voz para añadir más acciones personalizadas
-
Ajusta los parámetros de DOA para que el seguimiento de la fuente de sonido sea más sensible
-
Explora el despliegue del proyecto en dispositivos embebidos como Raspberry Pi
-
Añade un módulo de visión para que el brazo robótico pueda "ver"
Si tienes alguna pregunta o sugerencia, eres bienvenido a enviar tus comentarios a través de GitHub Issue. ¡Diviértete!🤖
Descargo de responsabilidad: este documento se basa en el código de código abierto del proyecto y es solo para referencia. El funcionamiento del brazo mecánico es peligroso, por favor comprende completamente las precauciones de seguridad antes de operar. El autor no se hace responsable de ningún daño al equipo o lesiones personales causadas por el uso de este documento.
Soporte técnico y debate sobre el producto
¡Gracias por elegir nuestros productos! Estamos aquí para ofrecerte diferentes tipos de soporte y garantizar que tu experiencia con nuestros productos sea lo más fluida posible. Ofrecemos varios canales de comunicación para adaptarnos a diferentes preferencias y necesidades.

