Programmierung VKRC1 Zeitgebundener Bewegungsablauf

  • Hallo,
    Ich bin ganz neu hier und brauche für ein Studienprojekt dringend Hilfe. :hilfe:


    Ich habe folgenden Roboter zur Verfügung: VKRC1 V3.3.3


    Mit diesem soll ich folgende Aufgabe bewältigen:


    Ich habe eines Ausgangsdatei in welcher sich Zeitdaten (40ms Schritte für 0s ...156s -> 3900 Datensätze) und dazugehörige Koordinaten X,Y,Z sowie die Transformationsmatrix (aus dieser will ich mit python die Eulerwinkel analog zu den in KUKA verwendeten A,B und C Winkeln bestimmen)


    Diese Datei möchte ich in ein KRL-Programm übersetzen welches die Gier-, Nick- und Rollbewegungen vollführt. (Also z.B. eine FRAME-Zeile in der ich A,B & C anpassen kann)


    Mein Problem ist derzeit das ich mit der von VW vorgegebenen Struktur der Programme nicht zurecht komme und ich ein "normales" KRL Programm nicht verwenden kann weil dieses vom VKRC nicht angenommen wird. :nocheck:


    Daher dachte ich mir das vielleicht jemand mit mehr Erfahrung auf diesem Gebiet mir helfen könnte. Wie kann ich eine Folge (man kann beim VKRC ja nur mit diesen arbeiten, oder?) so anpassen, dass ich diese Aufgabenstellung umsetzen kann.


    Hat jemand eine Idee?


    Falls noch mehr Informationen benötigt werden gebt einfach Bescheid. Wie gesagt ich bin sozusagen noch ein Kücken im Thema Roboterprogrammierung.


    Liebe Grüße,
    TUrob

  • Schritt für Schritt zum Roboterprofi!
  • Hi & willkommen,


    Ohje!


    Das kannste mit dem VKRC fast vergessen. Die Einschränkungen gegenüber dem KRC sind so stark, dass Du kaum Möglichkeiten hast.


    "Freies" Programmieren, geht nur über den VW_USER, der sollte beim VKRC1 noch nahezu leer sein. Ich hab aber für den alten Roboter nix mehr an Unterlagen, es müßte in den Dateien aber zumindest ein kleines Beispiel zur Nutzung des Users drin sein... Sorry.


    RK

  • Hey RoboKopp,


    die alternative über VW_USER habe ich auch schon gehört kann mir darunter leider nicht so richtig was vorstellen und in der Dokumentation ist die Geschichte auch nur dürftig erzählt, so das ich damit nix anfangen kann.


    Würde es helfen wenn ich die VW_USER Dateien mal hochlade? Und welche bräuchtest du dann? nur VW_USER.SRC und -.DAT? In dem Verzeichnis liegen nämlich noch mehr (VW_USERV, VW_USR_R, VW_USR_RV, VW_USR_S und VW_USR_SV)


    Und danke für die fixe Antwort.


    EDIT:
    Ich habe vorhin schon mal den KUKA Support angerufen und die meinten es wäre alternativ auch möglich die Steuerung (durch eine 2. Festplatte ) eines KRC aufzuspielen. Leider ist das nur bedingt möglich da ich den Roboter nicht für mich allein habe und immer wenn ich ihn benutzen will die Festplatte tauschen müsste.
    Allgemein aber die Frage, ist das denn überhaupt so einfach möglich? Hat damit jemand Erfahrung? Wäre es auch sinnvoll allgemein von VKRC auf KRC zu wechseln? Vielleicht kann ich meinen Betreuer ja davon überzeugen :roll:

    Einmal editiert, zuletzt von TUrob ()

  • Hey,


    Danke für das Handbuch. Das gleich habe ich vorhin auch vom KUKA Support erhalten ;)
    Leider kann ich damit nicht so richtig was anfangen. Weil bei dem Kapitel ja steht das man diese USER Datei nur innerhalb einer Punkt-SPS-Anweisung verwenden kann. Aber was heißt das?
    Muss ich eine neue Folge erstellen in welcher ich dann eine Punkt-SPS-Anweisung erstelle in welcher ich wiederum die VW_USER aufrufe?
    Kann ich diese dann nach meinen wünschen anpassen?


    Mhh ich probiere das morgen mal aus wobei ich nicht so richtig Hoffnung habe das es klappt ^^

  • Ja genau. Einen Punkt anlegen (Folge oder UP) und den User aufrufen. Du kannst im User eigentlich die gleichen Befehle und Variablen nutzen wie in der normalen KRC. Deine Bewegunhsprogramme ins Main des User_R. Deine Koordinaten und Variablendeklarationen kommen ins dat.

    Einmal editiert, zuletzt von Stethi ()

  • Hallo TUrob


    das Expertenfold kann dir hier auch weiterhelfen. Einfach zwischen 2 Bewegungssätzen einfügen und du kannst nahezu die ganze KRL Syntax verwenden.


    ;FOLD PTP VB=100% VE=0% ACC=100% Wzg=16 SPSTrig=0[1/100s] ;%{P}%MKUKATPVW,%CMOVE,%VPTP,%P 1:1, 2: VB=, 3:100, 4:%, 5: VE=, 6:0, 7:%, 8: ACC=, 9:100, 10:%, 11: Wzg=, 12:16, 13: SPSTrig=, 14:0, 15:[1/100s], 16: , 17:1, 18:-1, 19:-1
    ;FOLD 1: ;%{SE}%MKUKATPVW
    ;ENDFOLD
    ;FOLD {H}
    VW_MPARA_ACT=P1_D
    Act_P1 = P1
    Act_P2 = P1
    VW(#MPARA,TRUE)
    PTP P1
    $ADVANCE=1
    ;ENDFOLD
    ;ENDFOLD


    ;FOLD DIESEN TEXT SIEHT MAN IM PROGRAMM;%{PSE}%MKUKATPVW,%CUSER,%VEXPERT
    ;hier kannst du in KRL programmieren
    BASE_DATA[1]=BASE_DATA[2]
    ;
    ;ENDFOLD


    ;FOLD PTP VB=100% VE=0% ACC=100% Wzg=16 SPSTrig=0[1/100s] ;%{P}%MKUKATPVW,%CMOVE,%VPTP,%P 1:1, 2: VB=, 3:100, 4:%, 5: VE=, 6:0, 7:%, 8: ACC=, 9:100, 10:%, 11: Wzg=, 12:16, 13: SPSTrig=, 14:0, 15:[1/100s], 16: , 17:2, 18:-1, 19:-1
    ;FOLD 1: ;%{SE}%MKUKATPVW
    ;ENDFOLD
    ;FOLD {H}
    VW_MPARA_ACT=P2_D
    Act_P1 = P2
    Act_P2 = P2
    VW(#MPARA,TRUE)
    PTP P2
    $ADVANCE=1
    ;ENDFOLD
    ;ENDFOLD


    viel Erfolg

  • Hey Saerdna,
    das hört sich gut an. Ich versuch beides morgen mal auszuprobieren. Ein einfaches Bewegungsprogramm sollte ja für den ersten Test reichen.
    Ich hatte mir das in etwa folgendermaßen vorgestellt:


    .DAT -Datei:


    DECL AXIS HOME={A1 0,A2 -90, A3 90,A4 0,A5 0,A6 0} ;Variable HOME vom TYP AXIS
    DECL AXIS STARTP={A1 -10,A2 -100, A3 140,A4 0,A5 -40,A6 0} ;setzen vom Ausgangspunkt STARTP in diesem Punkt



    .SRC-Datei:


    ;Anfahrt HOME-Position
    PTP HOME
    ;Anfahrt Startpunkt STARTP
    PTP STARTP


    ;Verfahren mit 0.1°/Sec
    $VEL.ORI1=0.1
    $VEL.ORI2=0.1
    ;A
    ;relatives Verfahren um 5°
    LIN_REL {A 5}
    ;2Sekunden warten
    WAIT SEC 2
    ;relatives Verfahren um -5°
    LIN_REL {A -5}


    WAIT SEC 2
    ;B analog
    LIN_REL {B 5}
    WAIT SEC 2
    LIN_REL {B -5}


    WAIT SEC 2
    ;C analog
    LIN_REL {C 5}
    WAIT SEC 2
    LIN_REL {C -5}


    PTP HOME



    Passt das so oder muss ich die Syntax noch ändern um es zum laufen zu bringen?

  • Versuchs hiermit


    ;FOLD DIESEN TEXT SIEHT MAN IM PROGRAMM;%{PSE}%MKUKATPVW,%CUSER,%VEXPERT
    ;hier kannst du in KRL programmieren
    ;relatives Verfahren um 5°
    LIN_REL {A 5}
    ;2Sekunden warten
    WAIT SEC 2
    ;relatives Verfahren um -5°
    LIN_REL {A -5}


    WAIT SEC 2
    ;B analog
    LIN_REL {B 5}
    WAIT SEC 2
    LIN_REL {B -5}


    WAIT SEC 2
    ;C analog
    LIN_REL {C 5}
    WAIT SEC 2
    LIN_REL {C -5}
    ;
    ;ENDFOLD

  • Hey,
    aber darin sind meine Punkte ja gar nicht enthalten.
    Ist es nicht möglich diese ebenfalls anzufahren?
    Außerdem wollte ich bewusst die Geschwindigkeit anpassen, da ich diese Funktion später wegen der zeitgebundenen Anfahrt der Punkte benötige.


    Dennoch vielen Dank für die prinzipielle Funktion sollte das ja erst mal reichen.

  • :danke: :danke: :danke:


    So ich bin eben dazu gekommen eure Tipps auszuprobieren.


    Leider ist es mir nicht möglich gewesen den Befehl USER in mein Programm zu integrieren. Immer wenn ich den Versuch gestartet habe kommt promt die Fehlermeldung "Das Kommando ist nicht erlaubt"
    Weiß jemand warum das so ist?


    Da dieser Weg für mich zu keinem Ergebnis geführt hat habe ich den Expertenfold ausprobiert.
    Nach kurzen Anfangsschwierigkeiten hat es tatsächlich funktioniert! Ich bin begeistert!


    Zur Zeit funktioniert alles wie ich es mir gewünscht habe. Bei weiteren Fragen meld ich mich wieder.


    Liebe Grüße und vielen Dank für jegliche Hilfe,
    TUrob

  • Hallo TUrob


    Der USER Befehl wir mittels Inlineformular eingegeben. Dadurch wird in der Programmdatei .SRC die User Routine mit Übergabeparameter aufgerufen. Deine KRL Routinen müsstest du dann in der User Routine schreiben.


    Zum Expertenfold wollt ich noch anmerken das du dort keine Deklarierungen machen kannst. Im zum Programm gehörigen Dat File kannst du auch keine eigenen Variablen deklarieren. In der $config.dat gibt es einen User Bereich. Die dort deklarierten Variablen sind dann global und du kannst im Programm darauf zugreifen.


    viel Erfolg

  • Hey,
    Stethi: Danke, ich habe das schon mal gelesen aber lauter Aufregung wieder verdrängt. Ich probiere das gleich mal aus.


    saerdna: Das ich keine Deklarierungen machen kann bedeutet auch, dass ich da die Geschwindigkeiten für die Bewegung nicht anpassen kann? Oder das ich die einzelnen Punkte in der $config.dat abspeichern muss?


    Und wie kann ich die Geschwindigkeiten für die einzelnen Bewegungen anpassen? im speziellen [°/s] für die von mir angestrebten Änderungen von A,B &C
    EDIT:
    Beim manipulieren des Archivs auf meinem PC ist anscheinend was schief gelaufen. Also die Geschwindigkeiten für die Winkeländerung von A,B &C funktioniert über die Befehle, $VEL.ORI1=... [°/s] und $VEL.ORI2=... [°/s] . Wobei ich nicht ganz verstehe was der unterschied zwischen ORI1 und ORI2 ist. Im Handbuch steht das 1 die Schwenkgeschwindigkeit und 2 die Drehgeschwindigkeit steuert. Was bedeutet das jedoch für meine Winkel A, B & C? Wenn mir das jemand erläutern kann wäre das grandios

    Einmal editiert, zuletzt von TUrob ()

  • Hallo zusammen,


    Ich habe heut versucht zu ergründen welche Punkte ich Deklarieren muss um diese dann über das Programm anzusteuern.


    Dabei steht mir aber noch folgendes Hindernis im Weg:


    Als Werkzeug setze ich den Nullframe, also den Flunsch. Da ich ein Datenpaket mit Zeitschritten und den dazugehörigen Orientierungswinkeln habe, will ich ausgehend von einem Startpunkt einzelne Positionen deklarieren in welchen sich nur A, B und C ändern.


    Ausgangspunkt ist: STARTP={X 1000,Y 155,Z 1662,A -34,B -89,C -43.89}


    Wenn ich Beispielsweise Winkel A um +10° ändern möchte muss ich dann nur


    in der Datenliste aus $config.dat GLobal USER:
    DECL POS POS1
    POS1={A -24}


    im Programm:
    LIN POS1


    eingeben?


    Hintergrund weshalb ich frage sind die verwirrenden Werte die mir angezeigt werden wenn ich auf dem KCP meine Ist-Position anzeigen lasse und im folgenden nur Achse 6 drehe.
    Dann ändert sich nämlich nicht nur der Wert A sondern auch Wert B und C


    Ich hoffe ich konnte mich verständlich ausdrücken.


    Liebe Grüße,
    TUrob

    Einmal editiert, zuletzt von TUrob ()

  • Hallo,


    du solltest dir im klaren sein, das verschiedene Eulerwinkel Triple die gleiche Orientierung darstellen. In Wirklichkeit sind die Eulerwinkel nur eine einfache Darstellung einer orthonormalen 3x3 Orientierungsmatrix über drei Parameter, d.h. verschiedene Werte von A,B und C führen (u.a. wegen den dahinterliegenden Sinusen und Cosinusen) zum gleichen Ergebnis:


    http://www.roboterforum.de/rob…erator/msg13666/#msg13666


    Insbesondere bei B ungefähr +90 oder -90 bekommst du es noch zusätzlich mit der Eulersingularität (im Englischen auch gerne als Gimbal-Lock bezeichnet) zu tun. In diesem Fall sind A und C nicht mehr eindeutig sondern nur deren Summe. Das ganze ist schon zigmal hier im Forum diskutiert worden, so dass du über die Stichwortsuche mit "Eulersingularität", "Eulerwinkel", "homogene Koordinaten" einges finden solltest.


    Ferner solltest du dir mal anschauen wie der KUKA die Orientierungsführung macht. Die eigentlich drei vorhandenen Freiheitsgrade werden nämlich auf zwei reduziert (Drehen und Schwenken, daher immer die ORI1 und ORI2 in z.B. $VEL und $ACC). Das ist möglich weil man immer um eine feste Koordinaten Achse dreht und schwenkt, wobei bei KUKA die ausgezeichnete feste Achse die x-Achse des Werkzeugkoordinatensystems ist (Hinweis: für Spline gilt das so nicht mehr!). Das steht auch meines Wissens nach so in der Doku.


    Fubini

    Einmal editiert, zuletzt von fubini ()

  • Hey,
    vielen Dank für deinen Kommentar!
    Stell ich mir das jetzt richtig vor, dass ..ORI1 für die Orientierungsbewegung A und B steht und ORI2 lediglich für Orientierungbewegung C?
    Ich muss zu meinen Daten noch erwähnen das die maximale Relativbewegung von A 18°, B 4° und C 16° beträgt. Somit entfällt der Spezialfall Gimbal-Lock ja oder?


    Liebe Grüße und ich freu mich auf eure Antworten,
    TUrob

  • Hallo,


    zur Orientierungsführung über Drehen und Schwenken:
    angenommen das Roboterforum macht eine gemeinsame virtuelle Flugreise von "München" nach "New York", dann entspricht "München" der Startorientierung und "New York" der Zielorientierung. Auf einer 2 dimensionalen Weltkarte kann man das auch über die beiden Werte für Längen- und Breitengrad ausdrücken, d.h. man muss Startlängengrad und Startbreitengrad bei München in Ziellängengrad und Zielbreitengrad bei New York überführen. Insbesondere braucht es nur zwei Freiheitsgrade um die Orientierungen ineinander überzuführen.


    Geht man dann wieder ins dreidimensionale dann wird aus der Weltkarte ein Globus und Start sowie Zielorientierung sind einfach Punkte auf der Kugeloberfläche. Alle möglichen anderen Orientierungen liegen dann auch wieder auf der Kugeloberfläche. Stellt man sich nun vor man zeigt mit dem Finger auf "München", dann ist die Frage wie muss ich den Globus unter meinem Finger wegdrehen um auf "New York" zu zeigen. Insbesondere kann mann dann die notwendige Änderung im "Breitengrad" als "Schwenken" bezeichnen und die Änderung im "Längengrad" als "Drehen".


    Jetzt ist noch die Frage wo spukt hier die ausgezeichnte Werkzeugstossrichtung "x" rein. Das ist aber auch ganz einfach, dass ist nämlich die Verbindungsgerade von einem "Ort" auf der Kugeloberfläche zum Kugelmittelpunkt. Hält man dann gedanklich die Verbindungsgerade im Kugelmittelpunkt fest, dann entspricht eine Bewegung der Verbindungsgeraden auf der Kugeloberfläche entlang eines Längengrads gerade dem "Drehen" und eine Bewegung der Verbindungsgeraden auf der Kugeloberfläche entlang eines Breitengrads dem "Schwenken".


    Als letztes möchte ich noch die Frage zur Eulersingularität mit einer Gegenfrage beantworten: Welchen Längen- und Breitengrad haben Nord- und Südpol? Man sieht da wird es etwas schwammig.


    Das hatte jetzt alles noch nichts direkt mit den A,B und C Winkeln zu tun, sondern die Orientierungsdarstellung über "Drehen" und "Schwenken" bzw. Längen- und Breitengrad ist nichts anderes als eine andere Form um Orientierungen im Raum darzustellen.


    Fubini

    Einmal editiert, zuletzt von fubini ()

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