- C 99.2%
- Gnuplot 0.5%
- Makefile 0.3%
| img | ||
| inc | ||
| lib | ||
| .clangd | ||
| .gitignore | ||
| 001-0.08P-LEFT.csv | ||
| 001-0.08P-LEFT.png | ||
| 002-0.08P-LEFT.csv | ||
| 002-0.08P-LEFT.png | ||
| 003-0.08P-LEFT.csv | ||
| 003-0.08P-LEFT.png | ||
| 004-0.08P-RIGHT.csv | ||
| 004-0.08P-RIGHT.png | ||
| 005-0.07P-RIGHT.csv | ||
| 005-0.07P-RIGHT.png | ||
| 006-0.07P-RIGHT.csv | ||
| 006-0.07P-RIGHT.png | ||
| 007-0.07P.csv | ||
| 007-0.07P.png | ||
| 008-0.08P-0.07P.csv | ||
| 008-0.08P-0.07P.png | ||
| 010-0.08PI-0.07PI.csv | ||
| 010-0.08PI-0.07PI.png | ||
| 011-0.08PID-0.07PID.csv | ||
| 011-0.08PID-0.07PID.png | ||
| 012-0.08PI-0.07PI.csv | ||
| 013-0.07PI-0.06PI.csv | ||
| 014.csv | ||
| control.c | ||
| control.h | ||
| encoder.c | ||
| encoder.h | ||
| fsm.c | ||
| fsm.h | ||
| gpio.c | ||
| gpio.h | ||
| logger.c | ||
| logger.h | ||
| main.c | ||
| Makefile | ||
| motor.c | ||
| motor.h | ||
| png-graph.gnuplot | ||
| README.md | ||
| timer.h | ||
Coderbot - 856111
Relazione del laboratorio Coderbot, Sabino Paulicelli.
Indice
- Prepariamo l'ambiente di lavoro
- Come funziona il motore
- Come funziona l'encoder
- Facciamo avanzare il Coderbot
- Registriamo il movimento
- La differenza tra le ruote
- Misuriamo l'avanzamento
- Misuriamo la velocità
- Il controllo PID
- Il Coderbot oscilla, troviamo il Ku
- Grafico dell'oscillazione
- Usiamo la formula di Ziegler-Nichols
- Suddividiamo in threads
- Scegliamo un algoritmo di scheduling
- Test finale
Introduzione
Ho strutturato la mia relazione progredendo linearmente con la stesura del codice, e suddiviso i paragrafi secondo le varie fasi dell'apprendimento in laboratorio. Idealmente, leggendo la relazione in modo sequenziale, chiunque dovrebbe essere in grado di riprodurre il lavoro svolto affrontando le stesse problematiche e aggirando allo stesso modo i limiti intrinseci dell'attività.
1 Prepariamo l'ambiente di lavoro
Il laboratorio ha come obiettivo finale il movimento controllato del Coderbot, il robot utilizzato. La libreria usata è pigpio e, per lavorare localmente sul proprio computer, è possibile importarne l'header nella cartella del progetto. La compilazione e il test del software è stato lanciato sempre nel Raspberry Pi che comanda il Coderbot, per non aumentare la complessità dell'ambiente di lavoro. Non ci sono altri requisiti a parte il compiler, l'ultima versione di gcc o clang. I grafici presenti in questo documento sono stati prodotti con gnuplot. Il Coderbot dovrebbe avanzare sempre sullo stesso terreno, altrimenti la differenza nelle misurazioni può essere importante. Inoltre le ruote non dovrebbero mai slittare per troppo tempo.
Considerazioni riguardo l'esperienza pratica
Durante i test svolti a casa, mi sono accorto che il tappeto usato per l'avanzamento del Coderbot generava un attrito importante e non trascurabile sul ruotino sferico di coda. Ho provato a oliare il ruotino senza successo e sono riuscito ad evitare lo slittamento delle ruote e le sterzate casuali solo cambiando l'assetto del Coderbot come in figura 1, in particolare ho spostato la batteria in corrispondenza dell'asse delle ruote. Questo cambiamento ha però causato un cambiamento molto evidente nella differenza di giri al secondo delle ruote, a parità di potenza erogata. Ho dovuto alla fine considerare una richiesta di potenza del 2% inferiore sulla ruota di destra. Dopo qualche minuto di utilizzo, la ruota destra richiede invece una potenza del 30% maggiore circa. Con alimentazione a corrente e senza il peso della batteria, questo scarto scende a circa il 10%.
2 Come funziona motore
3 Come funziona l'encoder
4 Facciamo avanzare il Coderbot
5 Registriamo il movimento
6 La differenza tra le ruote
Iniziati i primi test, è stato subito evidente che tra le ruote c'era una differenza misurabili, in termini circa del 6%. Nelle prime fasi, una volta tenuto conto di questo scarto, non sono necessari altri adattamenti prima delle misurazioni di base. In futuro però potrebbe essere necessario calcolare valori diversi di Ku e Tu per ogni ruota.
7 Misuriamo l'avanzamento
8 Misuriamo la velocità
9 Il controllo PID
10 Il Coderbot oscilla, troviamo il Ku
11 Grafico dell'oscillazione
12 Usiamo la formula di Ziegler-Nichols
13 Suddividiamo in threads
14 Scegliamo un algoritmo di scheduling
15 Test finale
fase 1: mandare avanti il bot
fase 2: andare circa dritti
fase 3: calcolo con tabella dello sfasamento tra le ruote, con percentuale pwm
i due motori hanno sfasamento, forse + 6% sul right
fase 4:
calcolo il diametro della ruota e cerco di controllare la distanza percorsa dal coderbot 18 ticks per mm, 0.044mm per tick circa.
fase 5:
calcolo la speed togliendo i primi 1000 ticks tipo. Corsa: 500 mm - tempo in us: 4515010 110,75 mm/s a half duty cycle.
10:
Il valore di Tu = 0.08 consente di mantenere costanti le oscillazioni, con un periodo Tu di 0.2 secondi.
Odometria
idea per relazione: grafico con posizione desiderata sovrapposta con posizione reale
