Automatische TCP Vermessung - so gehts!

  • Habs endlich mal umsetzen können - eine automatische Vermessung von Lichttastern am Greifer


    Wir haben 3 Lichtaster (Leutze) die in einem Schaltabstand von 100 mm sehr gute Ergebnisse liefern.


    Equipment:


    1. Eine Kalibrierplatform
    2. Eine Messspitze zum Einmessen der Base für die Kalibrierplatte


    So geht's:


    Die Maße der Kalibrierplatform ist bei uns 100 x 100 mm gewesen
    Baseursprung an der Rechten Roboternahen Ecke, X vom Robi weg und Y nach links


    Der Sensor wird mittig zur Platte gefahren und die Position abgeteacht (XP_Sensor1)


    Dann werden 4 Punkte Nord Sued Ost und West aus dem geteachten Punkt generiert,
    diese liegen ca 100 mm vom Plattenmittelpunkt entfernt.


    Ein zwei Interrupts schreiben die Fallende und Steigende Flanke bei den Bewegungen mit.


    Bewegungen:


    N - S getriggert wird bei Bewegungsstart ein Integerwert nActSearchDir (1)
    S - N (2)
    E - W (3)
    W - E (4)


    ACHTUNG: Die Declarationszeilen


    DECL INTERRUPT 1 WHEN $MEASPULSE[1]==TRUE DO iMeasPoint(1) ... funzt
    DECL INTERRUPT 1 WHEN $MEASPULSE[1]==FALSE DO iMeasPoint(2) ... funzt nicht


    Warum? Vielleicht wegen ==FALSE
    .... mit vorheriger Zuweisung
    $Cycflag[1]= NOT $MEASPULS.... gings dann doch.


    Dem Interruptprogramm werden die Parameter 1 oder 2 übergeben (Fallende/Steigende Flanke)


    8 Positionen können gespeichert werden. (mPosMeasPoint[nActCalibPoint,nActSearchDir]


    DIE RECHNUNG:


    Aus gegenüberliegenden gleichflankigen mPosMeasPoints wird der Coronaradius (Bewegung
    von der Platte) und der Coreradius (Bewegung zur Platte) berechnet und in Globalen Variablen gespeichert, damit man je nach späterer Suchrichtung einem Offset ergänzen kann



    mPosMeasPoint[Sued] wird der Coronaradius bzw Coreradius in X addiert
    mPosMeasPoint[Ost] wird der Coronaradius bzw Coreradius in X addiert
    Ich hab alles in fCenterSpot geschrieben.


    Dann kommt die schon im Forum erwähnte Funktion INV_POS () zum Einsatz:


    TOOL_DATA[x] = INV_POS (fCenterSpot)


    Rückgabewert ist in diesem Fall ein FRAME.


    FERTIG


    PS: geht auch mit weniger Bewegung und Punkten, aber wegen der Fehlerkorrektur...
    weniger als 1 mm Toleranz - cool

    Einmal editiert, zuletzt von Robotnik ()

  • ANZEIGE

Erstelle ein Benutzerkonto oder melde dich an um zu kommentieren

Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können

Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Geht einfach!
Neues Benutzerkonto erstellen
Anmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden