Air e fiori estremamente delicati possono fare le proprie mani un dono, un materiale molto ordinario - tovaglioli. Prodotto appartiene alla categoria di semplice perché può attirare anche i bambini più piccoli, in modo che essi hanno le mani in modo insolito e bellissimo bouquet in dono a sua madre amata, la nonna e la sorella. In tovagliolo materiale per prodotti di carta può servire i tessuti che sono imballati in una scatola, fazzoletti c'è una luce, arioso, e in forma il più possibile.
In tovaglioli per i prodotti bisogno di diversi indicatori colorati, forbici, nastro adesivo, e steli possono essere utilizzati per le filiali semplici, che in quantità sufficiente possono essere trovati sul terreno, non alberi oblamuyuchy e arbusti.
Istruzioni su come fare i fiori dai tovaglioli sono qui
Una volta che si effettua un numero sufficiente di colori che possono formare un bouquet. Ksati steli può essere utilizzato per steli di fiori artificiali, se sono superate e hanno bisogno di rispolverare.
Tralasciando rozkazni di come sono arrivato all'idea di costruire heksapoda (era tonnellate di video su YouTube), passare direttamente ai dettagli del processo di selezione. Era il gennaio del 2012. So solo quello che voglio dal mio lavoro e che cosa - no. Mi piace:
che ogni gamba era 3 gradi di libertà - 3DOF (3 dimensioni della libertà), come un 2dof un'opzione più facile - fa una tale sensazione di insetti e 4dof - una volta, 3DOF e quindi consente di spostare liberamente la punta del piede nello spazio 3D;
6 piedi. Ancora una volta, questo non è 4 (se robot maldestro salti), ma non 8 come ragni che sono eccessivamente;
taglia piccola;
a buon mercato al costo;
con un minimo di tavole e connessioni.
Passo 1
. Innanzitutto, ovviamente, dovuto scegliere scheda madre per il bambino. Più di una volta il bene e il male in letto dal momento della Arduino. Ma su di lui e guardato come l'opzione principale. Controller Solder sé - non c'era tempo e prendere a bordo più avanzato con ARM cpu, per esempio - è costoso, e capire come i loro programmi, come lavorare con i risultati PWM, ecc - lunghi. A arduyna: IDE lanciato, il codice napedalyl, pressato caricamento - e ciao, lo avete lampeggiare. Beauty! ;)
In un primo momento ho iniziato a guardare mega Arduino e cloni, quindi le uscite PWM che possono essere controllati servo hanno avuto abbastanza. Ricorda che 3DOF heksapoda bisogno 3 * 6 = 18 servi e gestione del canale dei componenti. Ma poi ho trovato un vero e proprio Yazz tra mega di Arduino, una carica di Dagu, chiamare Red Back Spider Controller. Qui è su ebay.
Offre tutte le sue uscite come finito 3 poli (terreni, cibo, tono), e la soluzione di cibo. Potere di controllo stabilizzato, e il connettore è dvyhlov come è (UPD: non come, ma anche stabilizzato 5 volt E a quanto pare risolto con regolatore di potenza, come l'interferenza con il controller 18 servi concorrenti non fanno.). In questo modo il file al terminale 7-30 volt cibo sufficiente potenza (eee pc questionario 901 a 12V e 3A - era sufficiente per tutti 18 servo ronzio) e non ingannare con alimentazione e logica dvyhlov separato. Inoltre, sarà in futuro è facile da mettere su questo pacchetto mostro batteria Li-Po 7.4 volt. E con tutto questo, il punto di vista programmatico - si tratta di una mega-compliant software e lybamy e ferro arduyinov comune (diversa shyldov, montati direttamente sul mega originali - non funzionerà). Tuttavia, il prezzo è superiore anche al Mega originale, ma tutti gli altri pro superano esso.
Fase 2
. Servi Avanti. Su ebay micro servo Chiedi loro molto differenti. Ho preso il più potente dei più piccoli e più economici, 9 grammi di peso, ingranaggio di plastica. Se si prende un sacco dove stanno inviando lotti - è più conveniente. Ho preso 3 confezioni da 6 sembra essere accaduto meno di 2 dollari al pezzo. Ti dirò che non rimpiangere speso di più e prendere servo con ingranaggi in metallo e cuscinetti a sfere. Queste materie plastiche sono stati gioco abbastanza evidente, e lo scricchiolio caratteristico quando una forza eccessiva quando salta ingranaggi. A causa della reazione - cinematica abbastanza difficile regolare con precisione (come è generalmente il più difficile rivelato).
Questo è tutto quello che ho ordinato, la consegna ha fatto circa $ 100. Batterie e trasmettitori / ricevitori per il monitoraggio e la radyoupravlyaemosty - lasciato per più tardi. Perché la macchina radiocomandato che ho e non chiedo che cosa realmente mi interessava - è in piedi! Video senza intoppi heksapodov su YouTube - lo guardavo affascinato, sembrava, e ogni volta che le lacrime rotolare giù per le guance, e ho soffocato respiro sibilante "Io voglio! ". Non vorrei chiedere un pezzo finito, e voglio fare più niente è!
In attesa che l'ordine di leggere come persone istruite che animano le loro creazioni. Naturalmente, subito emerso cinematica inversa. Se dici semplicemente e direttamente su sharnytnыe "arti", i cinematica diretta - questo è dove l'ingresso presentato angoli delle articolazioni, e l'uscita abbiamo un modello dell'arto nello spazio, le coordinate dei punti estremi dell'arto. Cinematica inversa è - ovviamente è contrario - l'ingresso ha ricevuto le coordinate dei punti estremi dell'arto dove abbiamo bisogno di raggiungere, e l'uscita otteniamo angoli che devono trasformare le cerniere per realizzare questo. Servo solo ottenere la posizione angolare di ingresso in cui hanno bisogno di tornare (un filo segnale codificato PWM / PWM).
Fase 3
. Ho iniziato con, che diceva, pensare attraverso la realizzazione di IC. Ma ben presto è arrivata la sensazione che il mio caso è troppo complessa. E come di difficile attuazione e computazionalmente molto difficile - il calcolo è iterativo. E ho 6 gambe, ognuno dei quali vanno considerati come IC, e semplicemente non molto intelligente 16Mhts Architettura AVR. Ma solo 3 gradi di libertà. E facile intuire che il punto arbitrario in dotyahuvannya "può raggiungere solo in un modo. La decisione è maturata nella mia testa.
Ma poi arrivò febbraio e pacchi - uno dalla Cina, un altro britannico. La prima cosa che di solito solo pohravsya Pay arduyinov - popylykal pomorhal LED e un altoparlante collegato lì. Poi cominciò l'effettiva attuazione IC, nella ghiandola. Che ha costruito un prototipo metri da materiali di scarto (piuttosto plastmasska mite che è facile da tagliare con le forbici, viti e accessori - tutti i kit attuatori). Questa tappa terminatore fissato direttamente alla scheda arduynы. Si può considerare come il bilancio fatto articolazioni.
Pomyluvavsya questo caso e pomriyav che se ho basato questo lavoro in futuro spayayu terminatore, che dichiara guerra all'umanità, poi con John Connor Schwarzenegger tornerà a me qui in passato e selezionerà questo prototipo e la sua rasplavyat in Orodruyne. Ma nessuno è tornato, nulla tolto, e sono andato in silenzio.
Fase 4
. Si è constatato che IR non ha bisogno di temere, nel mio caso è venuto giù alla geometria banale, trigonometria. Più facile da applicare alle articolazioni, rivolto a Wikipedia e onorato di insetti. Hanno nomi speciali per arto:
Russo ha anche i suoi nomi molto interessanti per questo, ma la "scodella", "vertluh", "gamba", etc., mentre il codice non mi ha permesso di dormire. Così ho 3 arti e il relativo congedo servo Coxa, femore, la tibia. Da piedi prototipo sopra dimostra che non ho nemmeno bisogno di Coxa parti separate. E 'solo due servo legato fasce elastiche. Femore - implementato una striscia di plastica, che entrambe le parti sono montati leve servi. Così, l'ultima servodvyzhok rimanente - dall'inizio della tibia, per estendere a cui è imbullonato un pezzo di plastica.
Passo 5
. Lanciato l'editor, non mudstvuya creato il file Leg.h, e in classe si Leg. E un sacco di Muti ausiliario. Supponiamo che ci sia un punto nello spazio A (ax, ay, az), che dovrebbe raggiungere. Alla vista dall'alto appare così:
Figura ho mostrato subito un modo di calcolo del primo angolo - l'angolo di rotazione del servo, controllare Coxa, che ruota l'intero arto in un piano orizzontale. Il diagramma immediatamente contrassegnati variabili rossi utilizzati nel codice (non tutti). Non molto matematicamente, ma confortevole. È evidente che siamo interessati angolo è elementare. Prima primaryCoxaAngle - è solo l'angolo (0; A) per l'asse X (equivalente a un punto d'angolo in coordinate polari). Ma il diagramma mostra che, mentre la gamba stessa - non raspalozhena a questo punto. La ragione è che l'asse di rotazione della coxa non è quello di "allineare" - non so come dirlo correttamente. Non nel piano in cui il giunto rotante e l'altro è tip 2 metri, qui. Questo può essere facilmente compensata, considerando additionalCoxaAngle (come ritenuto - anche fermata utruzhdayus perché erano ancora a scuola, giusto?).
Insieme, abbiamo il primo pezzo di codice, questo metodo interni portata (Point & dest):
float hDist = sqrt (SQR (dest.x - _cStart.x) + SQR (dest.y - _cStart.y));
float additionalCoxaAngle = hDist == 0.0? DONT_MOVE
: Asin (_cFemurOffset / hDist);
float primaryCoxaAngle = polarAngle (dest.x - _cStart.x, dest.y - _cStart.y, _thirdQuarterFix);
float cAngle = hDist == 0.0? DONT_MOVE
: PrimaryCoxaAngle - additionalCoxaAngle - _cStartAngle;
Qui dest - questo è il punto in cui nazho trascinamento, _cStart - le coordinate di hardware (e il centro di rotazione) coxa, in hDist considerare la distanza tra _cStart a dest nel piano orizzontale. DONT_MOVE - è solo una bandiera, il che significa che non ha bisogno coxa nessuno a cui rivolgersi e lasciare la posizione corrente (come dest - da qualche parte a destra sull'asse di rotazione coxa - raramente, ma succede). Qui cAngle - questo è un angolo in cui si desidera che il servo si discosti dalla sua angolazione originale (che è al centro del campo d'esercizio). Si può notare che, yuzaetsya _cStartAngle - è l'angolo nello spazio, che viene restituito dal devoltu servo, durante l'installazione. Chi _thirdQuarterFix racconterò più tardi se non dimenticare.
Passo 6
. Poi le cose si fanno ancora più facile. Abbiamo solo bisogno di guardare il piano di cui sopra "line up":
Così, il problema riduce improvvisamente a trovare il punto di intersezione di 2 cerchi. One - al punto che "crescere" il nostro femore, il secondo - il punto in cui abbiamo bisogno di raggiungere (coordinate locali 2d). I raggi dei cerchi - la lunghezza del femore e tibia, rispettivamente. Se i cerchi si intersecano in uno dei punti 2 può essere disposto congiunto. Abbiamo sempre scelto il top a "ginocchio" in mostri sono stati piegati in su, non verso il basso. Se non si sovrappongono - non è dotyanemsya al punto di destinazione. Un po 'di codice, passare al piano è semplicemente solo un paio di insidie viene preso in considerazione e documentato nei commenti che ho non perplesso poi esaminare il codice. Per semplicità, in questo locale punto "aereo up" Ho scelto il punto di origine in cui coltivazione del femore:
// Trasferirsi in locale Coxa-Femore-bersaglio sistema di coordinate
// Si noti il caso in cui hDist
<= _cfemuroffset.="" this="" is="" for="" the="" blind="">=> // Non abbiamo mai non riesce a raggiungere il punto che è più vicino al _cStart poi
// Femore offset (_fStartFarOffset)
float localDestX = hDist sqr (_fLength + _tLenght))
{
log ("non può raggiungere!");
return false;
}
Step 7
. Ora localDestX e localDestY - le coordinate del punto di arrivo. Tutto ciò che rimane - per trovare i cerchi intersezione centrati (00) e (localDestX, localDestY), e raggi _fLength e _tLength (rispettivamente la lunghezza e la lunghezza del femore tibia). Con questo studente anche fallire, ma ammetto ci sono molti errori da controllare per te e tutti possono fare per controllare che tipo di formule muti, lasciando un riferimento che è chiaro razzhovana questo problema geometrica elementare:
// Trova congiunta come cerchio intersecare (equazioni di http://e-maxx.ru/algo/circles_intersection & http://e-maxx.ru/algo/circle_line_intersection)
float A = -2 * localDestX;
float B = -2 * localDestY;
float C = sqr (localDestX) + SQR (localDestY) + SQR (_fLength) - SQR (_tLenght);
float X0 = -A * C / (sqr (A) + SQR (B));
float Y0 = -B * C / (sqr (A) + SQR (B));
float D = sqrt (SQR (_fLength) - (SQR (C) / (SQR (A) + SQR (B))));
float mult = sqrt (sqr (D) / (sqr (A) + SQR (B)));
float ax, ay, bx, per;
ax = X0 + B * mult;
bx = X0 - B * mult;
ay = Y0 - A * mult;
by = Y0 + A * mult;
// Selezione della soluzione in cima come joint
float jointLocalX = (ax & gt; BX)? ax: bx;
float jointLocalY = (ax & gt; BX)? ay: by;
Tutto quello che c'è ancora un po 'di coordinate ricevute per calcolare gli angoli corretti per femore e tibia servi:
Step 8
. Эlementarschyna Again - angolare coordina tutti. Spero di nomi alle variabili dovrebbero già essere chiaro, per esempio, _fStartAngle - è femore angolo, l'angolo di femore è diretto da impostazione predefinita avviare. E il metodo portata ultima riga () (lui ha detto che andava e fece un gesto):
muoversi (cAngle, fangle, groviglio);
Metodo mossa sta scrivendo direttamente servo. In realtà, anche allora ha dovuto aggiungere un sacco di cose per la protezione da angolazioni cattivi (che servo non può tornare, ma tenterà), così come altri le gambe che sono zarkalno e / o inviato all'altra parte. Ma finché lavoriamo solo con una zampa.
Step 9
. Questi pezzi - questo è il codice finale, che è ben lungi dall'essere perfetto, e certamente può essere migliorata in modo significativo. Ma funziona! Mai andato per le polnofunktsyonalnuyu cinematica ynversnuyu geometria liceo, trigonometria, abbiamo implementato per piedi 3DOF! Sì, e otteniamo la soluzione subito, in una iterazione. Per far funzionare il tutto, la gamba ha dovuto essere attentamente misurati e configurare i dati di classe ottenuti. compreso l'angolo che la più difficile da misurare nel prodotto finito. Forse se un avtokad e progetto fare qualche bella rende - sarebbe più facile con la misura di angoli, ma non ho avuto il tempo o la voglia di affrontare questa emozione.
Febbraio è appena iniziata, e video piede è stato già fatto. Per testare l'IC, ho fatto la gamba descrivere tutti i tipi di figure nello spazio (si deve attivare costantemente portata, evitando il punto sul rettangolo o un cerchio codice noioso e noioso, quindi non citazione (e gli esperimenti finiti al fine di rintracciare primitive, ho vypylyav generale)):
Step 10
. Poi ha dovuto finire il gioco con questo prodotto su una gamba non è uprыhaesh (anche se questo robot renderebbe davvero interessante). Ma ho bisogno di heksapod. Sono andato a cercare i più vicini plexiglas mercato delle pulci. Trovati 2 diversi pezzi - uno spessore di 3 mm (solo per il corpo, ho pensato), altri 2 mm e blu (altre arti, per abbinare il servo). In poche settimane ho scavato una notte per fare qualcosa con esso. Ha fatto schizzi su carta. provato a - come se tutto è OK, allora il caso di un seghetto.
Step 11
. E qui è, all'estero mostro shestylapoe. Quando prova una gamba, ho avuto questa cosa in qualche modo lasciato questionari sulle viti esterne. Basta. Ma sfamare 6 metri da lui era troppo spaventoso. Così, per un po 'ho riattaccato le mani, pensando che ho bisogno di ottenere un questionario più appropriato. Ma si è rivelato molto più facile, ho già detto - è venuto dal questionario Eee PC 901. Bene, bene.
Step 12
. Stabilire lavoro 6 piedi dimostrato più difficile che scrivere un motore piede. Metà gambe erano immagini speculari dall'altra. Oltre tutto finalizzato in direzioni diverse. In nalashtovuvav konfyhuryroval generale, e io sono molto lunghi, e non era molto stimolante, per cui il denaro non era registrazione conveniente, massimo potevo aspettarmi - in conclusione LOSA seriale. E che ha lavorato bene con file * .ino di base, il Leg.h collegato - non hanno visto l'oggetto. Stampelle clock per LOSA (facepalm). Alla fine otrefaktoryu. E qui è una molla venuto velosezon è stato inaugurato in pieno vigore, e ho dato il vostro animale domestico in caso shestylapoho. Così passò l'estate e l'autunno del calore.
Fase 13
. Ma le piogge sono venuti, era freddo e heksapod è stato estratto. I suoi piedi sono stati stabiliti, tra cui lo stesso è stato introdotto _thirdQuarterFix calcolo della funzione polarAngle. Il problema era che 2 piedi (sinistro centrale e posteriore sinistra) si muovevano in modo che la maggior parte del tempo erano in III trimestre:
Un polarAngle Ero ingenuo - si è scoperto angoli pi-pi greco a, all'asse X. E se a volte uno di questi 2 piedi hanno dovuto tornare al II trimestre-nd, il valore polarAngle saltato da Pi Pi che ha avuto in realtà un impatto negativo sul calcolo ulteriore. Pofyksyl stampella - per questi 2 piedi polarAngle considerato "diverso". Vergogna, vergogna su di me il codice, ma l'intero progetto - una prova di concetto, il cui unico scopo - non solo a capire, posso raccogliere heksapoda realistico movimento o meno. Pertanto, il codice dovrebbe funzionare, e in questo momento. E poi refactoring - pererefaktorynh.
Cope con il 3 ° trimestre, ha cominciato a pedalare modelli passo. Per questa classe introdotto nel punto predefinito Leg, cioè, in cui il piede è dove il lavoro è tranquillamente ed uniformemente. Questo punto può tyuninhuvaty, importante per tutti i piedi sulla stessa coordinata z (con gambe a erano effettivamente fisicamente sullo stesso piano, la gamba è ancora tuneRestAngles livello molto basso ()). E nello stesso coordinate Z, possono muoversi arbitrariamente. Quasi - perché la gamma di movimento non è infinita, e che a sua volta non andrà oltre questa dyapazoda - posizione di default dei piedi cercando di mettere da qualche parte vicino al centro di questa gamma.
Passo 14
. Il codice non è nel testo della citazione, è troppo semplice e mi porterà la fine di un link alla versione completa di tutti i sortsa - allo stesso tempo imparare ad usare github.
Sequenza ha scelto un semplice passaggio - 3 piedi per terra, 3 - in aria riarrangiato. Così, le coordinate di piedi alla loro posizione predefinita - possono essere suddivisi in 2 gruppi. Per questi due gruppi I e fase provertav nel ciclo (vedi caratteristica passeggiata () in Buggy.ino). E alla fine, ogni gamba ha calcolato un coordinano l'individuo, in base alla sua posizione predefinita.
Ed è andata! Ma finora avanti. Ai piedi portava elastici per errata scivolò sul linoleum. Mi precipitai a girare in video per mostrare agli amici.
Passo 15
. Con il focolare e, naturalmente, lontano.