...und wieder mal ein kleines Update!!!
ES FUNKTIONIERT!!!
Mein Programm, das ein Array mit vorgegebenen Zielpunkten der Reihe nach abfährt und dabei ein Hindernis, das durch mehrere überlagerte kubische Hindernisräume beschrieben wird, berücksichtigt, hat nun also in etwa folgende Struktur:
main(): hier gibt es eine FOR-Schleife, die nacheinander die einzelnen Zielpunkte auf Erreichbarkeit ( -> nicht in einem der Hindernisräume) überprüft und sie dann als Parameter an eine reine anfahr-Funktion übergibt.
ir_func(): dann gibt es eine Interrupt-Routine, die anspringt, sobald einer der TEIL-Hindernisräume verletzt wurde (mit §CYCFLAG als OR-Verknüpfung über alle WS.STATEs). Hier wird die anfahr-Bewegung abgebrochen, es wird eine Variable "mussausweichen" auf TRUE gesetzt, die Nummer des verletzten TEIL-Hindernisraums wird speichert und der Roboter fährt wieder ein kleines Stückchen zurück, damit der Hindernisraum wieder frei ist (-> Interrupt wieder scharf). Danach springt er nach main() zurück.
Innerhalb der main-FOR-Schleife gibt es dann eine WHILE (mussausweichen==TRUE) -Schleife. In dieser wird die Unterfunktion ausweichen() aufgerufen, die mit hilfe der Hindernisraumnummer, $POS_ACT und dem aktuellen Zielpunkt eine ausweich-Bewegung (parallel entlang der Hindernisbegrenzungen bis aktueller Zielpunkt erreicht) berechnet und diese Ausweichpunkte abfährt. Diese kann nun wieder vom Interrupt unterbrochen werden, solange, bis der aktuelle Zielpunkt erreicht wurde und "mussausweichen" nicht mehr auf TRUE gesetzt ist.
Nun habe ich aber schon wieder weitere Anreize zur Verbesserung:
Punkt1:
Wie im letzten Post bereits erwähnt sind die mathematischen Berechnungen und Bedingungen in KRL ziemlich kompliziert auszudrücken. Deshalb würde ich diese gerne zum Beispiel in ein externes Programm auf dem KR_C-Steuerungsrechner auslagern, der dann praktisch alles berechnet und nur die fertigen Anfahrpunkte als Parameter an das KRL-Programm übergibt, bzw im Falle einer Kollision entsprechende Signale sowie evtl zusätzliche Variablen von diesem abfrägt/empfängt.
In der Dokumentation habe ich etwas über den Automatik Extern - Betrieb gelesen. Wäre so etwas damit möglich. Oder gibt es vielleicht noch ander Möglichkeiten bzw Tips hierzu.
Punkt2:
Bisher werden Kollisionen nur bezüglich des TCP bzw. des gewählten Werkzeugkoordinatensystems erkannt. Dabei kann es passieren, das zwar nicht das Werkzeug, dafür aber der Roboterarm in den Hindernisraum hineinragt.
Gibt es Möglichkeiten (Modellierung des Arms o.ä) um auch dies zu berücksichtigen?
Für jede Antwort von euch bin ich dankbar!!!
Schöne Grüße
Felix