7.1.7-Häufige Komponenten und Funktionen von ROS
Verteilte Kommunikation in ROS
ROS (Robot Operating System) ist als verteilte Rechenumgebung konzipiert. Das bedeutet, dass ein laufendes ROS-System aus mehreren Knoten bestehen kann, die über mehrere Maschinen verteilt sind. Je nach Konfiguration kann ein beliebiger Knoten jederzeit mit jedem anderen Knoten kommunizieren müssen.
Um das zu ermöglichen, hat ROS bestimmte Netzwerkanforderungen:
- Es muss eine vollständige bidirektionale Konnektivität zwischen allen Maschinen auf allen Ports bestehen.
- Jede Maschine muss sich mit einem Namen ankündigen, der von allen anderen Maschinen aufgelöst werden kann.
Implementierungsschritte
1. Vorbereitung
Bevor Sie ROS für die verteilte Kommunikation konfigurieren, stellen Sie sicher, dass sich die verschiedenen Computer im selben Netzwerk befinden. Idealerweise sollte jedem Computer eine statische IP-Adresse zugewiesen werden. Wenn Sie virtuelle Maschinen verwenden, müssen Sie die Einstellung des Netzwerkadapters auf „Bridged Mode" ändern, damit sie im selben Netzwerk miteinander interagieren können.
2. Konfigurationsdateien anpassen
Auf jedem Computer müssen Sie die Datei /etc/hosts anpassen, um die IP-Adressen und Hostnamen der anderen Maschinen einzutragen.
-
Auf der Host-Maschine:
Tragen Sie die IP-Adresse und den Hostnamen der Slave-Maschine ein.
plaintext<Slave_IP_Address> <Slave_Hostname> -
Auf der Slave-Maschine:
Tragen Sie die IP-Adresse und den Hostnamen der Host-Maschine ein.
plaintext<Host_IP_Address> <Host_Hostname>
Nachdem Sie die Dateien /etc/hosts aktualisiert haben, verwenden Sie den ping-Befehl, um zu prüfen, ob die Maschinen miteinander kommunizieren können:
- IP-Adresse prüfen: Verwenden Sie
ifconfigoderip addr show. - Hostname prüfen: Verwenden Sie
hostname.
3. IP-Adresse der Host-Maschine konfigurieren
Auf der Host-Maschine müssen Sie die IP-Adresse konfigurieren, indem Sie folgende Zeilen in die Datei ~/.bashrc einfügen:
export ROS_MASTER_URI=http://<Host_IP_Address>:11311
export ROS_HOSTNAME=<Host_IP_Address>Diese Zeilen setzen ROS_MASTER_URI auf die IP-Adresse der Host-Maschine, sodass ROS weiß, wo der Master-Knoten (roscore) läuft. ROS_HOSTNAME legt den Hostnamen der Maschine fest, den ROS verwendet.
4. IP-Adresse der Slave-Maschine konfigurieren
Auf jeder Slave-Maschine (Sie können mehrere Slaves haben) müssen Sie ebenfalls die Datei ~/.bashrc anpassen, indem Sie folgendes hinzufügen:
export ROS_MASTER_URI=http://<Host_IP_Address>:11311
export ROS_HOSTNAME=<Slave_IP_Address>Diese Konfiguration richtet jede Slave-Maschine auf den ROS-Master des Hosts aus und ermöglicht ihnen den Beitritt zum ROS-Netzwerk.
Setup testen
1. roscore auf der Host-Maschine starten
Starten Sie auf der Host-Maschine den ROS-Master-Knoten mit:
roscoreDieser Schritt ist entscheidend, da der ROS-Master-Knoten die Kommunikation zwischen den verschiedenen Knoten im ROS-Netzwerk verwaltet.
2. Kommunikation vom Host zum Slave testen
- Auf der Host-Maschine: Starten Sie einen Subscriber-Knoten.
- Auf der Slave-Maschine: Starten Sie einen Publisher-Knoten.
Prüfen Sie, ob die Knoten wie erwartet kommunizieren.
3. Kommunikation vom Slave zum Host testen
- Auf der Slave-Maschine: Starten Sie einen Subscriber-Knoten.
- Auf der Host-Maschine: Starten Sie einen Publisher-Knoten.
Überprüfen Sie auch hier, ob die Kommunikation zwischen den Knoten korrekt funktioniert.