riservata:pw3a2025
Project Work 3A 2025
App sul cellulare per giocare a scacchi via WiFi con ESP32 che comunica con controller robot ABB che muove i pezzi su una scacchiera.
La parte del robot
- parto dal file pack and go con il modello (template) con la stessa configurazione del robot
- aggiungo il tooldata t_VSG_Servo per dimostrare che non serve aggiungere e togliere uno SmartGripper per avere le coordinate corrette del tool
- creo un quadrato della scacchiera (come superficie) poi lo duplico per fare una linea che poi duplico per fare le 64 case
- coloro le caselle bianche e le raggruppo tutte per fare l'oggetto scacchiera
- creo il work object wobj_scacchiera_a1 poi lo attacco (attach) a scacchiera, in modo che sia legato alla posizione della scacchiera (-600, -160, 0)
- imposto MoveAbsJ, v500, z10, Servo e insegno una istruzione col robot sollevato, allineato e col gripper orientato correttamente per prendere il pezzo (target sollevato in Jointtargets
- testo il movimento con Move Along Path sulla procedura main
- sincronizzo con RAPID poi New Vertical Tab e simulo dopo aver riportato il robot alla Home (Layout|Move To Pose|Jump Home); c'è un Corner Path Failure ma la simulazione termina correttamente; lo stesso warning compare simulando dalla Tab Simulation (NB in questo caso la simulazione non termina e va arrestata)
- imposto MoveJ, 500, z10, Servo poi con Move and Rotate provo a raggiungere il centro (snap su corpo e centro) delle 64 case della scacchiera per vedere se spostare la scacchiera o cambiare configurazione del robot → mi accorgo che non arriva alla fila più lontana e devo spostare la scacchiera a (-500,160,0)1)
- rendo invisibile il robot, creo il pezzo con le dimensioni del mattoncino jenga (15-25-75), uso Attach to per collegarlo alla scacchiera; con Position|Place|Two Points lo sposto al centro della casa a1 (snap sui due centri)
- dalla tab Simulation scelgo Reset|Save Current State e salvo lo stato iniziale partenza mettendo la spunta per includere tutto
- porto il TCP sul pezzo con Move and Rotate e, controllando di aver selezionato il workobject wobj_scacchiera_a1 e Servo come tool, salvo il target come presa_a1; controllo con View Robot At Target che l'orientamento dell'asse z del target sia giusto
- sposto il TCP 100mm in alto e salvo un nuovo target come sopra_a1
- con MoveJ, v500, z10, Servo creo l'istruzione di movimento per andare a sopra_a1 trascinando il target nel main
- con MoveL, v500, fine, Servo creo l'istruzione di movimento per andare a presa_a1
- con MoveL, v500, fine, Servo creo l'istruzione di movimento per andare a sopra_a1
- testo il movimento con Move Along Path poi sincronizzo con RAPID e eseguo il programma
- dentro MainModule creo le procedure apriPinza() e chiudiPinza() con le istruzioni g_MoveTo(15) e g_GripIn che posso chiamare anche in ambiente grafico dopo aver sincronizzato alla stazione; ricordarsi Apply (e volendo Check Program) per applicare le modifiche al codice
- creo le variabili tipo num colonna e traversa e la costante tipo num delta
- creo la procedura preleva con due parametri (c,t) che usa la funzione Offs per portare il TCP nel punto di prelievo in base alle coordinate c e t della notazione algebrica
- chiamo la funzione (no parentesi!)
- testo la funzione
- NB spesso bisogna re-inizializzare il Virtual SmartGripper che ogni tanto impazzisce da Proprietà mettendo ReInizialization_Enabled a 1 e cliccando su ReInitialize_SmartGripper
- resettare la simulazione dopo ogni esecuzione del programma e riportare il program pointer a main dalla scheda Rapid|Program Pointer
Cose minori
- non si riesce a rinominare la stazione se non salvando il progetto con un altro nome; anche in quel caso la vista principale mantiene il vecchio nome (modello:Visualizza1) ma si può rinominare la tab
- non si capisce come funzioni il suggerimento colorato che a volte compare nella barra del titolo sopra la ribbon: non è cliccabile e, il colore non è riconducibile a qualcosa, il nome a volte corrisponde a un pulsante sulla ribbon ma non sempre
- riguardo i concetti di programmazione da operating manual omnicore (guida completa ma pensata per flexpendant):
- programmi, moduli, routine (procedure sono sottoprogrammi, funzioni restituiscono un valore, trap gestiscono gli interrupt)
- variabili: scope (local, global, task) storage (persistent, variable, constant)
- proseguo con rapid overview:
- RAPID non è case sensitive
- placeholder <> consentono di caricare un programma anche se alcune parti non sono ancora definite
- 1.1.2 sintassi e tipi di dati
- 1.1.3 struttura del programma, moduli, routine, parametri
- tipi di dati: atomic, record, alias
- array (1.2.2); record sono un'altra cosa (1.2.1)
- 1.3 espressioni, argomenti e parametri
- 1.4 istruzioni (anche il concetto di label)
- 1.5 controllo del flusso
- 1.6 istruzioni varie (generiche?) e dati di base (finalmente!)
- 2.x movimento, sistemi di riferimento, superamento dei percorsi ad angolo (2.2.3), 2.4 configurazioni del robot e istruzione ConfL\On2)
- 2.7 singolarità; due in più per i robot a 7 assi, nessun problema con MoveJ
riservata/pw3a2025.txt · Ultima modifica: 2025/04/20 17:53 da admin