No description
  • C 99.2%
  • Gnuplot 0.5%
  • Makefile 0.3%
Find a file
2026-06-09 16:24:43 +02:00
img corretto errore su ruota destra al 29% e aggiornato il readme file 2026-06-05 00:32:36 +02:00
inc scaffolding... 2026-05-18 21:38:27 +02:00
lib scaffolding... 2026-05-18 21:38:27 +02:00
.clangd scaffolding... 2026-05-18 21:38:27 +02:00
.gitignore some makefile tweaks and gitignore 2026-05-18 23:16:23 +02:00
001-0.08P-LEFT.csv Trovato Ku e Tu per la ruota sinistra 2026-06-01 00:26:57 +02:00
001-0.08P-LEFT.png Trovato Ku e Tu per la ruota sinistra 2026-06-01 00:26:57 +02:00
002-0.08P-LEFT.csv Trovato Ku e Tu per la ruota sinistra 2026-06-01 00:26:57 +02:00
002-0.08P-LEFT.png Trovato Ku e Tu per la ruota sinistra 2026-06-01 00:26:57 +02:00
003-0.08P-LEFT.csv Trovato Ku e Tu per la ruota sinistra 2026-06-01 00:26:57 +02:00
003-0.08P-LEFT.png Trovato Ku e Tu per la ruota sinistra 2026-06-01 00:26:57 +02:00
004-0.08P-RIGHT.csv studio Ku sulla ruota destra 2026-06-02 23:24:09 +02:00
004-0.08P-RIGHT.png prima prova con il control delle 2 ruote, si muove solo la sinistra 2026-06-03 10:36:06 +02:00
005-0.07P-RIGHT.csv studio Ku sulla ruota destra 2026-06-02 23:24:09 +02:00
005-0.07P-RIGHT.png prima prova con il control delle 2 ruote, si muove solo la sinistra 2026-06-03 10:36:06 +02:00
006-0.07P-RIGHT.csv prima prova con il control delle 2 ruote, si muove solo la sinistra 2026-06-03 10:36:06 +02:00
006-0.07P-RIGHT.png prima prova con il control delle 2 ruote, si muove solo la sinistra 2026-06-03 10:36:06 +02:00
007-0.07P.csv ok control su 2 ruote ma va a sinistra, serve avere 2 KU diversi. 2026-06-03 12:19:44 +02:00
007-0.07P.png ok control su 2 ruote ma va a sinistra, serve avere 2 KU diversi. 2026-06-03 12:19:44 +02:00
008-0.08P-0.07P.csv Ku diversi, tornato a 10ms, corretto il control per avviare tutte e due 2026-06-04 16:52:56 +02:00
008-0.08P-0.07P.png Ku diversi, tornato a 10ms, corretto il control per avviare tutte e due 2026-06-04 16:52:56 +02:00
010-0.08PI-0.07PI.csv Ku diversi, tornato a 10ms, corretto il control per avviare tutte e due 2026-06-04 16:52:56 +02:00
010-0.08PI-0.07PI.png Ku diversi, tornato a 10ms, corretto il control per avviare tutte e due 2026-06-04 16:52:56 +02:00
011-0.08PID-0.07PID.csv Ku diversi, tornato a 10ms, corretto il control per avviare tutte e due 2026-06-04 16:52:56 +02:00
011-0.08PID-0.07PID.png Ku diversi, tornato a 10ms, corretto il control per avviare tutte e due 2026-06-04 16:52:56 +02:00
012-0.08PI-0.07PI.csv Ku diversi, tornato a 10ms, corretto il control per avviare tutte e due 2026-06-04 16:52:56 +02:00
013-0.07PI-0.06PI.csv Ku diversi, tornato a 10ms, corretto il control per avviare tutte e due 2026-06-04 16:52:56 +02:00
014.csv Ku diversi, tornato a 10ms, corretto il control per avviare tutte e due 2026-06-04 16:52:56 +02:00
control.c riattivato clamping, me dannato 2026-06-05 17:56:45 +02:00
control.h Ku diversi, tornato a 10ms, corretto il control per avviare tutte e due 2026-06-04 16:52:56 +02:00
encoder.c code refactoring, nessun cambio nella logica. 2026-06-09 16:24:43 +02:00
encoder.h code refactoring, nessun cambio nella logica. 2026-06-09 16:24:43 +02:00
fsm.c prepare for encLogger use 2026-05-20 09:16:57 +02:00
fsm.h renaming and little functions refactoring 2026-05-19 22:33:34 +02:00
gpio.c code refactoring, nessun cambio nella logica. 2026-06-09 16:24:43 +02:00
gpio.h code refactoring, nessun cambio nella logica. 2026-06-09 16:24:43 +02:00
logger.c code refactoring, nessun cambio nella logica. 2026-06-09 16:24:43 +02:00
logger.h code refactoring, nessun cambio nella logica. 2026-06-09 16:24:43 +02:00
main.c code refactoring, nessun cambio nella logica. 2026-06-09 16:24:43 +02:00
Makefile code refactoring, nessun cambio nella logica. 2026-06-09 16:24:43 +02:00
motor.c code refactoring, nessun cambio nella logica. 2026-06-09 16:24:43 +02:00
motor.h code refactoring, nessun cambio nella logica. 2026-06-09 16:24:43 +02:00
png-graph.gnuplot Ku diversi, tornato a 10ms, corretto il control per avviare tutte e due 2026-06-04 16:52:56 +02:00
README.md aggiornamto readme. 2026-06-05 17:29:20 +02:00
timer.h code refactoring, nessun cambio nella logica. 2026-06-09 16:24:43 +02:00

Coderbot - 856111

Relazione del laboratorio Coderbot, Sabino Paulicelli.

Indice

Introduzione

  1. Prepariamo l'ambiente di lavoro
  2. Come funziona il motore
  3. Come funziona l'encoder
  4. Facciamo avanzare il Coderbot
  5. Registriamo il movimento
  6. La differenza tra le ruote
  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

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%.

Coderbot con assetto modificato

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