4.9 KiB
AppRobotDriver
Dieses Projekt empfängt G-Code und Robotersteuerbefehle, berechnet Inverse Kinematik für einen mehrgliedrigen Roboterarm und leitet die resultierenden Achsenbefehle an mehrere GRBL/FluidNC-Telnet-Sender weiter.
Architektur
startRobot.jsstartet zwei HTTPS-Server:- Eingabe-Server + WebSocket für G-Code und Steuerbefehle
- Info-Server für Status, Position und einfache Weboberfläche
server/InputWS.jsempfängt Nachrichten von WebSocket-Clients, prüft sie auf G-Code oder Datei-Kommandos und gibt Positionsdaten zurück.robot/GCode.jsverarbeitet G-Code, übersetzt ihn in Roboter-Koordinaten und triggertrobot.sendCommand().robot/Robot.jsführt die Inverse Kinematik aus und berechnet Motorwinkel sowie optionale Motor-Geschwindigkeiten.robot/TelnetSenderGRBL.jsformatiert die Motor-Positionen in GRBL-kompatible Befehle und sendet sie per Telnet an einen Zielcontroller.
Eingaben
Die Eingaben kommen per WebSocket an den HTTPS-Server und werden in server/InputWS.js verarbeitet.
Unterstützte Nachrichten
Ping- Antwort: Wird zurück an alle verbundenen Clients gesendet.
M114- Antwort: Positionsdaten des Roboters im JSON-Format.
- G-Code-Befehle:
G90,G91,G1,G28,G92- Messungen in
X,Y,Z,A,B,C,E,F M1für direkte Motor-Koordinaten
- Datei-Kommandos:
FPoint,FPlus,FMinus,FFirst,FLast,FShow,FList,FLoad <file>,FSave <file>,FClearM20,M23,M28,M29
G-Code-Verarbeitung
GCode.receiveGCode(robot, message)- Gruppiert Zeilen, unterstützt Inline-Jogging (
$J=) - Schaltet zwischen absoluter und relativer Koordinatenverarbeitung
- Aktualisiert Position und Winkel im
robot-Objekt - Führt inverse Kinematik aus mit
robot.calculateAngles3D() - Sendet das Ergebnis an
robot.sendCommand()
- Gruppiert Zeilen, unterstützt Inline-Jogging (
Ausgaben
- WebSocket-Broadcasts an alle verbundenen Clients
- Nachdem ein G-Code-Befehl verarbeitet wurde, sendet das System
GCode.getM114(robot)zurück. - Für Datei-Kommandos gibt
GCode.receiveFC()ebenfalls die aktuelle Position zurück.
- Nachdem ein G-Code-Befehl verarbeitet wurde, sendet das System
- Telnet-Ausgabe an GRBL/FluidNC-Geräte
TelnetSenderGRBL.execCommand()erzeugtG1/G90-Befehle mit Achsenzuordnung und Feedrate.
- Info-Server API
/api/status— zeigt Client-Status, Sender-Status und letzte Befehle/Pings an/api/position— gibt die aktuelle Roboterposition und Motorwinkel als JSON zurück
Konfiguration
Starten
npm start- Alternativ:
node startRobot.js
Umgebungsvariablen
PORT- Standard:
2095 - Port für den WebSocket/HTTPS-Eingabeserver
- Standard:
GRBL_BASE_IP- Standard:
fluidNcBase.local - Zielhost für den ersten Telnet-Sender
- Standard:
GRBL_ELLBOW_IP- Standard:
fluidNcEllbow.local - Zielhost für den Ellbogen-Sender
- Standard:
GRBL_HAND_IP- Standard:
fluidNcHand.local - Zielhost für den Hand-Sender
- Standard:
ROBOT_DEFAULT_FEEDRATE- Standard:
1000(mm/min) - Default-Feedrate für
G1-Befehle, wenn keineF-Angabe vorhanden ist
- Standard:
ROBOT_USE_SPEED_CALC- Werte:
true,1oder sonst leer - Wenn gesetzt, werden
robot.calculateSpeeds()und interne Motor-Geschwindigkeiten verwendet
- Werte:
HTTPS-Konfiguration
https/localhost.keyhttps/localhost.pem- Passphrase aktuell hart codiert als
abcd
Telnet-Sender-Konfiguration
In startRobot.js werden drei TelnetSenderGRBL Instanzen erzeugt:
telnetSender1→ Basisachse(n):x,y,ztelnetSender2→ Ellbogenachse:atelnetSender3→ Handachsen:c,e,b
Die Achszuordnung kann in robot/TelnetSenderGRBL.js durch Anpassung der Konstruktorparameter geändert werden.
Serverschnittstellen
WebSocket Input Server
- Läuft auf
https://localhost:<PORT> - Erwartet WebSocket-Verbindungen und verarbeitet Nachrichten als G-Code oder Steuerbefehle
Info Server
- Läuft auf
https://localhost:2098 - Statische Dateien:
//app.js/style.css/allApps.css
- API-Endpunkte:
/api/status/api/position
Wichtige Dateien
startRobot.jsserver/InputWS.jsserver/InfoServer.jsrobot/Robot.jsrobot/GCode.jsrobot/TelnetSenderGRBL.jsGCodeFiles/— enthalten Beispiel- und Log-G-Code-Dateien
ToDo / Open Tasks
-
Architektur- und Refactoring-Aufgaben sind zusätzlich in
doc/ToDo_*.mddokumentiert. -
Dokumentation der vollständigen G-Code-Syntax erweitern
-
Feedrate-Berechnung im Sender genauer definieren
-
ROBOT_USE_SPEED_CALCundmotorSpeedsim Einsatz prüfen -
Fehlerbehandlung bei Telnet-Verbindungen verbessern
-
Einheitliche Behandlung von absoluten und relativen
M1-Motorbefehlen -
G92-Verhalten überprüfen: Position setzen ohne Roboterbewegung -
Zusätzliche Testfälle für
InputWS,GCodeundTelnetSenderGRBLschreiben -
HTTPS-Konfiguration und Zertifikatsverwaltung verbessern
-
Mehrsprachige Kommentare/README-Übersetzung bei Bedarf