Interazione vocale ROS2
1、Preparazione dell'ambiente
Requisiti di sistema
Sistema operativo: Ubuntu 22.04
Versione ROS2: Humble
Installazione delle dipendenze
# 1. Aggiorna le sorgenti
sudo apt update
# 2. Installa i pacchetti base di ROS2
# (se ROS2 è già installato, salta)
sudo apt install ros-humble-desktop -y
# 3. Installa le dipendenze di questo progetto (supporta sia la porta seriale che I2C)
sudo apt install python3-pip ros-humble-rviz2 ros-humble-visualization-msgs -y
pip3 install pyserial smbus2
# 4. Se usi il collegamento I2C, installa in aggiunta
sudo apt install python3-smbus2 i2c-tools -y2、Descrizione delle tre modalità di cablaggio
Il modulo di interazione vocale AI supporta le seguenti tre modalità di cablaggio:
Meccanismo di rilevamento automatico
All'avvio, il nodo ROS2 rileva automaticamente la modalità di cablaggio nel seguente ordine:
Prova prima la porta seriale: verifica in sequenza
/dev/ttyUSB0→/dev/ttyACM0→/dev/ttyAMA0→/dev/ttyS0Prova poi I2C: verifica se lo slave
0x2Aè presente su/dev/i2c-1Per il rilevamento della porta seriale è sufficiente che il file di dispositivo esista e sia apribile, senza necessità di verifiche aggiuntive
Una volta rilevata una qualsiasi delle modalità, il rilevamento si interrompe e tale modalità viene bloccata per l'uso. Non è necessaria alcuna configurazione manuale.
3、Descrizione del protocollo IIC
Configurazione dello slave IIC
Definizione dei registri
4、Descrizione del protocollo della porta seriale (Type-C / UART)
Formato del frame
Ogni frame è fisso a 5 byte:
Baud rate
Fisso a 115200 bps.
5、Creazione dello workspace e della struttura di directory
Creazione della directory
mkdir -p ~/juxi_speech_ws/src
cd ~/juxi_speech_ws/srcCreazione del pacchetto ROS2
ros2 pkg create --build-type ament_python juxi_voice --license MITStruttura di directory finale
~/juxi_speech_ws/
├── build/
├── install/
├── log/
└── src/
└── juxi_voice/
├── package.xml
├── setup.py # (sostituisci con quello fornito da questo progetto)
├── juxi_voice.rviz # (nuovo: file di configurazione predefinito di RViz)
├── resource/
│ └── juxi_voice
└── juxi_voice/
├── __init__.py
├── voice_node.py # (nuovo: nodo vocale)
└── rviz_control.py # (nuovo: nodo di controllo RViz)6、Contenuto dei file e posizionamento
File 1:voice_node.py (nodo di controllo vocale)
Posizione: ~/juxi_speech_ws/src/juxi_voice/juxi_voice/voice_node.py
Funzionalità principali:
Rileva automaticamente la modalità di cablaggio Type-C / UART / IIC
Tabella di mappatura unificata delle parole di comando (114 parole di comando)
Utilizza il backend di comunicazione corrispondente in base alla modalità di cablaggio
Architettura chiave:
# Dati dei comandi unificati: ID → (byte seriale 2, byte seriale 3, testo del comando, modalità di riproduzione)
CMD_DATA = {
1: (0x01, 0x00, "欢迎语", "被"),
3: (0x03, 0x00, "你好小犀", "主"),
14: (0x00, 0x04, "小车前进", "主"),
84: (0xFF, 0x5F, "这是红色", "被"),
...
}
# Funzione di rilevamento automatico
def detect_connection(logger):
# 1. Prova I2C
# 2. Prova la porta seriale /dev/ttyUSB0, /dev/ttyACM0, /dev/ttyAMA0, /dev/ttyS0
...(Per il codice completo, consultare il file voice_node.py fornito con il progetto)
File 2:rviz_control.py (nodo di controllo RViz)
Posizione: ~/juxi_speech_ws/src/juxi_voice/juxi_voice/rviz_control.py
Si sottoscrive al topic /juxi_voice_cmd per ricevere il testo dei comandi e aggiorna la visualizzazione del cubo in base al comando.
(Per il codice completo, consultare il file rviz_control.py fornito con il progetto)
File 3:Modifica di setup.py
Posizione: ~/juxi_speech_ws/src/juxi_voice/setup.py
entry_points={
'console_scripts': [
'voice_node = juxi_voice.voice_node:main',
'rviz_control = juxi_voice.rviz_control:main',
],
},7、Compilazione ed esecuzione
Compilazione
cd ~/juxi_speech_ws
colcon build --symlink-installVariabili d'ambiente
source ~/juxi_speech_ws/install/setup.bash
# Oppure aggiungi a ~/.bashrc
echo "source ~/juxi_speech_ws/install/setup.bash" >> ~/.bashrcImpostazione delle autorizzazioni
# Permessi I2C
sudo chmod 666 /dev/i2c-1
# Permessi della porta seriale
sudo chmod 666 /dev/ttyUSB0
sudo chmod 666 /dev/ttyACM0
sudo chmod 666 /dev/ttyAMA0
# Oppure aggiungiti al gruppo utente
sudo usermod -aG dialout $USER
sudo usermod -aG i2c $USEREsecuzione dei nodi (3 terminali)
Terminale 1: nodo vocale
cd ~/juxi_speech_ws
source install/setup.bash
ros2 run juxi_voice voice_nodeAll'avvio viene visualizzata la modalità di cablaggio rilevata:
自动检测: IIC /dev/i2c-1 (从机地址 0x2A)
语音节点启动完成 - IIC /dev/i2c-1 (从机地址 0x2A)oppure
自动检测: UART /dev/ttyUSB0
语音节点启动完成 - UART /dev/ttyUSB0Terminale 2: nodo di controllo RViz
cd ~/juxi_speech_ws
source install/setup.bash
ros2 run juxi_voice rviz_controlTerminale 3: visualizzazione RViz (carica direttamente il file preconfigurato, senza necessità di impostazioni manuali)
rviz2 -d ~/juxi_speech_ws/src/juxi_voice/juxi_voice.rvizOppure aprire prima RViz e poi caricare:
rviz2
# Barra dei menu: File → Open Config → seleziona juxi_voice.rviz8、Descrizione della preconfigurazione di RViz
juxi_voice.rviz è già preconfigurato con quanto segue ed è pronto all'uso all'avvio, senza alcuna operazione manuale:
Fixed Frame:
mapVisualizzazione Marker: sottoscritto a
/juxi_visual_marker(marker singolo)Visualizzazione MarkerArray: sottoscritto a
/juxi_visual_markers(marker multipli: braccio robotico, livello della batteria, allarme, ecc.)Punto di vista: osservazione dall'alto in diagonale, con il centro nell'origine
9、Modalità d'uso
Attivazione
Dire "你好小犀" al modulo → il modulo risponde "我在"
Invio di comandi
"小车前进" → il cubo avanza
"亮红灯" → il cubo diventa rosso
"打开流水灯" → il colore cambia in modo ciclico
"报警" → una sfera rossa pulsante
"显示电量" → testo del livello della batteria
Riproduzione attivata dal controller host
# Riproduzione passiva
ros2 topic pub /juxi_passive_play std_msgs/msg/String "data: '这是红色'"
# Riproduzione della voce funzionale
ros2 topic pub /juxi_func_play std_msgs/msg/String "data: '欢迎语'"
# Riproduzione della parola di comando
ros2 topic pub /juxi_cmd_play std_msgs/msg/String "data: '小车前进'"10、Tabella di riferimento degli ID delle parole di comando
Parole di funzione (ID 1-10)
Parole di comando (ID 11-83, 113)
Parole di riproduzione passiva (ID 84-112, 114)
11、Descrizione dei topic ROS2
12、Risoluzione dei problemi
All'avvio viene segnalato "modulo di interazione vocale AI non rilevato"
Verificare se il file di dispositivo corrispondente alla modalità di cablaggio esiste:
# Collegamento I2C
ls /dev/i2c-1
sudo i2cdetect -y 1 # Dovresti vedere 0x2A
# Collegamento Type-C
ls /dev/ttyUSB0 /dev/ttyACM0
# Collegamento UART
ls /dev/ttyAMA0 /dev/ttyS0Errore di autorizzazione della porta seriale
sudo chmod 666 /dev/ttyUSB0 # Oppure /dev/ttyACM0 ecc.Errore di autorizzazione I2C
sudo chmod 666 /dev/i2c-1Nessun cubo in RViz
Verificare se Fixed Frame è
mapVerificare se il Topic è
/juxi_visual_marker
Nessuna risposta ai comandi dopo l'attivazione
ros2 topic echo /juxi_voice_cmdDati presenti → problema di configurazione di RViz; nessun dato → problema di cablaggio/comunicazione.

