1. Prefazione

fairino_hardware è un’interfaccia API sviluppata da Fairino Innovation Collaborative Robot basata su ROS2, progettata per consentire agli utenti alle prime armi di utilizzare più facilmente l’SDK di Fair. Configurando i parametri predefiniti attraverso il file di configurazione dei parametri, è possibile adattarsi alle diverse esigenze dei clienti.

2. fairino_hardware

Questo capitolo descrive come configurare l’ambiente di esecuzione dell’APP.

2.1. Installazione Ambiente Base

Si consiglia di utilizzare Ubuntu 22.04 LTS (Jammy). Dopo l’installazione del sistema, è necessario installare ROS2; si raccomanda ros2-humble. L’installazione completa di ROS2 può essere consultata nel tutorial: https://docs.ros.org/en/humble/index.html. Prima di compilare ufficialmente fairino_hardware, è necessario installare anche il pacchetto ufficiale ros2_control. L’installazione completa di ros2_control può essere consultata nel tutorial: https://control.ros.org/humble/index.html. L’ufficiale fornisce due metodi di installazione per ros2_control: installazione tramite comando e installazione tramite compilazione del codice sorgente. Poiché l’installazione tramite comando potrebbe causare un’installazione incompleta dei pacchetti, si consiglia di utilizzare il metodo di installazione tramite compilazione del codice sorgente.

Di seguito viene dettagliato il processo di installazione di ROS2 (humble):

  1. Aprire una finestra shell

1locale  # verificare 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  # verificare le impostazioni
  1. Configurare le sorgenti

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

1sudo apt update
2sudo apt upgrade
3sudo apt install ros-humble-desktop
  1. Infine, installare gli strumenti dev

1sudo apt install ros-dev-tools

Di seguito viene dettagliato il processo di installazione di ros2_control:

  1. Prima, eseguire il source delle risorse ROS2

1source /opt/ros/humble/setup.bash
  1. Creare l’area di lavoro di ros2_control, scaricare le risorse

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. Installare i pacchetti dipendenti

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

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

2.2. Compilazione e Costruzione di fairino_hardware

1. Creare un’area di lavoro colcon fairino_hardware è composto da due pacchetti funzionali: uno è il pacchetto di strutture dati personalizzate fairino_msgs e l’altro è il pacchetto principale del programma fairino_hardware. Dopo aver installato l’ambiente base, creare prima un’area di lavoro colcon, ad esempio:

Prima è necessario eseguire il source delle risorse ROS2 e ros2_control

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

Quindi creare l’area di lavoro

1cd ~/
2mkdir -p ros2_ws/src

2. Compilare i pacchetti funzionali Copiare il codice del pacchetto di installazione nella directory ros2_ws/src, quindi eseguire il seguente comando nella directory ros2_ws:

1source ~/ros2_control_ws/install/setup.bash

Dopo il completamento del comando, eseguire il seguente comando:

1colcon build --packages-select fairino_msgs

Dopo aver completato la compilazione del comando precedente, utilizzare il seguente comando per compilare fairino_hardware:

1colcon build --packages-select fairino_hardware

3. Inizio Rapido

3.1. Procedura di Avvio

In Ubuntu, aprire la riga di comando e inserire:

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

3.2. Procedura per Visualizzare il Feedback dello Stato del Braccio Robotico

Il feedback dello stato del braccio robotico viene pubblicato tramite topic. Gli utenti possono osservare l’aggiornamento dei dati di stato tramite i comandi integrati di ROS2, oppure scrivere un programma per acquisire tali dati. Di seguito viene mostrato come osservare i dati di stato del braccio robotico tramite i comandi ROS2.

In Ubuntu, aprire la riga di comando e inserire:

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

Nella finestra della riga di comando si vedranno i dati di stato aggiornati continuamente, come mostrato nella figura seguente.

../_images/fr_ros2_002.png

3.3. Procedura per Invio Comandi

In Ubuntu, aprire la riga di comando e inserire:

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

Dopo l’esecuzione del comando sopra, verrà visualizzata un’interfaccia GUI rqt, come mostrato nella figura seguente.

../_images/fr_ros2_003.png

Nell’interfaccia GUI, selezionare plugins -> service -> service caller, per visualizzare l’interfaccia seguente. Selezionare /fairino_remote_command_service, inserire la stringa del comando nel campo expression, quindi fare clic su call per vedere le informazioni di risposta apparire nella finestra di dialogo sottostante.

../_images/fr_ros2_004.png

Importante

  • Regole per la stringa di input:

Il programma filtra internamente il formato della stringa di input. Il formato di input della funzione deve essere [nome_funzione]() e la stringa dei parametri tra parentesi tonde deve essere composta solo da lettere, numeri, virgole e segni meno. La presenza di altri caratteri o spazi causerà un errore.

  • Spiegazione del valore di feedback del comando:

Ad eccezione del comando GET che restituisce una stringa, i valori di feedback di tutte le altre funzioni sono di tipo int. Generalmente, 0 indica un errore, 1 indica un’esecuzione corretta. Se compaiono altri valori, fare riferimento al codice di errore definito nell’SDK XMLRPC corrispondente.

3.4. Procedura di Modifica dei Parametri

Poiché l’SDK semplificato è migliorato rispetto alle interfacce SDK native, la semplificazione è possibile grazie all’assegnazione di alcuni valori di parametri predefiniti. Tuttavia, durante l’uso effettivo, può capitare che i parametri predefiniti non soddisfino le esigenze. In questo caso, è possibile modificare i valori dei parametri predefiniti corrispondenti e poi caricarli nel nodo.

Nel file del codice sorgente esiste un file di parametri fairino_remotecmdinterface_para.yaml. I parametri in questo file sono parametri predefiniti impostati in anticipo, utilizzati per semplificare i parametri di input dei comandi. È possibile modificare questi parametri in base alle proprie esigenze specifiche, quindi utilizzare il comando per modificare dinamicamente i parametri: ros2 param load fr_command_server ~/ros2_ws/src/fairino_hardware/fairino_remotecmdinterface_para.yaml.

4. Descrizione API

  1/*
  2Descrizione funzionale: Memorizza un punto di posizione articolare.
  3id - Numero ID punto da memorizzare, a partire da 1. Nota: questo ID è indipendente dagli ID dei punti CARTPoint.
  4double j1-j6 - Posizioni dei 6 giunti, unità in gradi.
  5*/
  6int JNTPoint(int id, double j1, double j2, double j3, double j4, double j5, double j6)
  7// Esempio
  8JNTPoint(1,10,11,12,13,14,15)
  9
 10/*
 11Descrizione funzionale: Memorizza un punto di posizione cartesiana.
 12id - Numero ID punto da memorizzare, a partire da 1. Nota: questo ID è indipendente dagli ID dei punti JNTPoint.
 13double x,y,z,rx,ry,yz - Informazioni punto cartesiano, unità posizione: mm, unità angolo: gradi.
 14*/
 15int CARTPoint(int id, double x,y,z,rx,ry,rz) // Memorizza un punto nello spazio cartesiano.
 16// Esempio
 17CARTPoint(1,100,110,200,0,0,0)
 18
 19/*
 20Descrizione funzionale: Ottiene le informazioni di posizione articolare o cartesiana del punto con l'ID specificato.
 21string name - 'JNT' o 'CART'. JNT indica ottenere informazioni punto articolare, 'CART' indica ottenere informazioni punto cartesiano.
 22int id - ID punto, a partire da 1.
 23*/
 24string GET(string name, int id) // Ottiene il contenuto del punto corrispondente all'ID. name può essere JNT o CART.
 25// Esempio
 26GET(JNT,1)
 27
 28/*
 29Descrizione funzionale: Interruttore modalità trascinamento.
 30uint8_t state - 1- Attiva modalità trascinamento, 0- Disattiva modalità trascinamento.
 31*/
 32int DragTeachSwitch(uint8_t state)
 33// Esempio
 34DragTeachSwitch(0)
 35
 36/*
 37Descrizione funzionale: Interruttore abilitazione braccio robotico.
 38uint8_t state - 1- Abilita braccio robotico, 0- Disabilita braccio robotico.
 39*/
 40int RobotEnable(uint8_t state)
 41// Esempio
 42RobotEnable(1)
 43
 44/*
 45Descrizione funzionale: Cambio modalità.
 46uint8_t state - 1- Modalità manuale, 0- Modalità automatica.
 47*/
 48int Mode(uint8_t state)
 49// Esempio
 50Mode(1)
 51
 52/*
 53Descrizione funzionale: Imposta la velocità del braccio robotico nella modalità corrente.
 54float vel - Percentuale velocità, intervallo 1-100.
 55*/
 56int SetSpeed(float vel)
 57// Esempio
 58SetSpeed(10)
 59
 60/*
 61Descrizione funzionale: Imposta e carica il sistema di coordinate utensile con l'ID specificato.
 62int id - Numero sistema di coordinate utensile, intervallo 1-15.
 63float x,y,z,rx,ry,rz - Informazioni offset del sistema di coordinate utensile.
 64*/
 65int SetToolCoord(int id, float x,float y, float z,float rx,float ry,float rz)
 66// Esempio
 67SetToolCoord(1,0,0,0,0,0,0)
 68
 69/*
 70Descrizione funzionale: Imposta l'elenco dei sistemi di coordinate utensile.
 71int id - Numero sistema di coordinate utensile, intervallo 1-15.
 72float x,y,z,rx,ry,rz - Informazioni offset del sistema di coordinate utensile.
 73*/
 74int SetToolList(int id, float x,float y, float z,float rx,float ry,float rz );
 75// Esempio
 76SetToolList(1,0,0,0,0,0,0)
 77
 78/*
 79Descrizione funzionale: Imposta il sistema di coordinate utensile esterno.
 80int id - Numero sistema di coordinate utensile, intervallo 1-15.
 81float x,y,z,rx,ry,rz - Informazioni offset del sistema di coordinate utensile esterno.
 82*/
 83int SetExToolCoord(int id, float x,float y, float z,float rx,float ry,float rz);
 84// Esempio
 85SetExToolCoord(1,0,0,0,0,0,0)
 86
 87/*
 88Descrizione funzionale: Imposta l'elenco dei sistemi di coordinate utensile esterni.
 89int id - Numero sistema di coordinate utensile, intervallo 1-15.
 90float x,y,z,rx,ry,rz - Informazioni offset del sistema di coordinate utensile esterno.
 91*/
 92int SetExToolList(int id, float x,float y, float z,float rx,float ry,float rz);
 93// Esempio
 94SetExToolList(1,0,0,0,0,0,0)
 95
 96/*
 97Descrizione funzionale: Imposta il sistema di coordinate pezzo.
 98int id - Numero sistema di coordinate pezzo, intervallo 1-15.
 99float x,y,z,rx,ry,rz - Informazioni offset del sistema di coordinate pezzo.
100*/
101int SetWObjCoord(int id, float x,float y, float z,float rx,float ry,float rz);
102// Esempio
103SetWObjCoord(1,0,0,0,0,0,0)
104
105/*
106Descrizione funzionale: Imposta l'elenco dei sistemi di coordinate pezzo.
107int id - Numero sistema di coordinate pezzo, intervallo 1-15.
108float x,y,z,rx,ry,rz - Informazioni offset del sistema di coordinate pezzo.
109*/
110int SetWObjList(int id, float x,float y, float z,float rx,float ry,float rz);
111// Esempio
112SetWObjList(1,0,0,0,0,0,0)
113
114/*
115Descrizione funzionale: Imposta il peso del carico terminale.
116float weight - Peso carico, unità kg.
117*/
118int SetLoadWeight(float weight);
119// Esempio
120SetLoadWeight(3.5)
121
122/*
123Descrizione funzionale: Imposta le coordinate del centro di massa del carico terminale.
124float x,y,z - Coordinate centro di massa, unità mm.
125*/
126int SetLoadCoord(float x,float y,float z);
127// Esempio
128SetLoadCoord(10,20,30)
129
130/*
131Descrizione funzionale: Imposta il metodo di installazione del robot.
132uint8_t install - Metodo installazione, 0- Installazione normale, 1- Installazione laterale, 2- Installazione a soffitto.
133*/
134int SetRobotInstallPos(uint8_t install);
135// Esempio
136SetRobotInstallPos(0)
137
138/*
139Descrizione funzionale: Imposta l'angolo di installazione del robot, installazione libera.
140double yangle - Angolo di inclinazione.
141double zangle - Angolo di rotazione.
142*/
143int SetRobotInstallAngle(double yangle,double zangle);
144// Esempio
145SetRobotInstallAngle(90,0)
146
147
148// Configurazione Sicurezza
149/*
150Descrizione funzionale: Imposta il livello di collisione del robot.
151float level1-level6 - Livello di collisione per gli assi 1-6, intervallo 1-10.
152*/
153int SetAnticollision(float level1, float level2, float level3, float level4, float level5, folat level6);
154// Esempio
155SetAnticollision(1,1,1,1,1,1)
156
157/*
158     * @brief  Imposta la strategia dopo collisione.
159     * @param  [in] strategy  0- Segnala errore e arresta, 1- Continua esecuzione.
160     * @param  [in] safeTime  Tempo di arresto sicuro [1000 - 2000] ms.
161     * @param  [in] safeDistance  Distanza di arresto sicuro [1-150] mm.
162     * @param  [in] safeVel  Velocità sicura [50-250] mm/s.
163     * @param  [in] safetyMargin  Coefficiente di sicurezza j1-j6 [1-10].
164     * @return  Codice errore.
165*/
166    int SetCollisionStrategy(int strategy, int safeTime, int safeDistance, int safeVel, int safetyMargin[])
167// Esempio
168SetCollisionStrategy(1)
169
170/*
171     * @brief Imposta il metodo di rilevamento collisione del robot.
172     * @param [in] method Metodo rilevamento collisione: 0- Modalità corrente; 1- Doppio encoder; 2- Corrente e doppio encoder attivati contemporaneamente.
173 * @param [in] thresholdMode Metodo soglia livello collisione; 0- Metodo soglia fissa livello collisione; 1- Soglia di rilevamento collisione personalizzata.
174     * @return  Codice errore.
175*/
176    int SetCollisionDetectionMethod(int method, int thresholdMode);
177// Esempio
178SetCollisionDetectionMethod(0,0)
179
180
181/*
182     * @brief Imposta l'inizio/chiusura del rilevamento collisione statico.
183     * @param  [in] status 0- Disattiva; 1- Attiva.
184     * @return  Codice errore.
185*/
186    int SetStaticCollisionOnOff(int status);
187// Esempio
188SetStaticCollisionOnOff(1)
189
190
191
192/*
193     * @brief Rilevamento coppia/potenza giunto.
194     * @param  [in] status 0- Disattiva; 1- Attiva.
195     * @param  [in] power  Potenza massima impostata (W);
196     * @return  Codice errore.
197*/
198    int SetPowerLimit(int status, double power);
199// Esempio
200SetPowerLimit(1,100)
201
202/*
203     * @brief  Configura sensore di forza.
204     * @param  [in] company  Produttore sensore di forza, 17- Kunwei Technology, 19- Aerospace 11th Academy, 20- Sensore ATI, 21- Zhongke Midian, 22- Weihang Minxin, 23- NBIT, 24- Xincheng (XJC), 26- NSR.
205     * @param  [in] device  Numero dispositivo, Kunwei (0-KWR75B), Aerospace 11th Academy (0-MCS6A-200-4), ATI (0-AXIA80-M8), Zhongke Midian (0-MST2010), Weihang Minxin (0-WHC6L-YB-10A), NBIT (0-XLH93003ACS), Xincheng XJC (0-XJC-6F-D82), NSR (0-NSR-FTSensorA).
206     * @param  [in] softvesion  Numero versione software, attualmente non utilizzato, default 0.
207     * @param  [in] bus  Posizione bus terminale dispositivo, attualmente non utilizzato, default 0.
208     * @return  Codice errore.
209*/
210    int FT_SetConfig(int company, int device, int softvesion, int bus);
211// Esempio
212FT_SetConfig(0,1,0,0)
213
214
215
216/*
217     * @brief  Ottiene configurazione sensore di forza.
218     * @param  [out] company  Produttore sensore di forza, da definire.
219     * @param  [out] device  Numero dispositivo, attualmente non utilizzato, default 0.
220     * @param  [out] softvesion  Numero versione software, attualmente non utilizzato, default 0.
221     * @param  [out] bus  Posizione bus terminale dispositivo, attualmente non utilizzato, default 0.
222     * @return  Codice errore.
223*/
224    int FT_GetConfig(int *company, int *device, int *softvesion, int *bus);
225// Esempio
226FT_GetConfig()
227
228
229/*
230     * @brief  Attiva sensore di forza.
231     * @param  [in] act  0- Reset, 1- Attiva.
232     * @return  Codice errore.
233*/
234    int FT_Activate(uint8_t act);
235// Esempio
236FT_Activate(1)
237
238
239/*
240     * @brief  Taratura zero sensore di forza.
241     * @param  [in] act  0- Rimuovi zero, 1- Calibrazione zero.
242     * @return  Codice errore.
243*/
244    int FT_SetZero(uint8_t act);
245// Esempio
246FT_SetZero(1)
247
248/*
249     * @brief  Guardia collisione.
250     * @param  [in] flag 0- Disattiva guardia collisione, 1- Attiva guardia collisione.
251     * @param  [in] sensor_id Numero sensore di forza.
252     * @param  [in] select  Seleziona quali 6 gradi di libertà rilevare per collisione, 0- Non rilevare, 1- Rileva.
253     * @param  [in] ft  Forza/Coppia collisione, fx,fy,fz,tx,ty,tz.
254     * @param  [in] max_threshold  Soglia massima.
255     * @param  [in] min_threshold  Soglia minima.
256     * @note   Intervallo di rilevamento forza/coppia: (ft-min_threshold, ft+max_threshold)
257     * @return  Codice errore.
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// Esempio
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  Controllo forza costante.
266     * @param  [in] flag 0- Disattiva controllo forza costante, 1- Attiva controllo forza costante.
267     * @param  [in] sensor_id Numero sensore di forza.
268     * @param  [in] select  Seleziona quali 6 gradi di libertà rilevare per collisione, 0- Non rilevare, 1- Rileva.
269     * @param  [in] ft  Forza/Coppia collisione, fx,fy,fz,tx,ty,tz.
270     * @param  [in] ft_pid Parametri PID forza, parametri PID coppia.
271     * @param  [in] adj_sign Controllo avvio/arresto adattativo, 0- Disattiva, 1- Attiva.
272     * @param  [in] ILC_sign Controllo avvio/arresto ILC, 0- Arresta, 1- Addestra, 2- Operativo.
273     * @param  [in] max_dis Distanza massima aggiustamento, unità mm.
274     * @param  [in] max_ang Angolo massimo aggiustamento, unità gradi.
275     * @param  [in] filter_Sign Segnale attivazione filtro 0- Disattiva; 1- Attiva, default disattivato.
276 * @param  [in] posAdapt_sign Segnale attivazione adattamento posa 0- Disattiva; 1- Attiva, default disattivato.
277 * @param  [in] isNoBlock Segnale blocco, 0- Bloccante; 1- Non bloccante.
278     * @return  Codice errore.
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// Esempio
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  Avvia controllo adattativo.
287     * @param  [in] p Coefficiente regolazione posizione o coefficiente adattativo.
288     * @param  [in] force Soglia forza per avvio controllo adattativo, unità N.
289     * @return  Codice errore.
290*/
291    int FT_ComplianceStart(float p, float force);
292// Esempio
293FT_ComplianceStart(0.005,20)
294
295
296/**
297     * @brief  Arresta controllo adattativo.
298     * @return  Codice errore.
299*/
300    int FT_ComplianceStop();
301// Esempio
302FT_ComplianceStop()
303
304/*
305Descrizione funzionale: Imposta limite positivo. Nota: il valore impostato deve essere compreso nell'intervallo del limite fisico.
306float limit1-limit6 - Valori limite per i 6 giunti.
307*/
308int SetLimitPositive(float limit1, float limit2, float limit3, float limit4, float limit5, float limit6);
309// Esempio
310SetLimitPositve(100,90,90,90,90,90)
311
312/*
313Descrizione funzionale: Imposta limite negativo. Nota: il valore impostato deve essere compreso nell'intervallo del limite fisico.
314float limit1-limit6 - Valori limite per i 6 giunti.
315*/
316int SetLimitNegative(float limit1, float limit2, float limit3, float limit4, float limit5, float limit6);
317// Esempio
318SetLimitNegative(-100,-90,-90,-90,-90,-90)
319
320/*
321Descrizione funzionale: Cancella stato errore.
322*/
323int ResetAllError();
324
325/*
326Descrizione funzionale: Interruttore compensazione attrito giunto.
327uint8_t state - 0- Disattiva, 1- Attiva.
328*/
329int FrictionCompensationOnOff(uint8_t state);
330// Esempio
331FrictionCompensationOnOff(1)
332
333/*
334Descrizione funzionale: Imposta coefficienti compensazione attrito giunto - installazione normale.
335float coeff1-coeff6 - Coefficienti compensazione per i 6 giunti, intervallo 0-1.
336*/
337int SetFrictionValue_level(float coeff1,float coeff1,float coeff3,float coeff4,float coeff5,float coeff6);
338// Esempio
339SetFrictionValue_level(1,1,1,1,1,1)
340
341/*
342Descrizione funzionale: Imposta coefficienti compensazione attrito giunto - installazione laterale.
343float coeff1-coeff6 - Coefficienti compensazione per i 6 giunti, intervallo 0-1.
344*/
345int SetFrictionValue_wall(float coeff1,float coeff1,float coeff3,float coeff4,float coeff5,float coeff6);
346// Esempio
347SetFrictionValue_wall(0.5,0.5,0.5,0.5,0.5,0.5)
348
349/*
350Descrizione funzionale: Imposta coefficienti compensazione attrito giunto - installazione a soffitto.
351float coeff1-coeff6 - Coefficienti compensazione per i 6 giunti, intervallo 0-1.
352*/
353int SetFrictionValue_ceiling(float coeff1,float coeff1,float coeff3,float coeff4,float coeff5,float coeff6);
354// Esempio
355SetFrictionValue_ceiling(0.5,0.5,0.5,0.5,0.5,0.5)
356
357
358// Controllo Periferiche
359/*
360Descrizione funzionale: Attiva pinza.
361int index - Numero pinza.
362uint8_t act - 0- Reset, 1- Attiva.
363*/
364int ActGripper(int index,uint8_t act);
365// Esempio
366ActGripper(1,1)
367
368/*
369Descrizione funzionale: Controlla pinza.
370int index - Numero pinza.
371int pos - Percentuale posizione, intervallo 0-100.
372*/
373int MoveGripper(int index,int pos);
374// Esempio
375MoveGripper(1,10)
376
377
378// Controllo I/O
379/*
380Descrizione funzionale: Imposta uscita digitale pannello di controllo.
381int id - Numero I/O, intervallo 0-15.
382uint_t status - 0- Disattiva, 1- Attiva.
383*/
384int SetDO(int id,uint8_t status);
385// Esempio
386SetDO(1,1)
387
388/*
389Descrizione funzionale: Imposta uscita digitale utensile.
390int id - Numero I/O, intervallo 0-1.
391uint_t status - 0- Disattiva, 1- Attiva.
392*/
393int SetToolDO(int id,uint8_t status);
394// Esempio
395SetToolDO(0,1)
396
397/*
398Descrizione funzionale: Imposta uscita analogica pannello di controllo.
399int id - Numero I/O, intervallo 0-1.
400float vlaue - Percentuale valore corrente o tensione, intervallo 0-100.
401*/
402int SetAO(int id,float value);
403// Esempio
404SetAO(1,100)
405
406/*
407Descrizione funzionale: Imposta uscita analogica utensile.
408int id - Numero I/O, intervallo 0.
409float vlaue - Percentuale valore corrente o tensione, intervallo 0-100.
410*/
411int SetToolAO(int id,float value);
412// Esempio
413SetToolAO(0,100)
414
415
416// Comandi Movimento
417/*
418Descrizione funzionale: Jog robot.
419uint8_t ref - 0- Jog articolare, 2- Jog sistema coordinate base, 4- Jog sistema coordinate utensile, 8- Jog sistema coordinate pezzo.
420uint8_t nb - 1- Giunto 1 (o asse x),2- Giunto 2 (o asse y),3- Giunto 3 (o asse z),4- Giunto 4 (o rotazione attorno asse x),5- Giunto 5 (o rotazione attorno asse y),6- Giunto 6 (o rotazione attorno asse z).
421uint8_t dir - 0- Direzione negativa, 1- Direzione positiva.
422float vel - Percentuale velocità, intervallo 0-100.
423*/
424int StartJOG(uint8_t ref, uin8_t nb, uint8_t dir, float vel);
425// Esempio
426StartJOG(1,1,1,10)
427
428/*
429Descrizione funzionale: Arresta jog robot.
430uint8_t ref - 0- Arresta jog articolare, 2- Arresta jog sistema coordinate base, 4- Arresta jog sistema coordinate utensile, 8- Arresta jog sistema coordinate pezzo.
431*/
432int StopJOG(uint8_t ref);
433// Esempio
434StopJOG(1)
435
436/*
437Descrizione funzionale: Arresta immediatamente jog robot.
438*/
439int ImmStopJOG();
440
441/*
442Descrizione funzionale: Movimento spazio giunti.
443string point_name - Nome punto pre-memorizzato, ad esempio JNT1 indica il punto con ID 1 delle informazioni punto articolare, CART1 indica il punto con ID 1 delle informazioni punto cartesiano. L'istruzione MoveJ supporta l'input di punti articolari o punti cartesiani. Da notare: poiché i parametri predefiniti dell'istruzione MoveJ specificano il sistema di coordinate utensile e pezzo, se il numero di questi sistemi di coordinate non corrisponde a quello attualmente caricato, l'istruzione causerà un errore. È necessario modificare i parametri del sistema di coordinate nei parametri predefiniti, caricare i parametri, quindi eseguire il comando di movimento.
444float vel - Percentuale velocità comando, intervallo 0-100.
445int tool - Numero sistema di coordinate utensile.
446int user - Numero sistema di coordinate pezzo.
447double expos1 - Posizione asse esterno 1.
448double expos2 - Posizione asse esterno 2.
449double expos3 - Posizione asse esterno 3.
450double expos4 - Posizione asse esterno 4.
451*/
452int MoveJ(string point_name, float vel,int tool, int user,double expos1,double expos2,double expos3,double expos4); // point_name è l'input delle informazioni punto pre-memorizzate.
453// Esempio
454MoveJ(JNT1,10,1,1,0,0,0,0)
455
456/*
457Descrizione funzionale: Movimento lineare spazio cartesiano.
458string point_name - Nome punto pre-memorizzato, ad esempio JNT1 indica il punto con ID 1 delle informazioni punto articolare, CART1 indica il punto con ID 1 delle informazioni punto cartesiano. L'istruzione MoveL supporta l'input di punti articolari o punti cartesiani. Da notare: poiché i parametri predefiniti dell'istruzione MoveL specificano il sistema di coordinate utensile e pezzo, se il numero di questi sistemi di coordinate non corrisponde a quello attualmente caricato, l'istruzione causerà un errore. È necessario modificare i parametri del sistema di coordinate nei parametri predefiniti, caricare i parametri, quindi eseguire il comando di movimento.
459float vel - Percentuale velocità comando, intervallo 0-100.
460int tool - Numero sistema di coordinate utensile.
461int user - Numero sistema di coordinate pezzo.
462double expos1 - Posizione asse esterno 1.
463double expos2 - Posizione asse esterno 2.
464double expos3 - Posizione asse esterno 3.
465double expos4 - Posizione asse esterno 4.
466*/
467int MoveL(string point_name,float vel,int tool,int user,double expos1,double expos2,double expos3,double expos4);
468// Esempio
469MoveL(CART1,10,1,1,0,0,0,0)
470
471/*
472Descrizione funzionale: Movimento circolare spazio cartesiano.
473string point1_name point2_name - Nomi punti pre-memorizzati, ad esempio JNT1 indica il punto con ID 1 delle informazioni punto articolare, CART1 indica il punto con ID 1 delle informazioni punto cartesiano. L'istruzione MoveC supporta l'input di punti articolari o punti cartesiani, ma entrambi i punti devono essere dello stesso tipo, ovvero non è supportato l'input di un punto articolare per il primo punto e un punto cartesiano per il secondo. Da notare: poiché i parametri predefiniti dell'istruzione MoveC specificano il sistema di coordinate utensile e pezzo, se il numero di questi sistemi di coordinate non corrisponde a quello attualmente caricato, l'istruzione causerà un errore. È necessario modificare i parametri del sistema di coordinate nei parametri predefiniti, caricare i parametri, quindi eseguire il comando di movimento.
474float vel - Percentuale velocità comando, intervallo 0-100.
475int tool - Numero sistema di coordinate utensile.
476int user - Numero sistema di coordinate pezzo.
477double expos1 - Posizione asse esterno 1 per punto1.
478double expos2 - Posizione asse esterno 2 per punto1.
479double expos3 - Posizione asse esterno 3 per punto1.
480double expos4 - Posizione asse esterno 4 per punto1.
481double expos1 - Posizione asse esterno 1 per punto2.
482double expos2 - Posizione asse esterno 2 per punto2.
483double expos3 - Posizione asse esterno 3 per punto2.
484double expos4 - Posizione asse esterno 4 per punto2.
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// Esempio
488MoveC(JNT1,JNT2,10,1,1,0,0,0,0,0,0,0,0)
489
490/*
491Descrizione funzionale: Inizia movimento spline.
492*/
493int SplineStart();
494
495/*
496Descrizione funzionale: Movimento spline spazio giunti. Questa istruzione supporta solo l'input di dati articolari come JNT1; l'input di punti cartesiani causerà errore.
497string point_name - Nome punto pre-memorizzato, ad esempio JNT1 indica il punto con ID 1 delle informazioni punto articolare.
498float vel - Percentuale velocità, intervallo 0-100.
499*/
500int SplinePTP(string point_name, float vel);
501// Esempio
502SplinePTP(JNT2,10)
503
504/*
505Descrizione funzionale: Termina movimento spline.
506*/
507int SplineEnd();
508
509/*
510Descrizione funzionale: Inizia movimento spline spazio cartesiano.
511uint8_t ctlpoint - 0- La traiettoria passa attraverso i punti via, 1- La traiettoria non passa attraverso i punti di controllo, almeno 4 punti.
512*/
513int NewSplineStart(uint8_t ctlpoint);
514// Esempio
515NewSplineStrart(1)
516
517/*
518Descrizione funzionale: Movimento spline spazio cartesiano. Supporta solo l'input di punti spazio cartesiano come CART1; l'input di punti spazio giunti causerà errore.
519string point_name - Nome punto pre-memorizzato, ad esempio CART1 indica il punto con ID 1 delle informazioni punto spazio cartesiano.
520float vel - Percentuale velocità, intervallo 0-100.
521int lastflag - 0- Non è l'ultimo punto, 1- È l'ultimo punto.
522*/
523int NewSplinePoint(string point_name, float vel, int lastflag);
524// Esempio
525NewSplinePoint(JNT2,20,0)
526
527/*
528Descrizione funzionale: Termina movimento spline spazio cartesiano.
529*/
530int NewSplineEnd();
531
532/*
533Descrizione funzionale: Arresta movimento.
534*/
535int StopMotion();
536
537/*
538Descrizione funzionale: Abilita offset globale punti.
539int flag - 0- Offset nel sistema coordinate base/pezzo, 2- Offset nel sistema coordinate utensile.
540double x,y,z,rx,ry,rz - Quantità offset posa.
541*/
542int PointsOffsetEnable(int flag,double x,double y,double z,double rx,double ry,double rz);
543// Esempio
544PointsOffsetEnable(1,10,10,10,0,0,0)
545
546/*
547Descrizione funzionale: Disabilita offset globale punti.
548*/
549int PointsOffsetDisable();