- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 3 von 3

Thema: Kleines Programm...Denkfehler finden (geometrie)

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    23.04.2007
    Ort
    stuttgart
    Beiträge
    1.127

    Kleines Programm...Denkfehler finden (geometrie)

    Anzeige

    Praxistest und DIY Projekte
    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.
    Code:
    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..
    meine projekte: robotik.dyyyh

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    13.07.2004
    Ort
    bei Stuttgart
    Alter
    42
    Beiträge
    760
    hi,
    hab mich da jetzt jicht so genau eingearbeitet. aber ich hab mal paar ideen, woran es liegen könnte. vielleicht beim verfahrbefehl relative oder absoulte positinsangabe verwechselt. fehler bei der transormation von einem koordinatensystem ins andere.
    mfg jeffrey
    edit: falsches zeug gelöscht

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    23.04.2007
    Ort
    stuttgart
    Beiträge
    1.127
    c der 2. Geraden stimmt, hab ich nochmal nachgerechnet.
    Verfahren wird immer nur absolut, desswegen wird auch die pos_x_alt /pos_y_alt addiert. -> Koordinatensystem sollte egal sein.
    meine projekte: robotik.dyyyh

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test