Wir entwerfen derzeit einen mobilen Roboter + montierten Arm mit mehreren kontrollierten Freiheitsgraden und Sensoren.
Ich denke über eine Architektur in zwei Teilen nach:
Eine Reihe von Echtzeit-Controllern (entweder Raspeberry Pis mit einem RTOS wie Xenomai oder Bare-Metal-Mikrocontroller) zur Steuerung der Armmotoren und Encoder. Nennen wir diese Maschinen RTx mit x = 1,2,3… abhängig von der Anzahl der Mikrocontroller. Dieser Regelkreis läuft mit 200Hz.
Eine leistungsstarke Vanilla-Linux-Maschine, auf der ROS ausgeführt wird, um SLAM, Mocap und High-Level-Logik zu berechnen (bestimmen Sie die Aufgabe des Roboters und berechnen Sie die gewünschte Position und Geschwindigkeit der Motoren). Dieser Regelkreis läuft mit 30Hz.
Ich weiß, dass mein Framework skalierbar sein muss, um mehr Motoren, mehr Sensoren und mehr PCs (z. B. für externe Mocaps) zu berücksichtigen.
Mein Hauptproblem ist die Entscheidung, wie die verschiedenen RTx mit PC1 kommunizieren sollen. Ich habe mir Artikel über Roboterarchitektur angesehen (z. B. HRP2) ) angesehen, meistens beschreiben sie die Steuerungsarchitektur auf hoher Ebene, aber ich habe noch keine Informationen gefunden, wie die Kommunikation auf niedriger Ebene mit der auf hoher Ebene und auf skalierbare Weise erfolgen kann. Habe ich etwas verpasst?
Um die schnellen RT-Maschinen, die die Motorsteuerung gewährleisten, mit PC1 zu verbinden, habe ich TCP / IP, CAN und UART in Betracht gezogen:
- TCP / IP: nicht deterministisch, aber einfach einzurichten. Ist Nicht-Determinismus ein echtes Problem (da es sowieso nur bei langsamer Geschwindigkeit 30 Hz verwendet wird)?
- CAN: langsam, sehr zuverlässig, auf Autos ausgerichtet (es gibt einige Beispiele, die CAN mit Robotern verwenden, aber es sah exotisch aus)
- UART: Wenn ich nur eine RT-Maschine für die Motorsteuerung gehabt hätte, hätte ich UART in Betracht gezogen, aber ich denke, dieser Port lässt sich mit vielen RTx nicht gut skalieren. Ist TCP / IP aufgrund seiner nicht deterministischen Eigenschaften wirklich ein No-Go? Es ist so einfach zu bedienen ...
Im Moment scheint mir keine Lösung wirklich offensichtlich zu sein. Und da ich mit einer bestimmten zuverlässigen und skalierbaren Lösung kein seriöses Roboterbeispiel finden kann, bin ich nicht zuversichtlich, eine Wahl zu treffen.
Hat jemand eine klare Sicht auf diesen Punkt oder Literatur darauf hinzuweisen? Gibt es typische oder gängige Kommunikationslösungen für Roboter?