spacer.png, 0 kB

Torna indietro   Roboitalia.com - Il primo portale in Italia sulla robotica amatoriale > Progetto robot MODDI > Modulo Base semovente

Rispondi
 
Strumenti discussione Modalità  visualizzazioe
  #1  
Vecchio 29-06-2010, 05.12.31
gioscarab gioscarab non è collegato
Nuovo robottaro
 
Data registrazione: 15-10-2008
Residenza: Milano
Età : 23
Messaggi: 6
Potenza reputazione: 0
gioscarab La sua reputazione è oltre la sua famagioscarab La sua reputazione è oltre la sua fama
Predefinito self-balancing per neofiti

Ciao a tutti ragazzi. Questo week-end sono stato inchiodato a Milano per varie vicissitudini familiari, perdendomi clamorosamente Neverland e quindi il grande incontro dedicato (al vino) e alla robotica. Sono sicuro vi siate divertiti!!

Seguendo il principio K.I.S. (keep it simple) ho sviluppato questo tutorial per permettere a chi non c'è stato di capire meglio cosa abbiamo sviluppato negli scorsi workshop:

Questo robot si basa sul kit pico, che è un piccolissimo automa a 3 ruote, con classica ruotina posteriore pivotante. Diciamo che è studiato per dare capacità di movimento nello spazio a una scheda arduino e permettere di approcciare alla robotica economicamente, o almeno l'idea iniziale era quella poi siamo sfociati nel self-balancing e quindi il mio *è stato adattato per questo utilizzo.


Il robot è composto da:
2x ruote per servi/microservi con pneumatico in foam
2x staffe microservi
2x microservi (in questo caso Turborix)
2x sensori ir possibilmente analogici (in questo caso SHARP)
1x Arduino duemilanove
1x layer Pico
1x portabatterie 4xAAA
4x batterie stilo AAA

Questo primo prototipo è in grado solo di mantenere una posizione bilanciata e correggere eventuali errori di inclinazione. Per farlo utilizza due semplicissimi sensori Sharp, che in realtà non sono esattamente studiati per rilevare cosi' brevi distanze (in teoria sono utilizzati per range da 50 a 3cm io li uso tra 3 e 0 ), ma sembrano fare decisamente bene il loro lavoro.

L'algoritmo che ho scritto è semplicissimo: calcolo la distanza dal suolo per ognuno dei due sensori, e sottraggo la prima alla seconda. Se il robot è parallelo al terreno il valore sarà 0 o vicinissimo allo 0 (micro-correzioni). Quindi basterà scrivere: Servo.write(90 + il nostro valore); per ottenere una reazione in rapporto alle due distanze rilevate dai sensori. Cioè il nostro valore sarà negativo se il primo dei due sensori otterrà una rilevazione minore della seconda, o positivo in caso contrario.

Codice:
#include <Servo.h>

Servo left;
Servo right;

#define servoLeftPin * * 9
#define servoRightPin * 10
#define servoZero	 81
#define IRFront	 * 0
#define IRBack	 * *1
#define ledPin	 * *13

int frontSense = 0;
int backSense = 0;
int orientation = 0;


void setup() {
pinMode(ledPin, OUTPUT);
left.attach(servoLeftPin);
right.attach(servoRightPin);
left.write(servoZero);
right.write(servoZero);
Serial.begin(9600);
}


void getOrientation() {
 *frontSense = 0;
 *backSense = 0;
 *orientation = 0;
 for (int i = 0; i < 10; i++) {
 *frontSense = analogRead(IRFront) + frontSense;
 *backSense = analogRead(IRBack) + backSense;
 *if (i == 9) {
 * frontSense = frontSense / 10;
 * backSense = backSense / 10;
 * orientation = frontSense - backSense;
 *}
 }
}


void loop() {
getOrientation();

float delta = orientation / 10;
if(delta > 90) delta = 90;
if(delta < -90) delta = -90;

left.write(81 - delta);
right.write(81 + delta);

Serial.print(orientation);
Serial.print(" * ");
Serial.println(delta);
}
Qui il video (non riesco a embeddarlo mi embedda quello precedentemente postato?!?!)
http://www.youtube.com/watch?v=18pmm4bZ20c

Ecco tutto, fatto il self-balancing .
Qui dentro ragazzi c'è tutto quello che serve. Se analizzate il primo programma da noi postato sul self-balancing grazie a IMU e questo, sono del tutto simili, ed entrambi utilizzano sistemi fondamentali per noi potenziali creatori di automi. Il valore delta, buttato direttamente in servo.write, è definibile come la P del PID. Infatti il robot è in grado solo di correggere non oltre una quindicina di gradi di inclinazione per lato e chiaramente solo sul posto, non in movimento, proporzionalmente all'errore di inclinazione. La mancanza della I e della D si sentono infatti se il robot accelera in una direzione.

La semplicità di questo sistema permette più o meno a chiunque di poterlo testare con ciarpame di recupero e componenti a costo irrisorio. Con questo bisogna chiaramente prendere atto delle elevate limitazioni di questo sistema, per esempio senza almeno un accelerometro che determini il reale vettore gravità i nostri amici non potranno mai fare una salita o una discesa.

Ho capito, scrivero' un articolo sul PID. *;D

Qui l'articolo originale: http://www.gioblu.com/index.php?opti...tica&Itemid=34
Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione
Modalità  visualizzazioe

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Attivato
Le smilies sono Attivato
[IMG] è Attivato
Il codice HTML è Disattivato

Vai al forum


Tutti gli orari sono GMT. Adesso sono le: 22.07.30.


Basato su: vBulletin Versione 3.8.0
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Realizzazione siti web Cobaltica Foligno
spacer.png, 0 kB