Jump to content

Post raccomandati

Inserito

Ciao ai colleghi robottinari

 

Si avvicina la nuova stagione robotica, e si mettono in cantiere nuovi concorrenti.

 

Si rincorrono voci di cambiamenti sostanziali nel regolamento, c'e' qualche anteprima? Che a fare un buon robot ci vuole tempo, e vorrei sapere se il regolamento attuale sara' ancora valido prima di mettermi a costruire.

 

Ciao

  • Risposte 111
  • Created
  • Ultima risposta

Top Posters In This Topic

Inserito

vedo solo robot tutti uguali il cui design e' forzato dalle dimensioni

 

Alla fiera della robotica ne ho portati tre, chiedi a Giancarlo se si somigliavano.... ;D ;D

Paura, eh? :D:D

 

 

Inserito

Questi sono già "giusti"

 

Ne sei certo? A me sembrano piu' larghi, specie quelli con l'nxt hanno una benna frontale che sembra almeno 20 cm (25 direi per quello con la benna rossa)

 

Comunque penso che faro' un tentativo e vedo se mi sconfinfera.

 

Farei peraltro un sondaggio prima di decidere, non vorrei trovarmi in tre a fare il prossimo torneo, sarebbe alquanto triste... (ammesso e non concesso che il nuovo robottino mi soddisfi)

Inserito

non vorrei trovarmi in tre a fare il prossimo torneo

In effetti per il momento gli unici funzionanti di cui abbia notizia sono i miei due e quello di Sabran; Giancarlo è sornione e silenzioso ma sai che è capace di tirare fuori dalla manica un campione all'ultimo momento, già mi aspetto un DooM in miniatura.... Ci sono altri coraggiosi sfidanti?

 

E comunque se siamo solo in tre ci spetta un premio a testa :D

Inserito

il prossimo torneo si svolge dal 10 al 12 marzo a Vienna:

 

RobotChallenge

 

 

Oggi ho dato un occhiata al sito, su quasi 300 robot solo tre sono italiani, e quegli unici tre sono della stessa famiglia.... ;)

 

Ci toccherà tenere alta la reputazione di Itlug, al Sumo Lego ci sono ben 12 sfidanti da battere!!! :o

 

 

Inserito

vogliamo foto, filmati e resoconto in tempo reale degli scontri!

 

Accidenti, ci serve un reporter... :D

 

Stiamo modificando il software perché si parte schiena contro schiena.... PORK!!! :'(

 

 

Inserito

Finito il primo round... che massacro ragazzi!!!

 

Ma si impara, si impara....

 

Giancarlo, c'è un Doom in miniatura e sembra molto simile nei movimenti... si chiama RUR-Warapa :D

 

 

 

 

 

507.jpg

Inserito

Fine del secondo round...

 

Palina ha vinto i primi due incontri, ma è stato squalificato su obiezione del padre del sconfitto perché invece di partire dopo 5 secondi partiva dopo 4,50 secondi.... ::)

 

Dopo la modifica al timer ha vinto tutti gli incontri restanti, ed un altro concorrente ha sollevato l'obiezione che si muove in maniera scorretta... sono stato ammonito alla fine del round ma non abbiamo trovato alcun cenno di ciò sul regolamento... ora per precauzione sto modificando il software per le finali ;)

 

Chissà perché nel primo round dove abbiamo perso quasi tutti gli incontri nessuno ha sollevato un'obiezione...

 

E' un mondo difficile ;)

 

 

 

 

 

509.jpg

Inserito

Fine del torneo...

 

Siamo stati ammessi alla finale, ma abbiamo perso contro una versione ridotta di Obelix (MTS), che a sua volta ha sconfitto la versione mini di Doom (RUR - Watapa)

 

Abbiamo visto un sacco di idee.... ne approfitteremo ;D ;D ;D

 

 

 

 

 

511.jpg

Inserito

In ogni caso, anche i meno "esperti" di noi saranno curiosi di ascoltare i vostri racconti e "suggerimenti" ;)

 

Ovviamente pubblicherò foto ed istruzioni solo di chi ha perso.... per essere scorrettamente sportivo :D ;D

 

Attenti che cronometrerò il delay di partenza.... [evil grin]

 

PS: Star Wars l'abbiamo dovuto modificare perché usciva dalla sagoma di 2 millimetri...

 

Inserito

molto interessante, che si parte schiena contro schiena lo dovremmo aggiungere al regolamento.

Mi piacerebbe sapere se erano ammesse cose diverse dallo spingere l'avversario, e quale era l'obiezione che ha portato all'ammonimento di Palina. Purtroppo non ho visto la diretta

 

Ottimo risultato !

 

 

Inserito

ciao, sto sviluppando un robot secondo il nuovo regolamento, e' quasi definitivo, a parte qualche contrappeso da aggiungere per portarlo al limite dei 1000 grammi (al momento e' intorno ai 600). Per la verifica delle dimensioni ho creato una dima di 18x18 studs, che e' qualche mm in meno dei 150x150 consentiti da regolamento.

Ecco qualche foto:

 

 

p><p> L

 

 

La parte inferiore col sensore di luce:

' alt='> '>

Al momento uso solo due sensori, quello di luce e l'ultrasonico. Lo switch sul lato sinistro non e' collegato.

 

Dentro la dima:

 

Appena pronto postero' anche il software.

 

Ciao !

 

 

 

 

 

516.jpg

 

518.jpg

 

520.jpg

 

522.jpg

 

524.jpg

Inserito

Mi piacerebbe sapere se erano ammesse cose diverse dallo spingere l'avversario

 

No, solo lo spingere/sollevare, nulla di nuovo su questo lato

 

e quale era l'obiezione che ha portato all'ammonimento di Palina

 

Visto il tipo di partenza, la prima mossa di Palina era di fare retromarcia e poi cercare a destra e sinistra mentre l'avversario (ormai davanti) era ancora impegnato a ruotare su sè stesso... ho dovuto eliminare e partire con una rotazione di 180 gradi

 

 

Ottimo risultato !

 

Grazie!! ;D Abbiamo perso ma con onore e dignità :) Se MTS e Watapa fossero stati testa a testa nel primo scontro saremmo arrivati secondi di sicuro!!!

 

Intanto su 15 robot siamo arrivati in finale :D

 

PS: StarWars cadeva dal bordo: il bordo bianco è solo di un centimetro e la pedana è sollevata :'(

 

PPSS: Complimenti Giancarlo per il robottino! Quest'anno sarà dura!! 8)

 

Inserito

Ho appena finito la versione 2012 di Saccocero (ovvero ho smontato Saccocero ed i suoi pezzi li ho utlilizzati per questo nuovo robot) ;)

 

Dati tecnici: 2 motori, 1 luce, 2 sensori tatto, 2 sensori luce, un sensore US ma faccio le prove e forse gli rimetto il DIRPD

 

Mi tocca fare la vignetta rimovibile, visto che completo pesa ben 1050 grammi !

 

Sono ancora indeciso sul nome ma penso che "Cube" sia appropriato

 

PS: dentro c'è anche un attuatore lineare per variare la durezza delle sospensioni... 8)

 

 

 

 

526.jpg

 

528.jpg

Inserito

mmmh giancarlo... mi perplime l'ultrasonico in verticale, e' una soluzione che avevo provato anche io ma ho notato che perde moltissimo in precisione, costringendo ad una rotazione molto piu' lenta. Sei riuscito a risolverlo?

 

Ciao

Inserito

ciao Nicolo', ancora non ho scritto niente di software, se ci saranno problemi lo girero'. A me preoccupava il bordo bianco sottile, se il robot va troppo veloce rischia di uscire.

Grazie dell'avvertimento !

 

 

Inserito

Ne approfitto per un'altra domanda: finora perdeva il robottino che oltrepassava completamente la linea, adesso mi sembra di capire che basta oltrepassarla anche solo in parte... e' un'interpretazione corretta oppure no?

 

Ciao

Inserito

adesso mi sembra di capire che basta oltrepassarla anche solo in parte...

 

In realtà il campo è sopraelevato di 2,5 centimetri dal tavolo, se oltrepassi la linea il robot cade.

 

Il regolamento dice che perdi quando una qualsiasi parte del robot tocca il tavolo al di fuori del campo: Star Wars ha perso tutti gli incontri perché arrivato al bordo perdeva l'equilibrio :'(

 

 

Inserito

mi perplime l'ultrasonico in verticale

 

Da molteplici prove da me testè effettuate ho arguito una cosa importante: se il robot è fermo le misure sono "precise" e ripetibili (lo scarto, sebbene importante, è costante) e non è influenzato dall'orientamento del sensore.

Il tutto peggiora notevolmente quando il robot è in movimento: le misure diventano erranti ed aleatorie, spesso restituendo un errore di lettura che va correttamente gestito.

 

Ad esempio, se mi sto avvicinando in linea retta ad un ostacolo, le letture possono decrescere (come ci si aspetta) ma ci possono pure essere degli errori di lettura o addirittura dei valori in crescita dando l'impressione su due dati consecutivi che l'ostacolo si stia allontanando o che non sia più in vista.

 

Quindi se confronti i dati odometrici con quelli del sensore ti ritrovi dei valori sempre diversi anche ad ostacolo fermo, figurati se si sposta!!!

 

Finora l'approccio più ovvio che ho trovato è il cosiddetto "livello soglia": ovvero se la lettura è inferiore (ad esempio) ai 5 centimetri parte l'attacco. Il livello soglia va testato a seconda delle caratteristiche del robot con una serie di prove, in modo che non reagisca ad oggetti fuori dal campo o che reagisca solo quando ormai è troppo tardi ;)

 

Qua mi sa che Glorfindel è un avversario da temere.... ;)

 

 

Inserito

 

In realtà il campo è sopraelevato di 2,5 centimetri dal tavolo, se oltrepassi la linea il robot cade.

 

Il regolamento dice che perdi quando una qualsiasi parte del robot tocca il tavolo al di fuori del campo: Star Wars ha perso tutti gli incontri perché arrivato al bordo perdeva l'equilibrio :'(

 

Ecco, lo temevo... il prototipo 1 e' scartato. Scodella l'avversario fuori che e' una meraviglia, ma la prima parte a toccare il tavolo e' la sua pala (anche se in resto del robot non ha problemi a restare sul campo).

Inserito

Per il tavolo sto aspettando il preventivo da un falegname mio cliente, se è economico ne faccio fare uno per Itlug ed uno per me :D

 

Qualcun'altro sarebbe interessato a un tavolo da Sumo?

 

 

 

Inserito

Non oso pensare ai vostri commenti... Ho fatto delle prove con l'ultrasonico per curiosità.

 

Su "Cubico" ho montato un secondo ultrasonico in verticale, l'ho fatto partire a 40 centimetri dalla parete ed ho fatto girare un programma che, mentre i motori andavano al 30%, misurava la distanza con gli ultrasonici ogni 20 gradi di rotazione (1 centimetro esatto di spostamento), scrivendo le misure sullo schermo. Quando finiva lo schermo si fermava.

 

La prima serie di numeri proviene dall'ultrasonico orizzontale, la seconda da quello verticale.

 

Questo conferma la mia tesi: i numeri sono altalenanti, con un 255 nella prima serie (errore di lettura) con aumenti e diminuzioni e per di più non rispecchiano la misura reale (in teoria i numeri avrebbero dovuto essere 40 39 38...).

 

Quel che più conta è che non ci sono differenze significative tra ultrasonico orizzontale o verticale.

 

 

 

 

 

552.png

Inserito

E' naturale che le prove con sensore in movimento lungo l'asse di visuale non diano differenze significative. Il problema e' che l'arco visuale e' piu' ampio lungo l'asse che unisce gli occhi che non lungo quello ad esso perpendicolare. Se il sensore pero' si muove lungo un asse perpendicolare all'asse visivo l'arco visuale si riduce ulteriormente per effetto del movimento (il sensore ha meno tempo per effettuare la misura). Nel caso del sensore montato in verticale, durante la rotazione del robottino attorno all'asse Z l'arco visuale e' molto ridotto a causa del sommarsi dei due fattori negativi (arco ridotto + rotazione), quindi il robottino deve ruotare molto lentamente. Se invece il sensore e' montato in orizzontale l'ampiezza dell'arco e' sufficiente a permettere letture abbastanza accurate anche ad alta velocita' di rotazione.

Provare per credere!

Inserito

Ciao cari robottinari! Produco di rado ma quando mi ci metto....

 

Sabato Palina è caduto miseramente al suolo dal ripiano su cui era esposto, dopo una caduta da un metro e mezzo sul pavimento potete immaginare cosa ne sia rimasto...

Ho approfittato per rivedere l'hardware rendendolo più robusto :D mi sono avanzati un sacco di pezzi e ne ho aggiunti pochi altri... fa bene rimontare ogni tanto :D

 

Ieri sera una buona ripassata al software, ho ripulito ed ottimizzato il decisore mettendo anche le famose routines di sblocco per uscire dal "balletto" quando i robot si incastrano; praticamente da 60 linee la routine ora ne occupa "solo" 40 ed ha due funzioni in più... 8)

Ho diminuito la velocità in esplorazione in modo da minimizzare il suicidio da bordo :D

 

Come hardware ho deciso di dotare Cubico di un potente RCX 2.0, la cosa favolosa è che mi basta adattare il sofware di Palina ed è pronto visto che usa ruote diverse ma ha lo stesso set di sensori...

Adesso mi manca ancora una limatina al software di StarWars ed Hydra, adattare quello di Granchio a Testarossa e sono pronto per Cavallino :D

E voi robottinari a che punto siete?

 

PS: mi sa che i premi li distribuiremo a costruttore, visto che ci ho preso gusto :D

Inserito

Io ho aggiunto un secondo sensore di luce sul retro e iniziato a scrivere il software, appena pronto lo posto.

 

La "fatica" (coppia motrice) del motore la si puo' calcolare sapendo il pwm, la tensione di batteria e la velocita' di rotazione:

 

coppia [in Newton*metri] = 0.04 *(pwm [0=0%; 1=100%] * tensione batteria [in Volt] - 3*velocita' [in giri/secondo])

 

La formula vale per il motore dell'NXT, la velocita' e' quella del disco arancione di uscita, la tensione di batteria la si misura con l'istruzione "BatteryLevel()" in NXC, per la rotazione del motore si puo' usare "MotorRotationCount(OUT_A)" (per il motore A) che la restituisce la posizione (non la velocita') in gradi

 

ciao

 

Inserito

coppia [in Newton*metri] = 0.04 *(pwm [0=0%; 1=100%] * tensione batteria [in Volt] - 3*velocita' [in giri/secondo])

 

quindi:

// Display RPM of motor attached to the port MOTOR while running at full speed.
// The program runs continously until stopped by pressing the gray NXT button.
// Requires NXT firmware 1.28 or later (uses floating point arithmetic).

// CurrentTick returns milliseconds in a long integer.
// MotorRotationCount returns degrees in a long integer.

#define MOTOR OUT_A
#define FULL_SPEED 100
#define DEG_TO_RPM 166.6667 // converts degrees per millisecond to RPM

long prev_tick;
long prev_deg = 0;

float rpm_msg()
{
  // this routine calculate RPM
  long dt = CurrentTick() - prev_tick;
  long deg = MotorRotationCount(MOTOR) - prev_deg;
  float rpm = deg * DEG_TO_RPM / dt;
  prev_deg = MotorRotationCount(MOTOR);
  prev_tick = CurrentTick();
  return rpm;
}

task main()
{
  int pwr=FULL_SPEED;
  int coppia;

  prev_tick = CurrentTick();
  OnFwd(MOTOR, pwr);
  while (true)
  {
     Wait(MS_500); // update display every 0.5 seconds
     TextOut(0, LCD_LINE2, FormatNum("RPM: %5.1f", rpm_msg()), true);

     coppia = 0.04 * pwr * BatteryLevel() - 3*rpm;

     TextOut(0, LCD_LINE4, FormatNum("Nm:  %5.1f", coppia), true);

  }
}

 

Mi confermi?

 

Inserito

uhmmm ... mi sembra che stai usando i giri al minuto (rpm) anziche' i giri al secondo nella

 

coppia = 0.04 * pwr * BatteryLevel() - 3*rpm

 

pwr va da 0 a 100, quindi va diviso per 100 perche' nella formula il si usa un valore da 0 (motore fermo) a 1 (massimo pwm).

 

I valori di coppia sono piccoli, conviene stamparli moltiplicati per mille, potrebbero variare tra 0.01 a vuoto fino a circa 0.3 a motore bloccato

 

Ciao !

 

 

Inserito

uhmmm ... mi sembra che stai usando i giri al minuto (rpm) anziche' i giri al secondo

pwr va da 0 a 1

 

Grazie, ecco perchè i valori erano strani...

ho avuto un colpo di genio...

Invece di misurare i Newton uso direttamente i gradi al secondo, diminuendo i calcoli, anche perchè lo uso su un unico motore che deve girare a velocità costante: potrei addirittura misurarlo nella routine di inizializzazione

 

Faccio una prova e vi faccio sapere.

 

 

 

Inserito

Contemporaneamente sto lavorando ad un progetto completamente diverso tanto per gradire...

 

Per favore qualcuno sa dirmi che pezzo è quello della cupola del robot che non riesco a trovarlo su Bricklink?

 

 

 

(fonte:microbricks, non sto ancora credendo ai miei occhi... una micro-MOC più bella dell'altra!)

 

PS: Software quasi terminato nel ponte :D

 

Ecco il nuovo decisore (NQC)

 

  
while (true) {
   // decisore sull'azione da intraprendere
   // legge i sensori
   bordo(bianco);
   // precedenza al bordo
   if (bianco>0) {
     // se tocca il bordo con un sensore
     ultimo=3;
     tempo=0;
     switch (bianco) {
       case 1:
          // bianco a destra
          fuga(destra);
          ultimo=1;
          break;
       case 2:
          // bianco a sinistra
          fuga(sinistra);
          break;
       case 3:
          // arrivato al bordo
          fuga(indietro);
          break;
     }
   } else {
     // niente bordo, siamo tranquilli
     dirpd(nemico);
     if (nemico>0) {
       ultimo=nemico;
       tempo++;
       if (nemico==2 || tempo>10) {
          // è davanti, all'assalto!!!
          ultimo=3;
          muovi (1,OUT_FULL);
       } else if (nemico==1) {
          // è a sinistra
          muovi (8,OUT_FULL);
       } else {
          // è a destra
          muovi (2,OUT_FULL);
       }
     } else {
       // nessun contatto, andiamo a caccia
       tempo=0;
       scan (ultimo);
     }
   }
 }

 

Crea un account o accedi per commentare

Devi essere un utente registrato per postare un commento

Crea un account

Iscriviti per un nuovo account nella nostra community. È facile!

Registra un nuovo account

Accedi

Hai un account? Accedi .

Accedi ora
  • Visualizzato ora da   0 utenti

    • Nessun utente registrato su questa pagina.

×
×
  • Crea nuovo...