Eingelesene Koordinaten aud BASE beziehen

  • Hallo,


    ich lese über die Serielle Schnittstelle Koordinaten ein, diese werden einem FRAME zugeordnet, welchen dann der Roboter anfahren soll. Soweit so gut, solange das ganze mit Koordinaten geschieht, welche auf das Weltkoordinatensystem bezogen sind.


    Mein Problem liegt nun darin, das sich die Koordinaten auf eine von mir angelegte Base beziehen. Leider funktioniert das ganze nicht so wie ich mir es vorgestellt hab (Programm im Anhang).


    Habt ihr Tips oder Lösungsansätze? :hilfe:


    Danke
    lonly

  • Schritt für Schritt zum Roboterprofi!
  • 1. Ist das ohne Datenliste und ohne zu Wissen, wie die Base zu World vermessen ist nicht wirklich möglich eine Aussage zu treffen.


    2. Müßte deine Problembeschreibung etwas detaillierter werden. (Du sagst ja auch nicht: Mein Computer funktioniert nicht - wer kann helfen :zwink:)


    3. Falls dein Problem Zwischenpos ist:


    Du berechnest Zwischenpos.
    Dann fährts du erst Position P25 an und anschliessend Zwischenpos:


    Code
    ZWISCHENPOS.X=XPOS
    ZWISCHENPOS.Y=YPOS
    ZWISCHENPOS.Z=ZPOS
    ZWISCHENPOS.A=0
    ZWISCHENPOS.B=0
    ZWISCHENPOS.C=0
    ...
    ...
    PTP ZWISCHENPOS  Vel= 100 % PDAT2 Tool[1]:Positionierspitze Base[1]:Endstelle ohne Cognex


    Du hast das X vergessen.
    Aus Zwischenpos wird XZWISCHENPOS
    Aus P25 wird XP25
    Versuch also mal:


    Code
    XZWISCHENPOS.X=XPOS
     XZWISCHENPOS.Y=YPOS
     XZWISCHENPOS.Z=ZPOS
     XZWISCHENPOS.A=0
     XZWISCHENPOS.B=0
     XZWISCHENPOS.C=0
    ...
    ...
    PTP ZWISCHENPOS  Vel= 100 % PDAT2 Tool[1]:Positionierspitze Base[1]:Endstelle ohne Cognex


    oder

    Greetings, Irrer Polterer!

    Wie poste ich falsch? Nachdem ich die Suche und die FAQ erfolgreich ignoriert habe, erstelle ich das gleiche Thema in mehreren Unterforen, benutze einen sehr kreativen Titel wie "Hilfe", am Besten noch mit mehreren Ausrufezeichen, und veröffentliche einen so eindeutigen Text, dass sich jeder etwas Anderes darunter vorstellt.


    Life is a beta version. Full of bugs and no Manual.

    Einmal editiert, zuletzt von IrrerPolterer ()

  • Zur genaueren Beschreibung des Problems:


    Ich fahre nicht die einzelnen Koordinaten des Frames an, sondern den ganzen Frame mit (x y z a b c). Da sich die aufgenommenen Koordinaten jedoch nicht auf das Weltkoordinatensystem des Roboteres beziehen, sondern auf ein von mir angelegtes Koordinatensystem (BASE 2) muss ich dem Roboter ja beibringen, das er diesen Frame auch auf dieses Koordinatensystem bezieht, sonst fährt er ja die falschen Punkte an.


    Mein Problem besteht nun in der Programmtechnischen Umsetzung des ganzen. Ich habe es mit:
    $BASE=BASE_DATA[1] versucht, ich bekomm zwar keine Fehlermeldung, jedoch werden auch nucht die korrekten Punkte angefahren.


    Meine Vermutung besteht nun darin, das ich die Anweisung zum falschen Zeitpunkt gebe.


    Ich hoffe es ist jetzt soweit verständlich. :kopfkratz: :blumen:


    Grüße
    Ralf

  • Doppelpunkt....


    Lies mal im Handbuch zum "geometrischen Operator"

    Wolfram (Cat) Henkel

    never forget Asimov's Laws at the programming of robots...

    "Safety is an integral part of function. No safety, no production. I don't buy a car without brakes."


    Messages und Mails mit Anfragen wie "Wie geht das..." werden nicht beantwortet.

    Diese Fragen und die Antworten interessieren jeden hier im Forum.


    Messages and Mails with questions like "how to do..." will not be answered.

    These questions and the answers are interesting for everyone here in the forum.

  • Nö nö, nix Doppelpunkt.
    Es ist schon das X vor den Punktenamen (Nicht die X-Koordinate).
    Mal ganz genau die feinen kleinen Unterschiede beachten.


    Wenn im Verfahrsatz (von Kuka-BOF angelegt) der Punktname
    "Zwischenpos" steht, dann muss man beim Koordinatenzuweisen
    "XZwischenpos = .... " schreiben.
    Das hat nichts mit der X-Koordinate zu tun, sondern die BOF
    bastelt da immer noch ein X davor, siehe die Zeile
    LIN XZwischenpos in dem geöffneten Fold.


    Ausserdem sollte es, wenn es Base 2 ist auch heissen:


    $base=base_data[2] oder im Verfahrsatz Base 2 und NICHT Base 1!


    Gruss Hermann

  • Hallo,


    habe ich das richtig verstanden, Du willst Postionen bezueglich Welt, in Positionen
    bezueglich Base umrechnen:


    decl Pos p_VonComInWelt
    decl Pos p_VonComInBase


    Get_P_VonSeriellerSchnittstelle()
    ....


    p_VonComInBase=InvFrame(Base_data[2]):p_VonComInWelt


    (Könnt so funktionieren, könnt aber auch anders sein:


    p_VonComInBase=InvFrame(p_VonComInWelt):Base_data[2]


    oder ähnlich.)



    Die Funktion InvFrame gibts ab sw 5. Sie wurde schon mal im Forum beschrieben.


    Gruss


    Berrad

  • Eigentlich dachte ich, dass man einfach vor Verarbeitung des Frames die BASE[1] als zu nutzende BASE definiert :kopfkratz:?


    Würde das ganze dann so machen wie Irrer Polterer unter Punkt 2 beschrieben, werde das ganze mal testen und euch dann berichten. Was das X vor Zwischenpos angeht, so kann ich mir dort keinen Fehler Vorstellen, sobald ich einen Test mit Koordinaten bezogen auf das Weltkoordinatensystem durchführe funktioniert das ganze ja.


    Ich vermute also es liegt wirklich an der falschen Platzierung der BASE Definition.


    Muss ich wirklich den Punkt umrechnen?


    Ich häng aber noch mal die kompletten Daten an (leider von einer älteren Version ohne die BASEdefinition vor dem ZWISCHENPOS).

    Einmal editiert, zuletzt von lonly ()


  • Was das X vor Zwischenpos angeht, so kann ich mir dort keinen Fehler Vorstellen, sobald ich einen Test mit Koordinaten bezogen auf das Weltkoordinatensystem durchführe funktioniert das ganze ja.


    :vergisses: Es muß definitiv XZWISCHENPOS heißen! Öffne den Fold:


    PTP ZWISCHENPOS Vel= 100 % PDAT2 Tool[1]:Positionierspitze Base[1]:Endstelle ohne Cognex


    Darin enthalt ist:
    $BWDSTART = FALSE
    PDAT_ACT=PPDAT2
    BAS(#PTP_DAT)
    FDAT_ACT=FZWISCHENPOS
    BAS(#FRAMES)
    BAS(#VEL_PTP,100)
    PTP XZWISCHENPOS <------ Das ist der Positionname in der Datenliste


    Da du den Punkt Zwischenpos wahrscheinlich in deinem Test mit Weltkoordinatenbezug mit BASE 1 angelegt hast und er nie umgerechnet wurde, weil du nicht XZwischenpos genommen hast, stimmt der Punkt dann ja auch noch.


    Zwischenpos ist eine Variable die oben deklariert wurde. Die im Inlineformular verwendete ist XZwischenpos und wurde automatisch in der Datenliste deklariert. Es handelt sich also um 2 verschiedene Punkte!


    Außerdem sind laut Datenliste deine Positionen nicht als FRAME sondern als E6POS deklariert. Du mußt bei Baseänderung also auch Status und Turnbit berücksichtigen.


    TOOL- und BASE-Daten sind in der R1\System\$CONFIG.DAT eingetragen. Leider kann ich ohne Config.dat immer noch keine Basedaten einsehen.
    Am besten ist immer ein Archiv zu posten. Oder SRC,DAT und $CONFIG.DAT. Manchmal noch SPS.SUB.


    Und ich sehe keinerlei Berechnungen - außer Zwischenpos - welche irgendetwas ändern sollten.
    Was genau ist überhaupt dein Problem - was funktioniert denn nicht?


    Geht es um die Bewegung PTP FP[I] ?



    Die wird immer mit Base[1] angefahren, da der Punkt vorher
    PTP P22 CONT Vel= 100 % PDAT4 Tool[1]:Positionierspitze Base[1]:Endstelle ohne Cognex
    $Base auf Base_data[1] setzt


    Du mußt also explizit Base angeben:


    Code
    $BASE=BASE_DATA[2] ;nächsten Punkt mit Base 2 anfahren
    $Tool=TOOL_DATA[1]
    PTP FP[I] C_PTP C_DIS


    BTW: In deinem Programm ist'n Menge komischen Kram drin. :zwink: (siehe Anhang)

    Greetings, Irrer Polterer!

    Wie poste ich falsch? Nachdem ich die Suche und die FAQ erfolgreich ignoriert habe, erstelle ich das gleiche Thema in mehreren Unterforen, benutze einen sehr kreativen Titel wie "Hilfe", am Besten noch mit mehreren Ausrufezeichen, und veröffentliche einen so eindeutigen Text, dass sich jeder etwas Anderes darunter vorstellt.


    Life is a beta version. Full of bugs and no Manual.

    Einmal editiert, zuletzt von IrrerPolterer ()

  • Mpf, was ne Pleite:


    Also, ich versuch noch mal das ganze mittel XZWISCHENPOS zu lösen.


    Die CONFIG.DAT häng ich auch noch mal an.


    Allerdings versteh ich nicht, woher das ganze kommt. Ich hab weder eine Variable noch einen Frame noch sonstiges programmiert :nocheck:!


    Ich versteh auch nicht warum ZWISCHENPOS kein Frame sondern E6POS ist.


    Woher kann das kommen?


    Eigentlich hab ich den Frame ja deklariert, da Variablen in PTP Befehlen nicht funktionieren. Also ist doch die Lösung:


    INT XPOS
    INT YPOS
    INT ZPOS
    ...
    DECL FRAME ZWISCHENPOS
    ...
    COPEN (:SER_2, HANDLE)
    MODR=#ABS
    TIMEOUT=0
    OFFSET=0
    CREAD(HANDLE,STATR,MODR,TIMEOUT,OFFSET,"%r%r%r",XPOS,YPOS,ZPOS)
    CCLOSE (HANDLE, STATT)
    ...
    ZWISCHENPOS.X=XPOS
    ZWISCHENPOS.Y=YPOS
    ZWISCHENPOS.Z=ZPOS
    ZWISCHENPOS.A=0
    ZWISCHENPOS.B=0
    ZWISCHENPOS.C=0
    ...
    PTP ZWISCHENPOS Vel= 100 % PDAT2 Tool[1]:Positionierspitze Base[1]:Endstelle ohne Cognex


    Hier steht je nun eigetlich im PTP Befehl die richtige BASE drin, sollte also alles funktionieren.


    Bin TOTAL verwirrt :bawling:

  • Nicht verzweifeln, das wird schon.
    Womit hast du denn Programmiert und welche KRC / Roboter hast du zur Verfügung?

    Einmal editiert, zuletzt von Ralle ()

  • Na das ging ja mal fix :supi:


    Um die Uhrzeit noch wach??


    Also hab direkt an der KRC programmiert, hatte aber während des Programmierens schon Probleme mit dem einteachen von Punkten. Also Roboter hab ich nen KR6 und ne KRC2 Softwarestand werd ich morgen mal nachschaun, sollte aber der letzt mögliche sein (4...)


    Gute Nacht :sleep:

  • Ich versteh auch nicht warum ZWISCHENPOS kein Frame sondern E6POS ist.


    Woher kann das kommen?


    Eigentlich hab ich den Frame ja deklariert, da Variablen in PTP Befehlen nicht funktionieren. Also ist doch die Lösung:


    Das stimmt schon! :zwink:
    Aber dann hast du ein Inlineformular PTP Zwischenpos usw. erstellt. Dabei wurde ein neuer Punkt XZWISCHENPOS deklariert. Ist automatisch so, wenn man Inlineformulare benutzt. Also hattest du 2 Punkte: Zwischenpos (deklariert im Programm) und XZWISCHENPOS (deklariert in DAT).



    :genau: Aber der Punkt im Inlineformular heißt in der Datenliste XZWISCHENPOS!
    Bewege mal den Cursor in die Zeile und sag dann Bearbeiten->Folds-> Aktuellen Fold öffnen.

    Greetings, Irrer Polterer!

    Wie poste ich falsch? Nachdem ich die Suche und die FAQ erfolgreich ignoriert habe, erstelle ich das gleiche Thema in mehreren Unterforen, benutze einen sehr kreativen Titel wie "Hilfe", am Besten noch mit mehreren Ausrufezeichen, und veröffentliche einen so eindeutigen Text, dass sich jeder etwas Anderes darunter vorstellt.


    Life is a beta version. Full of bugs and no Manual.

  • Sehe gerade in deiner Config folgendes:


    BASE_DATA[1]={x 1052.01294,y -130.098206,z 399.256287,a -39.1145782,b -0.34623301,c 27.8396187}
    BASE_DATA[2]={x -702.922424,y -1144.87,z 0.0,a 74.8820114,b 0.0,c 0.0}


    Wenn du die Punkte mit Base 1 geteacht hast und per Kamera eine neuer Base ermittelst, die sich auf BASE 1 bezieht. Dann probier mal das, was WolfHenk schon vorgeschlagen hat.


    Greetings, Irrer Polterer!

    Wie poste ich falsch? Nachdem ich die Suche und die FAQ erfolgreich ignoriert habe, erstelle ich das gleiche Thema in mehreren Unterforen, benutze einen sehr kreativen Titel wie "Hilfe", am Besten noch mit mehreren Ausrufezeichen, und veröffentliche einen so eindeutigen Text, dass sich jeder etwas Anderes darunter vorstellt.


    Life is a beta version. Full of bugs and no Manual.

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