1. Vorwort

fairino_hardware ist eine auf ROS2 basierende API-Schnittstelle für kollaborative FAIRINO-Roboter, die darauf abzielt, Einsteigern die Nutzung des FAIRINO-SDK zu erleichtern. Durch die Konfiguration von Standardparametern in der Parameterkonfigurationsdatei kann es an verschiedene Kundenanforderungen angepasst werden.

2. fairino_hardware

Dieses Kapitel beschreibt, wie die Ausführungsumgebung der App konfiguriert wird.

2.1. Installation der Basissystemumgebung

Die Verwendung wird unter Ubuntu 22.04 LTS (Jammy) empfohlen. Nach der Systeminstallation muss ROS2 installiert werden. Die Verwendung von ROS2 Humble wird empfohlen. Eine vollständige Anleitung zur Installation von ROS2 finden Sie unter: https://docs.ros.org/en/humble/index.html. Vor der endgültigen Kompilierung von fairino_hardware muss auch das offizielle ros2_control-Paket installiert werden. Eine vollständige Anleitung zur Installation von ros2_control finden Sie unter: https://control.ros.org/humble/index.html. Die offizielle Dokumentation bietet zwei Installationsmethoden für ros2_control: Installation über Befehle und Kompilierung aus dem Quellcode. Da die Installation über Befehle möglicherweise zu einer unvollständigen Installation von Funktionspaketen führen kann, wird die Kompilierung aus dem Quellcode empfohlen.

Im Folgenden wird der Prozess für ROS2 (Humble) detailliert beschrieben:

  1. Shell-Fenster öffnen

1locale  # Auf UTF-8 prüfen
2
3sudo apt update && sudo apt install locales
4sudo locale-gen en_US en_US.UTF-8
5sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
6export LANG=en_US.UTF-8
7
8locale  # Einstellungen überprüfen
  1. Quellen einrichten

1sudo apt install software-properties-common
2sudo add-apt-repository universe
3
4sudo apt update && sudo apt install curl -y
5sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
6
7echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
  1. ROS2 installieren

1sudo apt update
2sudo apt upgrade
3sudo apt install ros-humble-desktop
  1. Abschließend die Entwicklungswerkzeuge installieren

1sudo apt install ros-dev-tools

Im Folgenden wird der Installationsprozess für ros2_control detailliert beschrieben:

  1. Zuerst die ROS2-Ressourcen sourcen

1source /opt/ros/humble/setup.bash
  1. ros2_control-Arbeitsbereich erstellen und Ressourcen herunterladen

1mkdir -p ~/ros2_control_ws/src
2cd ~/ros2_control_ws/
3wget https://raw.githubusercontent.com/ros-controls/ros2_control_ci/master/ros_controls.$ROS_DISTRO.repos
4vcs import src < ros_controls.$ROS_DISTRO.repos
  1. Abhängigkeitspakete installieren

1rosdep update --rosdistro=$ROS_DISTRO
2sudo apt-get update
3rosdep install --from-paths src --ignore-src -r -y
  1. ros2_control kompilieren

1. /opt/ros/${ROS_DISTRO}/setup.sh
2colcon build --symlink-install

2.2. fairino_hardware kompilieren und erstellen

1. Einen Colcon-Arbeitsbereich erstellen fairino_hardware besteht aus zwei Funktionspaketen: einem Funktionspaket für benutzerdefinierte Datenstrukturen namens fairino_msgs und dem Hauptprogramm-Funktionspaket fairino_hardware. Nach der Installation der Basissystemumgebung erstellen Sie zuerst einen Colcon-Arbeitsbereich, z.B.:

Zuerst müssen die ROS2- und ros2_control-Ressourcen gesourct werden.

1source /opt/ros/humble/setup.bash
2source ~/ros2_control_ws/install/setup.bash

Dann den Arbeitsbereich erstellen.

1cd ~/
2mkdir -p ros2_ws/src

2. Funktionspakete kompilieren Kopieren Sie den Code des Installationspakets in das Verzeichnis ros2_ws/src. Führen Sie dann im Verzeichnis ros2_ws den folgenden Befehl aus:

1source ~/ros2_control_ws/install/setup.bash

Führen Sie nach Abschluss dieses Befehls den folgenden Befehl aus:

1colcon build --packages-select fairino_msgs

Warten Sie, bis die Kompilierung des vorherigen Befehls abgeschlossen ist, und kompilieren Sie dann fairino_hardware mit dem folgenden Befehl:

1colcon build --packages-select fairino_hardware

3. Schnellstart

3.1. Startvorgang

Öffnen Sie ein Terminal unter Ubuntu und geben Sie Folgendes ein:

1cd ros2_ws
2source install/setup.bash
3ros2 run fairino_hardware ros2_cmd_server
../_images/fr_ros2_001.png

3.2. Statusrückmeldung des Roboterarms abrufen

Der Status des Roboterarms wird über Topics veröffentlicht. Benutzer können die Aktualisierung der Statusdaten mit den mitgelieferten ROS2-Befehlen beobachten oder ein Programm schreiben, um diese Daten zu erhalten. Im Folgenden wird gezeigt, wie die Statusdaten des Roboterarms mit ROS2-Befehlen beobachtet werden können.

Öffnen Sie ein Terminal unter Ubuntu und geben Sie Folgendes ein:

1cd ros2_ws
2source install/setup.bash
3ros2 topic echo /nonrt_state_data

Im Terminalfenster werden die sich ständig aktualisierenden Statusdaten angezeigt, wie in der folgenden Abbildung dargestellt.

../_images/fr_ros2_002.png

3.3. Befehlsausgabe

Öffnen Sie ein Terminal unter Ubuntu und geben Sie Folgendes ein:

1cd ros2_ws
2source install/setup.bash
3rqt

Nach Ausführung des obigen Befehls wird eine rqt-GUI-Oberfläche geöffnet, wie unten dargestellt.

../_images/fr_ros2_003.png

Wählen Sie in der GUI-Oberfläche plugins -> service -> service caller aus. Es öffnet sich die unten gezeigte Oberfläche. Wählen Sie den Eintrag /fairino_remote_command_service aus. Geben Sie im Feld expression den Befehlsstring ein und klicken Sie auf call. Daraufhin wird im unteren Dialogfeld eine Antwortmeldung angezeigt.

../_images/fr_ros2_004.png

Wichtig

  • Erläuterung der Regeln für Eingabestrings:

Das Programm filtert die Form des eingegebenen Strings intern. Das Format der Funktionsübergabe muss die Form [Funktionsname]() haben. Die Parameterzeichenfolge in den runden Klammern darf nur aus Buchstaben, Zahlen, Kommas und Minuszeichen bestehen. Das Auftreten anderer Zeichen oder Leerzeichen führt zu einem Fehler.

  • Erläuterung der Befehlsrückgabewerte:

Bis auf GET-Befehle, die einen String zurückgeben, sind die Rückgabewerte aller anderen Funktionen vom Typ int. Im Allgemeinen bedeutet 0 einen Fehler, 1 eine korrekte Ausführung. Wenn andere Werte auftreten, konsultieren Sie die im xmlrpc SDK definierten Fehlercodes für die entsprechenden Fehler.

3.4. Parameter ändern

Da das vereinfachte SDK eine Weiterentwicklung der ursprünglichen SDK-Schnittstelle ist, basiert die Vereinfachung auf der Zuweisung von Standardwerten zu einigen Parametern. In der praktischen Anwendung kann es vorkommen, dass die Standardparameter den Anforderungen nicht genügen. In diesem Fall können die Werte der entsprechenden Standardparameter geändert und dann in den Knoten geladen werden.

Im Quellcodeverzeichnis gibt es eine Parameterdatei namens fairino_remotecmdinterface_para.yaml. Die Parameter in dieser Datei sind die voreingestellten Standardparameter, die zur Vereinfachung der Befehlseingabeparameter dienen. Sie können die Parameter darin nach Ihren spezifischen Bedürfnissen ändern und dann den Befehl zum dynamischen Ändern der Parameter verwenden: ros2 param load fr_command_server ~/ros2_ws/src/fairino_hardware/fairino_remotecmdinterface_para.yaml.

4. API-Beschreibung

  1/*
  2Funktionsbeschreibung: Speichert Informationen eines Gelenkpunktes.
  3id - ID des zu speichernden Punktes, beginnend bei 1. Beachten Sie, dass diese ID unabhängig von der ID der CARTPoint-Punkte ist.
  4double j1-j6 - Positionen der 6 Gelenke, Einheit: Grad.
  5*/
  6int JNTPoint(int id, double j1, double j2, double j3, double j4, double j5, double j6)
  7// Beispiel
  8JNTPoint(1,10,11,12,13,14,15)
  9
 10/*
 11Funktionsbeschreibung: Speichert Informationen eines kartesischen Punktes.
 12id - ID des zu speichernden Punktes, beginnend bei 1. Beachten Sie, dass diese ID unabhängig von der ID der JNTPoint-Punkte ist.
 13double x, y, z, rx, ry, rz - Kartesische Punktinformationen, Positionseinheit: mm, Winkeleinheit: Grad.
 14*/
 15int CARTPoint(int id, double x, y, z, rx, ry, rz)
 16// Beispiel
 17CARTPoint(1,100,110,200,0,0,0)
 18
 19/*
 20Funktionsbeschreibung: Ruft die Gelenk- oder kartesischen Positionsinformationen eines Punktes mit einer bestimmten ID ab.
 21string name - 'JNT' oder 'CART'. JNT steht für das Abrufen von Gelenkpunktinformationen, 'CART' für das Abrufen von kartesischen Punktinformationen.
 22int id - Punkt-ID, beginnend bei 1.
 23*/
 24string GET(string name, int id)
 25// Beispiel
 26GET(JNT,1)
 27
 28/*
 29Funktionsbeschreibung: Schalter für den Führungsmodus (Drag & Teach).
 30uint8_t state - 1 = Führungsmodus einschalten, 0 = Führungsmodus ausschalten.
 31*/
 32int DragTeachSwitch(uint8_t state)
 33// Beispiel
 34DragTeachSwitch(0)
 35
 36/*
 37Funktionsbeschreibung: Schalter für die Roboteraktivierung (Enable).
 38uint8_t state - 1 = Roboter aktivieren (Enable), 0 = Roboter deaktivieren (Disable).
 39*/
 40int RobotEnable(uint8_t state)
 41// Beispiel
 42RobotEnable(1)
 43
 44/*
 45Funktionsbeschreibung: Modusumschaltung.
 46uint8_t state - 1 = Handmodus, 0 = Automatikmodus.
 47*/
 48int Mode(uint8_t state)
 49// Beispiel
 50Mode(1)
 51
 52/*
 53Funktionsbeschreibung: Stellt die Geschwindigkeit des Roboters im aktuellen Modus ein.
 54float vel - Geschwindigkeitsprozentsatz, Bereich 1-100.
 55*/
 56int SetSpeed(float vel)
 57// Beispiel
 58SetSpeed(10)
 59
 60/*
 61Funktionsbeschreibung: Stellt das Werkzeugkoordinatensystem mit der angegebenen ID ein und lädt es.
 62int id - Werkzeugkoordinatensystem-Nummer, Bereich 1-15.
 63float x, y, z, rx, ry, rz - Versatzinformationen des Werkzeugkoordinatensystems.
 64*/
 65int SetToolCoord(int id, float x, float y, float z, float rx, float ry, float rz)
 66// Beispiel
 67SetToolCoord(1,0,0,0,0,0,0)
 68
 69/*
 70Funktionsbeschreibung: Stellt das Werkzeugkoordinatensystem in der Liste ein.
 71int id - Werkzeugkoordinatensystem-Nummer, Bereich 1-15.
 72float x, y, z, rx, ry, rz - Versatzinformationen des Werkzeugkoordinatensystems.
 73*/
 74int SetToolList(int id, float x, float y, float z, float rx, float ry, float rz);
 75// Beispiel
 76SetToolList(1,0,0,0,0,0,0)
 77
 78/*
 79Funktionsbeschreibung: Stellt das externe Werkzeugkoordinatensystem ein.
 80int id - Werkzeugkoordinatensystem-Nummer, Bereich 1-15.
 81float x, y, z, rx, ry, rz - Versatzinformationen des externen Werkzeugkoordinatensystems.
 82*/
 83int SetExToolCoord(int id, float x, float y, float z, float rx, float ry, float rz);
 84// Beispiel
 85SetExToolCoord(1,0,0,0,0,0,0)
 86
 87/*
 88Funktionsbeschreibung: Stellt das externe Werkzeugkoordinatensystem in der Liste ein.
 89int id - Werkzeugkoordinatensystem-Nummer, Bereich 1-15.
 90float x, y, z, rx, ry, rz - Versatzinformationen des externen Werkzeugkoordinatensystems.
 91*/
 92int SetExToolList(int id, float x, float y, float z, float rx, float ry, float rz);
 93// Beispiel
 94SetExToolList(1,0,0,0,0,0,0)
 95
 96/*
 97Funktionsbeschreibung: Stellt das Werkstückkoordinatensystem ein.
 98int id - Werkstückkoordinatensystem-Nummer, Bereich 1-15.
 99float x, y, z, rx, ry, rz - Versatzinformationen des Werkstückkoordinatensystems.
100*/
101int SetWObjCoord(int id, float x, float y, float z, float rx, float ry, float rz);
102// Beispiel
103SetWObjCoord(1,0,0,0,0,0,0)
104
105/*
106Funktionsbeschreibung: Stellt das Werkstückkoordinatensystem in der Liste ein.
107int id - Werkstückkoordinatensystem-Nummer, Bereich 1-15.
108float x, y, z, rx, ry, rz - Versatzinformationen des Werkstückkoordinatensystems.
109*/
110int SetWObjList(int id, float x, float y, float z, float rx, float ry, float rz);
111// Beispiel
112SetWObjList(1,0,0,0,0,0,0)
113
114/*
115Funktionsbeschreibung: Stellt das Gewicht der Endeffektorlast ein.
116float weight - Lastgewicht, Einheit: kg.
117*/
118int SetLoadWeight(float weight);
119// Beispiel
120SetLoadWeight(3.5)
121
122/*
123Funktionsbeschreibung: Stellt die Koordinaten des Schwerpunkts der Endeffektorlast ein.
124float x, y, z - Schwerpunktkoordinaten, Einheit: mm.
125*/
126int SetLoadCoord(float x, float y, float z);
127// Beispiel
128SetLoadCoord(10,20,30)
129
130/*
131Funktionsbeschreibung: Stellt die Einbauart des Roboters ein.
132uint8_t install - Einbauart: 0 = Bodenmontage, 1 = Wandmontage, 2 = Deckenmontage.
133*/
134int SetRobotInstallPos(uint8_t install);
135// Beispiel
136SetRobotInstallPos(0)
137
138/*
139Funktionsbeschreibung: Stellt die Einbauwinkel des Roboters ein (freie Montage).
140double yangle - Neigungswinkel.
141double zangle - Rotationswinkel.
142*/
143int SetRobotInstallAngle(double yangle, double zangle);
144// Beispiel
145SetRobotInstallAngle(90,0)
146
147
148// Sicherheitskonfiguration
149/*
150Funktionsbeschreibung: Stellt die Kollisionsstufen des Roboters ein.
151float level1-level6 - Kollisionsstufen der Achsen 1-6, Bereich 1-10.
152*/
153int SetAnticollision(float level1, float level2, float level3, float level4, float level5, float level6);
154// Beispiel
155SetAnticollision(1,1,1,1,1,1)
156
157/*
158 * @brief  Stellt die Strategie nach einer Kollision ein.
159 * @param [in] strategy  0 = Fehler melden und anhalten, 1 = Weiterlaufen.
160 * @param [in] safeTime  Sicherheitsstopp-Zeit [1000 - 2000] ms.
161 * @param [in] safeDistance  Sicherheitsstopp-Distanz [1-150] mm.
162 * @param [in] safeVel  Sicherheitsgeschwindigkeit [50-250] mm/s.
163 * @param [in] safetyMargin  Sicherheitsfaktoren für J1-J6 [1-10].
164 * @return  Fehlercode.
165*/
166int SetCollisionStrategy(int strategy, int safeTime, int safeDistance, int safeVel, int safetyMargin[])
167// Beispiel
168SetCollisionStrategy(1)
169
170/*
171 * @brief Stellt die Kollisionserkennungsmethode des Roboters ein.
172 * @param [in] method Kollisionserkennungsmethode: 0 = Strommodus; 1 = Doppel-Encoder; 2 = Strom und Doppel-Encoder gleichzeitig aktiviert.
173 * @param [in] thresholdMode Art des Kollisionsstufen-Schwellwerts; 0 = Fester Schwellwert der Kollisionsstufe; 1 = Benutzerdefinierter Kollisionserkennungsschwellwert.
174 * @return Fehlercode.
175*/
176int SetCollisionDetectionMethod(int method, int thresholdMode);
177// Beispiel
178SetCollisionDetectionMethod(0,0)
179
180
181/*
182 * @brief Schaltet die Kollisionserkennung im Stillstand ein/aus.
183 * @param [in] status 0 = aus; 1 = ein.
184 * @return Fehlercode.
185*/
186int SetStaticCollisionOnOff(int status);
187// Beispiel
188SetStaticCollisionOnOff(1)
189
190
191
192/*
193 * @brief Gelenk-Drehmoment-/Leistungsüberwachung.
194 * @param [in] status 0 = aus; 1 = ein.
195 * @param [in] power Maximale eingestellte Leistung (W).
196 * @return Fehlercode.
197*/
198int SetPowerLimit(int status, double power);
199// Beispiel
200SetPowerLimit(1,100)
201
202/*
203 * @brief  Konfiguriert den Kraftsensor.
204 * @param [in] company  Kraftsensor-Hersteller: 17-Kunwei, 19-CASA, 20-ATI, 21-Zhongke Midian, 22-Weihang Minxin, 23-NBIT, 24-Xinjingcheng (XJC), 26-NSR.
205 * @param [in] device  Gerätenummer: Kunwei (0-KWR75B), CASA (0-MCS6A-200-4), ATI (0-AXIA80-M8), Zhongke Midian (0-MST2010), Weihang Minxin (0-WHC6L-YB-10A), NBIT (0-XLH93003ACS), Xinjingcheng XJC (0-XJC-6F-D82), NSR (0-NSR-FTSensorA).
206 * @param [in] softvesion  Softwareversionsnummer, vorübergehend nicht verwendet, Standard 0.
207 * @param [in] bus  Position des Geräts am Endeffektor-Bus, vorübergehend nicht verwendet, Standard 0.
208 * @return Fehlercode.
209*/
210int FT_SetConfig(int company, int device, int softvesion, int bus);
211// Beispiel
212FT_SetConfig(0,1,0,0)
213
214
215
216/*
217 * @brief  Ruft die Kraftsensor-Konfiguration ab.
218 * @param [out] company  Kraftsensor-Hersteller (zur Festlegung).
219 * @param [out] device  Gerätenummer, vorübergehend nicht verwendet, Standard 0.
220 * @param [out] softvesion  Softwareversionsnummer, vorübergehend nicht verwendet, Standard 0.
221 * @param [out] bus  Position des Geräts am Endeffektor-Bus, vorübergehend nicht verwendet, Standard 0.
222 * @return Fehlercode.
223*/
224int FT_GetConfig(int *company, int *device, int *softvesion, int *bus);
225// Beispiel
226FT_GetConfig()
227
228
229/*
230 * @brief  Aktiviert den Kraftsensor.
231 * @param [in] act  0 = Zurücksetzen, 1 = Aktivieren.
232 * @return Fehlercode.
233*/
234int FT_Activate(uint8_t act);
235// Beispiel
236FT_Activate(1)
237
238
239/*
240 * @brief  Setzt den Nullpunkt des Kraftsensors (Tarieren).
241 * @param [in] act  0 = Nullpunkt entfernen, 1 = Nullpunkt korrigieren.
242 * @return Fehlercode.
243*/
244int FT_SetZero(uint8_t act);
245// Beispiel
246FT_SetZero(1)
247
248/*
249 * @brief  Kollisionsüberwachung (Force Guard).
250 * @param [in] flag 0 = deaktivieren, 1 = aktivieren.
251 * @param [in] sensor_id Kraftsensor-Nummer.
252 * @param [in] select  Auswahl der sechs Freiheitsgrade für die Kollisionserkennung: 0 = nicht prüfen, 1 = prüfen.
253 * @param [in] ft  Kollisionskraft/-moment (Mitte), fx, fy, fz, tx, ty, tz.
254 * @param [in] max_threshold Maximaler Schwellwert (obere Toleranz).
255 * @param [in] min_threshold Minimaler Schwellwert (untere Toleranz).
256 * @note   Erkennungsbereich: (ft - min_threshold, ft + max_threshold).
257 * @return Fehlercode.
258*/
259int FT_Guard(uint8_t flag, int sensor_id, uint8_t select[6], ForceTorque *ft, float max_threshold[6], float min_threshold[6]);
260// Beispiel (Parameter entsprechend der Struktur anpassen)
261FT_Guard(1,1,0,0,1,0,0,0,0,0,100,0,0,0,0,0,200,0,0,0,0,0,50,0,0,0)
262
263
264/*
265 * @brief  Kraftregelung (Constant Force Control).
266 * @param [in] flag 0 = deaktivieren, 1 = aktivieren.
267 * @param [in] sensor_id Kraftsensor-Nummer.
268 * @param [in] select  Auswahl der sechs Freiheitsgrade für die Kraftregelung: 0 = nicht regeln, 1 = regeln.
269 * @param [in] ft  Soll-Kraft/-Moment, fx, fy, fz, tx, ty, tz.
270 * @param [in] ft_pid PID-Parameter für Kraftregelung (fx_p, fx_i, fx_d, tx_p, tx_i, tx_d) – Reihenfolge prüfen.
271 * @param [in] adj_sign Adaptive Regelung: 0 = deaktivieren, 1 = aktivieren.
272 * @param [in] ILC_sign ILC (Iterative Learning Control): 0 = stop, 1 = training, 2 = practice.
273 * @param [in] max_dis Maximale Anpassungsdistanz [mm].
274 * @param [in] max_ang Maximaler Anpassungswinkel [°].
275 * @param [in] filter_Sign Filter aktivieren: 0 = aus; 1 = an, Standard = aus.
276 * @param [in] posAdapt_sign Posennachgiebigkeit aktivieren: 0 = aus; 1 = an, Standard = aus.
277 * @param [in] isNoBlock Blockierungs-Flag: 0 = blockierend; 1 = nicht blockierend.
278 * @return Fehlercode.
279*/
280int FT_Control(uint8_t flag, int sensor_id, uint8_t select[6], ForceTorque *ft, float ft_pid[6], uint8_t adj_sign, uint8_t ILC_sign, float max_dis, float max_ang, int filter_Sign = 0, int posAdapt_sign = 0, int isNoBlock = 0);
281// Beispiel (Parameter entsprechend der Struktur anpassen)
282FT_Control(1,1,0,0,1,0,0,0,0,0,-10,0,0,0,0.0005,0,0,0,0,0,0,0,100,10,0,0,0)
283
284
285/*
286 * @brief  Nachgiebigkeitsregelung (Compliance) starten.
287 * @param [in] p  Positionsregelungsfaktor oder Nachgiebigkeitskoeffizient.
288 * @param [in] force  Kraftschwellwert für Aktivierung [N].
289 * @return Fehlercode.
290*/
291int FT_ComplianceStart(float p, float force);
292// Beispiel
293FT_ComplianceStart(0.005,20)
294
295
296/**
297 * @brief  Nachgiebigkeitsregelung (Compliance) stoppen.
298 * @return Fehlercode.
299*/
300int FT_ComplianceStop();
301// Beispiel
302FT_ComplianceStop()
303
304/*
305Funktionsbeschreibung: Stellt den positiven weichen Endanschlag ein. Beachten Sie, dass der eingestellte Wert innerhalb der harten Endanschläge liegen muss.
306float limit1-limit6 - Grenzwerte der 6 Gelenke.
307*/
308int SetLimitPositive(float limit1, float limit2, float limit3, float limit4, float limit5, float limit6);
309// Beispiel
310SetLimitPositive(100,90,90,90,90,90)
311
312/*
313Funktionsbeschreibung: Stellt den negativen weichen Endanschlag ein. Beachten Sie, dass der eingestellte Wert innerhalb der harten Endanschläge liegen muss.
314float limit1-limit6 - Grenzwerte der 6 Gelenke.
315*/
316int SetLimitNegative(float limit1, float limit2, float limit3, float limit4, float limit5, float limit6);
317// Beispiel
318SetLimitNegative(-100,-90,-90,-90,-90,-90)
319
320/*
321Funktionsbeschreibung: Löscht den Fehlerstatus.
322*/
323int ResetAllError();
324
325/*
326Funktionsbeschreibung: Schalter für die Gelenk-Reibungskompensation.
327uint8_t state - 0 = aus, 1 = an.
328*/
329int FrictionCompensationOnOff(uint8_t state);
330// Beispiel
331FrictionCompensationOnOff(1)
332
333/*
334Funktionsbeschreibung: Stellt die Gelenk-Reibungskompensationskoeffizienten ein - Bodenmontage.
335float coeff1-coeff6 - Kompensationskoeffizienten für 6 Gelenke, Bereich 0-1.
336*/
337int SetFrictionValue_level(float coeff1, float coeff2, float coeff3, float coeff4, float coeff5, float coeff6); // Korrigierte Parameterbezeichnung
338// Beispiel
339SetFrictionValue_level(1,1,1,1,1,1)
340
341/*
342Funktionsbeschreibung: Stellt die Gelenk-Reibungskompensationskoeffizienten ein - Wandmontage.
343float coeff1-coeff6 - Kompensationskoeffizienten für 6 Gelenke, Bereich 0-1.
344*/
345int SetFrictionValue_wall(float coeff1, float coeff2, float coeff3, float coeff4, float coeff5, float coeff6); // Korrigierte Parameterbezeichnung
346// Beispiel
347SetFrictionValue_wall(0.5,0.5,0.5,0.5,0.5,0.5)
348
349/*
350Funktionsbeschreibung: Stellt die Gelenk-Reibungskompensationskoeffizienten ein - Deckenmontage.
351float coeff1-coeff6 - Kompensationskoeffizienten für 6 Gelenke, Bereich 0-1.
352*/
353int SetFrictionValue_ceiling(float coeff1, float coeff2, float coeff3, float coeff4, float coeff5, float coeff6); // Korrigierte Parameterbezeichnung
354// Beispiel
355SetFrictionValue_ceiling(0.5,0.5,0.5,0.5,0.5,0.5)
356
357
358// Peripheriesteuerung
359/*
360Funktionsbeschreibung: Aktiviert den Greifer.
361int index - Greifernummer.
362uint8_t act - 0 = Zurücksetzen, 1 = Aktivieren.
363*/
364int ActGripper(int index, uint8_t act);
365// Beispiel
366ActGripper(1,1)
367
368/*
369Funktionsbeschreibung: Steuert den Greifer.
370int index - Greifernummer.
371int pos - Positionsprozentsatz, Bereich 0-100.
372*/
373int MoveGripper(int index, int pos);
374// Beispiel
375MoveGripper(1,10)
376
377
378// I/O-Steuerung
379/*
380Funktionsbeschreibung: Setzt den Digitalausgang des Steuerkastens.
381int id - IO-Nummer, Bereich 0-15.
382uint8_t status - 0 = aus, 1 = ein.
383*/
384int SetDO(int id, uint8_t status);
385// Beispiel
386SetDO(1,1)
387
388/*
389Funktionsbeschreibung: Setzt den Digitalausgang des Werkzeugs.
390int id - IO-Nummer, Bereich 0-1.
391uint8_t status - 0 = aus, 1 = ein.
392*/
393int SetToolDO(int id, uint8_t status);
394// Beispiel
395SetToolDO(0,1)
396
397/*
398Funktionsbeschreibung: Setzt den Analogausgang des Steuerkastens.
399int id - IO-Nummer, Bereich 0-1.
400float value - Prozentwert des Stroms oder der Spannung, Bereich 0-100.
401*/
402int SetAO(int id, float value);
403// Beispiel
404SetAO(1,100)
405
406/*
407Funktionsbeschreibung: Setzt den Analogausgang des Werkzeugs.
408int id - IO-Nummer, Bereich 0.
409float value - Prozentwert des Stroms oder der Spannung, Bereich 0-100.
410*/
411int SetToolAO(int id, float value);
412// Beispiel
413SetToolAO(0,100)
414
415
416// Bewegungsbefehle
417/*
418Funktionsbeschreibung: Roboter-Tippbetrieb (JOG).
419uint8_t ref - 0 = Gelenk-JOG, 2 = JOG im Basiskoordinatensystem, 4 = JOG im Werkzeugkoordinatensystem, 8 = JOG im Werkstückkoordinatensystem.
420uint8_t nb - 1 = Gelenk 1 (oder x-Achse), 2 = Gelenk 2 (oder y-Achse), 3 = Gelenk 3 (oder z-Achse), 4 = Gelenk 4 (oder Rotation um x-Achse), 5 = Gelenk 5 (oder Rotation um y-Achse), 6 = Gelenk 6 (oder Rotation um z-Achse).
421uint8_t dir - 0 = negative Richtung, 1 = positive Richtung.
422float vel - Geschwindigkeitsprozentsatz, Bereich 0-100.
423*/
424int StartJOG(uint8_t ref, uint8_t nb, uint8_t dir, float vel);
425// Beispiel
426StartJOG(1,1,1,10)
427
428/*
429Funktionsbeschreibung: Stoppt den Roboter-Tippbetrieb (JOG).
430uint8_t ref - 0 = Gelenk-JOG stoppen, 2 = JOG im Basiskoordinatensystem stoppen, 4 = JOG im Werkzeugkoordinatensystem stoppen, 8 = JOG im Werkstückkoordinatensystem stoppen.
431*/
432int StopJOG(uint8_t ref);
433// Beispiel
434StopJOG(1)
435
436/*
437Funktionsbeschreibung: Stoppt den Roboter-Tippbetrieb sofort.
438*/
439int ImmStopJOG();
440
441/*
442Funktionsbeschreibung: Bewegung im Gelenkraum.
443string point_name - Name des voreingestellten Punktes, z.B. JNT1 für den Gelenkpunkt mit ID 1, CART1 für den kartesischen Punkt mit ID 1. Der MoveJ-Befehl unterstützt sowohl Gelenk- als auch kartesische Punkte. Achtung: Da der MoveJ-Befehl in seinen Standardparametern Werkzeug- und Werkstückkoordinatensysteme angibt, kann der Befehl zu einem Fehler führen, wenn diese Koordinatensystemnummern nicht mit den aktuell geladenen übereinstimmen. In diesem Fall müssen die Koordinatensystemparameter in den Standardparametern geändert und die Parameter neu geladen werden, bevor der Bewegungsbefehl ausgeführt wird.
444float vel - Befehlsgeschwindigkeitsprozentsatz, Bereich 0-100.
445int tool - Werkzeugkoordinatensystem-Nummer.
446int user - Werkstückkoordinatensystem-Nummer.
447double expos1 - Position der externen Achse 1.
448double expos2 - Position der externen Achse 2.
449double expos3 - Position der externen Achse 3.
450double expos4 - Position der externen Achse 4.
451*/
452int MoveJ(string point_name, float vel, int tool, int user, double expos1, double expos2, double expos3, double expos4);
453// Beispiel
454MoveJ(JNT1,10,1,1,0,0,0,0)
455
456/*
457Funktionsbeschreibung: Linearbewegung im kartesischen Raum.
458string point_name - Name des voreingestellten Punktes, z.B. JNT1 für den Gelenkpunkt mit ID 1, CART1 für den kartesischen Punkt mit ID 1. Der MoveL-Befehl unterstützt sowohl Gelenk- als auch kartesische Punkte. Achtung: Da der MoveL-Befehl in seinen Standardparametern Werkzeug- und Werkstückkoordinatensysteme angibt, kann der Befehl zu einem Fehler führen, wenn diese Koordinatensystemnummern nicht mit den aktuell geladenen übereinstimmen. In diesem Fall müssen die Koordinatensystemparameter in den Standardparametern geändert und die Parameter neu geladen werden, bevor der Bewegungsbefehl ausgeführt wird.
459float vel - Befehlsgeschwindigkeitsprozentsatz, Bereich 0-100.
460int tool - Werkzeugkoordinatensystem-Nummer.
461int user - Werkstückkoordinatensystem-Nummer.
462double expos1 - Position der externen Achse 1.
463double expos2 - Position der externen Achse 2.
464double expos3 - Position der externen Achse 3.
465double expos4 - Position der externen Achse 4.
466*/
467int MoveL(string point_name, float vel, int tool, int user, double expos1, double expos2, double expos3, double expos4);
468// Beispiel
469MoveL(CART1,10,1,1,0,0,0,0)
470
471/*
472Funktionsbeschreibung: Kreisbogenbewegung im kartesischen Raum.
473string point1_name, point2_name - Namen der voreingestellten Punkte, z.B. JNT1 für den Gelenkpunkt mit ID 1, CART1 für den kartesischen Punkt mit ID 1. Der MoveC-Befehl unterstützt sowohl Gelenk- als auch kartesische Punkte, aber beide Punkte müssen vom gleichen Typ sein (d.h. es wird nicht unterstützt, den ersten Punkt als Gelenkpunkt und den zweiten als kartesischen Punkt einzugeben). Achtung: Da der MoveC-Befehl in seinen Standardparametern Werkzeug- und Werkstückkoordinatensysteme angibt, kann der Befehl zu einem Fehler führen, wenn diese Koordinatensystemnummern nicht mit den aktuell geladenen übereinstimmen. In diesem Fall müssen die Koordinatensystemparameter in den Standardparametern geändert und die Parameter neu geladen werden, bevor der Bewegungsbefehl ausgeführt wird.
474float vel - Befehlsgeschwindigkeitsprozentsatz, Bereich 0-100.
475int tool - Werkzeugkoordinatensystem-Nummer.
476int user - Werkstückkoordinatensystem-Nummer.
477double expos1_p1 - Position der externen Achse 1 für Punkt 1.
478double expos2_p1 - Position der externen Achse 2 für Punkt 1.
479double expos3_p1 - Position der externen Achse 3 für Punkt 1.
480double expos4_p1 - Position der externen Achse 4 für Punkt 1.
481double expos1_p2 - Position der externen Achse 1 für Punkt 2.
482double expos2_p2 - Position der externen Achse 2 für Punkt 2.
483double expos3_p2 - Position der externen Achse 3 für Punkt 2.
484double expos4_p2 - Position der externen Achse 4 für Punkt 2.
485*/
486int MoveC(string point1_name, string point2_name, float vel, int tool, int user,
487          double expos1_p1, double expos2_p1, double expos3_p1, double expos4_p1,
488          double expos1_p2, double expos2_p2, double expos3_p2, double expos4_p2);
489// Beispiel
490MoveC(JNT1,JNT2,10,1,1,0,0,0,0,0,0,0,0)
491
492/*
493Funktionsbeschreibung: Startet die Spline-Bewegung.
494*/
495int SplineStart();
496
497/*
498Funktionsbeschreibung: Spline-Bewegung im Gelenkraum. Dieser Befehl unterstützt nur die Eingabe von Gelenkdaten wie JNT1. Die Eingabe eines kartesischen Punktes führt zu einem Fehler.
499string point_name - Name des voreingestellten Punktes, z.B. JNT1 für den Gelenkpunkt mit ID 1.
500float vel - Geschwindigkeitsprozentsatz, Bereich 0-100.
501*/
502int SplinePTP(string point_name, float vel);
503// Beispiel
504SplinePTP(JNT2,10)
505
506/*
507Funktionsbeschreibung: Beendet die Spline-Bewegung.
508*/
509int SplineEnd();
510
511/*
512Funktionsbeschreibung: Startet die Spline-Bewegung im kartesischen Raum.
513uint8_t ctlpoint - 0 = Bahn verläuft durch die Pfadpunkte, 1 = Bahn verläuft nicht durch die Kontrollpunkte (mindestens 4 Punkte erforderlich).
514*/
515int NewSplineStart(uint8_t ctlpoint);
516// Beispiel
517NewSplineStart(1)
518
519/*
520Funktionsbeschreibung: Spline-Bewegung im kartesischen Raum. Es können nur kartesische Punkte wie CART1 eingegeben werden. Die Eingabe eines Gelenkpunktes führt zu einem Fehler.
521string point_name - Name des voreingestellten Punktes, z.B. CART1 für den kartesischen Punkt mit ID 1.
522float vel - Geschwindigkeitsprozentsatz, Bereich 0-100.
523int lastflag - 0 = nicht der letzte Punkt, 1 = letzter Punkt.
524*/
525int NewSplinePoint(string point_name, float vel, int lastflag);
526// Beispiel
527NewSplinePoint(CART2,20,0)
528
529/*
530Funktionsbeschreibung: Beendet die Spline-Bewegung im kartesischen Raum.
531*/
532int NewSplineEnd();
533
534/*
535Funktionsbeschreibung: Stoppt die Bewegung.
536*/
537int StopMotion();
538
539/*
540Funktionsbeschreibung: Startet den globalen Punktversatz.
541int flag - 0 = Versatz im Basis-/Werkstückkoordinatensystem, 2 = Versatz im Werkzeugkoordinatensystem.
542double x, y, z, rx, ry, rz - Versatzpose.
543*/
544int PointsOffsetEnable(int flag, double x, double y, double z, double rx, double ry, double rz);
545// Beispiel
546PointsOffsetEnable(1,10,10,10,0,0,0)
547
548/*
549Funktionsbeschreibung: Beendet den globalen Punktversatz.
550*/
551int PointsOffsetDisable();