Zum Hauptinhalt springen

TCP-Neukalibrierung für SCARA-Roboter

Diese Applikationsnotiz beschreibt, wie die Offsets des Tool Center Point (TCP) mithilfe eines CAPTRON TCP-Messinstruments bei SCARA-Robotern (z. B. Epson, Kawasaki) ermittelt werden. Das Verfahren nutzt die beiden senkrecht zueinander stehenden Laser-Lichtschranken des Sensors sowie eine kreisförmige Bewegungsbahn, um die X-, Y- und Z-Offsets der Werkzeugspitze zu berechnen.

info

Der unten gezeigte Beispielcode stammt aus einer Kawasaki-Implementierung. Die Implementierung auf einem Epson SCARA-Roboter unterscheidet sich in der Syntax, das grundlegende Algorithmus- und Messprinzip bleibt jedoch identisch.

Überblick

Das Neukalibrierungsverfahren besteht aus drei Hauptphasen:

  1. XY-Neukalibrierung -- Ermittlung der X- und Y-Offsets durch eine kreisförmige Bewegung durch die Laser-Lichtschranken, Aufzeichnung von 8 Referenzpunkten und Berechnung des Schnittpunkts zweier Geraden.
  2. Z-Neukalibrierung -- Ermittlung des Z-Offsets durch vertikale Bewegung des Werkzeugs durch die Laser-Lichtschranken nach der XY-Korrektur.
  3. Offsets anwenden -- Hinzufügen der berechneten Offsets zur Werkzeugdefinition in der Robotersteuerung.

XY-Neukalibrierungsverfahren

Schritt 1: Mittelpunktposition festlegen

Positionieren Sie das Werkzeug am ungefähren Mittelpunkt des TCP-Messinstruments -- dort, wo sich beide Laserstrahlen treffen. Speichern Sie die XYZ-Werte als Referenz. Die Mittelpunktposition muss nicht exakt sein; sie dient als Referenzbasis, die während der Neukalibrierung verfeinert wird.

Kreisförmige Bahn durch die X- und Y-Achsen-Laser

Der TCP folgt einer kreisförmigen Bahn durch beide Laser-Lichtschranken. Der X-Achsen-Laser und der Y-Achsen-Laser stehen senkrecht zueinander.

Schritt 2: Kreisförmige Bewegung ausführen

Bewegen Sie den TCP des Roboters auf einer kreisförmigen Bahn durch den Sensor. Der Radius sollte ungefähr der halben Aperturgröße des Sensors entsprechen. Bei einem OGLW2-40-Sensor (40 mm Apertur) beispielsweise wird eine kreisförmige Bahn mit 20 mm Durchmesser verwendet.

CAPTRON TCP-Messinstrument mit eingeblendeter Referenzbahn

Ein CAPTRON TCP-Messinstrument mit X-Beam- und Y-Beam-Laser-Lichtschranken. Die Referenzbahn (weiße Ellipse) durchquert beide Strahlen und erzeugt die Referenzpunkte x_ref1, x_ref2, y_ref1 und y_ref2.

Schritt 3: 8 Referenzpunkte speichern

Während das Werkzeug die kreisförmige Bahn abfährt, wird die Roboterposition jedes Mal aufgezeichnet, wenn das Werkzeug in einen Laserstrahl ein- oder austritt. Dies ergibt insgesamt 8 Referenzpunkte -- 4 für den X-Achsen-Laser und 4 für den Y-Achsen-Laser:

8 Referenzpunkte v1 bis v6 entlang der kreisförmigen Bahn

Referenzpunkte werden bei jedem Laserstrahlübergang aufgezeichnet. Jeder Laser wird pro Umlauf zweimal gekreuzt (Eintritt und Austritt), was 4 Positionen pro Achse ergibt.

Schritt 4: Geraden aus Referenzpunkten erstellen

An jedem Ende jeder Achse werden die beiden Punkte, an denen das Werkzeug in den Laser ein- und ausgetreten ist, gemittelt. Dies ergibt zwei (x, y)-Positionen, die den Mittelpunkt des Werkzeugs an diesem Übergang darstellen:

Geraden-Erstellung aus gemittelten Referenzpunkten

Für jedes Ein-/Austritt-Punktepaar wird der Mittelpunkt berechnet. Beispiel: pointOneX = (v1(x) + v2(x)) / 2, pointOneY = (v1(y) + v2(y)) / 2.

Die Mittelung wird für alle vier Übergangsbereiche durchgeführt:

x_axis_x1_position = (x_axis_x1 + x_axis_x2) / 2
x_axis_x2_position = (x_axis_x3 + x_axis_x4) / 2
x_axis_y1_position = (x_axis_y1 + x_axis_y2) / 2
x_axis_y2_position = (x_axis_y3 + x_axis_y4) / 2

Schritt 5: Gerade für jede Achse berechnen

Mithilfe der zwei gemittelten Punkte pro Achse werden Steigung und Achsenabschnitt für jede Lasergerade mit der Standardgeradengleichung Y = MX + B berechnet:

x_axis_slope = (x_axis_y2_position - x_axis_y1_position) /
(x_axis_x2_position - x_axis_x1_position)
x_axis_b = x_axis_y1_position - x_axis_slope * x_axis_x1_position

Dasselbe wird für die Y-Achsen-Lasergerade wiederholt:

y_axis_slope = (y_axis_y2_position - y_axis_y1_position) /
(y_axis_x2_position - y_axis_x1_position)
y_axis_b = y_axis_y1_position - y_axis_slope * y_axis_x1_position

Schritt 6: Schnittpunkt berechnen

Die beiden Geradengleichungen werden gleichgesetzt und nach x und y aufgelöst. Der Schnittpunkt ist der Punkt, an dem sich die beiden Lasergeraden treffen -- dies ist der vom Werkzeug gemessene tatsächliche Mittelpunkt des Sensors:

shifted_x = (y_axis_b - x_axis_b) / (x_axis_slope - y_axis_slope)
shifted_y = (x_axis_slope * shifted_x) + x_axis_b

Die Offsets werden durch Vergleich mit der ursprünglichen Mittelpunktposition berechnet:

offset_x = curr_x - shifted_x
offset_y = curr_y - shifted_y

Diese Offsets werden auf das Werkzeug angewendet und der Mittelpunkt-Wegpunkt aktualisiert:

new_x = curr_x + offset_x
new_y = curr_y + offset_y
warnung

Wenn die X- oder Y-Achsen-Lasergerade exakt parallel zum Basiskoordinatensystem des Roboters verläuft, führt die Steigungsberechnung zu einer Division durch null. Dies ist in der Praxis äußerst unwahrscheinlich, sollte jedoch durch eine Fehlerbehandlung im Roboterprogramm abgesichert werden.

Z-Neukalibrierungsverfahren

Nach der XY-Neukalibrierung kann der Z-Offset ermittelt werden:

  1. Bewegen Sie das Werkzeug zur korrigierten Mittelpunktposition (mit den neuen X- und Y-Werten).
  2. Fahren Sie das Werkzeug in den Sensor, sodass es beide Laserstrahlen unterbricht.
  3. Bewegen Sie das Werkzeug langsam in Z+-Richtung (nach oben), bis beide Lasersignale erlöschen (Werkzeug verlässt die Strahlen).
  4. Fahren Sie das Werkzeug leicht zurück nach unten (z. B. -1 mm), sodass es die Laser gerade wieder unterbricht.
  5. Speichern Sie diese Position und berechnen Sie den Z-Offset gegenüber der ursprünglichen Mittelpunktposition.
; Move upward until both lasers are cleared
i = 0
while sig(x_laser) and sig(y_laser)
POINT temp = SHIFT(lowered_center BY 0, 0, i)
LMOVE temp
TWAIT 0.01
i = i + 1
END

; Move back down slightly to touch the lasers
POINT temp = SHIFT(temp BY 0, 0, -1)
LMOVE temp

; Record position and calculate offset
HERE temp_center
DECOMPOSE z_array[0] = temp_center
new_z = z_array[2]
offset_z = curr_z - new_z

Beispielcode (Kawasaki)

Die Kawasaki-Implementierung verwendet drei Programmdateien:

1. Programm für die kreisförmige Bewegung

Dieses Programm definiert die vier Hauptpunkte der kreisförmigen Bahn und führt die Bewegung aus, während Hintergrundprogramme die Positionen aufzeichnen:

negative_rad = -1 * radius
POINT plus_x = SHIFT(center BY radius, 0, 0)
POINT minus_y = SHIFT(center BY 0, negative_rad, 0)
POINT minus_x = SHIFT(center BY negative_rad, 0, 0)
POINT plus_y = SHIFT(center BY 0, radius, 0)

JMOVE plus_x
PCEXECUTE readx.pc, -1 ;read positions
PCEXECUTE ready.pc, -1
C1MOVE minus_y
C2MOVE minus_x
C1MOVE plus_y
C2MOVE plus_x
ACCURACY 1 FINE
PCABORT 2: ;stop reading positions
LMOVE center
BREAK
TWAIT 0.1

2. Hintergrundprogramme (Positionserfassung)

Zwei Hintergrundprogramme laufen parallel -- eines überwacht jeweils eine Laserachse. Sie verwenden eine Zustandsmaschinen-Schleife, um jeden Signalflankenübergang zu erkennen und die Roboterposition mithilfe der HERE-Funktion zu speichern:

Y-Achsen-Leser (ready.pc):

loop1:
PRINT "Y"
curr_state = sig(y_laser)
if curr_state Then
twait 0.01
HERE y_pose1
interrupts = interrupts + 1
GOTO loop2
ELSE
GOTO loop1
END

loop2:
curr_state = sig(y_laser)
if NOT curr_state THEN
twait 0.01
HERE y_pose2
interrupts = interrupts + 1
GOTO loop3
ELSE
GOTO loop2
END

; ... loop3 and loop4 follow the same pattern for y_pose3, y_pose4

X-Achsen-Leser (readx.pc): Identischer Aufbau, überwacht jedoch sig(x_laser) und speichert x_pose1 bis x_pose4.

Die HERE-Funktion speichert die Werkzeugposition im Raum zum Zeitpunkt des Lasersignalübergangs. Die Variable interrupts dient der Fehlerprüfung -- sie wird jedes Mal inkrementiert, wenn der Sensorausgang schaltet. Falls der Roboter nicht alle Laser durchquert, können die Berechnungen nicht durchgeführt werden. Prüfen Sie, ob interrupts ungleich 4 ist, um einen unvollständigen Durchgang zu erkennen.

3. XYZ-Neukalibrierungsprogramm

Dieses Programm zerlegt die aufgezeichneten Positionen, berechnet die gemittelten Referenzpunkte, ermittelt die Geradengleichungen, findet den Schnittpunkt und berechnet die Offsets:

; Decompose recorded positions into coordinate arrays
DECOMPOSE x_laser_enter1[0] = x_pose1
DECOMPOSE x_laser_exit1[0] = x_pose2
DECOMPOSE x_laser_enter2[0] = x_pose3
DECOMPOSE x_laser_exit2[0] = x_pose4

; Extract X and Y values for each reference point
x_axis_x1 = x_laser_enter1[0] ;x position when entering x
x_axis_x2 = x_laser_exit1[0] ;x position when exiting
x_axis_x3 = x_laser_enter2[0] ;x position when entering x second time
x_axis_x4 = x_laser_exit2[0] ;x position when exiting x second time
x_axis_y1 = x_laser_enter1[1] ;y position when entering x
x_axis_y2 = x_laser_exit1[1] ;y when exiting
x_axis_y3 = x_laser_enter2[1] ;y when entering second
x_axis_y4 = x_laser_exit2[1] ;y when exiting second

; Average reference points for X-axis line
x_axis_x1_position = (x_axis_x1 + x_axis_x2) / 2
x_axis_x2_position = (x_axis_x3 + x_axis_x4) / 2
x_axis_y1_position = (x_axis_y1 + x_axis_y2) / 2
x_axis_y2_position = (x_axis_y3 + x_axis_y4) / 2

; Calculate slope and intercept for X-axis laser line
x_axis_slope = (x_axis_y2_position - x_axis_y1_position) /
(x_axis_x2_position - x_axis_x1_position)
x_axis_b = x_axis_y1_position - x_axis_slope * x_axis_x1_position

; Repeat for Y-axis laser (same structure with y_laser_enter/exit)
; ...

; Find intersection point of both lines (center of laser barrier)
shifted_x = (y_axis_b - x_axis_b) / (x_axis_slope - y_axis_slope)
shifted_y = (x_axis_slope * shifted_x) + x_axis_b

; Calculate offsets for TCP recalibration
offset_x = curr_x - shifted_x
offset_y = curr_y - shifted_y

; New coordinates in coordinate space
new_x = curr_x + x_offset
new_y = curr_y + y_offset

Wichtige Hinweise

  1. Nicht an realer Hardware getestet -- Der Beispielcode wurde ausschließlich in der Kawasaki-Simulationssoftware getestet. Vor dem Produktionseinsatz sind Tests unter realen Bedingungen erforderlich.

  2. Genauigkeit der Mittelpunktposition -- Wenn die anfängliche Mittelpunktposition nicht genau ist, sind die berechneten Offsets weniger präzise. Eine Fehlerprüfung zu Beginn stellt sicher, dass beide Laserausgänge aktiv sind, wenn sich das Werkzeug an der Mittelpunktposition befindet. Für möglichst genaue Ergebnisse (insbesondere für Z) sollte die Werkzeugspitze die Laserstrahlen gerade berühren.

  3. Division durch null -- Wenn eine Laserachsengerade zufällig exakt parallel zur Roboterbasis verläuft, ergibt die Steigungsberechnung eine Division durch null. Obwohl dies in der Praxis äußerst unwahrscheinlich ist, sollte dieser Grenzfall im Roboterprogramm behandelt werden.

  4. Epson SCARA-Implementierung -- Der Algorithmus ist universell, aber Robotersprache, Bewegungsbefehle und Signalverarbeitung unterscheiden sich bei einem Epson-Roboter. Folgende Funktionen müssen entsprechend abgebildet werden:

    • HERE (aktuelle Position speichern) → Epson-äquivalente Positionserfassung
    • sig() (Digitalsignal lesen) → Epson-Digitaleingangs-Funktionen
    • SHIFT (Punkt versetzen) → Epson-Punktversatz-Funktionen
    • DECOMPOSE (XYZ aus Punkt extrahieren) → Epson-Koordinatenextraktion
    • C1MOVE / C2MOVE (Kreisbewegung) → Epson-Kreisinterpolationsbefehle

Allgemeine Informationen zu den Grundlagen der TCP-Kalibrierung finden Sie unter Roboterkalibrierung mit TCP-Messinstrumenten.

Wenn Sie Fragen zu unseren Produkten und deren Integration in Ihre Prozesse haben, kontaktieren Sie uns unter pdm@captron.com.