Profil messen mit Sensor / Sync von Messwerten und Rob-Position

  • Hallo zusammen,


    wir möchten in einem Projekt mit einem Laser-Distanzsensor, der an einem Kuka montiert ist (KRC 4 - Steuerung) die Oberfläche eines Bauteils vermessen. Dazu fahren wir mit dem Sensor über das Bauteil, und erhalten dann so das Profil der Oberfläche. Allerdings möchte ich jetzt die absoluten Koordinaten (bezogen auf Base) des Bauteils, wir müssen also die Position des Roboters mit den Messwerten synchronisieren.
    Bisher machen wir es so, dass wir eine Position anfahren, messen, dann weiterfahren. Ich würde jedoch gerne in der Bewegung messen. Gibt es eine Möglichkeit, quasi zu einem Zeitpunkt gleichzeitig die aktuelle Roboterposition und den aktuellen Messwert des Sensors auszulesen? Wenn ich das nacheinander mache, habe ich ja schon einen Versatz in den Messwerten. Wie der Sensor angeschlossen wird, ist im Moment noch offen, wir sind noch in der Versuchsphase. Früher hatten wir mal einen per RS232 angeschlossen, aber das kann die KRC4 ja nicht mehr, daher wollten wir jetzt vermulich über einen Analog-Eingang gehen - oder gibts bessere Möglichkeiten?


    Hat irgendwer sowas schonmal gemacht, und kann mir sagen wie - und ob - sowas prinzipiell möglich ist, oder mir sogar konkrete Hinweise geben?


    Viele Grüße
    Matthias

  • Schritt für Schritt zum Roboterprofi!
  • Ohne die Details zu kennen: Mit RSI ist es möglich, im Interpolationstakt, also alle 12ms, die Roboterposition per Netzwerk geschickt zu bekommen.
    Damit könntet ihr denn Messzeitpunkt grob mit dem Roboter synchronisieren. Dafür braucht es natürlich ein Echtzeitsystem, welches synchron zum Interpolationstakt läuft und eben in diesem Takt misst.
    Ist sicher keine einfache Aufgabe, aber durchaus möglich (ich arbeite mit solchen Dingen).

  • Wäre es nicht einfacher den Sensor über den Roboter auszuwerten und dann Position und Messergebnis im selben Takt raus zu geben?
    Also über den Analogeingang des Roboters zu gehen.

  • Ohne RSI? Dazu braeuchtest du ja bahnbezogene Trigger, damit der Roboter in der Bewegung an einer bestimmten Stelle etwas tut. Zumindest ich habe davon noch nie gehoert.
    Mit RSI? Hm. Du koenntest mit RSI den Sensor im Takt einlesen und die Messwerte mit der Position rausschicken. Die Frage ist, wie gross die Latenz zwischen tatsaechlicher Messung und Messwert ist. Wenn der Sensor selbst ein Steuergeraet hat, welches die Werte zu analog wandelt, die ueber Klemmen in den Profibus geschickt werden und dann irgendwann in der Steuerung ankommen...
    Wie schnell soll beim Messen gefahren werden und in welchem Takt soll gemessen werden? Was soll mit den Messwerten passieren, wenn sie aus dem Roboter rauskommen?

  • Nur mal zwei Ideen (ohne Garantie auf Funktionsfähigkeit):


    - Mit dem Roboter mit Anlauf eine Gerade abfahren, für den Anfang der Messung einen Trigger ausgeben, ab da in festen Zeitabständen messen, dann kennt man die Koordinaten (zumindest theoretisch), da die Geschwindigkeit da ja konstant sein sollte. Die Messwerte sollten da allerdings extern erfasst werden. (Wird zur Zeit häufig mit 3D-Vision Systemen gemacht)


    - Die Bahn rechnerisch in viele kleine Schritte aufteilen, jeden berechneten Punkt überschliffen und mit einem Trigger darauf anfahren, im Trigger dann den Messwert und die Position einlesen.

  • Perfekt Triggern kann man wenn man zwei Interrupts deklariert die je die Steigende oder Fallende Flanke einer Variablen abfragen.
    DECL WHEN VAR==TRUE... Do MessUP()
    DECL WHEN VAR==FALSE... Do MessUP()


    Und im MessUP die Var toggeln...
    DEF MessUP()

    VAR = NOT VAR


    END


    Wenn der Laser als Tool vernünftig vermessen ist (Strahlaustrittspunkt und Strahlrichtung) kannst Du den Messwert mit dem Doppelpunktoperator einfach dazuaddieren.


    Gruß
    Robotnik

  • Hallo mrbogus,


    ...ja das geht, dass kann man zB mit RSI machen.


    Was du tun willst, ist eine Korrelation von Sensordaten mit (Roboter-)Positionsdaten. Dasselbe machen wir beim Ultraschallscannen von Bauteilen. Der Roboter bewegt einen Sensor über das Bauteil und der Roboter erzeugt Bahnsynchrone Hardware-Trigger, zB. 1 mal pro Millimeter. Jetzt koppelst du den Trigger in deinen Analog-Messaufnehmer (Sample-and-Hold) und erhältst sauber 1000 Signale pro Meter.


    Parallel dazu kann man per RSI oder FSD die Ist-Position des Roboters per UDP/IP an einen zweiten Rechner übertragen und dann die Datenpunkte des Roboters zusammen mit deinen Messwerten in einer 3D-Darstellung anzeigen, dass geht dann auch für gewölbte Oberflächen bzw. kann sogar Orientierungswechsel des Sensors (zB bei Phased-Array) berücksichtigen.


    Du musst dabei aber berücksichtigen, dass die wahre Position des Roboters nicht ganz genau mit der Software-Position übereinstimmt, es gibt hier systembedingt eine Art Schleppfehler, je nach Geschwindigkeit.


    Einen passenden RSI Code kann ich dir liefern, den kann man auch so bauen, dass die Trigger in Millimeter anstelle 12 ms geliefert werden.

  • Uh, da klinke ich mich mal rein :mrgreen:


    Ich erprobe gerade verschiedene Methoden Positionen wärend der Fahrt zu speichern und zeitgleich pro Position ein Encodersignal an einen Sensor zu schicken.


    Im Moment bin ich soweit, dass mir meine KR C4 alle 5,56ms eine Position incl. Encodersignal liefert. Theoretisch würde mir die Steuerung jetzt bei einer Geschwindigkeit von 0,179m/s einen Wert pro mm ausgeben.
    Praktisch allerdings gibt sie mir Positionen, die in regelmäßigen Abständen entweder 0,6mm oder 1,3mm voneinander entfernt sind, aber NIE 1,0mm. Dieses Problem bin ich mit KUKA zusammen gerade am bearbeiten, mal schauen was dabei rauskommt.


    Realisiert habe ich das übrigends, indem ich in den LOOP des Submitinterpreters eine Abfrage geschrieben habe, die lautet:
    WENN die Position an der du gerade stehst eine Andere ist als beim vorherigen Schleifendurchlauf, DANN speichere mir diese Position in einem Array.


    Man könnte sich auch bei jedem Schleifendurchlauf eine Position ausgeben, da der Takt des SubInterpreters allerdings bei ~3ms liegt und der Roboter die Positionen aber nur alle 5,56ms an den Interpreter übergibt würde man die gleiche Position mehrfach erhalten.


    Schöne Grüße

  • Hallo zusammen,
    danke für die vielen Anregungen. Ich werde es wohl so machen, dass ich mir in der SPS Sub in jedem Durchlauf Position und Sensorwert (der Sensor hängt jetzt am Analogen Eingang der Steuerung) in ein Array schreibe und das hinterher auswerte. Es kommt mir nicht drauf an, dass ich genau z.B. alle 1mm einen Messwert bekomme, ich denke das ginge wirklich nur mit bahnbezogenen Triggern. Wäre natürlich schön, aber ist kein muss, daher reicht es mir erstmal, in kleinen aber unregelmäßigen Abständen Werte zu bekommen.


    Also Vorlage für mein Vorhaben habe ich mir jetzt mal diese beiden Threads genommen: http://www.roboterforum.de/rob…schwindigkeit-aufzeichnen und http://www.roboterforum.de/rob…ter/merken-von-positionen


    Morgen komme ich hoffentlich dazu das mal auszuprobieren, Rückmeldung kommt ;)

  • ..
    Im Moment bin ich soweit, dass mir meine KR C4 alle 5,56ms eine Position incl. Encodersignal liefert. Theoretisch würde mir die Steuerung jetzt bei einer Geschwindigkeit von 0,179m/s einen Wert pro mm ausgeben.
    Praktisch allerdings gibt sie mir Positionen, die in regelmäßigen Abständen entweder 0,6mm oder 1,3mm voneinander entfernt sind, aber NIE 1,0mm. Dieses Problem bin ich mit KUKA zusammen gerade am bearbeiten, mal schauen was dabei rauskommt.


    Realisiert habe ich das übrigends, indem ich in den LOOP des Submitinterpreters eine Abfrage geschrieben habe, die lautet:
    WENN die Position an der du gerade stehst eine Andere ist als beim vorherigen Schleifendurchlauf, DANN speichere mir diese Position in einem Array.


    .. da der Takt des SubInterpreters allerdings bei ~3ms liegt ...


    Wenn man nur alle Vielfache von 3ms auf die Daten schaut, dann kann man auch nur Daten in diesem Abstand bzw. Vielfachen davon erwarten. Bei einer Geschw. von 179mm/s ergibt das ca. 0.6 mm. Der Submit wird wohl eher alle 3.5ms drankommen. Dann passt's genau auf 0.65 und 1.3 mm.

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