10d306b7d4a18c01f0a1ddb6d53d92d2a22705ac
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,G28G92(wird intern alsM92verarbeitet — setzt Motorposition ohne Bewegung)- Messungen in
X,Y,Z,A,B,C,E,F M1für direkte Motor-Koordinaten
- Datei-Kommandos:
FPoint,FPlus,FMinus,FShow,FList,FLoad <file>,FSave <file>,FClearFFirst,FLast— erkannt, aber noch nicht implementiertM20,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.jsrobot/fluidnc/FluidNCClient.js— alternative WebSocket-basierte FluidNC-Anbindung mit Reconnect-Logik (noch nicht integriert)GCodeFiles/— enthalten Beispiel- und Log-G-Code-Dateien
Laufzeitvoraussetzungen
- Das Verzeichnis
logs/muss im Arbeitsverzeichnis existieren, daInputWS.jsdortpings.logundgcode_commands.logschreibt. - HTTPS-Zertifikate:
https/localhost.keyundhttps/localhost.pem(Passphrase aktuell hardcodedabcd). - Die Telnet-Sender werden erst nach 5 Sekunden zum Roboter hinzugefügt, damit die Verbindungen Zeit haben aufzubauen.
ToDo / Open Tasks
Architektur- und Refactoring-Aufgaben sind in doc/ToDo_*.md dokumentiert:
| Datei | Thema |
|---|---|
doc/ToDo_1_Parsing.md |
G-Code-Parser-Schicht einführen |
doc/ToDo_2_Anbindung.md |
Sender-Interface und Orchestrierung |
doc/ToDo_3_Config.md |
Zentralisierte Konfiguration |
doc/ToDo_4_GCode.md |
G-Code- und Datei-Handling trennen |
doc/ToDo_5_API.md |
WebSocket-Antwortlogik strukturieren |
doc/ToDo_6_RobotController.md |
RobotController-Klasse einführen |
doc/ToDo_7_Tests.md |
Testabdeckung und Stabilität |
doc/ToDo_8_Bugs.md |
Bekannte konkrete Bugs |
doc/ToDo_9_HardwareFeedback.md |
Hardware-Feedback-Loop (GRBL-Antworten, Command-Queue, Positionsabgleich) |
Empfohlene Bearbeitungsreihenfolge
ToDo_8 Bugs beheben — kurz, blockiert nichts anderes
ToDo_3 Config — Fundament für alles Weitere
ToDo_1 Parser ┐
ToDo_6 RobotController ┘ zusammen, da eng verzahnt
ToDo_4 Datei-Handling — danach, klar abgrenzbar
ToDo_2 Sender-Interface — mit Entscheidung: Telnet vs. FluidNC-WebSocket
ToDo_9 Hardware-Feedback — baut auf ToDo_2 auf
ToDo_5 API — parallel zu ToDo_2/4 möglich
ToDo_7 Tests — begleitend zu allen obigen
Kurzübersicht weiterer offener Punkte:
- Dokumentation der vollständigen G-Code-Syntax erweitern
FFirst/FLast-Befehle inGCode.receiveFC()implementierenROBOT_USE_SPEED_CALCundmotorSpeedsim echten Betrieb prüfenFluidNCClient.jsevaluieren: als Ersatz oder Ergänzung zuTelnetSenderGRBL?- HTTPS-Konfiguration und Zertifikatsverwaltung verbessern (Passphrase aus Env-Variable)
logs/-Verzeichnis beim Start automatisch anlegen
Description
Languages
JavaScript
88.8%
G-code
3.3%
TeX
3%
CSS
2.4%
HTML
1.3%
Other
1.2%