1. Przedmowa

fairino_hardware to interfejs API opracowany przez FAIRINO dla robota współpracującego w oparciu o ROS2, mający na celu umożliwienie użytkownikom początkującym łatwiejszego korzystania z SDK FAIRINO. Dzięki plikowi konfiguracyjnemu parametrów, który umożliwia konfigurację domyślnych parametrów, można dostosować się do różnych wymagań klienta.

2. fairino_hardware

W tym rozdziale opisano, jak skonfigurować środowisko uruchomieniowe aplikacji.

2.1. Instalacja podstawowego środowiska

Zaleca się używanie systemu Ubuntu 22.04 LTS (Jammy). Po zakończeniu instalacji systemu należy zainstalować ROS2. Zalecana wersja to ros2-humble. Pełną instrukcję instalacji ROS2 można znaleźć pod adresem: https://docs.ros.org/en/humble/index.html. Przed właściwą kompilacją fairino_hardware należy również zainstalować oficjalny pakiet ros2_control. Pełną instrukcję instalacji ros2_control można znaleźć pod adresem: https://control.ros.org/humble/index.html. Oficjalna strona oferuje dwa sposoby instalacji ros2_control: instalację za pomocą poleceń oraz instalację poprzez kompilację źródeł. Ponieważ instalacja za pomocą poleceń może prowadzić do niepełnej instalacji pakietów funkcjonalnych, zaleca się użycie metody kompilacji źródeł.

Poniżej szczegółowo opisano proces instalacji ROS2 (humble):

  1. Otwórz okno shell

1locale  # check for UTF-8
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  # verify settings
  1. Ustaw źródła

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. Zainstaluj ROS2

1sudo apt update
2sudo apt upgrade
3sudo apt install ros-humble-desktop
  1. Na koniec zainstaluj narzędzia deweloperskie

1sudo apt install ros-dev-tools

Poniżej szczegółowo opisano proces instalacji ros2_control:

  1. Najpierw source zasobów ROS2

1source /opt/ros/humble/setup.bash
  1. Utwórz obszar roboczy ros2_control i pobierz zasoby

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. Zainstaluj pakiety zależności

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

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

2.2. Kompilacja i budowanie fairino_hardware

1. Utwórz obszar roboczy colcon fairino_hardware składa się z dwóch pakietów funkcjonalnych: pakietu funkcjonalnego niestandardowych struktur danych fairino_msgs oraz pakietu funkcjonalnego głównego programu fairino_hardware. Po zainstalowaniu podstawowego środowiska, najpierw utwórz obszar roboczy colcon, na przykład:

Najpierw należy source zasobów ROS2 i ros2_control

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

Następnie utwórz obszar roboczy

1cd ~/
2mkdir -p ros2_ws/src

2. Skompiluj pakiety funkcjonalne Skopiuj kod pakietu instalacyjnego do katalogu ros2_ws/src, a następnie w katalogu ros2_ws uruchom następujące polecenia:

1source ~/ros2_control_ws/install/setup.bash

Po zakończeniu powyższego polecenia uruchom następujące polecenie:

1colcon build --packages-select fairino_msgs

Po zakończeniu kompilacji poprzedniego polecenia, użyj następującego polecenia do kompilacji fairino_hardware:

1colcon build --packages-select fairino_hardware

3. Szybki start

3.1. Proces uruchamiania

W terminalu Ubuntu wpisz:

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

3.2. Proces przeglądania informacji zwrotnej o stanie ramienia mechanicznego

Informacja zwrotna o stanie ramienia mechanicznego jest publikowana przez topic. Użytkownik może zaobserwować odświeżanie danych stanu za pomocą wbudowanych poleceń ros2, może również napisać program w celu pobrania tych danych. Poniżej przedstawiono, jak zaobserwować dane stanu ramienia mechanicznego za pomocą poleceń ros2.

W terminalu Ubuntu wpisz:

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

W oknie terminalu można zobaczyć ciągle odświeżające się dane stanu, jak pokazano na poniższym rysunku.

../_images/fr_ros2_002.png

3.3. Proces wysyłania instrukcji

W terminalu Ubuntu wpisz:

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

Po wykonaniu powyższych poleceń zostanie wywołany interfejs GUI rqt, jak pokazano na poniższym rysunku.

../_images/fr_ros2_003.png

W interfejsie GUI wybierz plugins -> service -> service caller, aby wywołać następujący interfejs. Wybierz usługę /fairino_remote_command_service. W polu expression wprowadź ciąg instrukcji i kliknij Call. W dolnym oknie dialogowym pojawi się odpowiedź.

../_images/fr_ros2_004.png

Ważne

  • Opis zasad dotyczących wprowadzanego ciągu znaków:

Program wewnętrznie filtruje formę wprowadzonego ciągu znaków. Format wprowadzanej funkcji musi mieć postać [nazwa_funkcji](), a ciąg parametrów w nawiasach okrągłych może składać się wyłącznie z liter, cyfr, przecinków i znaku minus. Pojawienie się innych znaków lub spowoduje błąd.

  • Opis wartości zwrotnych instrukcji:

Z wyjątkiem instrukcji GET, która zwraca ciąg znaków, wartości zwrotne pozostałych funkcji są typu int. Zazwyczaj 0 oznacza błąd, 1 oznacza prawidłowe wykonanie. W przypadku pojawienia się innych wartości, należy odnieść się do kodów błędów zdefiniowanych w SDK xmlrpc.

3.4. Proces modyfikacji parametrów

Ponieważ uproszczone SDK jest ulepszeniem natywnego interfejsu SDK, uproszczenie polega na nadaniu pewnym parametrom wartości domyślnych. W praktyce mogą jednak wystąpić sytuacje, w których domyślne parametry nie spełniają wymagań. W takim przypadku można zmodyfikować wartości odpowiednich parametrów domyślnych, a następnie załadować je do węzła.

W plikach źródłowych znajduje się plik parametrów fairino_remotecmdinterface_para.yaml. Parametry w tym pliku są wstępnie ustawionymi wartościami domyślnymi, służącymi do uproszczenia parametrów wejściowych instrukcji. Można je modyfikować zgodnie z własnymi potrzebami, a następnie użyć polecenia do dynamicznej modyfikacji parametrów: ros2 param load fr_command_server ~/ros2_ws/src/fairino_hardware/fairino_remotecmdinterface_para.yaml.

4. Opis API

  1/*
  2Opis funkcji: Zapisuje informację o punkcie stawowym
  3id - numer ID zapisywanego punktu, zaczynając od 1. Uwaga: ten ID jest niezależny od ID punktu CARTPoint
  4double j1-j6 - pozycje 6 stawów, jednostka: stopnie
  5*/
  6int JNTPoint(int id, double j1, double j2, double j3, double j4, double j5, double j6)
  7// Przykład
  8JNTPoint(1,10,11,12,13,14,15)
  9
 10/*
 11Opis funkcji: Zapisuje informację o punkcie kartezjańskim
 12id - numer ID zapisywanego punktu, zaczynając od 1. Uwaga: ten ID jest niezależny od ID punktu JNTPoint
 13double x,y,z,rx,ry,rz - informacja o punkcie kartezjańskim, jednostka pozycji: mm, jednostka kąta: stopnie
 14*/
 15int CARTPoint(int id, double x,y,z,rx,ry,rz)//Zapisuje punkt w przestrzeni kartezjańskiej
 16// Przykład
 17CARTPoint(1,100,110,200,0,0,0)
 18
 19/*
 20Opis funkcji: Pobiera informację o punkcie stawowym lub kartezjańskim o określonym numerze
 21string name - 'JNT' lub 'CART', JNT oznacza pobranie informacji o punkcie stawowym, 'CART' oznacza pobranie informacji o punkcie kartezjańskim
 22int id - ID punktu, zaczynając od 1
 23*/
 24string GET(string name, int id)//Pobiera treść punktu o odpowiednim numerze ID, name może być JNT lub CART
 25// Przykład
 26GET(JNT,1)
 27
 28/*
 29Opis funkcji: Przełącznik trybu przeciągania
 30uint8_t state - 1-włącz tryb przeciągania, 0-wyłącz tryb przeciągania
 31*/
 32int DragTeachSwitch(uint8_t state)
 33// Przykład
 34DragTeachSwitch(0)
 35
 36/*
 37Opis funkcji: Przełącznik załączenia ramienia mechanicznego
 38uint8_t state - 1-załącz ramię mechaniczne, 0-odłącz ramię mechaniczne
 39*/
 40int RobotEnable(uint8_t state)
 41// Przykład
 42RobotEnable(1)
 43
 44/*
 45Opis funkcji: Przełączanie trybu
 46uint8_t state - 1-tryb ręczny, 0-tryb automatyczny
 47*/
 48int Mode(uint8_t state)
 49// Przykład
 50Mode(1)
 51
 52/*
 53Opis funkcji: Ustawia prędkość ramienia mechanicznego w bieżącym trybie
 54float vel - procent prędkości, zakres 1-100
 55*/
 56int SetSpeed(float vel)
 57// Przykład
 58SetSpeed(10)
 59
 60/*
 61Opis funkcji: Ustawia i ładuje układ współrzędnych narzędzia o określonym numerze
 62int id - numer układu współrzędnych narzędzia, zakres 1-15
 63float x,y,z,rx,ry,rz - informacja o przesunięciu układu współrzędnych narzędzia
 64*/
 65int SetToolCoord(int id, float x,float y, float z,float rx,float ry,float rz)
 66// Przykład
 67SetToolCoord(1,0,0,0,0,0,0)
 68
 69/*
 70Opis funkcji: Ustawia listę układów współrzędnych narzędzia
 71int id - numer układu współrzędnych narzędzia, zakres 1-15
 72float x,y,z,rx,ry,rz - informacja o przesunięciu układu współrzędnych narzędzia
 73*/
 74int SetToolList(int id, float x,float y, float z,float rx,float ry,float rz );
 75// Przykład
 76SetToolList(1,0,0,0,0,0,0)
 77
 78/*
 79Opis funkcji: Ustawia zewnętrzny układ współrzędnych narzędzia
 80int id - numer układu współrzędnych narzędzia, zakres 1-15
 81float x,y,z,rx,ry,rz - informacja o przesunięciu zewnętrznego układu współrzędnych narzędzia
 82*/
 83int SetExToolCoord(int id, float x,float y, float z,float rx,float ry,float rz);
 84// Przykład
 85SetExToolCoord(1,0,0,0,0,0,0)
 86
 87/*
 88Opis funkcji: Ustawia listę zewnętrznych układów współrzędnych narzędzia
 89int id - numer układu współrzędnych narzędzia, zakres 1-15
 90float x,y,z,rx,ry,rz - informacja o przesunięciu zewnętrznego układu współrzędnych narzędzia
 91*/
 92int SetExToolList(int id, float x,float y, float z,float rx,float ry,float rz);
 93// Przykład
 94SetExToolList(1,0,0,0,0,0,0)
 95
 96/*
 97Opis funkcji: Ustawia układ współrzędnych przedmiotu
 98int id - numer układu współrzędnych przedmiotu, zakres 1-15
 99float x,y,z,rx,ry,rz - informacja o przesunięciu układu współrzędnych przedmiotu
100*/
101int SetWObjCoord(int id, float x,float y, float z,float rx,float ry,float rz);
102// Przykład
103SetWObjCoord(1,0,0,0,0,0,0)
104
105/*
106Opis funkcji: Ustawia listę układów współrzędnych przedmiotu
107int id - numer układu współrzędnych przedmiotu, zakres 1-15
108float x,y,z,rx,ry,rz - informacja o przesunięciu układu współrzędnych przedmiotu
109*/
110int SetWObjList(int id, float x,float y, float z,float rx,float ry,float rz);
111// Przykład
112SetWObjList(1,0,0,0,0,0,0)
113
114/*
115Opis funkcji: Ustawia masę ładunku końcowego
116float weight - masa ładunku, jednostka kg
117*/
118int SetLoadWeight(float weight);
119// Przykład
120SetLoadWeight(3.5)
121
122/*
123Opis funkcji: Ustawia współrzędne środka ciężkości ładunku końcowego
124float x,y,z - współrzędne środka ciężkości, jednostka mm
125*/
126int SetLoadCoord(float x,float y,float z);
127// Przykład
128SetLoadCoord(10,20,30)
129
130/*
131Opis funkcji: Ustawia sposób instalacji robota
132uint8_t install - sposób instalacji, 0-instalacja normalna, 1-instalacja boczna, 2-instalacja odwrócona
133*/
134int SetRobotInstallPos(uint8_t install);
135// Przykład
136SetRobotInstallPos(0)
137
138/*
139Opis funkcji: Ustawia kąt instalacji robota, instalacja swobodna
140double yangle - kąt nachylenia
141double zangle - kąt obrotu
142*/
143int SetRobotInstallAngle(double yangle,double zangle);
144// Przykład
145SetRobotInstallAngle(90,0)
146
147
148// Konfiguracja bezpieczeństwa
149/*
150Opis funkcji: Ustawia poziom kolizji robota
151float level1-level6 - poziom kolizji dla osi 1-6, zakres 1-10
152*/
153int SetAnticollision(float level1, float level2, float level3, float level4, float level5, folat level6);
154// Przykład
155SetAnticollision(1,1,1,1,1,1)
156
157/*
158     * @brief  Ustawia strategię po kolizji
159     * @param  [in] strategy  0-zatrzymaj z błędem, 1-kontynuuj działanie
160     * @param  [in] safeTime  Czas bezpiecznego zatrzymania [1000 - 2000] ms
161     * @param  [in] safeDistance  Odległość bezpiecznego zatrzymania [1-150] mm
162     * @param  [in] safeVel  Prędkość bezpieczeństwa [50-250] mm/s
163     * @param  [in] safetyMargin  Współczynnik bezpieczeństwa j1-j6 [1-10]
164     * @return  Kod błędu
165*/
166    int SetCollisionStrategy(int strategy, int safeTime, int safeDistance, int safeVel, int safetyMargin[])
167// Przykład
168SetCollisionStrategy(1)
169
170/*
171     * @brief Ustawia metodę wykrywania kolizji robota
172     * @param [in] method Metoda wykrywania kolizji: 0-tryb prądowy; 1-podwójny enkoder; 2-tryb prądowy i podwójny enkoder włączone jednocześnie
173 * @param [in] thresholdMode Sposób progu poziomu kolizji; 0-stały próg poziomu kolizji; 1-niestandardowy próg wykrywania kolizji
174     * @return Kod błędu
175*/
176    int SetCollisionDetectionMethod(int method, int thresholdMode);
177// Przykład
178SetCollisionDetectionMethod(0,0)
179
180
181/*
182     * @brief Ustawia włączanie/wyłączanie wykrywania kolizji w stanie spoczynku
183     * @param  [in] status 0-wyłączone; 1-włączone
184     * @return Kod błędu
185*/
186    int SetStaticCollisionOnOff(int status);
187// Przykład
188SetStaticCollisionOnOff(1)
189
190
191
192/*
193     * @brief Wykrywanie momentu obrotowego i mocy stawu
194     * @param  [in] status 0-wyłączone; 1-włączone
195     * @param  [in] power Ustawiona maksymalna moc (W)
196     * @return Kod błędu
197*/
198    int SetPowerLimit(int status, double power);
199//Przykład
200SetPowerLimit(1,100)
201
202/*
203     * @brief  Konfiguruje czujnik siły
204     * @param  [in] company   Producent czujnika siły, 17-Kunwei Technology, 19-Chińskie Akademia Technologii Kosmicznych, 20-ATI sensor, 21-Zhongke Midian, 22-Weihang Minxin, 23-NBIT, 24-Xinjingcheng (XJC), 26-NSR
205     * @param  [in] device   Numer urządzenia, Kunwei(0-KWR75B), Chińska Akademia Technologii Kosmicznych(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   Numer wersji oprogramowania, tymczasowo nieużywane, domyślnie 0
207     * @param  [in] bus  Pozycja magistrali, na której zawieszono urządzenie, tymczasowo nieużywane, domyślnie 0
208     * @return  Kod błędu
209*/
210    int FT_SetConfig(int company, int device, int softvesion, int bus);
211// Przykład
212FT_SetConfig(0,1,0,0)
213
214
215
216/*
217     * @brief  Pobiera konfigurację czujnika siły
218     * @param  [out] company   Producent czujnika siły, do ustalenia
219     * @param  [out] device   Numer urządzenia, tymczasowo nieużywane, domyślnie 0
220     * @param  [out] softvesion   Numer wersji oprogramowania, tymczasowo nieużywane, domyślnie 0
221     * @param  [out] bus  Pozycja magistrali, na której zawieszono urządzenie, tymczasowo nieużywane, domyślnie 0
222     * @return  Kod błędu
223*/
224    int FT_GetConfig(int *company, int *device, int *softvesion, int *bus);
225// Przykład
226FT_GetConfig()
227
228
229/*
230     * @brief  Aktywacja czujnika siły
231     * @param  [in] act  0-reset, 1-aktywacja
232     * @return  Kod błędu
233*/
234    int FT_Activate(uint8_t act);
235// Przykład
236FT_Activate(1)
237
238
239/*
240     * @brief  Zerowanie czujnika siły
241     * @param  [in] act  0-usunięcie zera, 1-korekta zera
242     * @return  Kod błędu
243*/
244    int FT_SetZero(uint8_t act);
245// Przykład
246FT_SetZero(1)
247
248/*
249     * @brief  Ochrona przed kolizją
250     * @param  [in] flag 0-wyłącz ochronę przed kolizją, 1-włącz ochronę przed kolizją
251     * @param  [in] sensor_id Numer czujnika siły
252     * @param  [in] select  Wybór, czy sześć stopni swobody ma wykrywać kolizję, 0-nie wykrywa, 1-wykrywa
253     * @param  [in] ft  Siła/moment kolizji, fx, fy, fz, tx, ty, tz
254     * @param  [in] max_threshold Maksymalny próg
255     * @param  [in] min_threshold Minimalny próg
256     * @note   Zakres wykrywania siły/momentu: (ft - min_threshold, ft + max_threshold)
257     * @return  Kod błędu
258*/
259    int FT_Guard(uint8_t flag, int sensor_id, uint8_t select[6], ForceTorque *ft, float max_threshold[6], float min_threshold[6]);
260// Przykład
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  Sterowanie stałą siłą
266     * @param  [in] flag 0-wyłącz sterowanie stałą siłą, 1-włącz sterowanie stałą siłą
267     * @param  [in] sensor_id Numer czujnika siły
268     * @param  [in] select  Wybór, czy sześć stopni swobody ma wykrywać kolizję, 0-nie wykrywa, 1-wykrywa
269     * @param  [in] ft  Siła/moment kolizji, fx, fy, fz, tx, ty, tz
270     * @param  [in] ft_pid Parametry pid siły, parametry pid momentu
271     * @param  [in] adj_sign Sterowanie uruchamianiem/zatrzymywaniem adaptacji, 0-wyłączone, 1-włączone
272     * @param  [in] ILC_sign Sterowanie uruchamianiem/zatrzymywaniem ILC, 0-zatrzymaj, 1-trening, 2-praktyka
273     * @param  [in] max_dis Maksymalna odległość regulacji, jednostka mm
274     * @param  [in] max_ang Maksymalny kąt regulacji, jednostka deg
275     * @param  [in] filter_Sign Znacznik włączenia filtrowania 0-wył.; 1-wł., domyślnie wyłączone
276 * @param  [in] posAdapt_sign Znacznik włączenia zgodności orientacji 0-wył.; 1-wł., domyślnie wyłączone
277 * @param  [in] isNoBlock Znacznik blokowania, 0-blokujące; 1-nieblokujące
278     * @return  Kod błędu
279*/
280    int 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// Przykład
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  Włączenie sterowania podatnego
287     * @param  [in] p Współczynnik regulacji pozycji lub współczynnik podatności
288     * @param  [in] force Próg siły włączenia podatności, jednostka N
289     * @return  Kod błędu
290*/
291    int FT_ComplianceStart(float p, float force);
292// Przykład
293FT_ComplianceStart(0.005,20)
294
295
296/**
297     * @brief  Wyłączenie sterowania podatnego
298     * @return  Kod błędu
299*/
300    int FT_ComplianceStop();
301// Przykład
302FT_ComplianceStop()
303
304/*
305Opis funkcji: Ustawia dodatni limit, uwaga: ustawiona wartość musi mieścić się w zakresie twardego limitu
306float limit1-limit6 - wartości limitu dla 6 stawów
307*/
308int SetLimitPositive(float limit1, float limit2, float limit3, float limit4, float limit5, float limit6);
309// Przykład
310SetLimitPositive(100,90,90,90,90,90)
311
312/*
313Opis funkcji: Ustawia ujemny limit, uwaga: ustawiona wartość musi mieścić się w zakresie twardego limitu
314float limit1-limit6 - wartości limitu dla 6 stawów
315*/
316int SetLimitNegative(float limit1, float limit2, float limit3, float limit4, float limit5, float limit6);
317// Przykład
318SetLimitNegative(-100,-90,-90,-90,-90,-90)
319
320/*
321Opis funkcji: Czyszczenie stanu błędu
322*/
323int ResetAllError();
324
325/*
326Opis funkcji: Przełącznik kompensacji tarcia stawów
327uint8_t state - 0-wył., 1-wł.
328*/
329int FrictionCompensationOnOff(uint8_t state);
330// Przykład
331FrictionCompensationOnOff(1)
332
333/*
334Opis funkcji: Ustawia współczynnik kompensacji tarcia stawów - instalacja normalna
335float coeff1-coeff6 - współczynniki kompensacji dla 6 stawów, zakres 0-1
336*/
337int SetFrictionValue_level(float coeff1,float coeff1,float coeff3,float coeff4,float coeff5,float coeff6);
338// Przykład
339SetFrictionValue_level(1,1,1,1,1,1)
340
341/*
342Opis funkcji: Ustawia współczynnik kompensacji tarcia stawów - instalacja boczna
343float coeff1-coeff6 - współczynniki kompensacji dla 6 stawów, zakres 0-1
344*/
345int SetFrictionValue_wall(float coeff1,float coeff1,float coeff3,float coeff4,float coeff5,float coeff6);
346// Przykład
347SetFrictionValue_wall(0.5,0.5,0.5,0.5,0.5,0.5)
348
349/*
350Opis funkcji: Ustawia współczynnik kompensacji tarcia stawów - instalacja odwrócona
351float coeff1-coeff6 - współczynniki kompensacji dla 6 stawów, zakres 0-1
352*/
353int SetFrictionValue_ceiling(float coeff1,float coeff1,float coeff3,float coeff4,float coeff5,float coeff6);
354// Przykład
355SetFrictionValue_ceiling(0.5,0.5,0.5,0.5,0.5,0.5)
356
357
358// Sterowanie urządzeniami peryferyjnymi
359/*
360Opis funkcji: Aktywacja chwytaka
361int index - numer chwytaka
362uint8_t act - 0-reset, 1-aktywacja
363*/
364int ActGripper(int index,uint8_t act);
365// Przykład
366ActGripper(1,1)
367
368/*
369Opis funkcji: Sterowanie chwytakiem
370int index - numer chwytaka
371int pos - procent pozycji, zakres 0-100
372*/
373int MoveGripper(int index,int pos);
374// Przykład
375MoveGripper(1,10)
376
377
378// Sterowanie I/O
379/*
380Opis funkcji: Ustawia wyjście cyfrowe skrzynki sterowniczej
381int id - numer I/O, zakres 0-15
382uint8_t status - 0-wył., 1-wł.
383*/
384int SetDO(int id,uint8_t status);
385// Przykład
386SetDO(1,1)
387
388/*
389Opis funkcji: Ustawia wyjście cyfrowe narzędzia
390int id - numer I/O, zakres 0-1
391uint8_t status - 0-wył., 1-wł.
392*/
393int SetToolDO(int id,uint8_t status);
394// Przykład
395SetToolDO(0,1)
396
397/*
398Opis funkcji: Ustawia wyjście analogowe skrzynki sterowniczej
399int id - numer I/O, zakres 0-1
400float value - procent wartości prądu lub napięcia, zakres 0-100
401*/
402int SetAO(int id,float value);
403// Przykład
404SetAO(1,100)
405
406/*
407Opis funkcji: Ustawia wyjście analogowe narzędzia
408int id - numer I/O, zakres 0
409float value - procent wartości prądu lub napięcia, zakres 0-100
410*/
411int SetToolAO(int id,float value);
412// Przykład
413SetToolAO(0,100)
414
415
416// Instrukcje ruchu
417/*
418Opis funkcji: Punktowanie robota
419uint8_t ref - 0-punktowanie stawów, 2-punktowanie w podstawowym układzie współrzędnych, 4-punktowanie w układzie współrzędnych narzędzia, 8-punktowanie w układzie współrzędnych przedmiotu
420uint8_t nb - 1-staw 1 (lub oś x), 2-staw 2 (lub oś y), 3-staw 3 (lub oś z), 4-staw 4 (lub obrót wokół osi x), 5-staw 5 (lub obrót wokół osi y), 6-staw 6 (lub obrót wokół osi z)
421uint8_t dir - 0-kierunek ujemny, 1-kierunek dodatni
422float vel - procent prędkości, zakres 0-100
423*/
424int StartJOG(uint8_t ref, uint8_t nb, uint8_t dir, float vel);
425// Przykład
426StartJOG(1,1,1,10)
427
428/*
429Opis funkcji: Zatrzymanie punktowania robota
430uint8_t ref - 0-zatrzymanie punktowania stawów, 2-zatrzymanie punktowania w podstawowym układzie współrzędnych, 4-zatrzymanie punktowania w układzie współrzędnych narzędzia, 8-zatrzymanie punktowania w układzie współrzędnych przedmiotu
431*/
432int StopJOG(uint8_t ref);
433// Przykład
434StopJOG(1)
435
436/*
437Opis funkcji: Natychmiastowe zatrzymanie punktowania robota
438*/
439int ImmStopJOG();
440
441/*
442Opis funkcji: Ruch w przestrzeni stawów
443string point_name - nazwa wstępnie zapisanego punktu, np. JNT1 oznacza punkt stawowy o numerze 1, CART1 oznacza punkt kartezjański o numerze 1. Instrukcja MoveJ obsługuje wprowadzanie punktów stawowych lub kartezjańskich. Należy pamiętać, że instrukcja MoveJ zawiera w parametrach domyślnych określony układ współrzędnych narzędzia i układ współrzędnych przedmiotu. Jeśli numery tych układów są niezgodne z aktualnie załadowanymi, instrukcja spowoduje błąd. Należy zmodyfikować parametry układów współrzędnych w parametrach domyślnych i załadować parametry przed uruchomieniem tej instrukcji ruchu.
444float vel - procent prędkości instrukcji, zakres 0-100
445int tool - numer układu współrzędnych narzędzia
446int user - numer układu współrzędnych przedmiotu
447double expos1 - pozycja zewnętrznej osi 1
448double expos2 - pozycja zewnętrznej osi 2
449double expos3 - pozycja zewnętrznej osi 3
450double expos4 - pozycja zewnętrznej osi 4
451*/
452int MoveJ(string point_name, float vel, int tool, int user, double expos1, double expos2, double expos3, double expos4);//point_name to wprowadzona wstępnie zapisana informacja o punkcie
453// Przykład
454MoveJ(JNT1,10,1,1,0,0,0,0)
455
456/*
457Opis funkcji: Ruch liniowy w przestrzeni kartezjańskiej
458string point_name - nazwa wstępnie zapisanego punktu, np. JNT1 oznacza punkt stawowy o numerze 1, CART1 oznacza punkt kartezjański o numerze 1. Instrukcja MoveL obsługuje wprowadzanie punktów stawowych lub kartezjańskich. Należy pamiętać, że instrukcja MoveL zawiera w parametrach domyślnych określony układ współrzędnych narzędzia i układ współrzędnych przedmiotu. Jeśli numery tych układów są niezgodne z aktualnie załadowanymi, instrukcja spowoduje błąd. Należy zmodyfikować parametry układów współrzędnych w parametrach domyślnych i załadować parametry przed uruchomieniem tej instrukcji ruchu.
459float vel - procent prędkości instrukcji, zakres 0-100
460int tool - numer układu współrzędnych narzędzia
461int user - numer układu współrzędnych przedmiotu
462double expos1 - pozycja zewnętrznej osi 1
463double expos2 - pozycja zewnętrznej osi 2
464double expos3 - pozycja zewnętrznej osi 3
465double expos4 - pozycja zewnętrznej osi 4
466*/
467int MoveL(string point_name, float vel, int tool, int user, double expos1, double expos2, double expos3, double expos4);
468// Przykład
469MoveL(CART1,10,1,1,0,0,0,0)
470
471/*
472Opis funkcji: Ruch łukowy w przestrzeni kartezjańskiej
473string point1_name, point2_name - nazwy wstępnie zapisanych punktów, np. JNT1 oznacza punkt stawowy o numerze 1, CART1 oznacza punkt kartezjański o numerze 1. Instrukcja MoveC obsługuje wprowadzanie punktów stawowych lub kartezjańskich, ale oba punkty muszą być tego samego typu, tzn. nie obsługuje wprowadzenia pierwszego punktu jako punktu stawowego, a drugiego jako punktu kartezjańskiego. Należy pamiętać, że instrukcja MoveC zawiera w parametrach domyślnych określony układ współrzędnych narzędzia i układ współrzędnych przedmiotu. Jeśli numery tych układów są niezgodne z aktualnie załadowanymi, instrukcja spowoduje błąd. Należy zmodyfikować parametry układów współrzędnych w parametrach domyślnych i załadować parametry przed uruchomieniem tej instrukcji ruchu.
474float vel - procent prędkości instrukcji, zakres 0-100
475int tool - numer układu współrzędnych narzędzia
476int user - numer układu współrzędnych przedmiotu
477double expos1 - pozycja zewnętrznej osi 1 dla punktu 1
478double expos2 - pozycja zewnętrznej osi 2 dla punktu 1
479double expos3 - pozycja zewnętrznej osi 3 dla punktu 1
480double expos4 - pozycja zewnętrznej osi 4 dla punktu 1
481double expos1 - pozycja zewnętrznej osi 1 dla punktu 2
482double expos2 - pozycja zewnętrznej osi 2 dla punktu 2
483double expos3 - pozycja zewnętrznej osi 3 dla punktu 2
484double expos4 - pozycja zewnętrznej osi 4 dla punktu 2
485*/
486int MoveC(string point1_name, string point2_name, float vel, int tool, int user, double expos1, double expos2, double expos3, double expos4, double expos1, double expos2, double expos3, double expos4);
487// Przykład
488MoveC(JNT1,JNT2,10,1,1,0,0,0,0,0,0,0,0)
489
490/*
491Opis funkcji: Rozpoczęcie ruchu po krzywej średniej
492*/
493int SplineStart();
494
495/*
496Opis funkcji: Ruch po krzywej średniej w przestrzeni stawów. Instrukcja obsługuje tylko wprowadzanie danych stawowych, takich jak JNT1. Wprowadzenie punktu kartezjańskiego spowoduje błąd.
497string point_name - nazwa wstępnie zapisanego punktu, np. JNT1 oznacza punkt stawowy o numerze 1.
498float vel - procent prędkości, zakres 0-100
499*/
500int SplinePTP(string point_name, float vel);
501// Przykład
502SplinePTP(JNT2,10)
503
504/*
505Opis funkcji: Zakończenie ruchu po krzywej średniej
506*/
507int SplineEnd();
508
509/*
510Opis funkcji: Rozpoczęcie ruchu po krzywej średniej w przestrzeni kartezjańskiej
511uint8_t ctlpoint - 0-trajektoria przechodzi przez punkty ścieżki, 1-trajektoria nie przechodzi przez punkty sterujące, wymagane co najmniej 4 punkty
512*/
513int NewSplineStart(uint8_t ctlpoint);
514// Przykład
515NewSplineStart(1)
516
517/*
518Opis funkcji: Ruch po krzywej średniej w przestrzeni kartezjańskiej. Można wprowadzać tylko punkty kartezjańskie, takie jak CART1. Wprowadzenie punktu stawowego spowoduje błąd.
519string point_name - nazwa wstępnie zapisanego punktu, np. CART1 oznacza punkt kartezjański o numerze 1.
520float vel - procent prędkości, zakres 0-100
521int lastflag - 0-nie jest ostatnim punktem, 1-jest ostatnim punktem
522*/
523int NewSplinePoint(string point_name, float vel, int lastflag);
524// Przykład
525NewSplinePoint(JNT2,20,0)
526
527/*
528Opis funkcji: Zakończenie ruchu po krzywej średniej w przestrzeni kartezjańskiej
529*/
530int NewSplineEnd();
531
532/*
533Opis funkcji: Zatrzymanie ruchu
534*/
535int StopMotion();
536
537/*
538Opis funkcji: Rozpoczęcie globalnego przesunięcia punktów
539int flag - 0-przesunięcie w podstawowym układzie współrzędnych / układzie współrzędnych przedmiotu, 2-przesunięcie w układzie współrzędnych narzędzia
540double x,y,z,rx,ry,rz - wartość przesunięcia pozycji i orientacji
541*/
542int PointsOffsetEnable(int flag, double x, double y, double z, double rx, double ry, double rz);
543// Przykład
544PointsOffsetEnable(1,10,10,10,0,0,0)
545
546/*
547Opis funkcji: Zakończenie globalnego przesunięcia punktów
548*/
549int PointsOffsetDisable();