G28 und Phase2 Arbeiten
This commit is contained in:
@@ -126,6 +126,8 @@ Umgesetzt:
|
|||||||
Stellung (`|y| = l1+l2+l3`) ist eine Handgelenk-Singularität, in der die IK `a`/`c` nicht
|
Stellung (`|y| = l1+l2+l3`) ist eine Handgelenk-Singularität, in der die IK `a`/`c` nicht
|
||||||
bestimmen kann (Müll wie `a=135°, c=45°` → Finger schräg). G28 setzt dort die Motorwerte
|
bestimmen kann (Müll wie `a=135°, c=45°` → Finger schräg). G28 setzt dort die Motorwerte
|
||||||
**direkt** (`alpha=beta=a=c=0`, `b=π` = gerade Hand) und füllt die Pose per FK.
|
**direkt** (`alpha=beta=a=c=0`, `b=π` = gerade Hand) und füllt die Pose per FK.
|
||||||
|
**Interim:** G28 lässt den Greifer (`e`/`eMotor`) **unangetastet** — sonst ergäbe
|
||||||
|
`eMotor = e−b−c` bei `b=π` den Wert −180° → Finger-Anschlag-Slam (Phase 2 behebt das mit `b=0`).
|
||||||
- **Tests:** `test/Robot.Kinematics.NegativeY.test.js` (Grundstellung −590, Homing-Pose
|
- **Tests:** `test/Robot.Kinematics.NegativeY.test.js` (Grundstellung −590, Homing-Pose
|
||||||
in −y, Round-Trip in −y, a=0 → Knick-Achse ∥ x).
|
in −y, Round-Trip in −y, a=0 → Knick-Achse ∥ x).
|
||||||
- **Migration:** `Robot.02_UpperArm` und der G28-Test auf −y umgestellt.
|
- **Migration:** `Robot.02_UpperArm` und der G28-Test auf −y umgestellt.
|
||||||
@@ -176,9 +178,21 @@ Fundstellen:
|
|||||||
- Aufgabe: Kopplung gegen die echte Sehnenmechanik validieren, toten x-Port-Pfad +
|
- Aufgabe: Kopplung gegen die echte Sehnenmechanik validieren, toten x-Port-Pfad +
|
||||||
`factorOpenTurn` aufräumen, **Vorzeichen** je nach Motor-Verkabelung prüfen.
|
`factorOpenTurn` aufräumen, **Vorzeichen** je nach Motor-Verkabelung prüfen.
|
||||||
|
|
||||||
3. **B-Konvention (gerade = 0°).** Durchgängig:
|
3. **B-Konvention (gerade = 0°).**
|
||||||
|
|
||||||
|
**Verifizierter Mismatch Homing ↔ Driver:** Das appRobotHoming meldet für die **gerade**
|
||||||
|
Hand **B ≈ 0** (Messung: `B=-6.92`), der Driver rechnet aber mit **gerade = b = 180°**.
|
||||||
|
Der Driver interpretiert das empfangene `b≈0` daher als Knick `180−0 = 180°` (fast voll
|
||||||
|
zurückgeklappt) → im Modell zeigt der Finger nach **+y (rückwärts)** statt −y. D.h. **nach
|
||||||
|
dem Homing ist der interne Hand-Zustand des Drivers falsch** (gefaltet), was Folge-Moves
|
||||||
|
verfälscht. Das ist das beobachtete „Driver interpretiert als B=180".
|
||||||
|
→ Konsequenz: Driver auf **B=0=gerade** umstellen (passt dann ohne Umrechnung zum Homing),
|
||||||
|
**oder** appRobotHoming sendet `B+180`. (C ist konsistent: Homing `C=90`=flach = Driver `c=90`=flach,
|
||||||
|
also `C=0`=aufrecht — kein Versatz.)
|
||||||
|
|
||||||
|
Umstellung durchgängig:
|
||||||
- FK/IK in `Arm3SegmentLinearX` (b-Definition / acos-Zweig),
|
- FK/IK in `Arm3SegmentLinearX` (b-Definition / acos-Zweig),
|
||||||
- `gripperMotorFromOpening` nachziehen,
|
- `gripperMotorFromOpening` nachziehen (behebt auch den G28-Greifer-Slam),
|
||||||
- G92-Eingabe (`b = B/D`) + M1 + G28,
|
- G92-Eingabe (`b = B/D`) + M1 + G28,
|
||||||
- `portInverse.js` (Umkehrung),
|
- `portInverse.js` (Umkehrung),
|
||||||
- **Sender-Formeln so kompensieren, dass die FluidNC-Ports unverändert bleiben** —
|
- **Sender-Formeln so kompensieren, dass die FluidNC-Ports unverändert bleiben** —
|
||||||
@@ -193,8 +207,9 @@ Fundstellen:
|
|||||||
(`|Hand.to[1]| + |FingerA.to[1]|` = 35 + 60 = **95**) statt aus dem Ellbogen-Versatz (90).
|
(`|Hand.to[1]| + |FingerA.to[1]|` = 35 + 60 = **95**) statt aus dem Ellbogen-Versatz (90).
|
||||||
Zusätzlich sind `kinematics.l1/l2/l3` in robot.json **explizit überschreibbar** (Vorrang
|
Zusätzlich sind `kinematics.l1/l2/l3` in robot.json **explizit überschreibbar** (Vorrang
|
||||||
vor der Ableitung) — zum Kalibrieren auf die gemessene Reichweite.
|
vor der Ableitung) — zum Kalibrieren auf die gemessene Reichweite.
|
||||||
⚠️ Geometrie liefert Reichweite 595, beobachtet wurden **~550** → l3 (oder l1/l2) sollte
|
Reichweite damit 595 — passt zur aktuellen Hardware (60 mm Finger). Die früher beobachteten
|
||||||
per `kinematics.l3` explizit kalibriert werden (deutet auf l3 ≈ 50, falls l1=l2=250 stimmen).
|
~550 stammten von **kürzeren 50 mm-Greifern**. Bei Greifer-Wechsel `kinematics.l3` per
|
||||||
|
Override anpassen (oder Finger-Geometrie in robot.json pflegen).
|
||||||
|
|
||||||
6. **Tests + Doku** nachziehen: Round-Trip mit neuer Konvention, Greifer-Kopplung,
|
6. **Tests + Doku** nachziehen: Round-Trip mit neuer Konvention, Greifer-Kopplung,
|
||||||
G92-Referenztabellen in `Info_G92.md`, sowie diese Datei.
|
G92-Referenztabellen in `Info_G92.md`, sowie diese Datei.
|
||||||
|
|||||||
@@ -11236,3 +11236,12 @@
|
|||||||
2026-06-26T10:26:52.112Z ::ffff:127.0.0.1: M114
|
2026-06-26T10:26:52.112Z ::ffff:127.0.0.1: M114
|
||||||
2026-06-26T10:26:52.341Z ::ffff:127.0.0.1: G1 X1 Y2 Z3
|
2026-06-26T10:26:52.341Z ::ffff:127.0.0.1: G1 X1 Y2 Z3
|
||||||
2026-06-26T10:26:52.567Z ::ffff:127.0.0.1: G1 X1
|
2026-06-26T10:26:52.567Z ::ffff:127.0.0.1: G1 X1
|
||||||
|
2026-06-26T13:23:39.999Z ::ffff:127.0.0.1: FList
|
||||||
|
2026-06-26T13:23:40.023Z ::ffff:127.0.0.1: FPlus
|
||||||
|
2026-06-26T13:23:40.048Z ::ffff:127.0.0.1: FLoad nichtda
|
||||||
|
2026-06-26T13:23:40.086Z ::ffff:127.0.0.1: FShow
|
||||||
|
2026-06-26T13:23:40.410Z ::ffff:127.0.0.1: M114
|
||||||
|
2026-06-26T13:23:40.444Z ::ffff:127.0.0.1: G1 X1 Y2 Z3
|
||||||
|
2026-06-26T13:23:40.597Z ::ffff:127.0.0.1: M114
|
||||||
|
2026-06-26T13:23:40.821Z ::ffff:127.0.0.1: G1 X1 Y2 Z3
|
||||||
|
2026-06-26T13:23:41.051Z ::ffff:127.0.0.1: G1 X1
|
||||||
|
|||||||
@@ -14858,3 +14858,5 @@
|
|||||||
2026-06-26T10:26:37.324Z ::ffff:127.0.0.1 : Ping
|
2026-06-26T10:26:37.324Z ::ffff:127.0.0.1 : Ping
|
||||||
2026-06-26T10:26:51.865Z ::ffff:127.0.0.1 : Ping
|
2026-06-26T10:26:51.865Z ::ffff:127.0.0.1 : Ping
|
||||||
2026-06-26T10:26:51.878Z ::ffff:127.0.0.1 : Ping
|
2026-06-26T10:26:51.878Z ::ffff:127.0.0.1 : Ping
|
||||||
|
2026-06-26T13:23:40.342Z ::ffff:127.0.0.1 : Ping
|
||||||
|
2026-06-26T13:23:40.380Z ::ffff:127.0.0.1 : Ping
|
||||||
|
|||||||
Reference in New Issue
Block a user