Controle o reBot Arm usando voz com o reSpeaker Flex
Este documento irá guiá-lo passo a passo, do zero, para construir um sistema inteligente de braço robótico que "ouve e se move". Mesmo que você nunca tenha mexido com braço robótico ou desenvolvimento de hardware, desde que siga os passos, você conseguirá reproduzir este projeto com sucesso!
Hardware necessário
| reSpeaker Flex XVF3800 Circular | reBot Arm B601-DM |
|---|---|
![]() | ![]() |
1. Visão geral do projeto
1.1 O que é este projeto?
Este projeto é um sistema inteligente de controle de braço robótico acionado por voz. Imagine esta cena:
🎬Demonstração de cenário
Quando você diz "olá" para o braço robótico na mesa, o braço robótico imediatamente gira na sua direção e acena com a cabeça como um humano. Quando você diz "dançar", ele balança alegremente. Se você for para o outro lado da sala e bater palmas, ele imediatamente "ouve" a direção do som e gira para encará-lo – este é o robô inteligente que queremos construir!
Em resumo, este sistema faz três coisas:
-
Ouvir – captura sua voz por meio do array de microfones e também consegue determinar de que direção o som está vindo
-
Entender – identifica o que você diz por meio de IA e compreende a sua intenção
-
Mover – controla o braço mecânico para fazer ações correspondentes (girar, acenar com a cabeça, dançar, acenar, etc.)
1.2 Dois modos de interação
O sistema fornece dois modos principais de funcionamento, que você pode escolher de acordo com suas necessidades:
| Modo | Nome | Interação | Cenário adequado |
|---|---|---|---|
| Modo 1 | Rastreamento de fonte sonora DOA | Detecta automaticamente a direção do som e gira | Demonstração em salão de exposições, dispositivo interativo |
| Modo 2 | Controle por comando de voz | Pressione e segure Enter para controlar | Assistente de voz, demonstração para ensino |
1.3 Como o sistema funciona?
Descrevendo a arquitetura de todo o sistema em termos leigos:
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.
Um diagrama de arquitetura mais especializado é descrito da seguinte forma:
Camada de hardware (dispositivos que você pode tocar):
-
reSpeaker Flex (array de 4 microfones, controlador XIAO ESP32S3)
-
reBot Arm B601-DM (manipulador de 6 DOF)
-
Computador com Ubuntu 22.04 (executando o programa principal)
Camada de driver (permite que o hardware se comunique):
-
Comunicação de áudio USB (pyusb/libusb) – conecta o array de microfones
-
Comunicação serial (MotorBridge) – conecta o braço mecânico
-
Web API (Groq Cloud) – conecta aos serviços de IA em nuvem
Camada de algoritmo (o "cérebro" que processa os dados):
-
Localização de fonte sonora DOA (cálculo local em tempo real)
-
Reconhecimento de fala Whisper (Groq Cloud)
-
Compreensão de intenção com Llama-3.3 (Groq Cloud)
-
Planejamento de interpolação de movimento (controle local suavizado)
Camada de aplicação (onde você pode ver o efeito):
- Modo de rastreamento DOA, modo de controle por voz, animação de espera com respiração, síntese de voz
2. Preparação de hardware
2.1 O que você precisa preparar?
Antes de começar, certifique-se de que você tem todo o hardware a seguir pronto. Se este for o seu primeiro contato com esse tipo de projeto, é recomendável comprar o kit completo diretamente para evitar problemas de compatibilidade.
| Componente | Modelo | Quantidade | Funções aproximadas | Recomendações de compra |
|---|---|---|---|---|
| Braço mecânico | reBot Arm B601-DM | 1 conjunto | "corpo" que executa as ações | Loja oficial da Seeed Studio |
| Array de microfones | reSpeaker Flex XVF3800 | 1 | Ouve o som e determina a direção | Loja oficial da Seeed Studio |
| PC principal | PC com Ubuntu 22.04 | 1 | Executa o "cérebro" do programa | Arquitetura x86_64 |
| Cabo USB | USB-A para USB-C | 2 | Conecta os dispositivos | geralmente incluído com o dispositivo |
| Sargento de marcenaria | 3 polegadas ou mais | 2 | Fixa a base do braço mecânico | Loja de ferragens ou incluído no kit |
| Fonte de alimentação | 24V 15A (interface XT30) | 1 | Fornece energia ao braço mecânico | geralmente incluída no kit |
2.2 Breve introdução de cada hardware
2.2.1 Braço reBot Arm B601-DM
Este é um braço mecânico de nível desktop com 7 "articulações" (profissionalmente chamadas de 7 graus de liberdade), assim como um braço humano, capaz de realizar vários movimentos flexíveis.
Descrição das articulações (de cima para baixo):
| Articulação | Nome popular | O que pode fazer | Faixa de movimento |
|---|---|---|---|
| J1 | Cintura (rotação da base) | Rotação do corpo inteiro para a esquerda e direita | ± 149° |
| J2 | Levantamento do braço | Levantar ou abaixar o braço | 0° ~ -206° |
| J3 | Extensão do antebraço | Estender ou dobrar o antebraço | 0° ~ -206° |
| J4 | Rotação do pulso | Rotação do pulso para a esquerda e direita | ± 85,9° |
| J5 | Inclinação do pulso | Movimento do pulso para cima e para baixo | ± 85,9° |
| J6 | Guinada do pulso | Ajuste fino da direção do pulso | ± 85,9° |
| J7 | Garra | Agarrar objetos | Controle de abertura e fechamento |
💡Você pode entender assim: J1 é como a rotação da cintura de uma pessoa, J2 é como o levantamento do ombro, J3 é como a flexão do cotovelo, J4/J5/J6 são como as várias rotações do pulso, e J6 é como um dedo. Com a combinação dessas articulações, o braço robótico pode realizar movimentos muito ricos.
⚠Aviso de montagem: Se você estiver comprando peças que precisam ser montadas por conta própria, preste atenção especial:
-
O kit contém um grande número de parafusos e peças estruturais, e algumas peças são muito semelhantes em aparência
-
É altamente recomendável usar uma chave de fenda elétrica, com o torque ajustado para a faixa média e baixa (3 ~ 6 kgf.cm)
-
Um torque excessivo pode facilmente levar ao espanhamento da rosca do parafuso
-
Preste atenção à segurança durante a montagem para evitar prender ou esmagar as mãos
2.2.2 Array de microfones reSpeaker Flex XVF3800
Este é um módulo inteligente de processamento de voz com 4 microfones, cujos principais recursos são:
-
Design dividido: a placa principal e a placa do array de microfones podem ser separadas, o que é conveniente para você organizar de forma flexível em diferentes dispositivos
-
Captação em 360°: 4 microfones são dispostos em anel, podendo receber som de todas as direções
-
Processamento inteligente integrado: integrado com o chip XMOS XVF3800, com funções de cancelamento de eco, supressão de ruído, localização de fonte sonora (DOA) e outras
-
Interface USB dupla: possui dois modos de conexão: interface USB-C e interface com trava PH2.0
-
Amplificador de potência integrado: pode acionar diretamente um alto-falante de 10 W (por meio de interface JST)
Componentes principais:
| Componente | Função |
|---|---|
| Chip XMOS XVF3800 | O "cérebro" responsável por todo o processamento de áudio |
| Codec TLV320AIC3104 | converte sinais sonoros analógicos em sinais digitais |
| Interface FPC de 24 pinos | Conecta a placa do array de microfones e a placa principal |
| Interface USB-C | Conecta ao computador, transmite áudio e energia |
| Conector para fone de ouvido 3,5 mm | pode conectar fones de ouvido para monitoramento |
| Conector JST para alto-falante | Pode ser conectado a alto-falantes externos |
💡Entendimento por analogia: Você pode pensar nele como um "ouvido super apurado" – não só tem 4 ouvidos para ouvir sons de todas as direções, como também consegue analisar de que direção o som vem e filtrar o ruído, focando apenas no som que você quer ouvir.
2.2.3 Computador com Ubuntu 22.04
Ubuntu é um sistema operacional livre e de código aberto (semelhante ao Windows, mas mais popular entre desenvolvedores). Requisitos deste projeto:
-
Sistema operacional: Ubuntu 22.04 LTS (versão 64 bits)
-
Arquitetura: x86_64 (ou seja, um computador normal com processador Intel/AMD)
-
Recomendações de configuração mínima:
-
CPU: 4 núcleos ou mais
-
Memória: 8 GB ou mais
-
Disco rígido: 50 GB de espaço livre
-
Rede: deve conseguir acessar a Internet (usada para chamar a IA em nuvem)
💡E se o seu computador tiver sistema Windows?
Você tem duas opções:
-
Instalar sistema dual: manter Windows e Ubuntu no computador ao mesmo tempo (recomendado)
-
Usar máquina virtual: executar o Ubuntu virtualmente com um software (como VMware) dentro do Windows (haverá alguma perda de desempenho, não recomendado para este projeto)
Tutorial de instalação do Ubuntu 22.04: https://ubuntu.com/download/desktop
2.3 Diagrama de conexão de hardware
Antes de começar, familiarize-se com a forma como todos os dispositivos devem ser conectados. A conexão geral é muito simples, são necessários apenas dois cabos 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)
└─────────────┘
Etapas de conexão:
-
Conecte o reSpeaker Flex ao computador via cabo USB-C
-
Conecte o reBot Arm ao computador via cabo USB-C
-
(Opcional) conecte alto-falantes ou fones de ouvido ao conector de saída de áudio do reSpeaker Flex
-
Certifique-se de que o computador esteja conectado à Internet
3. preparação do ambiente
Antes de instalar o software, precisamos confirmar se o ambiente do seu sistema atende aos requisitos. Abra o terminal do Ubuntu (Terminal, semelhante ao "prompt de comando" do Windows) e siga as etapas abaixo para verificar uma por uma.
3.1 Confirmar versão do Ubuntu
# Enter the following command in the terminal to view the system version
lsb_release -a
✅Saída esperada (algo assim):
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04 LTS
Release: 22.04
Codename: jammy
💡E se não aparecer Ubuntu 22.04?
-
Se for Ubuntu 20.04 ou outras versões, é recomendável atualizar para 22.04, pois este projeto foi testado nessa versão
-
Se não for Ubuntu, você precisa instalar o Ubuntu 22.04
3.2 Confirmar versão do Python
# Check the default Python version in the system
python3 --version
✅Saída esperada:
Python 3.10.12
Desde que a versão seja 3.10.x (x é qualquer número).
💡E se não for Python 3.10?
Não se preocupe, usaremos o Miniforge para criar depois um ambiente Python 3.10 dedicado, o que não afetará o Python padrão do sistema.
3.3 verificar porta USB
Antes de conectar o hardware, certifique-se de que o computador consiga reconhecer normalmente o dispositivo USB:
# View the list of currently connected USB devices
lsusb
✅Saída esperada (algo assim, mostrando o seu 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
💡E se eu não vir o dispositivo?
Não entre em pânico, talvez o dispositivo ainda não tenha sido conectado. Continue para a próxima etapa e volte para verificar depois de instalar o software.
3.4 verificar conexão de rede
# Test whether the Internet can be accessed
ping -c 3 baidu.com
✅Saída 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
💡E se você não conseguir acessar a Internet?
O modo de voz requer conexão de rede para chamar a Groq API, certifique-se de que a rede esteja estável. Se for uma rede de campus/empresa, pode ser necessária configuração adicional de proxy (explicada mais tarde).
4. instalação do software
⚠️ Observação importante: Todos os comandos a seguir precisam ser executados no terminal. Recomenda-se confirmar que não há erro após cada etapa antes de prosseguir para a próxima.
4.1 Etapa 1: Instalar Miniforge (Ferramenta de Gerenciamento de Ambiente Python)
O que é Miniforge?
Miniforge é uma ferramenta de gerenciamento de ambiente Python, semelhante a um "gerenciador de versões da App Store" para Python. Ele pode ajudá-lo a:
-
Criar um ambiente Python 3.10 independente sem afetar o Python padrão do sistema
-
Instalar com um clique todas as dependências do projeto
-
Alternar entre diferentes versões do Python para diferentes projetos
Comando de instalação:
# 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
O assistente de instalação aparecerá após a execução:
-
Pressione 'Enter' para visualizar o contrato de licença
-
Digite 'yes' para concordar com o contrato
-
Pressione 'Enter' para confirmar o caminho de instalação (padrão)
-
Digite 'yes' para inicializar o conda (recomendado)
Após a conclusão da instalação, feche a janela de terminal atual e abra um novo terminal para que a variável de ambiente tenha efeito.
✅Verificar instalação:
# Enter in the new terminal
conda --version
Saída esperada: 'conda 24.x. x' (o número da versão pode ser diferente, desde que a versão possa ser exibida, a instalação foi bem-sucedida)
4.2 Etapa 2: Clonar o repositório de código do projeto
# 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
✅Saída esperada:
Cloning into 'reBot-Arm-reSpeaker-Flex'...
remote: Enumerating objects: ...
...
Resolving deltas: 100% (...)
💡E se o git clone estiver lento ou falhar?
Pode ser um problema de rede, você pode tentar:
# Use domestic mirroring for acceleration (if available)
git clone https://ghproxy.com/https://github.com/xr686/reBot-Arm-reSpeaker-Flex.git
4.3 Etapa 3: Criar um ambiente Conda
O projeto fornece um arquivo 'environment.yml' que lista todos os pacotes de dependência necessários. Só precisamos de um comando para instalar automaticamente todas as dependências:
# 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
Esse processo pode levar 10–30 minutos, dependendo da velocidade da sua rede. Ele irá automaticamente:
-
Criar um ambiente Python 3.10.2 chamado 'flex'
-
Instalar pinocchio, numpy e outras bibliotecas de computação científica a partir do canal conda-forge
-
Instalar pyusb para comunicação USB
✅Sinal de instalação bem-sucedida (as últimas linhas se parecem com isto):
Executing transaction: ... done
#
# To activate this environment, use
#
# $ conda activate flex
#
# To deactivate an active environment, use
#
# $ conda deactivate
#
4.4 Etapa 4: Ativar o ambiente Conda
# Activate the newly created flex environment
conda activate flex
✅Sinal de ativação bem-sucedida: '(flex)' aparece antes do prompt do terminal:
(flex) user@computer:~/reBot-Arm-reSpeaker-Flex$
💡Lembrete importante: Sempre que você abrir um novo terminal, precisará executar novamente 'conda activate flex' para ativar o ambiente.
4.5 Etapa 5: Instalar dependências do sistema
# Update the system package list and install ffmpeg
sudo apt-get update && sudo apt-get install -y ffmpeg
O que é ffmpeg?
ffmpeg é uma ferramenta de processamento de áudio e vídeo; este projeto a utiliza para processar arquivos de áudio após a síntese de fala. Simplificando, é "para permitir que o computador reproduza e processe som".
✅Sinal de instalação bem-sucedida:
ffmpeg is already the newest version (x.x.x).
4.6 Etapa 6: Instalar uv (Ferramenta de Gerenciamento de Pacotes Python)
# Install uv (a fast Python package management tool)
curl -LsSf https://astral.sh/uv/install.sh | sh
Por que você precisa do uv?
uv é uma ferramenta de gerenciamento de pacotes Python muito rápida, que pode ser usada para instalar pacotes em formato pip. A biblioteca 'motorbridge' usada no projeto precisa ser instalada por meio do uv.
✅Após a instalação bem-sucedida, feche o terminal e abra-o novamente.
4.7 Etapa 7: Clonar a biblioteca de controle do braço 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
✅Saída esperada: Exibe o progresso da instalação sem relatar erro.
4.8 Etapa 8: Definir variáveis de ambiente PYTHONPATH
# Add the robotic arm control library to the Python search path
export PYTHONPATH="$PWD:$PYTHONPATH"
O que isso significa?
Quando o Python importa uma biblioteca, ele procura no diretório especificado pelo PYTHONPATH. Este comando diz ao Python para "procurar neste diretório além do caminho de busca padrão".
⚠️ Lembrete importante: 'export PYTHONPATH' Esta configuração se tornará inválida sempre que o terminal for fechado! Você precisa:
Esquema A (temporário, a ser executado sempre): Executar manualmente o comando export acima sempre que um novo terminal for aberto
Esquema B (recomendado, permanente): Escrever essa configuração no arquivo '~/.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 Etapa 9: Definir permissão da porta serial
Para que o usuário atual possa acessar o dispositivo serial USB (usado para se comunicar com o braço robótico), é necessário definir permissões:
# Set USB serial device permissions (to allow the current user to access without sudo)
sudo chmod 666 /dev/ttyACM*
✅Nenhum erro pode ser relatado após a execução.
💡Por que isso é necessário?
O sistema Linux possui um gerenciamento de permissões rigoroso para dispositivos de hardware. Por padrão, usuários comuns não podem acessar diretamente dispositivos seriais. Este comando permite que todos os usuários leiam e gravem nesses dispositivos.
⚠️ Esta configuração será inválida após reiniciar. Se você quiser que seja permanente, pode adicionar seu usuário ao grupo 'dialout':
# Add the current user to the dialout group (permanently resolve the permission issue)
sudo usermod -a -G dialout $USER
A modificação requer fazer logout e login novamente para ter efeito.
4.10 Etapa 10: Configurar a Groq API Key
Este projeto usa o serviço de IA em nuvem da Groq para reconhecimento de fala e compreensão de intenção. Você precisa registrar uma conta Groq e obter a API Key.
Para obter a API Key:
-
Abra o navegador e acesse https://console.groq.com/keys
-
Registre uma conta (você pode usar e-mail ou conta do GitHub)
-
Após fazer login, clique em "Create API Key"
-
Copie a Chave gerada (o formato é semelhante a 'gsk_xxxxxxxxxxxx)
Configure a Chave de API no código:
# First return to the main project directory
cd ~/reBot-Arm-reSpeaker-Flex
# Edit the main program file
nano sound_tracking_arm.py
Encontre a seguinte seção no arquivo (aproximadamente na linha 60):
VOICE_CFG = {
"api_key": "12345678", # ← Replace this line with your actual API Key
...
}
Substitua '"12345678"' pela Chave de API que você acabou de copiar, por exemplo:
"api_key": "gsk_aBcDeFgHiJkLmNoPqRsTuVwXyZ",
Salve o arquivo: pressione 'Ctrl O', depois 'Enter' e então 'Ctrl X' para sair.
⚠️ Lembrete de segurança:
-
Não compartilhe sua Chave de API em repositórios de código públicos ou fóruns
-
Não envie capturas de tela da Chave de API para redes sociais
-
Se a Chave de API vazar, exclua-a no console da Groq e gere uma nova.
4.11 Etapa 11: Configurações de proxy de rede (se necessário)
Se você estiver na China continental ou em determinados ambientes de rede, talvez não consiga acessar diretamente os serviços da Groq. Teste primeiro:
# Test whether Groq can be accessed
ping console.groq.com -c 3
Se você conseguir receber uma resposta (exibir o tempo), significa que a rede está normal e você pode pular esta etapa.
Se for exibido 'unknown host' ou 'Request Timeout', é necessário configurar o proxy.
Como configurar o proxy:
Edite 'sound_tracking_arm.py' novamente e encontre a entrada 'proxy' em 'VOICE_CFG:
VOICE_CFG = {
...
"proxy": None, # ← Change it to your proxy address
}
Por exemplo, se o endereço do seu proxy for 'http:// 192.168.4.7:7897':
"proxy": "http://192.168.4.7:7897",
💡Como sei o endereço do meu proxy?
-
Se você usa Clash: geralmente em 'http:// 127.0.0.1:7890'
-
Se você usa v2rayN: geralmente em 'http:// 127.0.0.1:10809'
-
Se for um servidor proxy na LAN: pergunte ao administrador de rede
-
O formato do proxy geralmente é: 'http:// endereço IP: número da porta'
5. Conexão e montagem do hardware
5.1 Etapas de conexão do hardware
Agora que todo o software foi instalado, vamos conectar o hardware.
Etapa 1: Conectar o reSpeaker Flex
-
Conecte o reSpeaker Flex ao computador com um cabo USB-A para USB-C
-
Após a conexão, o indicador luminoso do reSpeaker Flex deve acender
-
Digite 'lsusb' no terminal e você deverá conseguir ver o dispositivo da Seeed Studio.
Etapa 2: Conectar o reBot Arm
-
Certifique-se de que a base do braço mecânico foi firmemente fixada na mesa com um grampo de marcenaria
-
Conecte o braço robótico ao computador com um cabo USB-A para USB-C
-
Conecte a fonte de alimentação de 24 V (interface XT30), mas não ligue ainda
⚠️ Lista de verificação de segurança antes de ligar:
-
A base do braço mecânico foi firmemente fixada (presa com um grampo de marcenaria)
-
Não há obstáculos no alcance de movimento do braço robótico
-
Não há pessoas próximas ao alcance de movimento do braço robótico
-
Cabo USB conectado
-
Fiação da fonte de alimentação está correta
ETAPA 3: LIGAR E INICIAR
-
Após a verificação, ligue o interruptor da fonte de 24 V
-
O braço mecânico emitirá um leve som de energização do motor
-
Digite 'ls /dev/ttyUSB *' no terminal e você deverá conseguir ver dispositivos semelhantes a '/dev/ttyUSB0'
5.2 Verificar conexões de hardware
# View USB audio device (reSpeaker)
arecord -l
✅Saída esperada (semelhante):
**** 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
Ou:
ls -la /dev/ttyACM0
✅Saída esperada:
crw-rw-rw- 1 root dialout 188, 0 ... /dev/ttyUSB0
💡Não consegue ver o dispositivo?
-
Verifique se o cabo USB está bem conectado
-
Tente trocar de porta USB
-
Verifique se o cabo é de dados (alguns cabos só carregam e não transmitem dados)
-
consulte o 9. guia de solução de problemas
6. primeira execução
6.1 Verificação antes da operação
Antes da execução oficial, vamos fazer algumas verificações simples para garantir que todos os componentes estejam funcionando corretamente.
Validação 1: Verificar dependências do Python
Certifique-se de que você está no ambiente 'flex' e no diretório principal do projeto:
# 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')"
✅Saída esperada:
pyusb + numpy OK
Validação 2: Validar a biblioteca do braço 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')"
✅Saída esperada:
Robot Arm Library OK
💡Se o erro for 'ModuleNotFoundError'?
Isso significa que o PYTHONPATH não está configurado corretamente. Confirme:
-
O diretório reBotArm_control_py realmente existe.
-
O comando 'export PYTHONPATH' foi executado
-
Se não, tente usar o caminho completo:
export PYTHONPATH="/home/Your username/reBotArm_control_py:$PYTHONPATH"
Verificação 3: Testar o microfone
# 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
Se você conseguir ouvir o som gravado, a matriz de microfones está funcionando corretamente.
6.2 Procedimento de inicialização
Depois que todas as verificações forem aprovadas, o programa pode ser iniciado 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
✅Saída 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):
Neste momento, digite '1' para entrar no modo de rastreamento de fonte sonora DOA ou digite '2' para entrar no modo de controle por voz.
Especificar diretamente o modo ao iniciar
Você também pode especificar o modo diretamente no comando de inicialização, pulando o menu de seleção:
# 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 Teste da primeira execução
Teste do modo DOA
Quando o Modo 1 é selecionado, o programa:
-
Inicializa o dispositivo USB
-
Conecta o braço mecânico
-
Entra em estado de espera
Método de teste: Fique ao lado do braço robótico e fale ou bata palmas para observar se o braço robótico:
-
Gira na direção em que você está
-
Executa movimentos de aceno de cabeça
-
Em seguida, volta ao modo de espera
Teste do modo de voz
Quando o modo 2 é selecionado, o programa:
-
Inicializa todos os componentes
-
Aguarda você pressionar Enter
Método de teste:
-
Pressione a tecla 'Enter'
-
Após ver o aviso de "recording", diga "hello" ou "say hello"
-
Aguarde cerca de 5 segundos
-
Observe se:
-
Reconhece sua voz
-
O braço mecânico executa a ação de saudação
-
Você ouve a resposta de voz
7. Explicação detalhada da função
7.1 modo 1: modo de rastreamento de fonte sonora DOA
O que é DOA?
O nome completo de DOA é Direction of Arrival (direção de chegada da onda sonora), que, em termos simples, é: julgar de que direção o som vem. Assim como você pode usar os dois ouvidos para determinar aproximadamente se o som está à esquerda ou à direita, o reSpeaker Flex usa quatro microfones para calcular a direção do som com mais precisão.
Fluxo de trabalho
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)
Explicação detalhada dos pontos técnicos centrais
Fila de buffer de ângulo de 4 quadros
Imagine que você está ouvindo uma pessoa em movimento falar e, se cada quadro (cerca de 50 milissegundos) de mudança de ângulo acionasse diretamente o braço robótico, ele iria tremer e sacudir. O sistema usa um "buffer circular" para armazenar os dados de ângulo DOA dos últimos 4 quadros e depois faz a média para tornar o movimento mais suave.
Filtro de suavização por similaridade de cosseno
Às vezes, o microfone pode julgar a direção de forma incorreta (como um ruído repentino). Esse filtro verificará se os ângulos dos últimos quadros são "consistentes" — se a diferença for muito grande, pode ser um erro de julgamento e não haverá resposta. Assim como quando você ouve um som, você confirma a direção antes de virar a cabeça.
Limite de disparo
Somente quando a mudança de ângulo excede o limite definido (padrão 15°) o movimento do braço será acionado. Isso evita movimentos frequentes devido a pequenas flutuações de ângulo.
Período de resfriamento
Após cada ação, o sistema entra em um período de resfriamento (padrão de 3 segundos), durante o qual não responderá a novas fontes sonoras. Isso impede que o braço robótico fique tremendo devido a disparos contínuos.
Animação de espera com respiração
Quando ninguém está falando, o braço robótico não ficará completamente parado, mas entrará em um estado de "respiração" – levemente semelhante a um humano. Isso é ao mesmo tempo bonito e permite que o usuário saiba que o sistema está em execução.
7.2 Modo 2: Modo de Controle por Comando de Voz
Loop fechado completo de interação
O modo de controle por voz suporta o loop fechado completo de gravação → reconhecimento → compreensão → execução → reprodução.
Fluxo de trabalho
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 suportados
| Tipo de instrução | Exemplo de frase | Ação executada | Descrição |
|---|---|---|---|
| virar à esquerda | "virar à esquerda"/"olhar para a esquerda"/"girar para a esquerda" | a base do braço robótico gira 45 graus para a esquerda | o ângulo pode ser ajustado por parâmetros |
| virar à direita | "virar à direita"/"olhar para a direita"/"girar para a direita" | a base do braço robótico gira 45 graus para a direita | igual ao acima |
| saudação | "dizer olá"/"olá"/"oi" | realizar saudação com aceno de cabeça | acenar com a cabeça duas vezes seguidas |
| acenar | "acenar"/"dizer tchau"/"tchau" | realizar um aceno | acenar 2 vezes para a esquerda e direita |
| retornar ao zero | "voltar à posição inicial"/"resetar"/"retornar ao zero" | todas as juntas retornam à posição zero | voltar à postura inicial |
| parar | "parar"/"não se mexa"/"pare" | parar imediatamente a ação atual | comando de parada de emergência |
Exemplo de interação
$ 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]
Como a IA entende suas palavras?
O projeto usa um Prompt bem projetado que permite que um grande modelo de linguagem (Llama-3.3-70B) entenda várias frases em linguagem natural e as traduza em instruções estruturadas.
Por exemplo, se você disser "me ajude a virar a cabeça para a esquerda", a IA irá entendê-lo assim:
{"action": "turn_left", "params": {"angle": 45}, "reply": "Okay, turning left."}
A vantagem desse design é que você não precisa dizer palavras de comando fixas, basta falar naturalmente como em uma conversa!
8. parâmetros de linha de comando
8.1 tabela completa de parâmetros
Ao iniciar o programa, você pode adicionar vários parâmetros para personalizar o comportamento:
python sound_tracking_arm.py [Parameter]
| Parâmetro | Curto | Padrão | Descrição |
|---|---|---|---|
| '-- mode' | '-m' | 'doa' | Modo de operação: 'doa' (rastreamento de fonte sonora) ou 'voice' (controle por voz) |
| '-- device' | '-d' | '0' | ID do dispositivo reSpeaker Flex USB |
| '-- port' | '-p' | '/dev/ttyUSB0' | Caminho do dispositivo de porta serial do braço mecânico |
| '-- threshold' | '-t' | '15' | Limite de disparo do ângulo DOA (em graus) |
| '-- cooldown' | '-c' | '3' | Tempo de recarga da ação (em segundos) |
| '-- buffer-size' | '-B ' | '4' | Quadros de buffer de ângulo DOA |
| '-- groq-key' | '-k' | 'None' | Groq API Key (também pode ser configurada por código) |
| '-- tts-voice' | '-v' | 'zh-CN-XiaoxiaoNeural | Voz do Edge-TTS |
| '-- debug' | - | 'False' | Habilitar saída de log de depuração |
8.2 exemplo 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 a sensibilidade do 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 o 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
Alternar o timbre da 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 vozes suportadas pelo Edge-TTS:https://github.com/rany2/edge-tts#changing-the-voice
Habilitar modo de depuração
# Enable detailed log output (helpful for troubleshooting)
python sound_tracking_arm.py --debug
9. guia de solução de problemas FAQ
Esta seção reúne os problemas e soluções mais comuns encontrados por usuários iniciantes. Se você não encontrar seu problema aqui, verifique se a conexão de hardware está correta e, em seguida, verifique a mensagem de erro exibida no terminal.
9.1 problemas na fase de instalação
P1: 'conda command not found'
Problema: Após a instalação do Miniforge, o comando não pode ser encontrado ao digitar o prompt 'conda'.
Causa: A variável de ambiente não está configurada corretamente.
Solução:
# 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: Falha ao criar ambiente para 'environment.yml'
Problema: Um erro é relatado ao executar 'conda env create -f environment.yml.
Possíveis causas e soluções:
- Problemas de rede (mais comum):
# 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
- Espaço em disco insuficiente:
# Check disk space
df -h
# Ensure there is at least 5GB of available space.
- Versão do conda muito antiga:
conda update conda
P3: 'uv: command not found'
Problema: Após instalar o uv, o prompt não consegue encontrar o comando.
Solução:
# 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' relatou um erro
Problema: Falha ao executar 'uv sync' no diretório 'reBotArm_control_py'.
Possíveis causas:
-
Não estar no diretório correto
-
A versão do Python não corresponde.
Solução:
# 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 Problema de reconhecimento de dispositivo USB
P5: 'lsusb' não vê o reSpeaker Flex
Etapas de solução de problemas:
-
Verifique se o cabo USB está bem conectado: Conecte e desconecte novamente o cabo USB-C
-
Trocar a porta USB: Tente outras portas USB no seu computador (especialmente a porta USB 3.0 azul)
-
Verificar o cabo: Certifique-se de que você está usando um cabo de dados (alguns cabos servem apenas para carregamento)
-
Ver o log do sistema:
# View USB connection logs
dmesg | tail -20
- Verificar se é necessário driver:
# View detailed information of USB devices
lsusb -v -d 2886:
P6: 'lsusb' não vê o braço
Etapas de solução de problemas:
-
Confirme se o cabo USB está conectado corretamente
-
Confirme se a alimentação do braço robótico está ligada (interruptor da fonte de 24V)
-
Verifique se o indicador de energia está aceso
-
Ver os logs do sistema:
dmesg | grep -i "ttyUSB\|ttyACM\|usb"
P7: 'Permission denied: /dev/ttyUSB0'
Problema: Você não tem permissão para acessar o dispositivo serial.
Solução:
# 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 execução do Python
P8: 'ModuleNotFoundError: No module named 'usb.core''
Problema: Módulo Pyusb não encontrado.
Solução:
# 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
Q9: 'ImportError: cannot import name 'RobotArm''
Problema: A biblioteca de controle do braço robótico não pode ser encontrada.
Solução:
# 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)"
Q10: 'libusb-1.0.so. 0: cannot open shared object file'
Problema: A biblioteca de sistema libusb está ausente.
Solução:
# 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 rede/API
Q11: 'Groq API Key not set'
Problema: O programa informa que a API Key não está definida.
Solução:
-
Verifique se o VOICE_CFG["api_key"] em "sound_tracking_arm.py" foi modificado
-
Confirme se o formato da API Key está correto (deve começar com 'gsk_')
-
Você também pode definir variáveis de ambiente:
export GROQ_API_KEY="gsk_xxxxxxxxxxxx"
Q12: Quando 'Connection error' ou 'Timeout' ao chamar Groq API
Problema: Não é possível conectar ao servidor Groq.
Etapas de solução de problemas:
- Testar a conectividade de rede:
ping console.groq.com -c 3
-
-
- Se o ping falhar, você precisa configurar um agente **:
-
Edite o 'VOICE_CFG em 'sound_tracking_arm.py ':
proxy": "http://your proxy IP:port", # e.g., "http://127.0.0.1:7890
- Se o agente não funcionar, verifique se o agente está funcionando corretamente:
# Test via proxy
curl -x http://your_proxy_IP:port https://console.groq.com
Q13: 'Rate limit exceeded' / 'Quota exceeded'
Problema: A frequência de chamadas da API excede o limite ou a cota foi esgotada.
Solução:
-
Acesse https://console.groq.com/settings/limits para ver os limites
-
Contas gratuitas Groq têm um limite no número de solicitações por minuto, reduza a frequência de uso.
-
Se for um problema de cota, talvez seja necessário fazer upgrade para uma conta paga.
Q14: 'TTS broadcast failure'/'aplay not found'
Problema: A função de transmissão de voz não está normal.
Solução:
# 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 do braço mecânico
Q15: Braço mecânico não responde/não se move
Etapas de solução de problemas:
- Verificar dispositivo serial:
ls -la /dev/ttyUSB*
# or
ls -la /dev/ttyACM*
- Verificar permissões:
# Ensure read and write permissions
ls -la /dev/ttyUSB0 # should show crw-rw-rw-
-
Verificar a fonte de alimentação: Confirme se a fonte de alimentação de 24V está ligada
-
Verifique o log do programa: há alguma mensagem de erro sobre 'ArmCtrl' ao executar o programa?
-
Tente especificar a porta serial correta:
python sound_tracking_arm.py --port /dev/ttyACM0
# or
python sound_tracking_arm.py --port /dev/ttyUSB1
Q16: Movimento anormal/jitter do braço mecânico
Possíveis causas:
-
O braço mecânico não está devidamente fixado—verifique se a base está firme
-
Há obstáculos no alcance de movimento—limpe o espaço de movimento
-
Ângulo de junta anormal—tente redefinir: diga "voltar à posição inicial" ou reinicie o programa
Q17: Aquecimento anormal do motor
⚠️Aviso: Se o motor aquecer de forma anormal, desligue a alimentação imediatamente!
Possíveis causas:
-
O braço mecânico está bloqueado por força externa e o motor continua fazendo força
-
Movimento muito rápido
-
Operação contínua por muito tempo
Solução:
-
Desligue a alimentação e aguarde o motor esfriar
-
Verifique se há obstrução mecânica
-
Reduza a frequência de movimento
9.6 problemas relacionados a áudio
Q18: Nenhum som na gravação do microfone
Etapas de solução de problemas:
- Verifique se o dispositivo foi reconhecido:
arecord -l # Should see reSpeaker XVF3800
- Verificar o número do dispositivo:
# View detailed device information
cat /proc/asound/cards
- Teste de gravação 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
- Verifique se o array de microfones está corretamente conectado: Confirme se o cabo FPC está bem encaixado
Q19: Ângulo DOA não estável/saltando
Possíveis causas e soluções:
-
O ambiente é muito barulhento: Teste em um ambiente silencioso
-
Array de microfones não está plano: Certifique-se de que o reSpeaker esteja colocado horizontalmente
-
Forte interferência de fonte sonora próxima: Mantenha distância de ventiladores, alto-falantes e outros equipamentos
-
Ajuste o limiar de disparo: Aumente o parâmetro '-- threshold'.
9.7 outras questões
Q20: Ctrl C não consegue sair
Solução:
# Try pressing Ctrl+C multiple times
# Or open another terminal
killall python
Q21: Travamento durante a execução do programa
Etapas de solução de problemas:
-
Veja as últimas mensagens de erro antes do travamento.
-
Use o modo '-- debug' para obter mais logs
-
Verifique se há falta de memória: 'free -h'
-
Verifique se a conexão USB está instável
Q22: Como recomeçar completamente
Se você quiser reconfigurar do zero:
# 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. precauções de segurança
⚠️ Ao usar este item, leia atentamente todas as instruções de segurança a seguir. Operação inadequada pode causar danos ao equipamento ou ferimentos pessoais.
10.1 segurança do braço mecânico
Regras básicas de segurança
| Regra | Descrição | Consequências |
|---|---|---|
| Não mova o braço mecânico à força | A junta do braço mecânico é acionada por um motor de precisão, e a rotação manual forçada pode causar danos às engrenagens | Danos ao motor, alto custo de manutenção |
| Garanta que o alcance de movimento esteja livre de barreiras | Antes da operação, verifique se não há pessoas, paredes ou outros objetos no alcance de movimento do braço robótico | Colisões causam danos ao braço robótico ou aos objetos ao redor |
| Desconecte o cabo USB em caso de emergência | Em caso de emergência, desconecte imediatamente o cabo USB do braço mecânico para cortar o sinal de controle | O braço mecânico para de se mover |
| A carga não deve exceder 1500g | Não segure objetos com mais de 1,5kg nas garras | Sobrecarga do motor e danos |
| Mantenha uma distância segura de 1,5m | Mantenha uma distância de pelo menos 1,5m quando o braço robótico estiver em funcionamento | Evitar lesões por colisão |
Limites de ângulo das juntas
O sistema possui proteção de limite de junta embutida, a tabela a seguir é para referência. Observe que a unidade de radianos (rad) é usada no código.
| Junta | Nome | Mín (Ângulo) | Máx (Ângulo) | Descrição |
|---|---|---|---|---|
| J1 | Rotação da base | -149.0 ° | 149.0 ° | Rotação horizontal, alcance máximo |
| J2 | Inclinação do ombro | -206.3 ° | 0 ° | Lança para cima, apenas para cima |
| J3 | Inclinação do cotovelo | -206.3 ° | 0 ° | Antebraço estendido, apenas para frente |
| J4 | Rotação do pulso | -85.9 ° | 85.9 ° | Rotação da extremidade para a esquerda e direita |
| J5 | Inclinação do pulso | -85.9 ° | 85.9 ° | Oscilação da extremidade para cima e para baixo |
| J6 | Guinada do pulso | -85.9 ° | 85.9 ° | Direção de ajuste fino da extremidade |
| J7 | Abertura e fechamento da garra | -320.9 | 0 | Controle da garra, número negativo significa aberta |
10.2 Segurança elétrica
-
Não conectar/desconectar com energia ligada: Antes de conectar ou desconectar a interface de alimentação XT30 2 2, a alimentação deve ser desligada
-
Sem hot plug do motor: Não conecte ou desconecte o cabo do motor quando a alimentação estiver ligada
-
Use a fonte de alimentação correta: Somente fonte de alimentação de 24V 15A pode ser usada, o uso de outras fontes pode causar danos ao equipamento
-
Evite ambiente úmido: Não use em ambientes úmidos, empoeirados e de alta temperatura
-
Verifique o cabo: Antes de usar, verifique se o cabo de alimentação e o cabo de sinal estão intactos e sem danos
10.3 segurança do ambiente de uso
-
Menores precisam usar sob supervisão de adultos: o braço mecânico tem certa força, operação inadequada pode causar ferimentos
-
Bancada estável: Certifique-se de que o braço robótico esteja fixado em uma mesa horizontal estável
-
Espaço adequado: Reserve pelo menos 1 metro de espaço seguro ao redor do braço robótico
-
Boa iluminação: Facilita observar o estado de operação do braço robótico
-
Mantenha-se longe de fontes de água: Equipamentos eletrônicos e água não devem ter contato
10.4 instruções de segurança para reset do motor
Antes do reset do motor:
-
2 garras de fixação (tamanho ≥ 3 polegadas)
-
Mantenha uma distância segura de pelo menos 1 m durante a calibração e operação
-
É proibido hot plug do motor; a alimentação deve ser desconectada antes de conectar ou desconectar a interface XT30 2 2
-
Proibido sobrecarga e operação em velocidade excessiva do motor
-
Verifique a fiação e os fixadores antes da partida do equipamento
-
Não use em ambiente úmido, de alta temperatura ou empoeirado
11. Introdução aos Princípios Técnicos
Esta seção apresenta brevemente os principais princípios técnicos envolvidos no projeto para ajudar usuários interessados a entender a "mágica por trás". Não é necessário entendimento completo para usar este item.
11.1 Princípio de localização de fonte sonora DOA
Pergunta: Como saber de que direção o som está vindo?
reSpeaker Flex possui 4 microfones dispostos em anel. Quando o som vem de uma determinada direção, há uma pequena diferença no tempo de chegada em diferentes microfones (chamada de "diferença de tempo" ou TDOA).
Explicação popular: Assim como quando você fecha os olhos, se alguém bater palmas à sua esquerda, seu ouvido esquerdo ouvirá primeiro e seu ouvido direito ouvirá um pouco depois. Com base nessa diferença de tempo, o cérebro consegue dizer que o som está à esquerda.
O chip XVF3800 integrado no reSpeaker Flex serve para isto:
-
4 microfones ao mesmo tempo
-
O chip analisa a diferença de fase/tempo dos 4 sinais
-
Calcula a direção (0 ° ~ 360 °) de onde o som provavelmente vem.
-
Envia os dados do ângulo DOA para o computador via USB
11.2 Processo de reconhecimento de fala
Pergunta: Como transformar o que você fala em palavras?
O projeto usa o modelo Whisper da OpenAI e utiliza chamadas de API aceleradas da Groq. O processo geral é:
-
Gravação: 6 canais de áudio de 16kHz são coletados com
arecorda partir do array de microfones -
Pré-processamento: Usar NumPy para extrair o primeiro canal (o sinal após o beamforming), normalizar e aplicar ganho de amplificação
-
Upload: Enviar o arquivo de áudio processado para o servidor Groq
-
Reconhecimento: O modelo Whisper transcreve as formas de onda de áudio em texto.
-
Retorno: Obter o resultado do reconhecimento (por exemplo, "turn left")
O modelo Whisper é um dos modelos de reconhecimento de fala mais avançados, que suporta vários idiomas e possui alta precisão de reconhecimento.
11.3 Princípio de compreensão de intenção
Pergunta: Como a IA entende o que você quer que o braço mecânico faça?
O projeto usa o grande modelo de linguagem Llama-3.3-70B da Meta, chamado por meio da Groq API.
Tecnologia central: Engenharia de Prompt
No código, damos à IA um "modelo de instrução" detalhado e dizemos a ela:
-
Quais ações podem ser executadas (virar à esquerda, virar à direita, dizer olá, etc.)
-
O significado de cada ação
-
Requisitos de formato de saída (JSON)
Por exemplo, quando o usuário diz "help me turn my head to the left:
-
O texto é enviado para o Llama-3.3-70B
-
A IA, combinada com os prompts do sistema, entende a intenção
-
Gera um JSON estruturado:
{"action": "turn_left", "params": {"angle": 45}, "reply": "Okay, turning left."} -
O programa analisa o JSON e executa a ação correspondente
11.4 Princípio de controle do manipulador
Pergunta: Como o computador controla o braço mecânico?
Cinemática (Kinematics):
O núcleo do controle do braço robótico é a cinemática — dado o ângulo de junta alvo, calcular a posição da extremidade do braço robótico no espaço (cinemática direta); ou, inversamente, dada a posição alvo da extremidade, calcular quanto cada junta deve girar (cinemática inversa).
O projeto usa a biblioteca Pinocchio para cálculos cinemáticos e planejamento de trajetória.
Interpolação de movimento:
O manipulador não "salta" diretamente do ponto A para o ponto B, mas faz a transição suave por meio de um algoritmo de interpolação. A função de suavização cosseno (cosine easing) é usada no código:
# Easing formula: makes motion smoother and more natural
ease = -(math.cos(math.pi * t) - 1) / 2.0
Isso faz com que o braço robótico comece acelerando lentamente e desacelere lentamente antes de parar, como um movimento humano natural.
Proteção de limite de junta:
Todos os ângulos de junta alvo são limitados dentro de uma faixa segura:
np.clip(target_angle, JOINT_LIMITS_MIN, JOINT_LIMITS_MAX)
Isso garante que o braço robótico não exceda os limites físicos, evitando danos.
12. Referências
12.1 Links relacionados ao projeto
| Recurso | Link | Descrição |
|---|---|---|
| Repositório principal do projeto | https://github.com/xr686/reBot-Arm-reSpeaker-Flex | Programa mestre de controle por som |
| Biblioteca de controle do braço robótico | https://github.com/vectorBH6/reBotArm_control_py | Biblioteca de controle do braço robótico em Python |
| reBot Arm Oficial | https://www.rebotix.com/ | Site oficial do braço robótico |
| Seeed Studio | https://www.seeedstudio.com/ | Compra do reSpeaker Flex e suporte técnico |
12.2 Wiki relacionada ao reSpeaker Flex
| Recursos | Links |
|---|---|
| Wiki oficial do reSpeaker Flex | https://wiki.seeedstudio.com/pt-br/reSpeaker_USB_Mic_Array/ |
| Documentação técnica do XMOS XVF3800 | https://www.xmos.com/xvf3800 |
| Guia do usuário XVF3800 | https://www.xmos.com/download/XVF3800-User-Guide (1).pdf |
| Descrição do algoritmo DOA do array de microfones | Consulte a documentação oficial do reSpeaker Flex |
12.3 Wiki relacionada ao braço robótico
| Recurso | Link |
|---|---|
| reBot-DevArm GitHub | https://github.com/Seeed-Projects/reBot-DevArm |
| Guia de montagem do ReBot Arm | Consulte a Wiki oficial da Seeed Studio |
| Biblioteca de cinemática Pinocchio | https://github.com/stack-of-tasks/pinocchio |
12.4 Documentação de API e ferramentas
| Recurso | Link | Descrição |
|---|---|---|
| Groq console | https://console.groq.com/keys | Gerenciamento de API Key |
| Documentação da Groq API | https://console.groq.com/docs | Instruções da API |
| Comunidade de desenvolvedores Groq | https://discord.gg/groq | Comunidade de suporte técnico |
| Projeto Edge-TTS | https://github.com/rany2/edge-tts | Ferramenta de síntese de fala |
| Artigos do Whisper | https://arxiv.org/abs/2212.04356 | Artigos técnicos de reconhecimento de fala |
| Modelo Llama | https://ai.meta.com/llama/ | Modelo de grande linguagem oficial |
12.5 Recursos de aprendizado de tecnologia
| Tópicos | Recursos recomendados |
|---|---|
| Conceitos básicos de Python | https://docs.python.org/zh-cn/3/tutorial/ |
| Uso do Conda | https://docs.conda.io/projects/conda/en/latest/user-guide/getting-started.html |
| Conceitos básicos de Ubuntu | https://ubuntu.com/tutorials/command-line-for-beginners |
| Conceitos básicos de Git | https://www.progit.cc/ |
| Introdução à robótica | Modern Robotics (Kevin Lynch) |
| Introdução ao reconhecimento de fala | Curso de Deep Learning do Andrew Ng — Sequence Model |
12.6 Comunidade e suporte
-
GitHub Issues: Se você encontrar um problema que não esteja coberto por este documento, pode enviar uma Issue no repositório GitHub do projeto.
-
Fórum Seeed Studio:https://forum.seeedstudio.com/ (discussões técnicas relacionadas ao reSpeaker)
-
Groq Discord:https://discord.gg/groq (questões relacionadas à API)
Escrito no final
Parabéns por ter lido até o final do documento! Se você seguir esta Wiki passo a passo, acredito que tenha construído com sucesso seu próprio sistema inteligente de braço robótico por voz.
Este projeto envolve tecnologias de processamento de som, interação de fala com IA, controle de movimento de robôs e outras áreas, sendo um bom projeto de prática abrangente para iniciantes. Espero que você possa continuar explorando o seguinte:
-
Tentar modificar comandos de voz para adicionar mais ações personalizadas
-
Ajustar parâmetros de DOA para tornar o rastreamento da fonte sonora mais sensível
-
Explorar a implantação do projeto em dispositivos embarcados, como Raspberry Pi
-
Adicionar módulo de visão para fazer o braço robótico "enxergar"
Se você tiver quaisquer dúvidas ou sugestões, fique à vontade para enviar feedback via GitHub Issue. Divirta-se!🤖
Aviso legal: Este documento é baseado no código open source do projeto e é apenas para referência. A operação do braço mecânico é perigosa, por favor, compreenda totalmente as precauções de segurança antes de operar. O autor não é responsável por quaisquer danos a equipamentos ou lesões pessoais causados pelo uso deste documento.
Suporte técnico e discussão de produtos
Obrigado por escolher nossos produtos! Estamos aqui para fornecer diferentes tipos de suporte para garantir que sua experiência com nossos produtos seja a mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.

