B um 180° gedreht
This commit is contained in:
@@ -20,23 +20,25 @@ describe('Phase 1 — Arm arbeitet in -Y (alpha=0 zeigt nach -y)', () => {
|
||||
}
|
||||
|
||||
test('voll ausgestreckt (alpha=beta=0, Hand gerade) -> y ~ -590', () => {
|
||||
// B=180 = aktuelle "gerade Hand"-Konvention (Phase 2 macht daraus 0)
|
||||
const r = fkFromMotors(0, 0, 0, 180, 0);
|
||||
// B=0 = gerade Hand (Phase-2-Konvention)
|
||||
const r = fkFromMotors(0, 0, 0, 0, 0);
|
||||
expect(r.y).toBeLessThan(0);
|
||||
expect(r.y).toBeCloseTo(-(L1 + L2 + L3), 0); // ~ -590
|
||||
expect(r.z).toBeCloseTo(0, 6);
|
||||
});
|
||||
|
||||
test('gemeldete Homing-Pose landet in -y (war faelschlich +405)', () => {
|
||||
// G92 X160.53 Y4.53 Z13.93 A124.04 (B=C=0)
|
||||
// G92 X160.53 Y4.53 Z13.93 A124.04 B0 C0 (Homing: B=0 = gerade Hand, Phase-2-Konvention).
|
||||
// Phase 1: y=-405 (B=0 wurde als "gefaltet" interpretiert).
|
||||
// Phase 2: y=-579 (B=0 = gerade → Hand streckt sich in Armrichtung).
|
||||
const r = fkFromMotors(4.53, 13.93, 124.04, 0, 0, 160.53);
|
||||
expect(r.y).toBeLessThan(0);
|
||||
expect(r.y).toBeCloseTo(-405, 0);
|
||||
expect(r.z).toBeCloseTo(58, 0);
|
||||
expect(r.y).toBeCloseTo(-579, 0);
|
||||
expect(r.z).toBeCloseTo(102, 0);
|
||||
});
|
||||
|
||||
test('IK der -y-Grundstellung liefert alpha~0 / beta~0 (nicht ~180)', () => {
|
||||
const ref = fkFromMotors(0, 0, 0, 180, 0); // -y-ausgestreckte Pose als Referenz
|
||||
const ref = fkFromMotors(0, 0, 0, 0, 0); // -y-ausgestreckte Pose als Referenz (b=0 = gerade)
|
||||
const r = new Robot(L1, L2, L3);
|
||||
r.x = ref.x; r.y = ref.y; r.z = ref.z;
|
||||
r.phi = ref.phi; r.theta = ref.theta; r.psi = ref.psi; r.e = 0;
|
||||
@@ -65,8 +67,8 @@ describe('Phase 1 — Arm arbeitet in -Y (alpha=0 zeigt nach -y)', () => {
|
||||
expect(B.psi).toBeCloseTo(A.psi, EPS);
|
||||
});
|
||||
|
||||
test('Nullpose (alpha=beta=a=0, Hand gerade b=180) -> Fingerspitze (xMotor, -590, 0)', () => {
|
||||
const r = fkFromMotors(0, 0, 0, 180, 0, 7);
|
||||
test('Nullpose (alpha=beta=a=0, Hand gerade b=0) -> Fingerspitze (xMotor, -590, 0)', () => {
|
||||
const r = fkFromMotors(0, 0, 0, 0, 0, 7);
|
||||
expect(r.x).toBeCloseTo(7, 6); // x = xMotor
|
||||
expect(r.y).toBeCloseTo(-(L1 + L2 + L3), 6);
|
||||
expect(r.z).toBeCloseTo(0, 6);
|
||||
@@ -74,13 +76,14 @@ describe('Phase 1 — Arm arbeitet in -Y (alpha=0 zeigt nach -y)', () => {
|
||||
|
||||
test('a=0 -> Hand-Knick-Achse laeuft parallel zur x-Achse', () => {
|
||||
// Bei a=0 knickt die Hand (b) in der y-z-Ebene -> Fingerspitze.x bleibt = xMotor.
|
||||
// b=0=gerade, b=90=90°-Knick, b=135=135°-Knick (Phase-2-Konvention).
|
||||
const xM = 5;
|
||||
for (const bDeg of [90, 135, 180, 225]) {
|
||||
for (const bDeg of [0, 45, 90, 135]) {
|
||||
const r = fkFromMotors(0, 0, 0, bDeg, 0, xM);
|
||||
expect(r.x).toBeCloseTo(xM, 6);
|
||||
}
|
||||
// Gegenprobe: a=90 dreht die Knick-Achse aus der y-z-Ebene -> x aendert sich deutlich.
|
||||
const r90 = fkFromMotors(0, 0, 90, 135, 0, xM);
|
||||
const r90 = fkFromMotors(0, 0, 90, 45, 0, xM);
|
||||
expect(Math.abs(r90.x - xM)).toBeGreaterThan(1);
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user