Aktuelle Position abfragen

  • :hilfe:


    Hallo.


    Ich habe folgendes Programmierproblem:


    Ich habe zwei Punkte. P1 ist mein Start-, P2 mein Endpunkt. Es wird als erstes immer P1 angefahren, anschließend P2. Jetzt werden in Abhängigkeit der eingestellten Übergänge (Übergang= Fahrt von Punkt zu Punkt) die Punkte abwechselnd angefahren, z.B. 3 Übergänge:


    P1 --> P2 --> P1 --> P2


    Die Anzahl der Übergänge möchte ich mit einer for-Schleife realisieren. Wie kann ich am besten die aktuelle Position des Roboters entweder bei P1 oder P2 abfragen, um diese in einer switch-case-Anweisung zu verarbeiten?
    Vermeiden möchte ich das Setzen einer Variablen innerhalb der switch-case-Anweisung (z.B. aktuelle Position P1: Fahre zu P2 danach Variable_P2 = true usw.)


    Vielen herzlichen Dank für eure Hilfe! Mahlzeit! ;)

  • Schritt für Schritt zum Roboterprofi!
  • Wozu willst du die switch-case-Anweisung verwenden?
    Wenn du wie beschrieben immer von P1 nach P2 , dazu noch immer zuerst P1 anfahren willst, sollte die For-Schleife genügen.


    Code
    FOR Durchlauf = 1 TO X
       PTP P1
       ;machwas
       PTP P2
       ;machwas
    ENDFOR


    Die aktuelle Position des Roboters kannst du mit ver Variablen $POS_ACT abfragen.

    Gruß Roland


    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.


    Ich bin wie ich bin. Die Einen kennen mich, die Anderen können mich.

    Konrad Adenauer

  • Die switch-case anweisung brauch ich, wenn es z.B. 2 Übergänge sind. Der Roboter startet bei P1 und fährt zu P2. Dort ist noch 1 Übergang zu absolvieren. Also fährt er zurück nach P1 und ist dann fertig. Mit deinem Vorschlag fährt er aber wieder zu P2!
    Kurzum: Der Roboter soll abfragen wo er gerade ist! Nach der Abfrage soll er solnage zum gegenüberliegenden Punkt fahren bis die Anzahl der Übergänge erreicht ist (innerhalb einer for-Schleife => Laufvariable für Übergänge).


    Wenn ich zum Beispiel $POS_ACT.x mit Pn.x vergleiche, dann habe ich hier eine Diskrepanz von ein paar µm!! Somit ist eine genaue Abfrage $POS_ACT.x == Pn.x nicht möglich!! Gibt es hierzu einen vordefinierten Toleranzraum um die aktuelle Position (Kugel um Pn mit Durchmesser d) um somit $POS_ACT innerhalb Toleranzraum (Kugel) abfragen zu können??

  • Hallo,


    du könntest dir 2 Arbeiträume erstellen, dann kannst du einen Raum von z.B. 10mm Kantenlänge machen.


    Dann abfragen in welchem Arbeitsraum der TCP steht.


    MfG Peter

    Wer Rechtschreibfehler findet, darf sie behalten!!!  :lol:

  • Wieso willst du keine Variable/Flag verwenden? Wenn du immer warten musst, bis du beim neuen Zielpunkt bist, wirst du immer Genauhalte machen müssen. (Egal ob du eine "==" Routine schreibst oder den Arbeitsraum verwendest. Wobei dieser den Nachteilhat, dass er nicht automatisch nachgeführt wird beim Umteachen von P1 oder P2.)

  • Wenn dein Roboter bei erreichen eines deiner Punkte einer Variablen einen Wert zuweist, kannst du mit SWITCH und CASE arbeiten.
    Nur als Beispiel (AKT_POSITION wäre die Variable)


    TRIGGER WHEN DISTANCE = 1 DELAY = 0 DO AKT_POSITION = 10
    P1
    TRIGGER WHEN DISTANCE = 1 DELAY = 0 DO AKT_POSITION = 20
    P2


    Gruß
    RobotGuy

  • Hallo,


    ich hatte mir mal eine Funktion geschrieben die genau sowas macht.



    viel Spass

    Kontrolle ist eine Illusion, denn niemand weiss was als nächstes passiert.

  • RobotGuy
    Das geht aber nur, wenn die Punkte nicht extrem nah zusammen liegen.


    @noTime
    Aber vorsicht! Nich so aufrufen:

    Code
    FOR i=0 TO x
      IF IsInPos( Pos1, 0.5, FALSE) THEN
        PTP Pos1 C_PTP
      ENDIF
      IF IsInPos( Pos2, 0.5, FALSE) THEN
        PTP Pos2 C_PTP
      ENDIF
    ENDFOR


    Das gäbe ziemlich sicher ein Chaos mit dem Vorlaufzeiger.

  • Sorry, ich suche auch nach solcher Antwort, aber diese Seite ist unglaublich schlecht. Ich sehe keine Antworten, weil irgendo ist AdBlocker aktiviert und ich kann es nicht abschalten. Könnte mir jemand per E-Mail Antwort schicken? Wenn Rob In HomePos steht, dann Justage für A1 bis A3, sonst "EMD entfernen" und direkt (ohne HOME beim Neustart) direkt zu A4...E1 JustagePos fahren. Mail_AT-Zeichen ersetze ich mit drei Sternen: www-irop***web.de Vielen Dank!!!

  • Macht doch wenig Sinn, wenn die Justage notwendig ist, dann kann gar kein Programm gestartet werden.

    Ansonsten:

    Code
    If $IN_home then
    ; fahr auf Justage 1-3
    else
    ; fahr auf Justage 4-e1
    endif

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