139 lines
4.9 KiB
Markdown
139 lines
4.9 KiB
Markdown
# 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.js` startet zwei HTTPS-Server:
|
|
- Eingabe-Server + WebSocket für G-Code und Steuerbefehle
|
|
- Info-Server für Status, Position und einfache Weboberfläche
|
|
- `server/InputWS.js` empfängt Nachrichten von WebSocket-Clients, prüft sie auf G-Code oder Datei-Kommandos und gibt Positionsdaten zurück.
|
|
- `robot/GCode.js` verarbeitet G-Code, übersetzt ihn in Roboter-Koordinaten und triggert `robot.sendCommand()`.
|
|
- `robot/Robot.js` führt die Inverse Kinematik aus und berechnet Motorwinkel sowie optionale Motor-Geschwindigkeiten.
|
|
- `robot/TelnetSenderGRBL.js` formatiert 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`
|
|
- `M1` für direkte Motor-Koordinaten
|
|
- Datei-Kommandos:
|
|
- `FPoint`, `FPlus`, `FMinus`, `FFirst`, `FLast`, `FShow`, `FList`, `FLoad <file>`, `FSave <file>`, `FClear`
|
|
- `M20`, `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()`
|
|
|
|
## 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.
|
|
- Telnet-Ausgabe an GRBL/FluidNC-Geräte
|
|
- `TelnetSenderGRBL.execCommand()` erzeugt `G1`/`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
|
|
- `GRBL_BASE_IP`
|
|
- Standard: `fluidNcBase.local`
|
|
- Zielhost für den ersten Telnet-Sender
|
|
- `GRBL_ELLBOW_IP`
|
|
- Standard: `fluidNcEllbow.local`
|
|
- Zielhost für den Ellbogen-Sender
|
|
- `GRBL_HAND_IP`
|
|
- Standard: `fluidNcHand.local`
|
|
- Zielhost für den Hand-Sender
|
|
- `ROBOT_DEFAULT_FEEDRATE`
|
|
- Standard: `1000` (mm/min)
|
|
- Default-Feedrate für `G1`-Befehle, wenn keine `F`-Angabe vorhanden ist
|
|
- `ROBOT_USE_SPEED_CALC`
|
|
- Werte: `true`, `1` oder sonst leer
|
|
- Wenn gesetzt, werden `robot.calculateSpeeds()` und interne Motor-Geschwindigkeiten verwendet
|
|
|
|
### HTTPS-Konfiguration
|
|
|
|
- `https/localhost.key`
|
|
- `https/localhost.pem`
|
|
- Passphrase aktuell hart codiert als `abcd`
|
|
|
|
### Telnet-Sender-Konfiguration
|
|
|
|
In `startRobot.js` werden drei `TelnetSenderGRBL` Instanzen erzeugt:
|
|
|
|
- `telnetSender1` → Basisachse(n): `x`, `y`, `z`
|
|
- `telnetSender2` → Ellbogenachse: `a`
|
|
- `telnetSender3` → 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.js`
|
|
- `server/InputWS.js`
|
|
- `server/InfoServer.js`
|
|
- `robot/Robot.js`
|
|
- `robot/GCode.js`
|
|
- `robot/TelnetSenderGRBL.js`
|
|
- `GCodeFiles/` — enthalten Beispiel- und Log-G-Code-Dateien
|
|
|
|
## ToDo / Open Tasks
|
|
|
|
- Architektur- und Refactoring-Aufgaben sind zusätzlich in `doc/ToDo_*.md` dokumentiert.
|
|
|
|
- [ ] Dokumentation der vollständigen G-Code-Syntax erweitern
|
|
- [ ] Feedrate-Berechnung im Sender genauer definieren
|
|
- [ ] `ROBOT_USE_SPEED_CALC` und `motorSpeeds` im 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`, `GCode` und `TelnetSenderGRBL` schreiben
|
|
- [ ] HTTPS-Konfiguration und Zertifikatsverwaltung verbessern
|
|
- [ ] Mehrsprachige Kommentare/README-Übersetzung bei Bedarf
|