Wie robconf berechnen?

  • Hallo zusammen,
    ich bin gerade dabei mir den Kopf über die Achskonfigurationen (robConf) zu zerbrechen.
    Folgender Fall:
    Ich bekomm Positionsdaten (x,Y und rot_Z) von der Kamera.
    X und Y lese ich in robtarget.pose ein.
    bei rot_z wandle ich den Wert in Quaternion um und lade diesen auch in meinen robtarget.orient.
    Soweit so gut.


    Jetzt muss ich allerdings meinem Robi noch sagen wie rum er die 6.Achse drehen soll, und darin fang ich an zu scheitern.
    Wie berechne ich mir die Werte in robconf??
    Mit der erklärung aus dem ABB Handbuch komm ich nicht ganz klar.
    Ich hab schon ein wenig rumversucht aber so wirklich schlüssig und verstanden hab ichs noch nicht!


    Kann mir das von euch bitte nochmal wer erklären? Am besten wär es an einem Beispiel!
    Vielen Dank!!


    Es handelt sich übrigens um einen IRB6640...


    Nochmals Danke bereits im vorraus für eure Hilfe!!!

  • ANZEIGE
  • Hi Dragon,
    hast du es auch schon mal mit reltool probiert?


    MoveL RelTool(pAblagePos,0,25,-100\Ry:=2.5),vLangsam,z50,tGreifer\WObj:=wKoordPalAbl;


    mit den optionalen Parametern \Rx:= \Ry:= \Rz:= kannst du den TCP umorientieren. Positiver und Negativer Wert probieren!
    Dadurch könnte das Umwandeln entfallen.

    Für seine Arbeit muß man Zustimmung suchen, aber niemals Beifall.<br />Zitat: Charles-Louis Baron de Montesquieu

  • Hallo Dragon,


    habe dieses Beispiel im Netz gefunden, hoffe es hilft dir.


    In der Doku Rapid Insruktionen Funktionen Datentypen unter confdata ist eigentlich auch genau beschrieben wie sich die Achsen verhalten, wenn du die Werte beeinflusst:




    How to calculate a robtarget... is pretty simple if you keep in mind the four composite data types of a robtarget. What is not simple is how to determine the required method to derive teh required compsite data type elements -
    They are

    Data type Name Description
    pos trans x, y and z coordinates
    orient rot Orientation
    confdata robconf Specifies robot axes angles
    extjoint extax Specifies positions for up to 6 additional axes.
    The value is set to 9E9 where no additional axis is used.

    For the most part most palletizing apps do not use external axis - so you can set it to the default.

    The next not so obvious data type to set for a robtarget is the configuration data required for this position. It will be influenced by the actual quadrant axis 1 needs to be in which in turn influences axis 6 - axis 6 confdata is also dependent on the tool orientation required for the operation (pick or place) and can be -180 -90, 0, +90 +180 - (bet you did not see that coming) - so yes there are 5 possible orientations. The +/- 180 are the same - but may not be reachable depending on the limits imposed on axis 6 due to upper arm cable managment - etc. traditionaly, a robtarget is stored for the specific station at 0 degrees, which stores the robconf data required for 0 degrees orientation - then we add or subtract to axis 6 robconf to get it in the required quadrant for the required tool orientation. This dictates that each station needs to be handled exclusively. So somewhere there needs to be a robtarget for the station (example robtarget ThisStation). All this assumes the wrist orientation is down and the mounting flange is parallel with the floor (like a 640 or 660).

    The actual transform (X,Y,Z) whould be some increment based on the case position, layer and pick and place cycle you are peroforming at the time. They are usually a multiple of the case dimensions determined before the robtarget is to be computed. For this example, they are already computed in global variables x_product,y_product,z_product.

    PROC ThisStationsConf(
    INOUT confdata config,
    num tool_orient)


    config:=ThisStation.robconf;
    config.cf6:=config.cf6-tool_orient DIV 90;


    ENDPROC
    Using the method above, we can call that procedure for the specific station to build the rest of the robtarget, and return it using a function for example.

    FUNC robtarget ComputeMyPosition(
    num tool_orient)

    VAR robtarget pResult;

    pResult.rot:=OrientZYX(180+tool_orient,0,180);
    ThisStationsConf pResult.robconf, tool_orient;
    !add a check here to make sure xonfig data is within capable limits, correct if not.
    pResult.extax:=[9e9,9e9,9e9,9e9,9e9,9e9];
    psresult.trans:=[0,0,0];
    pResult:=Offs(pResult,x_product,y_product,z_product);


    !All would be with in respect to a normalized workobject coplanar with wobj0 with only an orientation in Z with respect to the workobject for a 4 axis robot assuming the robot is level and plumb with the stations.


    RETURN pResult;


    ERROR
    !your error handler here
    ENDFUNC

    Nichts ist für die Ewigkeit .

    Einmal editiert, zuletzt von Sebastian78 ()

  • Hallo Dragon,


    die Confdata ergibt sich ja aus Deinem Zellenlayout und der sich daraus ergebenden Achstellung des Roboters. In den meisten Fällen möchte man ja den Robbi nicht irgendwie komisch verrenkt hinstellen sondern "normal". Erster Wert in der Confdata ist der Quadrant der Achse 1. Das kann man noch relativ einfach bestimmen wenn Du in jeweils einem Arbeitsbereich keinen Quadrantenwechsel hast. Beispiel1: Der Roboter bewegt sich auf einer Palette und A1 variiert zwischen 20° und 60° --> Confdata=0 (erster Quadrant). Beispiel 2: Roboter bewegt sich mit Achse1 zwischen -50° und -90° --> Confdata =-1. Würdest Du die -90° unterschreiten wäre Confdata =-2. In der Regel kann man die Confdata per Fallunterscheidung zuweisen, da der Wert ja um 1 daneben liegen darf.
    Für Achse 4 ist es vom Prinzip genauso, man wird versuchen bei dem Großen Robbi im Bereich von +/-90° zu bleiben also -1 und 0. Bei Achse 6 wird es dann interesant und auch etwas wichtiger wg. Schlauchpaket. Hier spielt natürlich hauptsächlich die Anbauart des Werkzeugs eine Rolle (eigentlich schon bei A4), deswegen ist das mit dem Beispiel etwas schwieriger. Trotzdem gilt wieder bei 0 wird angefangen und positiv alle 90° eins hochgezählt.


    Ich hoffe dieser allgemeine Erklärungsversuch hilft Dir weiter. Ich habs bis jetzt in der Regel über einfache Fallunterscheidungen mit Wertzuweisung gelöst, ohne viel Rechnerei. Es wäre sicherlich auch möglich per Position und Achswinkeln da was zu rechnen, das vielleicht allgemein gültig ist aber die einfache Form hat es bis jetzt auf getan.


    Gruß
    Stromer


  • Ok danke, hab allerdings nochmals ein paar Fragen:
    Das Koordnatensystem in dem der Quadratenwechsel statt findet ist für jede Achse ein eigenes. Also kein Weltkoordinatensystem oder die Base? Richtig?


    Die Gradzahl ist immer ein Absolutwert, und wird nicht hinzuaddiert?
    bsp.: ich steh bei +20° fahr auf +100° zählt dann die Differenz, also 80° oder der Absolutwert 100°? So wie ich es versteh absolut, also 150°, Richtig?


    Nehmen wir nochmals das Bsp.: ich steh be 20°, also robconf hat eine 0 drin,.
    Nun fahr ich auf eine Position wo er sich auf 100° drehen muss, ich lass jedoch die 0 stehen (eigentlich müsste ja eine 1 rein!?
    Was passiert? ich meine es kommt kein Fehler er fährt trotzdem hin, warum???

  • Ok danke, hab allerdings nochmals ein paar Fragen:
    Das Koordnatensystem in dem der Quadratenwechsel statt findet ist für jede Achse ein eigenes. Also kein Weltkoordinatensystem oder die Base? Richtig?

    Richtig, jeweils gesehen auf die Achse 1,4 ud 6.


    Die Gradzahl ist immer ein Absolutwert, und wird nicht hinzuaddiert?
    bsp.: ich steh bei +20° fahr auf +100° zählt dann die Differenz, also 80° oder der Absolutwert 100°? So wie ich es versteh absolut, also 150°, Richtig?


    Auch richtig, egal von wo Du kommst, der Quadrant zählt.


    Nehmen wir nochmals das Bsp.: ich steh be 20°, also robconf hat eine 0 drin,.
    Nun fahr ich auf eine Position wo er sich auf 100° drehen muss, ich lass jedoch die 0 stehen (eigentlich müsste ja eine 1 rein!?
    Was passiert? ich meine es kommt kein Fehler er fährt trotzdem hin, warum???


    [/quote]
    Eine Abweichung in den Confdata um 1 toleriert die Steuerung, bei mehr gibt es eine Fehlermeldung.
    Bei linearen Bewegungen bekommst Du auch eine Meckermeldung wenn Du mehr als 2 Quadranten drehen müsstest allerdings kannst Du den Robbi im Handbetrieb dann trotzdem hinschicken. Er fährt dann aber den bequemeren (kürzeren) Weg.


    Gruß
    Stromer


  • Eine Abweichung in den Confdata um 1 toleriert die Steuerung, bei mehr gibt es eine Fehlermeldung.
    Bei linearen Bewegungen bekommst Du auch eine Meckermeldung wenn Du mehr als 2 Quadranten drehen müsstest allerdings kannst Du den Robbi im Handbetrieb dann trotzdem hinschicken. Er fährt dann aber den bequemeren (kürzeren) Weg.


    Gruß
    Stromer
    [/quote]


    Ok in die Plus richtung hab ich das verstanden aber wie funktioniert das umgekehrt, Bsp. an der 6 Achse hier kann ich mehr als 360° drehen.
    6.Achse steht auf 110° also Wert 1
    jetzt soll er auf 50°drehen, also Wert 0, richtig?


    6.Achse steht wieder auf 110°, also wert 1.
    jetzt soll der Roboter auch wieder auf diese 50° fahren nur nicht zurück sondern auf 410°
    das wäre dann also eine 4 richtig?

  • Hallo zusammen,
    wäre es möglich, so ein Programm wo man die Positionsdaten reinlädt, zu zeigen.
    Ich möchte wissen, wie man so was anfängt.
    Quasi mit nur Positionswerten und ohne Achsen konfiguration ein Programm erstellt, evtl. welche Schritte sind bei diesem Programm notwendig.


    Vielen Dank

Hilfe und Support für ABB Roboter Programmierung, Konfiguration, Inbetriebnahme finden Sie hier im ABB Roboter Forum. ABB Rapid Programmierung ist einfach, die Roboterforum Community hilft sehr gerne.

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