L’odometria parte 2

l’ultima volta avevamo trattato della discretizzazione del modello dell’uniciclo, trovando una nuova formula che potesse essere utile per la stima della posizione iniziale.

[tex]{x_{k+1} = x_{k} + frac{v_k}{omega_k}(sintheta_{k+1}-sintheta_{k})y_{k+1} = y_{k} – frac{v_k}{omega_k}(costheta_{k+1}-costheta_{k})theta_{k+1} = theta_{k} + T cdot omega_k[/tex]

Affinché sia possibile effettivamente formulare un codice che sia implementabile e sia funzionale, vanno effettuate nuovamente delle ulteriori modifiche.

[…]

L’odometria, Dead reckoning – parte 1

Riprendiamo gli sviluppi teorici abbondonati precedentemente, per approfondire una delle caratteristiche principali del robot.

Dead Reckoning

L’odometria permette di stimare la propria posizione rispetto ad un riferimento assoluto determinato all’avvio del robot. L’utilizzo di questa tecnica è di fondamentale importanza per l’implementazione di controllori in retroazione di alto livello che utilizzano come misura la posizione e l’orientamento istantaneo del robot.

[…]

…e velocità sia!

Nell’articolo precedente eravamo rimasti al calcolo della velocità ed all’utilizzo della periferica del dsPIC chiamata QEI per l’interfacciamento del sensore. Adesso partiremo con l’analisi ed il calcolo della velocità attraverso l’encoder.

Modello Encoder

Perché sia possibile sapere la velocità del motore bisogna utilizzare un timer che possa contare quanto tempo passa tra l’intercorrere di una cella ed un’altra.

La Velocità misurata diventa quindi [tex] V_m = frac{N_thetatheta_c}{T}[/tex]

La misura però è soggetta ad un errore di quantizzazione, in quanto l’angolo è definito con una precisa risoluzione.

[tex] theta_m = N_thetatheta_c = theta pm epsilon_theta[/tex]

Dove [tex]epsilon_theta[/tex] è l’errore dovuto alla quantizzazione ed è compreso [tex]|epsilon_theta| < theta_c[/tex]

[…]

Test PID

Come anticipato tempo fa, finalmente ecco il primo video del robot in azione. In Questo test viene provato il controllo PID sui motori con una pavimentazione sconnessa. Da questo video si può verificare che il robot si muove in modo rettilineo senza particolari problemi.

PID digitale (parte 3)

Lo studio del regolatore PID oramai è giunto alla terza. Eravamo rimasti nell’ultima puntata con uno pseudocodice di un regolatore PID partito da una discretizzazione semplice che non teneva conto di molti vincoli, (regolatore PID parte 2).Il primo modello di approssimazione si basa su una trasformazione rettangolare o metodo delle differenze all’indietro o di Eulero.

Quello che analizzeremo oggi è il metodo più usato basato su una trasformazione bilineare o metodo d’ integrazione trapezoidale (di Tustin).

Il regolatore PID in funzione del tempo [tex] C(t) = K_p cdot e(t) + K_d cdot frac{de(t)}{dt} + K_i cdot int_0^t e(tau)dtau[/tex]

e la sua forma approssimata con il metodo di Eulero: [tex] C(k) = K_p cdot e(k) + frac{K_d}{T_c} cdot (e(k)-e(k-1)) + K_i cdot T_c sum_{i=0}^{k} e(i)[/tex]

Sfruttando l’approssimazione trapeziodale che approssima l’integrale, come si può vedere nell’immagine

Tusin

[tex] int_0^t e(tau)dtau simeq T_c cdot sum_{i=0}^{k} frac{e(i)+e(i-1)}{2} [/tex]

Portando la legge di controllo in questa nuova versione:

[tex] C(k) = K_p cdot e(k) + frac{K_d}{T_c} cdot (e(k)-e(k-1)) + K_i cdot T_c sum_{i=0}^{k} frac{e(i)+e(i-1)}{2}[/tex]

[…]

Saturazioni

Con questo piccolo articolo analizziamo in dettaglio le saturazioni del motore utilizzato.

Come da specifiche di costruzione il motore opera in un regime di tensione compreso tra [tex] V_{min} = 4.5V[/tex] e [tex] V_{max} = 12V[/tex], che comporta in prima approssimazione ad una non linearità istantanea di tipo a soglia con pendenza di circa [tex]m simeq 2.6[/tex] e saturazione netta.

Soglia con pendenza

[…]