User Tools

Site Tools


bfh:ti:fbe:i3s:unterricht:barkeeper:can_commands:rob

Roboter

Can-Kommandos


Status Anfrage

CAN ID DLC DB0 Beschreibung
0x210 2 1 TCP Position (Koordinaten Tool-Center-Point)
2 Joint Position (Winkel der 6 Gelenke)
13 Greifer Objektdetektion (Nicht fertig implementiert)
101 Roboter Betriebszustand (Runmode)


Status Antwort

CAN ID DLC CMD DB0 DB1 DB2 - DB5 Beschreibung
0x211 6 Error 0x00 code - Siehe Fehlercodes
TCP pos. 0x01 0x01=X 4 Byte Data (MSB=DB2) TCP Koordinaten X-Achse als uint32 in um
0x02=Y 4 Byte Data (MSB=DB2) TCP Koordinaten Y-Achse als uint32 in um
0x03=Z 4 Byte Data (MSB=DB2) TCP Koordinaten Y-Achse als uint32 in um
0x04=Rx4 Byte Data (MSB=DB2) TCP Koordinaten Rx-Achse als uint32 in mRad
0x05=Ry4 Byte Data (MSB=DB2) TCP Koordinaten Ry-Achse als uint32 in mRad
0x06=Rz4 Byte Data (MSB=DB2) TCP Koordinaten Rz-Achse als uint32 in mRad
Joint angle0x02 0x01=Base 4 Byte Data (MSB=DB2) Gelenkwinkel Base als uint32 in mGrad
0x02=Shoulder 4 Byte Data (MSB=DB2) Gelenkwinkel Shoulder als uint32 in mGrad
0x03=Elbow 4 Byte Data (MSB=DB2) Gelenkwinkel Elbow als uint32 in mGrad
0x04=Wrist1 4 Byte Data (MSB=DB2) Gelenkwinkel Wrist1 als uint32 in mGrad
0x05=Wrist2 4 Byte Data (MSB=DB2) Gelenkwinkel Wrist2 als uint32 in mGrad
0x06=Wrist3 4 Byte Data (MSB=DB2) Gelenkwinkel Wrist3 als uint32 in mGrad
Gripper 0x0D Objekt - Greifer Objekterkennung 0=kein Objekt, 1=Objekt (Stand 2019 immer 1, modbus fehler auf CAN-GW)
Runmode 0x65 runmode DB2: Emergency Stop, DB3:Protective Stop Betriebszustand des Roboterarms. Siehe Tabelle “Runmode”
Event E 0x66 - - Emergency-Stop Event. Wird asynchron ohne Anfrage gesendet, sobald ein Emergency Stop eintritt.
Event P 0x67 - - Protective-Stop Event. Wird asynchron ohne Anfrage gesendet, sobald ein Protective Stop eintritt.


Kommando

CAN ID DLC CMD DB0 DB1 DB2 - DB5 Beschreibung
0x212 6 Cmd 0x00 0x00 - Roboter stoppen, Bremsen aktivieren
0x01 - Roboter starten, Bremsen deaktivieren
0x02 - Herunterfahren des Roboters
0x03 - Sicherheits-Stop zurücksetzen
0x04 - Popup schliessen
0x05 - Sicherheits Popup schliessen
0x53 'S' - Koordinaten anfahren
0x82 'R' -………………………………………………… Koordinaten zurücksetzen
TCP pos. 0x01 0x01=X 4 Byte Data (MSB=DB2) TCP Koordinaten X-Achse als uint32 in um
0x02=Y 4 Byte Data (MSB=DB2) TCP Koordinaten Y-Achse als uint32 in um
0x03=Z 4 Byte Data (MSB=DB2) TCP Koordinaten Y-Achse als uint32 in um
0x04=Rx 4 Byte Data (MSB=DB2) TCP Koordinaten Rx-Achse als uint32 in mRad
0x05=Ry 4 Byte Data (MSB=DB2) TCP Koordinaten Ry-Achse als uint32 in mRad
0x06=Rz 4 Byte Data (MSB=DB2) TCP Koordinaten Rz-Achse als uint32 in mRad
Joint angle0x02 0x01=Base 4 Byte Data (MSB=DB2) Gelenkwinkel Base als uint32 in mGrad
0x02=Shoulder 4 Byte Data (MSB=DB2) Gelenkwinkel Shoulder als uint32 in mGrad
0x03=Elbow 4 Byte Data (MSB=DB2) Gelenkwinkel Elbow als uint32 in mGrad
0x04=Wrist1 4 Byte Data (MSB=DB2) Gelenkwinkel Wrist1 als uint32 in mGrad
0x05=Wrist2 4 Byte Data (MSB=DB2) Gelenkwinkel Wrist2 als uint32 in mGrad
0x06=Wrist3 4 Byte Data (MSB=DB2) Gelenkwinkel Wrist3 als uint32 in mGrad
Move time 0x03 time - Ausführzeit für die Bewegung (Geschwindigkeit), in Sekunden, Range:1-10s, 0=Default
Gripper 0x0A 0x53 'S' - Gripper “Activate”
Gripper 0x0B 0x01 position Position des Grippers in 0-255 (0=open)
Gripper 0x0C 0x01 speed Bewegungsgeschwindigkeit 0-255 (255=max)
0x02 force Kraft 0-255 (255=max)


Reset

CAN ID DLC CMD Beschreibung
0x21F 0 RESET Setzt den CAN node zurück (Neustart node-red)


Runmode

Runmode ist der Betriebszustand des Roboters. Dieser kann über folgende Codes aufgeschlüsselt werden

Runmode Name Beschreibung
0x03 Power off Roboter deaktiviert
0x04 Power On Roboter wird aktiviert
0x05 Idle Roboter wartet auf aktivierung
0x06 Backdrive Safety-violation. Rückführung im Recovery mode
0x07 Running Roboter im Normalbetrieb



Hinweise Gripper

1) Der Gripper ist eine Komponente eines Drittherstellers und über ein Plugin in die Steuersoftware des Roboters integriert. Da jeweils nur das Gripper Plugin oder die Roboter Befehlsausführung funktioniert, kann der Gripper nur angesprochen werden, wenn der Roboter keine andere Aktion ausführt!

2) Nach einem Emergency-Stop kann es vorkommen, dass der Gripper auch in einen Emergency-Zustand wechselt. Dabei blinkt die LED des Grippers Rot/Blau. Er lässt sich nun nicht mehr über CAN fernsteuern und muss über das Bedienteil des Roboter Controllers (Schaltfläche “Gripper”) erneut aktiviert werden.

Beide hier erwähnten Einschränkungen könnte man lösen, indem der Gripper nicht weiters über den Roboter-Controller gesteuert wird, sondern direkt auf dem CAN-GW (Raspberry) über den RS485 Bus des Grippers.



Beispiele

Die Beispiele sind als Pseudocode geschrieben und sollen lediglich den Kommunikationsablauf erläutern. Sie sind sind nicht für eine direkte Implementation vorgesehen!


Starten des Roboters

Der Roboter-Controller lässt sich nicht über CAN starten und muss von Hand auf dem bedienteil Aktiviert werden. Der CAN-Gateway des Roboters (industrial-raspberryPi) kann nach dem Aufstarten nicht direkt auf den Roboter verbinden, weshalb nach dem Start des Systems einmalig ein Reset des Can-GW durchgeführt werden muss. Am einfachsten ist, dies auszuführen sobald der Roboter nicht korrekt aufstartet.

RobotCloseAllPopup();          // Popups auf Roboter-Controller schliessen
RobotStart();                  // Einschalten des Roboterarms und lösen der Bremsen
Delay(15s);                    // Einschalten abwarten
if(RobotRunmode != Running)    // Wenn der Roboter nicht startet, CAN-GW resetten und Startsequenz widerholen
{
   RobotReset();
   return;
}
GripperActivate();             // Gripper aktivieren
Delay(1s);


Herunterfahren des Roboters

Der Steuersoftware des Roboters ist Linuxbasiert und sollte vor ausschalten der Stromversorgung sauber heruntergefahren werden. Dies kann theoretisch über das Bedienteil geschehen. Da es sich aber bei dem CAN-Gateway um ein industrial RaspberryPi handelt, muss dieses zusätzlich auch heruntergefahren werden. Folgender Befehl führt beides aus:

id=0x212
DB0=0x00
DB1=0x01

Ist der CAN-GW (raspberry) einmal heruntergefahren, muss zum Neustart die Stromversorgung für einige Sekunden unterbrochen werden.


Anfahren einer Position

Der Roboter kann in TCP (Tool-Center-Point) Koordinaten oder in Gelenkwinkel(Joint angle) angesteuert werden. Bei TCP Koordinaten wird die inverse Kinematik im Controller des Roboters berechnet.

Um eine Bewegung auszulösen, müssen erst die Koordinaten aller Achsen(Joint angle) oder Dimensionen(TCP) über CAN gesendet werden. Da ein CAN-Telegramm nicht gross genug ist, wird jede Dimension einzeln versendet. Um die Zeit für die Bewegung (Geschwindigkeit) festzulegen, wird anschliessend ein “Move time” Kommando gesendet. Die Bewegung startet anschliessend mit einem einzelnen Kommando (id=0x212, DB0=0x00,DB1=0x53).

Die inverse Kinematik von TCP Koordinaten kann oftmals mehrere Lösungen erzeugen. Daher ist nicht mit sicherheit abschätzbar was der Roboter für eine Position einnehmen wird. Es wird empfohlen wo möglich mit Gelenkwinkel zu arbeiten! TCP Koordinaten eignen sich gut für relative Verschiebungen (z.b. 100mm nach links).

Koordinaten können über das Bedienteil des Roboters ausgelesen werden. Unter “MOVE” stehen die TCP Koordinaten sowie die Gelenkwinkel. Bei TCP sollte die Bezugsebene auf “Base” gestellt werden!

// Beispiel Gelenkwinkel
RobotSetJoint(BASE,     0.0);    // Alle Gelenkwinkel setzen (Achtung, Can Datenwort in Milligrad)
RobotSetJoint(SHOULDER,-90.0);
RobotSetJoint(ELBOW,   -155.8);
RobotSetJoint(WRIST1,  -25.0);
RobotSetJoint(WRIST2,  -90.0);
RobotSetJoint(WRIST3,   90.0);
RobotSetMoveTime(2000);          // Ausührzeit festlegen
RobotStartMove();                // Bewegung starten
// Beispiel TCP Koordinaten (Achtung, CAN DDatenwort in um und mRAD!
RobotSetTCP(X,   230);         // Raumkoordinaten X Achse in mm
RobotSetTCP(Y,  -110);         // Raumkoordinaten Y Achse in mm
RobotSetTCP(Z,   670);         // Raumkoordinaten Z Achse in mm
RobotSetTCP(Rx,  0.0);         // Rotation um X Achse in RAD
RobotSetTCP(Ry,  0.0);         // Rotation um Y Achse in RAD
RobotSetTCP(Rz,  3.14);        // Rotation um Z Achse in RAD
RobotSetMoveTime(2000);          // Ausührzeit festlegen
RobotStartMove();                // Bewegung starten


Emergency-Handling

Es existieren mehrere Befehle um den Roboter aus einem Emergency, Safety oder Protection Modus zu reaktivieren. Es wird empfohlen diese Ereignisse in einem ersten Schritt nur auf dem Bedienteil des Roboters zurückzusetzen. Sobald man vertrauter mit dem Roboter ist, können Reaktivierungen integriert werden.

Der Stop-Knopf des Bedienteils löst einen Emergency-Stop aus. Der Stop-Knopf des Modells löst eine Safety-violation aus. Diese müssen unterschiedlich gehandhabt werden!

bfh/ti/fbe/i3s/unterricht/barkeeper/can_commands/rob.txt · Last modified: 2020/01/28 17:53 by ief12