16. Altre Interfacce

16.1. Ottenimento Chiave Pubblica SSH

Prototipo

GetSSHKeygen()

Descrizione

Ottiene la chiave pubblica SSH

Parametri Obbligatori

Nessuno

Parametri Predefiniti

Nessuno

Valore di Ritorno

  • Codice errore Successo-0 Fallimento- errcode

  • keygen:Chiave pubblica

16.2. Invio Comando SCP

Nuovo nella versione python: SDK-v2.1.3

Prototipo

SetSSHScpCmd(mode, sshname, sship, usr_file_url, robot_file_url)

Descrizione

Invio comando SCP

Parametri Obbligatori

  • mode:0-Upload (controller superiore -> controller), 1-Download (controller -> controller superiore)

  • sshname:Nome utente controller superiore

  • sship:Indirizzo IP controller superiore

  • usr_file_url:Percorso file controller superiore

  • robot_file_url:Percorso file controller robot

Parametri Predefiniti

Nessuno

Valore di Ritorno

Codice errore Successo-0 Fallimento- errcode

16.3. Calcolo Valore MD5 File Percorso Specificato

Prototipo

ComputeFileMD5(file_path)

Descrizione

Calcola il valore MD5 del file nel percorso specificato

Parametri Obbligatori

  • file_path:Percorso file incluso nome file, percorso predefinito cartella Traj: /fruser/traj/, es. /fruser/traj/trajHelix_aima_1.txt

Parametri Predefiniti

Nessuno

Valore di Ritorno

  • Codice errore Successo-0 Fallimento- errcode

  • md5:Valore MD5 file

16.4. Esempio di Codice Comandi SSH, MD5 Robot

 1from fairino import Robot
 2import time
 3import threading
 4# Stabilisce connessione con il controller robot, restituisce un oggetto robot in caso di successo
 5robot = Robot.RPC('192.168.58.2')
 6file_path = "/fruser/airlab.lua"
 7md5 = ""
 8emerg_state = 0
 9si0_state = 0
10si1_state = 0
11sdk_com_state = 0
12ssh_keygen = ""
13retval,ssh_keygen = robot.GetSSHKeygen()
14print(f"GetSSHKeygen retval is: {retval}")
15print(f"ssh key is: {ssh_keygen}")
16ssh_name = "fr"
17ssh_ip = "192.168.58.45"
18ssh_route = "/home/fr"
19ssh_robot_url = "/root/robot/dhpara.config"
20retval = robot.SetSSHScpCmd(1, ssh_name, ssh_ip, ssh_route, ssh_robot_url)
21print(f"SetSSHScpCmd retval is: {retval}")
22print(f"robot url is: {ssh_robot_url}")
23error, md5 = robot.ComputeFileMD5(file_path)
24print(f"md5 is: {md5}")
25robot.CloseRPC()

16.5. Impostazione Periodo Feedback Porta 20004 Robot

Nuovo nella versione python: SDK-v2.0.5

Prototipo

SetRobotRealtimeStateSamplePeriod(period)

Descrizione

Imposta il periodo di feedback porta 20004 robot

Parametri Obbligatori

  • period:Periodo feedback porta 20004 robot (ms)

Parametri Predefiniti

Nessuno

Valore di Ritorno

Codice errore Successo-0 Fallimento- errcode

16.6. Ottenimento Periodo Feedback Porta 20004 Robot

Nuovo nella versione python: SDK-v2.0.5

Prototipo

GetRobotRealtimeStateSamplePeriod()

Descrizione

Ottiene il periodo di feedback porta 20004 robot

Parametri Obbligatori

Nessuno

Parametri Predefiniti

Nessuno

Valore di Ritorno

  • Codice errore Successo-0 Fallimento- errcode

  • period:Periodo feedback porta 20004 robot (ms)

16.7. Esempio di Codice Configurazione Periodo Feedback Stato Porta 20004 Robot

 1from fairino import Robot
 2import time
 3import threading
 4# Stabilisce connessione con il controller robot, restituisce un oggetto robot in caso di successo
 5robot = Robot.RPC('192.168.58.2')
 6robot.SetRobotRealtimeStateSamplePeriod(10)
 7error,getPeriod = robot.GetRobotRealtimeStateSamplePeriod()
 8print(f"period is {getPeriod}")
 9time.sleep(1)
10robot.CloseRPC()

16.8. Aggiornamento Software Robot

Nuovo nella versione python: SDK-v2.0.5

Prototipo

SoftwareUpgrade(filePath, block)

Descrizione

Aggiornamento software robot

Parametri Obbligatori

  • filePath:Percorso completo pacchetto aggiornamento software

  • block:Bloccare fino al completamento aggiornamento true: bloccante; false: non bloccante

Parametri Predefiniti

Nessuno

Valore di Ritorno

  • Codice errore Successo-0 Fallimento- errcode

16.9. Ottenimento Stato Aggiornamento Software Robot

Nuovo nella versione python: SDK-v2.0.5

Prototipo

GetSoftwareUpgradeState()

Descrizione

Ottiene lo stato di aggiornamento software robot

Parametri Obbligatori

Nessuno

Parametri Predefiniti

Nessuno

Valore di Ritorno

  • Codice errore Successo-0 Fallimento- errcode

  • state:Stato aggiornamento pacchetto software robot, 0: inattivo o upload pacchetto aggiornamento in corso, 1~100: percentuale completamento aggiornamento, -1: aggiornamento software fallito, -2: verifica fallita, -3: verifica versione fallita, -4: decompressione fallita, -5: aggiornamento configurazione utente fallito, -6: aggiornamento configurazione periferiche fallito, -7: aggiornamento configurazione assi di espansione fallito, -8: aggiornamento configurazione robot fallito, -9: aggiornamento parametri DH fallito

16.10. Esempio di Codice Aggiornamento Software Robot

 1from fairino import Robot
 2import time
 3import threading
 4# Stabilisce connessione con il controller robot, restituisce un oggetto robot in caso di successo
 5robot = Robot.RPC('192.168.58.2')
 6error = robot.SoftwareUpgrade("D://zUP/QNX382/software.tar.gz", False)
 7print(f"SoftwareUpgrade error is {error}")
 8while True:
 9    curState = robot.GetSoftwareUpgradeState()
10    print(f"upgrade state is {curState}")
11    time.sleep(3)
12robot.CloseRPC()

16.11. Download Database Tabella Punti

Nuovo nella versione python: SDK-v2.0.1

Prototipo

PointTableDownLoad(point_table_name, save_file_path)

Descrizione

Download database tabella punti

Parametri Obbligatori

  • point_table_name:Nome tabella punti da scaricare pointTable1.db;

  • save_file_path:Percorso di memorizzazione tabella punti scaricata C://test/;

Parametri Predefiniti

Nessuno

Valore di Ritorno

Codice errore Successo-0 Fallimento- errcode

16.12. Upload Database Tabella Punti

Nuovo nella versione python: SDK-v2.0.1

Prototipo

PointTableUpLoad(point_table_file_path)

Descrizione

Upload database tabella punti

Parametri Obbligatori

  • point_table_file_path:Percorso completo tabella punti da caricare C://test/pointTable1.db

Parametri Predefiniti

Nessuno

Valore di Ritorno

Codice errore Successo-0 Fallimento- errcode

16.13. Aggiornamento File Lua Tabella Punti

Nuovo nella versione python: SDK-v2.0.1

Prototipo

PointTableUpdateLua(point_table_name, lua_file_name)

Descrizione

Aggiornamento file Lua tabella punti

Parametri Obbligatori

  • point_table_name:Nome tabella punti da attivare pointTable1.db, quando la tabella punti è vuota, cioè «, indica l’aggiornamento del programma Lua al programma iniziale non applicando la tabella punti

  • lua_file_name: Nome file Lua da aggiornare testPointTable.lua

Parametri Predefiniti

Nessuno

Valore di Ritorno

Codice errore Successo-0 Fallimento- errcode

16.14. Esempio di Codice Operazioni Tabella Punti Robot

 1from fairino import Robot
 2# Stabilisce connessione con il controller robot, restituisce un oggetto robot in caso di successo
 3robot = Robot.RPC('192.168.58.2')
 4save_path = "D://zDOWN/"
 5point_table_name = "point_table_FR5.db"
 6rtn = robot.PointTableDownLoad(point_table_name, save_path)
 7print(f"download : {point_table_name} fail: {rtn}")
 8upload_path = "D://zDOWN/point_table_FR5.db"
 9rtn = robot.PointTableUpLoad(upload_path)
10print(f"retval is: {rtn}")
11point_tablename = "point_table_FR5.db"
12lua_name = "test0610.lua"
13rtn,error = robot.PointTableUpdateLua(point_tablename, lua_name)
14print(f"retval is: {rtn}")
15robot.CloseRPC()

16.15. Download Log Controller

Nuovo nella versione python: SDK-v2.1.1

Prototipo

RbLogDownload(savePath)

Descrizione

Download log controller

Parametri Obbligatori

  • savePath:Percorso salvataggio file D://zDown/

Parametri Predefiniti

Nessuno

Valore di Ritorno

Codice errore Successo-0 Fallimento- errcode

16.16. Download Tutte le Fonti Dati

Nuovo nella versione python: SDK-v2.1.1

Prototipo

AllDataSourceDownload(savePath)

Descrizione

Download tutte le fonti dati

Parametri Obbligatori

  • savePath:Percorso salvataggio file D://zDown/

Parametri Predefiniti

Nessuno

Valore di Ritorno

Codice errore Successo-0 Fallimento- errcode

16.17. Download Pacchetto Backup Dati

Nuovo nella versione python: SDK-v2.1.1

Prototipo

DataPackageDownload(savePath)

Descrizione

Download pacchetto backup dati

Parametri Obbligatori

  • savePath:Percorso salvataggio file D://zDown/

Parametri Predefiniti

Nessuno

Valore di Ritorno

Codice errore Successo-0 Fallimento- errcode

16.18. Esempio di Codice Download Dati Controller

 1from fairino import Robot
 2import time
 3import threading
 4# Stabilisce connessione con il controller robot, restituisce un oggetto robot in caso di successo
 5robot = Robot.RPC('192.168.58.2')
 6rtn = robot.RbLogDownload("D://zDOWN/")
 7print(f"RbLogDownload rtn is {rtn}")
 8rtn = robot.AllDataSourceDownload("D://zDOWN/")
 9print(f"AllDataSourceDownload rtn is {rtn}")
10rtn = robot.DataPackageDownload("D://zDOWN/")
11print(f"DataPackageDownload rtn is {rtn}")
12robot.CloseRPC()

16.19. Impostazione Aggiornamento Encoder

Nuovo nella versione python: SDK-v2.1.4

Prototipo

SetEncoderUpgrade(path)

Descrizione

Imposta l’aggiornamento encoder

Parametri Obbligatori

  • path:Percorso completo pacchetto aggiornamento locale (D://zUP/XXXXX.bin)

Parametri Predefiniti

Nessuno

Valore di Ritorno

Codice errore Successo-0 Fallimento- errcode

16.20. Impostazione Aggiornamento Firmware Giunti

Nuovo nella versione python: SDK-v2.1.4

Prototipo

SetJointFirmwareUpgrade(type, path)

Descrizione

Imposta l’aggiornamento firmware giunti

Parametri Obbligatori

  • type:Tipo file aggiornamento; 1-Aggiornamento firmware; 2-Aggiornamento file configurazione slave

  • path:Percorso completo pacchetto aggiornamento locale (D://zUP/XXXXX.bin)

Parametri Predefiniti

Nessuno

Valore di Ritorno

Codice errore Successo-0 Fallimento- errcode

16.21. Impostazione Aggiornamento Firmware Pannello di Controllo

Nuovo nella versione python: SDK-v2.1.4

Prototipo

SetCtrlFirmwareUpgrade(type, path)

Descrizione

Imposta l’aggiornamento firmware pannello di controllo

Parametri Obbligatori

  • type:Tipo file aggiornamento; 1-Aggiornamento firmware; 2-Aggiornamento file configurazione slave

  • path:Percorso completo pacchetto aggiornamento locale (D://zUP/XXXXX.bin)

Parametri Predefiniti

Nessuno

Valore di Ritorno

Codice errore Successo-0 Fallimento- errcode

16.22. Impostazione Aggiornamento Firmware Estremità

Nuovo nella versione python: SDK-v2.1.4

Prototipo

SetEndFirmwareUpgrade(type, path)

Descrizione

Imposta l’aggiornamento firmware estremità

Parametri Obbligatori

  • type:Tipo file aggiornamento; 1-Aggiornamento firmware; 2-Aggiornamento file configurazione slave

  • path:Percorso completo pacchetto aggiornamento locale (D://zUP/XXXXX.bin)

Parametri Predefiniti

Nessuno

Valore di Ritorno

Codice errore Successo-0 Fallimento- errcode

16.23. Aggiornamento File Configurazione Parametri Completi Giunti

Nuovo nella versione python: SDK-v2.1.4

Prototipo

JointAllParamUpgrade(path)

Descrizione

Aggiornamento file configurazione parametri completi giunti

Parametri Obbligatori

  • path:Percorso completo pacchetto aggiornamento locale (D://zUP/XXXXX.bin)

Parametri Predefiniti

Nessuno

Valore di Ritorno

Codice errore Successo-0 Fallimento- errcode

16.24. Esempio di Codice Aggiornamento Firmware Slave Robot

 1from fairino import Robot
 2import time
 3import threading
 4# Stabilisce connessione con il controller robot, restituisce un oggetto robot in caso di successo
 5robot = Robot.RPC('192.168.58.2')
 6robot.RobotEnable(0)
 7time.sleep(0.2)
 8rtn = robot.JointAllParamUpgrade("D://zUP/MT/joint0603/jointallparameters.db")
 9print(f"robot JointAllParamUpgrade rtn is {rtn}")
10rtn = robot.SetCtrlFirmwareUpgrade(2, "D://zUP/MT/FAIR_Cobot_Cbd_Asix_V2.0.bin")
11print(f"robot SetCtrlFirmwareUpgrade rtn is {rtn}")
12rtn = robot.SetEndFirmwareUpgrade(2, "D://zUP/MT/FAIR_Cobot_Axle_Asix_V2.4.bin")
13print(f"robot SetEndFirmwareUpgrade rtn is {rtn}")
14robot.SetSysServoBootMode()
15time.sleep(0.2)
16rtn = robot.SetCtrlFirmwareUpgrade(1, "D://zUP/MT/FR_CTRL_PRIMCU_FV201412_MAIN_U4_T01_20250630(MT).bin")
17print(f"robot SetCtrlFirmwareUpgrade rtn is {rtn}")
18rtn = robot.SetEndFirmwareUpgrade(1, "D://zUP/MT/FR_END_FV2010010_MAIN_U1_T01_20250603.bin")
19print(f"robot SetEndFirmwareUpgrade rtn is {rtn}")
20rtn = robot.SetJointFirmwareUpgrade(1, "D://zUP/MT/FR_SERVO_FV504215_MAIN_U7_T07_20250603.bin")
21print(f"robot SetJointFirmwareUpgrade rtn is {rtn}")
22robot.CloseRPC()

16.25. Aggiornamento Sistema Operativo Robot (Pannello di Controllo LA)

Nuovo nella versione python: SDK-v2.1.6

Prototipo

KernelUpgrade(filePath)

Descrizione

Aggiornamento sistema operativo robot (pannello di controllo LA)

Parametri Obbligatori

  • filePath:Percorso completo pacchetto aggiornamento sistema operativo

Parametri Predefiniti

Nessuno

Valore di Ritorno

Codice errore Successo-0 Fallimento- errcode

16.26. Ottenimento Risultato Aggiornamento Sistema Operativo Robot (Pannello di Controllo LA)

Nuovo nella versione python: SDK-v2.1.6

Prototipo

GetKernelUpgradeResult()

Descrizione

Ottiene il risultato dell’aggiornamento sistema operativo robot (pannello di controllo LA)

Parametri Obbligatori

Nessuno

Parametri Predefiniti

Nessuno

Valore di Ritorno

Codice errore Successo-0 Fallimento- errcode

16.27. Generazione Log MCU Robot

Nuovo nella versione python: SDK-v2.1.7

Prototipo

RobotMCULogCollect()

Descrizione

Generazione log MCU robot

Parametri Obbligatori

Nessuno

Parametri Predefiniti

Nessuno

Valore di Ritorno

Codice errore Successo-0 Fallimento- errcode

16.28. Imposta l’arresto del robot quando la comunicazione della porta è disconnessa

Prototipo

SetRobotStopOnComDisc(portID, enable, confirmTime)

Descrizione

Imposta l’arresto del robot quando la comunicazione della porta è disconnessa

Parametri Obbligatori

  • portID: Numero porta 0-8080; 1-8083; 2-20002; 3-20004

  • enable: 0-disabilitato; 1-abilitato

  • confirmTime: Durata conferma interruzione comunicazione (ms)[0-5000]

Parametri Predefiniti

Nessuno

Valore di Ritorno

Codice di errore Successo-0 Fallimento-errcode

16.29. Ottieni i parametri di arresto del robot alla disconnessione della comunicazione della porta

Prototipo

GetRobotStopOnComDisc(portID)

Descrizione

Ottiene i parametri di arresto del robot alla disconnessione della comunicazione della porta

Parametri Obbligatori

  • portID: Numero porta 0-8080; 1-8083; 2-20002; 3-20004

  • enable: 0-disabilitato; 1-abilitato

  • confirmTime: Durata conferma interruzione comunicazione (ms)[0-5000]

Parametri Predefiniti

Nessuno

Valore di Ritorno

Codice di errore Successo-0 Fallimento-errcode

16.30. Esempio di Codice per i Parametri di Arresto del Robot alla Disconnessione della Comunicazione della Porta

 1from time import sleep
 2import time
 3from fairino import Robot
 4# Stabilire la connessione con il controller del robot
 5robot = Robot.RPC('192.168.58.2')
 6
 7def test_robot_stop_on_com_disc(self):
 8    # Inizializza parametri
 9    enable = False
10    confirm_time = 0
11
12    # Imposta arresto robot alla disconnessione della comunicazione
13    rtn = robot.SetRobotStopOnComDisc(0, True, 330)
14    print(f"SetRobotStopOnComDisc index0: {rtn}")
15
16    rtn = robot.SetRobotStopOnComDisc(1, True, 550)
17    print(f"SetRobotStopOnComDisc index1: {rtn}")
18
19    rtn = robot.SetRobotStopOnComDisc(2, True, 110)
20    print(f"SetRobotStopOnComDisc index2: {rtn}")
21
22    rtn = robot.SetRobotStopOnComDisc(3, True, 220)
23    print(f"SetRobotStopOnComDisc index3: {rtn}")
24
25    # Ottieni impostazioni arresto robot alla disconnessione della comunicazione
26    rtn, enable, confirm_time = robot.GetRobotStopOnComDisc(0)
27    print(f"GetRobotStopOnComDisc 8080 rtn {rtn}; enable is {enable}; confirm time is {confirm_time}")
28
29    rtn, enable, confirm_time = robot.GetRobotStopOnComDisc(1)
30    print(f"GetRobotStopOnComDisc 80803 rtn {rtn}; enable is {enable}; confirm time is {confirm_time}")
31
32    rtn, enable, confirm_time = robot.GetRobotStopOnComDisc(2)
33    print(f"GetRobotStopOnComDisc 20002 rtn {rtn}; enable is {enable}; confirm time is {confirm_time}")
34
35    rtn, enable, confirm_time = robot.GetRobotStopOnComDisc(3)
36    print(f"GetRobotStopOnComDisc 20004 rtn {rtn}; enable is {enable}; confirm time is {confirm_time}")
37
38    # Chiudi connessione RPC
39    robot.CloseRPC()
40    return 0
41
42test_robot_stop_on_com_disc(robot)

16.31. Invia Frame di Istruzione UDP

Prototipo

SendUDPFrame(frame)

Descrizione

Invia frame di istruzione UDP

Parametri Obbligatori

  • frame: Dati UDP da inviare, trasmissione trasparente, nessuna incapsulazione

Parametri Predefiniti

Nessuno

Valore di Ritorno

Codice di errore Successo-0 Fallimento-errcode

16.32. Esempio di Codice SDK per Comunicazione UDP

 1from time import sleep
 2import time
 3from fairino import Robot
 4
 5# Stabilire la connessione con il controller del robot
 6robot = Robot.RPC('192.168.58.2')
 7
 8def TestSendUDPFrame(self):
 9    # Imposta callback
10    def callback(src_type, count, cmd_id, data_len, content):
11        print("Risposta ricevuta: cmd_id={} count={} data_len={} content={}".format(cmd_id, count, data_len, content))
12        return 0
13    robot.SetUDPCmdRpyCallback(callback)
14
15    rtn = robot.SendUDPFrame("/f/bIII20III303III7IIIMode(0)III/b/f")
16    print(f"SendUDPFrame Mode(0) rtn is {rtn}")
17    time.sleep(1)
18
19    rtn = robot.SendUDPFrame("/f/bIII21III303III7IIIMode(1)III/b/f")
20    print(f"SendUDPFrame Mode(1) rtn is {rtn}")
21    time.sleep(1)
22
23    rtn = robot.SendUDPFrame(
24        "/f/bIII49III201III184IIIMoveJ(-15.625, -82.680, 101.654, -110.950, -88.290, 0.017, -383.012, -2.325, 242.655, -178.024, 1.710, 74.416, 0, 0, 100, 100, 100, 0.000, 0.000, 0.000, 0.000, -1, 0, 0, 0, 0, 0, 0, 0)III/b/f")
25    print(f"SendUDPFrame MoveJ(-15.625) rtn is {rtn}")
26    time.sleep(1)
27
28    rtn = robot.SendUDPFrame(
29        "/f/bIII48III203III199IIIMoveL(-75.622, -82.680, 101.654, -110.950, -88.290, 0.017, -193.537, 330.525, 242.657, -178.024, 1.710, 14.420, 0, 0, 100, 100, 100, -1, 0, 0.000, 0.000, 0.000, 0.000, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0)III/b/f")
30    print(f"SendUDPFrame MoveL(-75.622) rtn is {rtn}")
31    time.sleep(1)
32
33    rtn = robot.SendUDPFrame("/f/bIII4III905III20IIIGetSoftwareVersion()III/b/f")
34    print(f"SendUDPFrame GetSoftwareVersion() rtn is {rtn}")
35
36    time.sleep(1)
37
38    # Test di validazione dati frame UDP
39    rtn = robot.SendUDPFrame("/f/bIII20III303III7IIIMode(0)III/b/f")
40    print(f"SendUDPFrame rtn is {rtn}")
41
42    rtn = robot.SendUDPFrame("III20III303III7IIIMode(0)III/b/f")
43    print(f"SendUDPFrame rtn is {rtn}")
44
45    rtn = robot.SendUDPFrame("/f/bIII20III303III7IIIMode(0)")
46    print(f"SendUDPFrame rtn is {rtn}")
47
48    rtn = robot.SendUDPFrame("/f/bIII20III303III6IIIMode(0)III/b/f")
49    print(f"SendUDPFrame rtn is {rtn}")
50
51    rtn = robot.SendUDPFrame("/f/b|||20|||303|||7|||Mode(0)|||/b/f")
52    print(f"SendUDPFrame rtn is {rtn}")
53
54    rtn = robot.SendUDPFrame("/f/bII20II303II7IIMode(0)II/b/f")
55    print(f"SendUDPFrame rtn is {rtn}")
56
57    robot.CloseRPC()
58    time.sleep(1)
59
60TestSendUDPFrame(robot)

16.33. Imposta il Colore LED Personalizzato dell’End-Effector del Robot

Prototipo

SetUserLEDColor(r, g, b)

Descrizione

Imposta il colore LED personalizzato dell’end-effector del robot

Parametri Obbligatori

  • r: Controllo LED rosso dell’end-effector; 0-spento; 1-acceso

  • g: Controllo LED verde dell’end-effector; 0-spento; 1-acceso

  • b: Controllo LED blu dell’end-effector; 0-spento; 1-acceso

Parametri Predefiniti

Nessuno

Valore di Ritorno

Codice di errore Successo-0 Fallimento-errcode

16.34. Esempio di Codice SDK per Impostare il Colore LED Personalizzato dell’End-Effector del Robot

 1from time import sleep
 2import time
 3from fairino import Robot
 4
 5# Stabilire la connessione con il controller del robot
 6robot = Robot.RPC('192.168.58.2')
 7
 8
 9def testled(self):
10    # Imposta colore LED utente
11    # Ordine parametri: R, G, B (Rosso, Verde, Blu)
12
13    # Bianco (tutte le luci accese)
14    robot.SetUserLEDColor(True, True, True)
15    time.sleep(1)
16
17    # Spegni tutte le luci
18    robot.SetUserLEDColor(False, False, False)
19    time.sleep(1)
20
21    # Rosso (solo luce rossa)
22    robot.SetUserLEDColor(True, False, False)
23    time.sleep(1)
24
25    # Verde (solo luce verde)
26    robot.SetUserLEDColor(False, True, False)
27    time.sleep(1)
28
29    # Blu (solo luce blu)
30    robot.SetUserLEDColor(False, False, True)
31
32    # Chiudi connessione
33    robot.CloseRPC()
34
35testled(robot)