goara
17.09.2008, 15:38
Hallo
Das Problem ist folgendes:
Ich will einen 3-Achs Luftlagertisch so ausrichten, dass der Mittelpunkt der Kamera (Interferrometer) genau in der Mitte ist.
Dazu wird im anfang vom code über Fourier / Hough Transformationen der Winkel berchenet von auf dem der Mittelpunkt des Interferrogramms liegt.
Da ich dann aber nur die Gerade kenne auf der der Mittelpunkt leigt aber nicht weis in welche Richtung und wie weit ich den tisch verschieben muss verschiebe ich ihn um 0.01 mm (das ist relativ viel) rechtwinklig zur ermittelten geraden, bestimme dann nochmals den Winkel und daraus die neue geradengleichung.
Dann berechne ich den Schnittpunkt der Geraden und verfahre den Tisch dort hin(wo eigentlichg die Mitte sein sollte). ist sie aber nicht.
Das ganze sieht so aus.
if (m == 1)
{
// kleine verschiebung rechtwinklig zur geraden
versch_x = sin(winkel_rad)*s_1;
versch_y = -cos(winkel_rad)*s_1;
//aktuelle Tischpostition lesen
Aerotech_position(result);
pos_x = result[0] + versch_x;
pos_y = result[1] + versch_y;
pos_z = result[2];
pos_x_alt = result[0];
pos_y_alt = result[1];
// Tisch verschieben
Aerotech_move(pos_x ,pos_y ,pos_z);
// Geradengleichung der ersten Geraden berechnen
m1 = tan(winkel_rad);
c1 = 0;
// 2. Durchlauf Tisch ist jetz verschoben, 2. Gerade berechnen
}else{
m2 = tan(winkel_rad);
c2 = pos_y-pos_y_alt - m2*(pos_x-pos_x_alt);
// Schnittpunkt der GEraden berechnen
pos_x_neu = ((c2-c1)/(m1-m2))+pos_x_alt;
pos_y_neu = ((m1*c2-m2*c1)/(m1-m2))+pos_y_alt;
pos_z_neu = pos_z;
Aerotech_move(pos_x_neu, pos_y_neu, pos_z_neu);
statusline(ftoa(m1)+' '+ftoa(m2)+' '+ftoa(c1)+' '+ftoa(c2)+' '+' '+ftoa(winkel_mat));
}
jetzt meine Frage.
Wo ist der Fehler?
(Das Koordnatensystem bekommt einen neuen nullpunkt für die Rechnung der auf dem Startpunkt der schleife liegt, weil bei dem Tischkoordinatensystem die rundungsfehler zu gross sind.
Bin für alle Tipps dankbar..
Das Problem ist folgendes:
Ich will einen 3-Achs Luftlagertisch so ausrichten, dass der Mittelpunkt der Kamera (Interferrometer) genau in der Mitte ist.
Dazu wird im anfang vom code über Fourier / Hough Transformationen der Winkel berchenet von auf dem der Mittelpunkt des Interferrogramms liegt.
Da ich dann aber nur die Gerade kenne auf der der Mittelpunkt leigt aber nicht weis in welche Richtung und wie weit ich den tisch verschieben muss verschiebe ich ihn um 0.01 mm (das ist relativ viel) rechtwinklig zur ermittelten geraden, bestimme dann nochmals den Winkel und daraus die neue geradengleichung.
Dann berechne ich den Schnittpunkt der Geraden und verfahre den Tisch dort hin(wo eigentlichg die Mitte sein sollte). ist sie aber nicht.
Das ganze sieht so aus.
if (m == 1)
{
// kleine verschiebung rechtwinklig zur geraden
versch_x = sin(winkel_rad)*s_1;
versch_y = -cos(winkel_rad)*s_1;
//aktuelle Tischpostition lesen
Aerotech_position(result);
pos_x = result[0] + versch_x;
pos_y = result[1] + versch_y;
pos_z = result[2];
pos_x_alt = result[0];
pos_y_alt = result[1];
// Tisch verschieben
Aerotech_move(pos_x ,pos_y ,pos_z);
// Geradengleichung der ersten Geraden berechnen
m1 = tan(winkel_rad);
c1 = 0;
// 2. Durchlauf Tisch ist jetz verschoben, 2. Gerade berechnen
}else{
m2 = tan(winkel_rad);
c2 = pos_y-pos_y_alt - m2*(pos_x-pos_x_alt);
// Schnittpunkt der GEraden berechnen
pos_x_neu = ((c2-c1)/(m1-m2))+pos_x_alt;
pos_y_neu = ((m1*c2-m2*c1)/(m1-m2))+pos_y_alt;
pos_z_neu = pos_z;
Aerotech_move(pos_x_neu, pos_y_neu, pos_z_neu);
statusline(ftoa(m1)+' '+ftoa(m2)+' '+ftoa(c1)+' '+ftoa(c2)+' '+' '+ftoa(winkel_mat));
}
jetzt meine Frage.
Wo ist der Fehler?
(Das Koordnatensystem bekommt einen neuen nullpunkt für die Rechnung der auf dem Startpunkt der schleife liegt, weil bei dem Tischkoordinatensystem die rundungsfehler zu gross sind.
Bin für alle Tipps dankbar..