Luca Ghislotti
Computer Engineering Student @UniBG
Dispositivo di bilanciamento di un pallina su un piano tramite object recognition e controllore retroazionato PID
Laboratorio di Automatica
A. A. 2021 - 2022
Luca Ghislotti
Alessandro Mazzola
L'obiettivo del progetto è quello di bilanciare una pallina su un piano tramite un controllore retroazionato che sfrutta una telecamera per determinare la posizione della pallina sul piano
where it all began
what we achieved
(prior to PID tuning)
Microcontrollore
Raspberry Pi 4 (2 Gb di RAM)
Telecamera
Raspberry Pi Camera
(1080p, 90 fps)
Servomotori
Diymore MG996R
telecamera collegata a Raspberry Pi per effettuare la rilevazione della posizione della pallina
servomotori per l'azionamento del piano, uno per l'asse X ed uno per l'asse Y
piano per il bilanciamento della pallina
L'algoritmo di visione permette di determinare la posizione della pallina e il relativo errore rispetto al centro del piano tramite la libreria OpenCV.
L'algoritmo di controllo utilizza la posizione acquisita dalla componente di vision per azionare i servomotori al fine di compensare il movimento della pallina sul piano tramite la libreria PigGPIO.
L'algoritmo di Computer Vision è in continua ricerca della pallina, ovvero di un set di pixel adiacenti di colore arancione.
Nel caso in cui venga effettuata la detection (e quindi vengano rispettati una serie di vincoli) l'algoritmo determina l'errore in pixel sui due assi rispetto alla posizione desiderata (in questo caso il centro del piano) ed interviene la componente di attuazione.
Tempo di elaborazione dell'algoritmo di visione ≃ 40 msec
asse x
asse y
errore y
asse y
errore x
TARGET
L'algoritmo di controllo prende in input gli errori sull'asse x e sull'asse y ed implementa due controlli in anello chiuso in maniera disaccoppiata per i due assi.
CONTROLLO PID
PID_PX = errore_x * KP_x
PID_DX = ((errore_x - err_prec_x) / elapsedTime) * KD_x
PID_IX = PID_IX + errore_x * KI_x * elapsedTime
azione_x = PID_PX + PID_DX + PID_IX L'algoritmo di controllo è analogo per l'asse Y
Tempo di elaborazione dell'algoritmo di controllo ≃ 20 msec
Abbiamo utilizzato MatLAB per determinare il periodo delle oscillazioni non smorzate con la sola azione proporzionale tali da mantenere la pallina in oscillazione permanente.
Abbiamo poi determinato i parametri Kp, Ki e Kd per entrambe gli assi come da formule.
Abbiamo utilizzato il metodo di Ziegler–Nichols per effettuare un primo tuning.
Abbiamo innanzitutto rilevato:
- errori su ogni asse della pallina rispetto al centro del piano;
- istanti temporali di sampling.
Errore asse X
Errore asse Y
E' stato effettuato il tuning del PID separatamente per il controllo dell'asse X e dell'asse Y
Velocità operativa dei servomotori
IL POSIZIONAMENTO E L'AZIONAMENTO DEI SERVOMOTORI DIVIENE CRITICO
risolto incrementando il rapporto tra l'angolo dei servo e l'angolo del piano
Range operativo dei servomotori
Oscillazioni del piano indotte da giochi meccanici amplificate dall'alto guadagno eliminate tramite l'utilizzo di elastici (incremento dello smorzamento)
Alimentazione dei servomotori
Asse Y
Asse X
PIN 18
PIN 17
COMMON GROUND
Il codice relativo all'algoritmo di object recognition e al controllore PID è disponibile su GitHub al link:
Demo
By Luca Ghislotti
Presentazione del progetto sviluppato per il corso del laboratorio di automatica.