Interazione vocale ROS1
1、Preparazione dell'ambiente
Requisiti di sistema
Sistema operativo: Ubuntu 20.04 o 18.04
Versione ROS1: Noetic (consigliata) o Melodic
Installazione delle dipendenze
# 1. Aggiorna le sorgenti
sudo apt update
# 2. Installa ROS1 Desktop completo
# (se ROS1 è già installato, salta)
sudo apt install ros-noetic-desktop-full -y # Ubuntu 20.04
sudo apt install ros-melodic-desktop-full -y # Ubuntu 18.04
# 3. Installa le dipendenze di questo progetto (supporta sia la porta seriale che I2C)
sudo apt install python3-pip ros-noetic-rviz i2c-tools -y
pip3 install pyserial smbus2
# Se è Melodic (Python2)
sudo apt install python-pip ros-melodic-rviz i2c-tools -y
pip install pyserial smbus2
# 4. Se usi il collegamento I2C, installa in aggiunta
sudo apt install python3-smbus2 -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 ROS1 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 dello workspace catkin
mkdir -p ~/juxi_speech_ws/src
cd ~/juxi_speech_ws/srcCreazione del pacchetto ROS
catkin_create_pkg juxi_voice rospy std_msgs visualization_msgsStruttura di directory finale
Posizionare i file forniti con questo progetto nelle posizioni corrispondenti:
~/juxi_speech_ws/
├── build/
├── devel/
└── src/
└── juxi_voice/
├── CMakeLists.txt # (sostituisci con quello fornito da questo progetto)
├── package.xml # (sostituisci con quello fornito da questo progetto)
├── juxi_voice.rviz # (nuovo: file di configurazione predefinito di RViz)
├── launch/
│ └── juxi_voice.launch # (nuovo: file di avvio con un clic)
└── scripts/
├── 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/scripts/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, completamente coerente con la tabella di protocollo Excel V1)
Utilizza il backend di comunicazione corrispondente (porta seriale / I2C) 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():
# 1. Prova la porta seriale /dev/ttyUSB0, /dev/ttyACM0, /dev/ttyAMA0, /dev/ttyS0
# 2. Prova I2C /dev/i2c-1 (indirizzo slave 0x2A)
...(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/scripts/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:CMakeLists.txt e package.xml
Sono già forniti in questo progetto; è sufficiente sostituire i file predefiniti generati automaticamente da catkin_create_pkg.
7、Compilazione ed esecuzione
Compilazione
cd ~/juxi_speech_ws
catkin_makeVariabili d'ambiente
source ~/juxi_speech_ws/devel/setup.bash
# Oppure aggiungi a ~/.bashrc
echo "source ~/juxi_speech_ws/devel/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 $USER
# Dopo l'impostazione serve un nuovo loginEsecuzione dei nodi
Metodo 1: avvio con un solo comando (consigliato)
cd ~/juxi_speech_ws
source devel/setup.bash
roslaunch juxi_voice juxi_voice.launchAll'avvio vengono aperti automaticamente il nodo vocale, il nodo di controllo RViz e l'interfaccia di visualizzazione RViz.
Metodo 2: avvio passo passo (3 terminali)
Terminale 1: avvio di roscore
roscoreTerminale 2: nodo vocale
cd ~/juxi_speech_ws
source devel/setup.bash
rosrun juxi_voice voice_node.pyAll'avvio viene visualizzata la modalità di cablaggio rilevata:
[INFO] 自动检测: IIC /dev/i2c-1 (从机地址 0x2A)
[INFO] 语音节点启动完成 - IIC /dev/i2c-1 (从机地址 0x2A)oppure
[INFO] 自动检测: UART /dev/ttyUSB0
[INFO] 语音节点启动完成 - UART /dev/ttyUSB0Se non viene rilevato alcun dispositivo:
[FATAL] 未检测到AI语音交互模块!请检查接线 (Type-C / UART / IIC)
[FATAL] 支持的端口: I2C(/dev/i2c-1) | 串口(/dev/ttyUSB0 /dev/ttyACM0 /dev/ttyAMA0 /dev/ttyS0)Terminale 3: nodo di controllo RViz
cd ~/juxi_speech_ws
source devel/setup.bash
rosrun juxi_voice rviz_control.pyTerminale 4: visualizzazione RViz (carica direttamente il file preconfigurato, senza necessità di impostazioni manuali)
rviz -d ~/juxi_speech_ws/src/juxi_voice/juxi_voice.rvizOppure aprire prima RViz e poi caricare:
rviz
# 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 (I2C → scrivi 0xD1, seriale → invia FE EF FF XX EE)
rostopic pub /juxi_passive_play std_msgs/String "data: '这是红色'"
# Riproduzione della voce funzionale (I2C → scrivi 0xD2, seriale → invia FE EF 01 00 EE)
rostopic pub /juxi_func_play std_msgs/String "data: '欢迎语'"
# Riproduzione della parola di comando (I2C → scrivi 0xD3, seriale → invia FE EF 00 04 EE)
rostopic pub /juxi_cmd_play std_msgs/String "data: '小车前进'"10、Tabella di riferimento degli ID delle parole di comando
114 parole di comando in totale, completamente coerenti con
命令词播报词协议列表V1_中文.xlsx.
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 ROS1
12、Risoluzione dei problemi
1. 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/ttyS02. Errore di autorizzazione della porta seriale
sudo chmod 666 /dev/ttyUSB0 # Oppure /dev/ttyACM0 ecc.
# Oppure aggiungiti al gruppo dialout (richiede un nuovo login)
sudo usermod -aG dialout $USER3. Errore di autorizzazione I2C
sudo chmod 666 /dev/i2c-1
# Oppure aggiungiti al gruppo i2c (richiede un nuovo login)
sudo usermod -aG i2c $USER4. Nessun cubo in RViz
Verificare se Fixed Frame è
mapVerificare se il Topic è
/juxi_visual_markerConfermare che il nodo rviz_control.py sia stato avviato
5. Nessuna risposta ai comandi dopo l'attivazione
rostopic echo /juxi_voice_cmdDati presenti → problema di configurazione di RViz; nessun dato → problema di cablaggio/comunicazione.
6. rosrun non trova il nodo
Confermare che la compilazione e il source siano già stati eseguiti:
cd ~/juxi_speech_ws
catkin_make
source devel/setup.bash7. Errore di sintassi segnalato
# Verifica che lo script Python abbia il permesso di esecuzione
chmod +x ~/juxi_speech_ws/src/juxi_voice/scripts/voice_node.py
chmod +x ~/juxi_speech_ws/src/juxi_voice/scripts/rviz_control.py
