ROS1-Sprachinteraktion
1、Umgebungsvorbereitung
Systemanforderungen
Betriebssystem: Ubuntu 20.04 oder 18.04
ROS1-Version: Noetic (empfohlen) oder Melodic
Abhängigkeiten installieren
# 1. Quellen aktualisieren
sudo apt update
# 2. ROS1 Desktop-Vollversion installieren
# (Überspringen, wenn ROS1 bereits installiert ist)
sudo apt install ros-noetic-desktop-full -y # Ubuntu 20.04
sudo apt install ros-melodic-desktop-full -y # Ubuntu 18.04
# 3. Projektabhängigkeiten installieren (unterstützt seriell und I2C)
sudo apt install python3-pip ros-noetic-rviz i2c-tools -y
pip3 install pyserial smbus2
# Bei Melodic (Python2)
sudo apt install python-pip ros-melodic-rviz i2c-tools -y
pip install pyserial smbus2
# 4. Bei I2C-Verkabelung zusätzlich installieren
sudo apt install python3-smbus2 -y2、Drei Verkabelungsmethoden
Das AI-Sprachinteraktionsmodul unterstützt die folgenden drei Verkabelungsmethoden:
Automatischer Erkennungsmechanismus
Beim Start des ROS1-Knotens wird die Verkabelungsmethode automatisch in der folgenden Reihenfolge erkannt:
Zuerst wird die serielle Schnittstelle versucht: nacheinander werden
/dev/ttyUSB0→/dev/ttyACM0→/dev/ttyAMA0→/dev/ttyS0geprüftDanach wird I2C versucht: Es wird geprüft, ob auf
/dev/i2c-1der Slave0x2Avorhanden istBei der Erkennung der seriellen Schnittstelle gilt der Port als verfügbar, sobald die Gerätedatei vorhanden ist und geöffnet werden kann; eine zusätzliche Überprüfung ist nicht erforderlich
Sobald eine der Methoden erkannt wird, wird die Erkennung beendet und diese Methode wird fest verwendet. Eine manuelle Konfiguration ist nicht erforderlich.
3、IIC-Protokollbeschreibung
IIC-Slave-Konfiguration
Registerdefinitionen
4、Beschreibung des seriellen Protokolls (Type-C / UART)
Rahmenformat
Jeder Rahmen umfasst fest 5 Byte:
Baudrate
Fest auf 115200 bps.
5、Arbeitsbereich und Verzeichnisstruktur erstellen
Catkin-Arbeitsbereich erstellen
mkdir -p ~/juxi_speech_ws/src
cd ~/juxi_speech_ws/srcROS-Paket erstellen
catkin_create_pkg juxi_voice rospy std_msgs visualization_msgsEndgültige Verzeichnisstruktur
Platzieren Sie die von diesem Projekt bereitgestellten Dateien an den entsprechenden Stellen:
~/juxi_speech_ws/
├── build/
├── devel/
└── src/
└── juxi_voice/
├── CMakeLists.txt # (Durch das von diesem Projekt bereitgestellte ersetzen)
├── package.xml # (Durch das von diesem Projekt bereitgestellte ersetzen)
├── juxi_voice.rviz # (Neu: RViz-Vorkonfigurationsdatei)
├── launch/
│ └── juxi_voice.launch # (Neu: Ein-Klick-Startdatei)
└── scripts/
├── voice_node.py # (Neu: Sprach-Node)
└── rviz_control.py # (Neu: RViz-Steuerungs-Node)6、Dateiinhalte und Platzierung
Datei 1: voice_node.py (Sprachsteuerungsknoten)
Speicherort: ~/juxi_speech_ws/src/juxi_voice/scripts/voice_node.py
Kernfunktionen:
Erkennt die Verkabelungsmethode Type-C / UART / IIC automatisch
Einheitliche Befehlswort-Zuordnungstabelle (114 Befehlswörter, vollständig identisch mit der Excel-Protokolltabelle V1)
Verwendet je nach Verkabelungsmethode das entsprechende Kommunikations-Backend (serielle Schnittstelle / I2C)
Schlüsselarchitektur:
# Einheitliche Befehlsdaten: ID → (Seriell Byte 2, Seriell Byte 3, Befehlstext, Ansagemodus)
CMD_DATA = {
1: (0x01, 0x00, "欢迎语", "被"),
3: (0x03, 0x00, "你好小犀", "主"),
14: (0x00, 0x04, "小车前进", "主"),
84: (0xFF, 0x5F, "这是红色", "被"),
...
}
# Funktion zur automatischen Erkennung
def detect_connection():
# 1. Serielle Ports versuchen: /dev/ttyUSB0, /dev/ttyACM0, /dev/ttyAMA0, /dev/ttyS0
# 2. I2C versuchen: /dev/i2c-1 (Slave-Adresse 0x2A)
...(Den vollständigen Code finden Sie in der von diesem Projekt bereitgestellten Datei voice_node.py)
Datei 2: rviz_control.py (RViz-Steuerungsknoten)
Speicherort: ~/juxi_speech_ws/src/juxi_voice/scripts/rviz_control.py
Abonniert das Topic /juxi_voice_cmd, empfängt den Befehlstext und aktualisiert die Würfelvisualisierung entsprechend dem Befehl.
(Den vollständigen Code finden Sie in der im Projekt bereitgestellten Datei rviz_control.py)
Datei 3: CMakeLists.txt und package.xml
Wird bereits in diesem Projekt bereitgestellt; ersetzen Sie einfach die von catkin_create_pkg automatisch erzeugten Standarddateien.
7、Kompilieren und Ausführen
Kompilieren
cd ~/juxi_speech_ws
catkin_makeUmgebungsvariablen
source ~/juxi_speech_ws/devel/setup.bash
# Oder in ~/.bashrc schreiben
echo "source ~/juxi_speech_ws/devel/setup.bash" >> ~/.bashrcBerechtigungseinstellungen
# I2C-Berechtigungen
sudo chmod 666 /dev/i2c-1
# Berechtigungen für die serielle Schnittstelle
sudo chmod 666 /dev/ttyUSB0
sudo chmod 666 /dev/ttyACM0
sudo chmod 666 /dev/ttyAMA0
# Oder zur Benutzergruppe hinzufügen
sudo usermod -aG dialout $USER
sudo usermod -aG i2c $USER
# Nach der Einstellung ist ein erneutes Anmelden erforderlichKnoten ausführen
Methode 1: Ein-Klick-Start (empfohlen)
cd ~/juxi_speech_ws
source devel/setup.bash
roslaunch juxi_voice juxi_voice.launchBeim Start werden der Sprachknoten, der RViz-Steuerungsknoten und die RViz-Visualisierungsoberfläche automatisch geöffnet.
Methode 2: Schrittweiser Start (3 Terminals)
Terminal 1: roscore starten
roscoreTerminal 2: Sprachknoten
cd ~/juxi_speech_ws
source devel/setup.bash
rosrun juxi_voice voice_node.pyBeim Start wird die erkannte Verkabelungsmethode angezeigt:
[INFO] 自动检测: IIC /dev/i2c-1 (从机地址 0x2A)
[INFO] 语音节点启动完成 - IIC /dev/i2c-1 (从机地址 0x2A)oder
[INFO] 自动检测: UART /dev/ttyUSB0
[INFO] 语音节点启动完成 - UART /dev/ttyUSB0Wenn kein Gerät erkannt wird:
[FATAL] 未检测到AI语音交互模块!请检查接线 (Type-C / UART / IIC)
[FATAL] 支持的端口: I2C(/dev/i2c-1) | 串口(/dev/ttyUSB0 /dev/ttyACM0 /dev/ttyAMA0 /dev/ttyS0)Terminal 3: RViz-Steuerungsknoten
cd ~/juxi_speech_ws
source devel/setup.bash
rosrun juxi_voice rviz_control.pyTerminal 4: RViz-Visualisierung (vorkonfigurierte Datei direkt laden, keine manuelle Einrichtung erforderlich)
rviz -d ~/juxi_speech_ws/src/juxi_voice/juxi_voice.rvizOder öffnen Sie zuerst RViz und laden Sie dann:
rviz
# Menüleiste: File → Open Config → juxi_voice.rviz auswählen8、RViz-Vorkonfiguration
juxi_voice.rviz ist bereits mit den folgenden Inhalten vorkonfiguriert und kann direkt nach dem Start verwendet werden, ohne dass manuelle Schritte erforderlich sind:
Fixed Frame:
mapMarker-Anzeige:
/juxi_visual_markerwurde abonniert (einzelner Marker)MarkerArray-Anzeige:
/juxi_visual_markerswurde abonniert (mehrere Marker: Roboterarm, Batteriestand, Alarm usw.)Ansicht: Beobachtung von schräg oben, Mittelpunkt im Ursprung
9、Verwendung
Aufwecken
Sagen Sie "你好小犀" zum Modul → das Modul antwortet mit "我在"
Befehle senden
"小车前进" → der Würfel bewegt sich vorwärts
"亮红灯" → der Würfel wird rot
"打开流水灯" → die Farbe ändert sich zyklisch
"报警" → eine rote pulsierende Kugel
"显示电量" → Text des Batteriestands
Vom Host ausgelöste Ansage
# Passive Ansage (I2C → 0xD1 schreiben, Seriell → FE EF FF XX EE senden)
rostopic pub /juxi_passive_play std_msgs/String "data: '这是红色'"
# Funktionswort-Ansage (I2C → 0xD2 schreiben, Seriell → FE EF 01 00 EE senden)
rostopic pub /juxi_func_play std_msgs/String "data: '欢迎语'"
# Befehlswort-Ansage (I2C → 0xD3 schreiben, Seriell → FE EF 00 04 EE senden)
rostopic pub /juxi_cmd_play std_msgs/String "data: '小车前进'"10、Befehlswort-ID-Referenztabelle
Insgesamt 114 Befehlswörter, vollständig identisch mit
命令词播报词协议列表V1_中文.xlsx.
Funktionswörter (ID 1-10)
Befehlswörter (ID 11-83, 113)
Passive Ansagephrasen (ID 84-112, 114)
11、ROS1-Topic-Beschreibung
12、Fehlerbehebung
1. Beim Start wird "AI-Sprachinteraktionsmodul nicht erkannt" gemeldet
Prüfen Sie, ob die Gerätedatei für die entsprechende Verkabelungsmethode vorhanden ist:
# I2C-Verkabelung
ls /dev/i2c-1
sudo i2cdetect -y 1 # 0x2A sollte erscheinen
# Typ-C-Verkabelung
ls /dev/ttyUSB0 /dev/ttyACM0
# UART-Verkabelung
ls /dev/ttyAMA0 /dev/ttyS02. Fehler bei der Berechtigung der seriellen Schnittstelle
sudo chmod 666 /dev/ttyUSB0 # Oder /dev/ttyACM0 usw.
# Oder zur Gruppe dialout hinzufügen (erneutes Anmelden erforderlich)
sudo usermod -aG dialout $USER3. I2C-Berechtigungsfehler
sudo chmod 666 /dev/i2c-1
# Oder zur Gruppe i2c hinzufügen (erneutes Anmelden erforderlich)
sudo usermod -aG i2c $USER4. Kein Würfel in RViz
Prüfen Sie, ob der Fixed Frame
mapistPrüfen Sie, ob das Topic
/juxi_visual_markeristVergewissern Sie sich, dass der Knoten rviz_control.py gestartet wurde
5. Keine Reaktion auf Befehle nach dem Aufwecken
rostopic echo /juxi_voice_cmdDaten vorhanden → Problem mit der RViz-Konfiguration; keine Daten → Problem mit Verkabelung/Kommunikation.
6. rosrun findet den Knoten nicht
Vergewissern Sie sich, dass das Kompilieren und das Source bereits ausgeführt wurden:
cd ~/juxi_speech_ws
catkin_make
source devel/setup.bash7. Syntaxfehler wird gemeldet
# Prüfen, ob das Python-Skript Ausführungsrechte besitzt
chmod +x ~/juxi_speech_ws/src/juxi_voice/scripts/voice_node.py
chmod +x ~/juxi_speech_ws/src/juxi_voice/scripts/rviz_control.py
