Interação de voz ROS1
1、Preparação do ambiente
Requisitos do sistema
Sistema operacional: Ubuntu 20.04 ou 18.04
Versão do ROS1: Noetic (recomendado) ou Melodic
Instalação das bibliotecas de dependência
# 1. Atualizar as fontes
sudo apt update
# 2. Instalar o ROS1 Desktop completo
# (se o ROS1 já estiver instalado, pule)
sudo apt install ros-noetic-desktop-full -y # Ubuntu 20.04
sudo apt install ros-melodic-desktop-full -y # Ubuntu 18.04
# 3. Instalar as dependências deste projeto (compatível com porta serial e I2C)
sudo apt install python3-pip ros-noetic-rviz i2c-tools -y
pip3 install pyserial smbus2
# Se for Melodic (Python2)
sudo apt install python-pip ros-melodic-rviz i2c-tools -y
pip install pyserial smbus2
# 4. Se usar cabeamento I2C, instalar adicionalmente
sudo apt install python3-smbus2 -y2、Descrição dos três modos de cabeamento
O módulo de interação por voz oferece suporte aos três modos de cabeamento a seguir:
Mecanismo de detecção automática
Ao iniciar, o nó ROS1 detecta automaticamente o modo de cabeamento na seguinte ordem:
Primeiro, tenta a porta serial: verifica, em sequência,
/dev/ttyUSB0→/dev/ttyACM0→/dev/ttyAMA0→/dev/ttyS0Em seguida, tenta o I2C: verifica se o escravo
0x2Aexiste em/dev/i2c-1Para a porta serial, basta que o arquivo de dispositivo exista e possa ser aberto para considerá-la disponível, sem necessidade de verificação adicional
Assim que qualquer um dos modos é detectado, a detecção é interrompida e esse modo é fixado para uso. Não é necessária nenhuma configuração manual.
3、Descrição do protocolo IIC
Configuração do escravo IIC
Definição dos registradores
4、Descrição do protocolo da porta serial (Type-C / UART)
Formato do quadro
Cada quadro tem tamanho fixo de 5 bytes:
Taxa de transmissão
Fixada em 115200 bps.
5、Criação do espaço de trabalho e da estrutura de diretórios
Criar o espaço de trabalho catkin
mkdir -p ~/juxi_speech_ws/src
cd ~/juxi_speech_ws/srcCriar o pacote ROS
catkin_create_pkg juxi_voice rospy std_msgs visualization_msgsEstrutura final de diretórios
Coloque os arquivos fornecidos por este projeto nos locais correspondentes:
~/juxi_speech_ws/
├── build/
├── devel/
└── src/
└── juxi_voice/
├── CMakeLists.txt # (substituir pelo fornecido neste projeto)
├── package.xml # (substituir pelo fornecido neste projeto)
├── juxi_voice.rviz # (novo: arquivo de configuração predefinida do RViz)
├── launch/
│ └── juxi_voice.launch # (novo: arquivo de inicialização com um clique)
└── scripts/
├── voice_node.py # (novo: nó de voz)
└── rviz_control.py # (novo: nó de controle do RViz)6、Conteúdo dos arquivos e posicionamento
Arquivo 1: voice_node.py (nó de controle de voz)
Local: ~/juxi_speech_ws/src/juxi_voice/scripts/voice_node.py
Funções principais:
Detecção automática do modo de cabeamento Type-C / UART / IIC
Tabela de mapeamento unificada de palavras de comando (114 palavras de comando, totalmente consistente com a tabela de protocolo V1 do Excel)
Usa o backend de comunicação correspondente conforme o modo de cabeamento (porta serial / I2C)
Arquitetura principal:
# Dados de comandos unificados: ID → (byte 2 da serial, byte 3 da serial, texto do comando, modo de reprodução)
CMD_DATA = {
1: (0x01, 0x00, "欢迎语", "被"),
3: (0x03, 0x00, "你好小犀", "主"),
14: (0x00, 0x04, "小车前进", "主"),
84: (0xFF, 0x5F, "这是红色", "被"),
...
}
# Função de detecção automática
def detect_connection():
# 1. Tentar a porta serial /dev/ttyUSB0, /dev/ttyACM0, /dev/ttyAMA0, /dev/ttyS0
# 2. Tentar o I2C /dev/i2c-1 (endereço do escravo 0x2A)
...(Consulte o arquivo voice_node.py fornecido com o projeto para ver o código completo)
Arquivo 2: rviz_control.py (nó de controle do RViz)
Local: ~/juxi_speech_ws/src/juxi_voice/scripts/rviz_control.py
Assina o tópico /juxi_voice_cmd para receber o texto dos comandos e atualiza a visualização do cubo conforme o comando.
(Consulte o arquivo rviz_control.py fornecido com o projeto para ver o código completo)
Arquivo 3: CMakeLists.txt e package.xml
Já fornecidos neste projeto; basta substituir diretamente os arquivos padrão gerados automaticamente pelo catkin_create_pkg.
7、Compilação e execução
Compilação
cd ~/juxi_speech_ws
catkin_makeVariáveis de ambiente
source ~/juxi_speech_ws/devel/setup.bash
# Ou adicionar a ~/.bashrc
echo "source ~/juxi_speech_ws/devel/setup.bash" >> ~/.bashrcConfiguração de permissões
# Permissões do I2C
sudo chmod 666 /dev/i2c-1
# Permissões da porta serial
sudo chmod 666 /dev/ttyUSB0
sudo chmod 666 /dev/ttyACM0
sudo chmod 666 /dev/ttyAMA0
# Ou adicionar ao grupo de usuários
sudo usermod -aG dialout $USER
sudo usermod -aG i2c $USER
# Após configurar, é preciso fazer login novamente para aplicarExecutar os nós
Modo 1: inicialização com um clique (recomendado)
cd ~/juxi_speech_ws
source devel/setup.bash
roslaunch juxi_voice juxi_voice.launchAo iniciar, o nó de voz, o nó de controle do RViz e a interface de visualização do RViz são abertos automaticamente.
Modo 2: inicialização passo a passo (3 terminais)
Terminal 1: iniciar o roscore
roscoreTerminal 2: nó de voz
cd ~/juxi_speech_ws
source devel/setup.bash
rosrun juxi_voice voice_node.pyAo iniciar, o modo de cabeamento detectado é exibido:
[INFO] 自动检测: IIC /dev/i2c-1 (从机地址 0x2A)
[INFO] 语音节点启动完成 - IIC /dev/i2c-1 (从机地址 0x2A)ou
[INFO] 自动检测: UART /dev/ttyUSB0
[INFO] 语音节点启动完成 - UART /dev/ttyUSB0Se nenhum dispositivo for detectado:
[FATAL] 未检测到AI语音交互模块!请检查接线 (Type-C / UART / IIC)
[FATAL] 支持的端口: I2C(/dev/i2c-1) | 串口(/dev/ttyUSB0 /dev/ttyACM0 /dev/ttyAMA0 /dev/ttyS0)Terminal 3: nó de controle do RViz
cd ~/juxi_speech_ws
source devel/setup.bash
rosrun juxi_voice rviz_control.pyTerminal 4: visualização do RViz (carrega diretamente o arquivo predefinido, sem necessidade de configuração manual)
rviz -d ~/juxi_speech_ws/src/juxi_voice/juxi_voice.rvizOu abra o RViz primeiro e depois carregue:
rviz
# Barra de menus: File → Open Config → selecionar juxi_voice.rviz8、Descrição da predefinição do RViz
juxi_voice.rviz já vem com o conteúdo a seguir predefinido; basta iniciar para usar, sem nenhuma operação manual:
Fixed Frame:
mapExibição de Marker: já assina
/juxi_visual_marker(marcador único)Exibição de MarkerArray: já assina
/juxi_visual_markers(vários marcadores: braço robótico, nível da bateria, alarme etc.)Ponto de vista: observação de cima e de lado, com o centro na origem
9、Modo de uso
Ativação
Diga "你好小犀" ao módulo → o módulo responde "我在"
Enviar comandos
"小车前进" → o bloco avança
"亮红灯" → o bloco fica vermelho
"打开流水灯" → as cores mudam em ciclo
"报警" → esfera pulsante vermelha
"显示电量" → texto do nível da bateria
Reprodução acionada pelo host
# Reprodução passiva (I2C → gravar 0xD1, porta serial → enviar FE EF FF XX EE)
rostopic pub /juxi_passive_play std_msgs/String "data: '这是红色'"
# Reprodução de palavras de função (I2C → gravar 0xD2, porta serial → enviar FE EF 01 00 EE)
rostopic pub /juxi_func_play std_msgs/String "data: '欢迎语'"
# Reprodução de palavras de comando (I2C → gravar 0xD3, porta serial → enviar FE EF 00 04 EE)
rostopic pub /juxi_cmd_play std_msgs/String "data: '小车前进'"10、Tabela de referência de ID das palavras de comando
114 palavras de comando no total, totalmente consistentes com
命令词播报词协议列表V1_中文.xlsx.
Palavras de função (ID 1-10)
Palavras de comando (ID 11-83, 113)
Palavras de reprodução passiva (ID 84-112, 114)
11、Descrição dos tópicos do ROS1
12、Solução de problemas
1.Exibe "módulo de interação por voz não detectado" na inicialização
Verifique se o arquivo de dispositivo correspondente ao modo de cabeamento existe:
# Cabeamento I2C
ls /dev/i2c-1
sudo i2cdetect -y 1 # Deve aparecer 0x2A
# Cabeamento Type-C
ls /dev/ttyUSB0 /dev/ttyACM0
# Cabeamento UART
ls /dev/ttyAMA0 /dev/ttyS02.Erro de permissão na porta serial
sudo chmod 666 /dev/ttyUSB0 # ou /dev/ttyACM0 etc.
# Ou adicionar ao grupo de usuários dialout (é preciso fazer login novamente)
sudo usermod -aG dialout $USER3.Erro de permissão no I2C
sudo chmod 666 /dev/i2c-1
# Ou adicionar ao grupo de usuários i2c (é preciso fazer login novamente)
sudo usermod -aG i2c $USER4.Nenhum cubo no RViz
Verifique se o Fixed Frame é
mapVerifique se o Topic é
/juxi_visual_markerConfirme se o nó rviz_control.py foi iniciado
5.Sem resposta aos comandos após a ativação
rostopic echo /juxi_voice_cmdHá dados → problema de configuração do RViz; sem dados → cabeamento/comunicação anormal.
6.rosrun não encontra o nó
Confirme se a compilação e o source já foram executados:
cd ~/juxi_speech_ws
catkin_make
source devel/setup.bash7.Erro de sintaxe exibido
# Confirmar que os scripts Python têm permissão de execução
chmod +x ~/juxi_speech_ws/src/juxi_voice/scripts/voice_node.py
chmod +x ~/juxi_speech_ws/src/juxi_voice/scripts/rviz_control.py
