Kamerafunktionen

Die Optimierung der Absolutgenauigkeit ist in diesem Artikel beschrieben

Absolutkalibrierung in definiertem Bereich

Wenn nach einer Kalibrierung mit einer Kamera ein Punkt angefahren werden soll, liegt die Abweichung des Roboters von der zu erreichenden Position bei bis zu 1,5mm. Dies ist bei manchen Anwendungen zu viel. Diese Ungenauigkeiten existieren aus mechanischen Gr�nden, k�nnen durch die Software aber abgemildert werden.

2D Fl�chenkalibrierung

Beschreibung

Es muss eine quadratische Anzahl an Punkten eingelernt werden. Dabei k�nnen zwischen 2x2 und 10x10 Punkte eingelernt werden. Je mehr Punkte eingelernt werden, desto besser ist die Abmilderung. Die Punkte m�ssen jeweils S-F�rmig eingelernt werden und die sich bildendenden (inneren) Vierecke m�ssen m�glichst rechtwinklig sein.
Die Punkte werden �ber die Funktion

teachCameraAlignment(index, horstX, horstY, horstZ, cameraX, cameraY, cameraZ)              

eingelernt. Hier die Erkl�rung der Parameter:

Die Methode existiert ebenfalls mit nur vier Parametern. In diesem Fall wird automatisch Horsts aktuelle Position genutzt.

Sind alle Messpunkte eingelesen, kann �ber

getCorrectedDestination(destination.x, destination.y, destination.z)                       

die Position abgerufen werden, die HORST anfahren soll. Destination beschreibt hier den Anfahrtspunkt laut Kamera.

Beispiel

teachCameraAlignment(1, 0, 0, 0, 0.1, 0, 0);
teachCameraAlignment(2, 1, 0, 0, 1.1, 0, 0);
teachCameraAlignment(3, 1, 1, 0, 1.1, 1.3, 0);
teachCameraAlignment(4, 0, 1, 0, 0.1, 1.3, 0);

var correctedDestination = getCorrectedDestination(0.6, 0.65, 0);

showInfo(correctedDestination.getX() + ", " + correctedDestination.getY() + ", " + correctedDestination.getZ());

3D Quaderkalibrierung

Beschreibung mit Beispielen

Durch diese Funktionalit�t kann der Fehler in einem 3D-Raum minimiert werden. Zuerst wird der Quader definiert, dann kann die korrigierte Position innerhalb dieses Quaders ermittelt werden.
Der Quader kann auf zweierlei Art und Weise definiert werden. Entweder �ber Teachen der einzelnen Eckpunkte (teachCalibratedQuader()) oder mit �bergabe einer Config-Map, die alle ben�tigten Informationen enth�lt (initializeCalibratedQuader()).

teachCalibratedQuader():
Mit dieser Funktion wird der Quader initialisiert, indem die Eckpunkte einzeln geteached werden.
Dazu wird in einer Config-Map die erste Ecke der unteren Ebene des Quaders �bergeben - entweder als joint-Konfiguration oder als Pose (xyz + Eulerwinkel). Weitere Parameter sind x, y und z - Koordinate eines 3D-Vektors, der dann den Quader vollst�ndig definiert: die anderen Ecken werden mittels der im Vektor definierten Werte angefahren (relativ von der Startposition/von der ersten Ecke aus gesehen). An jedem Eckpunkt wird der User aufgefordert die Sensordaten an diesem Punkt einzugeben.
In diesem Fall wird eine Map �bergeben, die bereits alle Eckpunkte und die dazugeh�rigen Messwerte beinhaltet. Die Reihenfolge der Eckpunkte und der Messwerte muss dieselbe sein, die Punkte m�ssen Ebene f�r Ebene und im oder gegen den Uhrzeigersinn angegeben werden::

// teachCalibratedQuader({"joints": [10.0, 10.0, 10.0, 10.0, 10.0, 10.0]}, 0.1, 0.1, 0.1);
var index = teachCalibratedQuader({"xyz+euler": [ 0.46, 0, 0.200, 148.186, 54.163, 154.569]},0.05, 0.1, 0.2)

var test=getXYZinQuader(index,0.5,0.05,0.3);
sleep(10000);
showInfo("x="+test.getX()+" y="+test.getY()+" z="+test.getZ());


initializeCalibratedQuader():

In diesem Fall wird eine Map �bergeben, die bereits alle Eckpunkte und die dazugeh�rigen Messwerte beinhaltet. Die Reihenfolge der Eckpunkte und der Messwerte muss dieselbe sein, die Punkte m�ssen Ebene f�r Ebene und im oder gegen den Uhrzeigersinn angegeben werden:

var index=initializeCalibratedQuader({
"E1K": [ 0, 0, 0],
"E2K": [ 0, 1, 0],
"E3K": [ 1, 1, 0],
"E4K": [ 1, 0, 0],
"E5K": [ 0, 0, 1],
"E6K": [ 0, 1, 1],
"E7K": [ 1, 1, 1],
"E8K": [ 1, 0, 1],
"E1R": [ 0, 0.01, 0.01],
"E2R": [ 0, 1.01, 0.01],
"E3R": [ 0.99, 1, 0],
"E4R": [ 0.99, 0, 0],
"E5R": [ 0, 0.01, 1.01],
"E6R": [ 0, 1.01, 1.01],
"E7R": [ 0.99, 1, 1],
"E8R": [ 0.99, 0, 1]
});
showInfo(index);
var test=getXYZinQuader(index,0.5,0.5,0.5);
sleep(10000);
showInfo("x="+test.getX()+" y="+test.getY()+" z="+test.getZ());

In beiden F�llen kann �ber die Funktion getXYZinQuader() die korrigierte Position eines Punktes gefunden werden.

Vorsicht:
In fr�heren Versionen konnte die Position auch �ber variable.x, variable.y, variable.z abgefragt werden. Diese M�glichkeit besteht nicht mehr, �ltere Programme m�ssen gegebenenfalls angepasst werden.


Normalenvektor der z-Achse des TCP berechnen

Die Methode getSurfaceNormal() liefert eine Map zur�ck, die drei Eintr�ge enth�lt: x, y und z. Diese geben den Normalenvektor der z-Achse des TCP an. 

var normal = getSurfaceNormal();
var x = normal.getX();
var y = normal.getY();
var z = normal.getZ();
showHint(x + ", " + y + ", " + z);

Es k�nnen ebenso die Normalenvektoren zu beliebig festgelegten Orientierungen bestimmt werden:

var normal = getSurfaceNormalByEuler(90, 0, 90);
var normal2 = getSurfaceNormalByQuaternion(0, 0, 1, 0);
var x = normal.getX();
var y = normal.getY();
var z = normal.getZ();
showHint(x + ", " + y + ", " + z);

Vorsicht:
In fr�heren Versionen konnte die Position auch �ber variable.x, variable.y, variable.z abgefragt werden. Diese M�glichkeit besteht nicht mehr, �ltere Programme m�ssen gegebenenfalls angepasst werden.