Zbiramo in sile vodijo proračunske heksapoda

 Izpustimo rozkazni o tem, kako sem prišel na idejo, da heksapoda gradnjo (to je bil ton videov na YouTube), gredo neposredno na podrobnosti postopku izbire. To je bilo januarja 2012. Jaz samo vem, kaj želim od mojega dela in kaj - ne. Všeč mi je:

 da je vsaka noga 3 prostostne stopnje - 3dof (3 dimenzije svobode), kot lažjo opcijo 2dof - naredi tak občutek žuželk in 4dof - enkrat, 3dof in tako vam omogoča, da se prosto gibljejo konico noge v 3D prostoru;
 6 čevljev. Tudi to ni 4 (če neroden robot skokov), vendar ne 8, kot pajkov, ki so preveč;
 majhnost;
 poceni po nabavni vrednosti;
 z najmanj plošč in povezav.

 Korak 1. Prvič, seveda, moral izbrati matično ploščo za otroka. Mnogi dober in slab čas za branje, ki jih v času Arduino. Ampak na njega in gledal kot glavni možnosti. Solder sam regulator - ni bilo časa in se bolj napredne ploščo z ARM CPU, na primer - to je drago, in razumeti, kako svoje programe, kako delati z ugotovitvami PWM, itd - dolge. Arduyna: IDE začela, napedalyl koda, upload stisnjeni - in zdravo, imate pa utripati. Beauty! ;)
 Sprva sem začel gledati na Arduino mega in klonov, tako da PWM izhodov, ki se lahko nadzorovane servo imeli dovolj. Ne pozabite, da 3dof heksapoda potrebujete 3 * 6 = 18 tlačane in upravljanje komponenta kanala. Ampak potem sem našel pravega Yazz med Arduino mega, zadolžen za DaGu, pokličite Red Back Spider Controller. Tukaj je na ebay.
 Ponuja vse od njegovih rezultatov so končali 3-pin (zemlje, hrane, tonsko) in raztopino hrane. Moč Controller stabilizirala, in konektor je dvyhlov kot je (UPD: ne, kako, ampak tudi stabiliziran 5 voltov In očitno rešili s krmilnikom elektrarne kot vmešavanje s krmilnikom 18 sočasnih podložniki ne bi.). To omogoča, da se datoteka terminala 30/07 voltov hrane dovolj moči (EEE PC vprašalnik od 901 do 12V in 3A - je bilo dovolj za vse 18 servo brnenje) in ne norčevanje z ločeno napajanje in logične dvyhlov. Prav tako bo tudi v prihodnje, je enostavno, da dajo na tem pošast paketa Li-Po baterije 7,4 volta. In z vsem tem, programski vidik - to je pogosta arduyinov mega-združljiva programska oprema in lybamy in železa (razen shyldov, nameščen neposredno na originalnih mega - da ne bo delovalo). Toda cena je višja celo od prvotne Mega, ampak vse druge prednosti so jo odtehtajo.
 Korak 2. Naslednjih servomehanizmi. Na ebay mikro servo Vprašajte jim precej drugačna. Vzel sem najmočnejši izmed najmanjših in najcenejših, 9 gramov teže, plastične prestavo. Če ste vzeli veliko, kjer so pošiljanja paketov - je ceneje. Vzel sem zdi, 3 pakiranja po 6, da se je zgodilo manj kot 2 $ kos. Jaz ti bom povedal, da žal ne porabi več in se servo s kovinskimi zobnikov in ležajev. Te plastike so bili precej opazen protiudarec in značilno krča, ko prekomerno silo, ko preskakuje prestave. Zaradi zračnosti - kinematika precej težko natančno prilagodi (kot je običajno najtežje izkazalo).
 To je vse, kar sem naročil, dostava ji naredil okoli 100 $. Baterije in oddajniki / sprejemniki za spremljanje in radyoupravlyaemosty - levo za kasneje. Ker je radijsko vodeno napravo imam in ne sprašujem, kaj me res zanima - to je noge! Video posnetki gladko heksapodov na YouTube - Gledal sem ga očarala, pogledal, in vsakič, ko solze vozni navzdol licih in jaz davila piskanje "Hočem! ". Jaz ne bi zahteva končni kos, in želim narediti vse, kar je najbolj!
 Med čakanjem na naročilo glasi izobraženih ljudi animacija svoje stvaritve. Seveda, takoj površino inverzna kinematika. Če rečeš preprosto in neposredno o sharnytnыe "udov", neposredne kinematike - to je, če vhodni predložila kote fug in izhod imamo model okončine v prostoru, koordinate skrajnih točk uda. Inverzna kinematika je - očitno v nasprotju - vhod prejeli koordinate skrajnih točk uda, kjer moramo doseči, in izhod smo dobili koti, ki jih je nato tečaji za doseganje tega. Servo pravkar dobil vhodni kotni položaj, v katerem so morali vrniti (en signal žice kodiran PWM / PWM).
 Korak 3. Začel sem s, ki se glasi, mislim z izvajanjem IC. Toda kmalu je prišel občutek, da moj primer je preveč zapletena. In kot okorna za izvajanje in računsko zelo težko - izračun ponavlja. In imam 6 noge, od katerih jih je treba upoštevati kot IC, in samo ne zelo pameten 16Mhts Arhitektura AVR. Ampak samo 3 prostostne stopnje. In enostavno uganiti, da poljubna točka v dotyahuvannya "lahko doseže le na en način. Odločitev je dozorela v moji glavi.
 Ampak potem je prišel februarja in parcele - eden od Kitajske, druga UK. Prva stvar, ki sem ponavadi samo pohravsya Plačajte arduyinov - pomorhal popylykal LED in zvočnik je priključen. Nato pa se je začela dejansko izvajanje IC, v žlezah. Kaj je zgradil prototip noge iz odpadnih materialov (precej blag plastmasska, ki je enostaven za rezanje s škarjami, vijaki in prilogami - vse od kompleti pogone). Ta terminator leg pritrjena neposredno na arduynы krovu. Lahko razmisliti, kako proračun na sklepe.
Zbiramo in sile vodijo proračunske heksapoda

Zbiramo in sile vodijo proračunske heksapoda

 Pomyluvavsya ta primer in pomriyav, da če sem na osnovi tega dela v prihodnje spayayu terminator, ki napove vojno človeštvu, kasneje pa z John Connor Schwarzenegger se bo vrnil, da me tukaj v preteklosti in bodo izbrali ta prototip in njegovo rasplavyat v Orodruyne. Toda nihče prišel nazaj, nič odvzeti, in sem šel na tiho.
 Korak 4. Ugotovljeno je bilo, da IR ni treba bati, v mojem primeru je prišel do trivialne geometrije, trigonometrije. Lažje se uporabljajo za spoje, obrnil na Wikipediji in počaščen žuželk. Imajo posebna imena za okončine:
Zbiramo in sile vodijo proračunske heksapoda

 Ruski ima tudi zelo zanimive imena za to, ampak "skledo", "vertluh", "noge", itd, medtem ko je v kodeksu ni mi dovolite, da spati. Tako sem 3 udov in ustrezno ime servo dopust Coxa, stegnenica, golenica. Od prototipnih noge zgoraj kaže, da nimam niti za coxa ločenih delov. To je le dva servo vezan elastični trakovi. Stegnenico - izvaja trak iz umetne mase, ki so na obeh straneh pritrjena vzvodov tlačane. Tako zadnji preostali servodvyzhok - začetek golenice, razširi na katerega je privijačen kos plastike.
 Korak 5. Začela urejevalnik, ne mudstvuya ustvarjena datoteka Leg.h, in v njej razred Leg. In kup pomožnega Muti. Recimo, da je točka v prostoru A (ax, ay, az), ki naj bi dosegla. Na vrh pogled izgleda takole:
Zbiramo in sile vodijo proračunske heksapoda

 Slika sem takoj pokazala način izračuna prvo kota - kota vrtenja servo, nadzor Coxa, ki se vrti celotnega uda v vodoravni ravnini. Diagram takoj označeni rdeče spremenljivke, ki se uporabljajo v kodeksu (ne vsi). Ni zelo matematično, vendar udobno. Očitno je, da smo zainteresirani kotiček osnovno. Prvi primaryCoxaAngle - je samo kot (0;) na osi X (enakovredno kotu točke v polarnih koordinatah). Vendar diagram kaže, da je noga sama - ne raspalozhena na tej točki. Razlog za to je, da je os vrtenja coxa ni v "line up" - ne vem, kako jo pravilno reči. Ne v ravnini, v kateri vrtijo skupno in drugi je 2 metrov vrh tukaj. To je mogoče enostavno odpraviti, če upoštevamo additionalCoxaAngle (kakor je zdelo - tudi utruzhdayus stop, ker so bili še v šoli, kajne?).
 Skupaj smo imeli prvi del kode, je ta metoda notranjost REACH (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;

 Tukaj dest - to je točka, kjer nazho drag, _cStart - koordinate strojne (in središče vrtenja) coxa, v hDist upoštevati oddaljenost od _cStart na CILJ v vodoravni ravnini. DONT_MOVE - to je samo zastava, kar pomeni, da coxa ni treba nikamor obrniti in pustite trenutni položaj (kot destilirano vodo - nekje desno od osi vrtenja coxa - redko, a se zgodi). Tu cAngle - to je kotiček, kjer bi radi servo bo odstopa od svoje prvotne kota (ki je v sredini merilnega območja). Razvidno je, da kot yuzaetsya _cStartAngle - je kot v prostoru, ki ga vrne servo devoltu med namestitvijo. O _thirdQuarterFix vam povem kasneje, če ne boste pozabili.
 Korak 6. Potem pa se stvari še lažje. Vedeti pa je treba gledati na prej omenjeni ravnini "line up":
Zbiramo in sile vodijo proračunske heksapoda

 Tako je problem nenadoma zmanjša za iskanje presečišču 2 krogov. Eden od - do točke, kjer "raste" naš stegnenica, drugi - točka, kjer moramo doseči (2D lokalne koordinate). Polmeri krogov - dolžina stegnenice in golenice, oz. Če krogi sekata v eni od 2 točki lahko dajejo skupno. Vedno smo izbrali top na "kolena" v pošasti so ukrivljen navzgor, ne navzdol. Če ne prekrivajo - ni dotyanemsya do ciljne točke. Malo kodo, preklopite na ravnino, je preprosto samo je nekaj pasti upoštevati in dokumentirana v pripombah, ki jih imam, ne zmeden nato preučila kodo. Zaradi enostavnosti, v ta lokalni koordinatni "letalo up" sem izbral porekla točko, kjer raste stegnenico:
  // Premik na lokalni Coxa stegno-ciljnih koordinatni sistem
 // Opomba v primeru, ko hDist<= _cfemuroffset.="" this="" is="" for="" the="" blind="">
 // Mi nikoli ne more doseči točko, ki je bliže _cStart potem
 // Stegnenica izravnajo (_fStartFarOffset)
 float localDestX = hDist sqr (_fLength + _tLenght))
 {
 log ("ne more doseči!");
 return false;
}

 Korak 7. Zdaj localDestX in localDestY - koordinate ciljne točke. Vse, kar je še vedno -, da bi našli križišču krogi na sredini (00) in (localDestX, localDestY) in radiji _fLength in _tLength (oziroma dolžino in dolžino stegnenice golenice). S tem študent tudi ne, ampak jaz priznam, obstaja veliko napak, da preverite zase in vsakdo lahko storite, da preveri, kakšna neumna formul, tako da sklicevanje, ki je jasno razzhovana ta osnovni geometrijski problem:
  // Iskanju skupnih kot krog sekata (enačb http://e-maxx.ru/algo/circles_intersection & http://e-maxx.ru/algo/circle_line_intersection)
 float = -2 * localDestX;
 float B = -2 * localDestY;
 float C = sqr (localDestX) + sqr (localDestY) + sqr (_fLength) - sqr (_tLenght);
 plovec X0 = -A * C / (sqr () + SQR (B));
 float Y0 = -B * C / (sqr () + SQR (B));
 float D = sqrt (SQR (_fLength) - (SQR (C) / (sqr () + SQR (B))));
 float mult = sqrt (SQR (D) / (sqr () + SQR (B)));
 float ax, ay, bx, ki jo;
 ax = X0 + B * mult;
 bx = X0 - B * mult;
 ay = Y0 - * mult;
 s = Y0 + A * mult;
 // Izberite rešitev na vrhu, kot je skupna
 float jointLocalX = (ax & gt; bx)? ax: bx;
 float jointLocalY = (ax & gt; bx)? ay: s;


 Vse, kar je še vedno malo prejetih koordinat za izračun pravilne kote za stegnenice in golenice podložnikov:
  float primaryFemurAngle = polarAngle (jointLocalX, jointLocalY, false);
 float fAngle = primaryFemurAngle - _fStartAngle;
 float primaryTibiaAngle = polarAngle (localDestX - jointLocalX, localDestY - jointLocalY, false);
 float zapletla = (primaryTibiaAngle - fAngle) - _tStartAngle;

 Korak 8. Spet эlementarschyna - kotna usklajuje vse. Upam, da poimenovanje spremenljivke že jasno, na primer, _fStartAngle - to Stegnenica začeti kot, kot, pri katerem se stegnenica režiji privzeto. In metoda doseg zadnja vrstica () (je rekel, da je in mahal):
  premik (cAngle, fAngle, preplet); 

 Metoda poteza je neposredno tipkanje servo. Dejstvo je, da tudi takrat moral dodati vse mogoče stvari za zaščito pred slabimi kotov (ki servo se ne morejo vrniti, vendar bodo poskušali), kot tudi druge noge, ki so zarkalno in / ali pošlje drugi stranki. Dokler pa delamo samo z eno tačko.
 Korak 9. Ti kosi - to je končna številka, ki je daleč od popolnosti, in to se zagotovo lahko bistveno izboljšalo. Ampak to deluje! Nikoli šel za visoke šole geometrija, trigonometrija, smo izvajali polnofunktsyonalnuyu ynversnuyu kinematiko za 3dof noge! Ja, pa smo dobili rešitev takoj, v eni iteraciji. Da bi bilo vse delo, je imel noge treba natančno izmeriti in nastaviti podatke, pridobljene razreda. vključno z zornega kota, ki je najbolj težko izmeriti v končnem izdelku. Mogoče, če projekt avtokad in da so nekateri lepo naredi - da bi bilo lažje z merjenjem kotov, vendar nisem imel časa ali želje, da se ukvarjajo s to čustvo.
 Februar se je šele začela in videi noga je že storjeno. Če želite preizkusiti IC, sem noge opisati vse vrste osebnosti v prostoru (moraš dosledno sproži doseg, da bi se izognili točko na pravokotnik ali krog kodo dolgočasno in dolgočasno, zato ne citiram (in končnih poskusov, da bi primitivnih izsledil, imam Splošna vypylyav)):

 Korak 10. Potem je moral končati igro s tem izdelkom, na eni nogi, ne uprыhaesh (čeprav bi ta robot bo res zanimivo). Ampak moram heksapod. Šel sem iskati najbližji bolha tržnih pleksi stekla. Najdenih 2 različni kosi - eno 3 mm debeline (samo za telo, sem si mislil), še 2 mm in modre (drugi udi, da se ujemajo servo). V nekaj tednih sem izklesana noč z njo početi nekaj. Naredil skic na papirju. poskušali na - kot da je vse v redu, potem primera za kovinsko žago.
Zbiramo in sile vodijo proračunske heksapoda

Zbiramo in sile vodijo proračunske heksapoda

Zbiramo in sile vodijo proračunske heksapoda

Zbiramo in sile vodijo proračunske heksapoda

Zbiramo in sile vodijo proračunske heksapoda

Zbiramo in sile vodijo proračunske heksapoda

Zbiramo in sile vodijo proračunske heksapoda

Zbiramo in sile vodijo proračunske heksapoda

Zbiramo in sile vodijo proračunske heksapoda

Zbiramo in sile vodijo proračunske heksapoda

 Korak 11. In tukaj je, v tujini pošast shestylapoe. Ko sem test eno nogo, imel sem to stvar nekako levo vprašalnike o zunanjih vijakov. Dovolj. Ampak se prehranjujejo 6 metrov od njega je bil preveč grozno. Torej, nekaj časa sem obesil svoje roke, misleč, da se moram bolj ustrezen vprašalnik. Toda izkazalo se je veliko lažje, sem omenil zgoraj - je prišel iz vprašalnika Eee PC 901. No, fino.
 Korak 12. Vzpostaviti delo 6 čevljev izkazalo težje, kot pišejo eno nogo motor. Pol noge so bile zrcalne slike na drugi strani. Poleg vseh usmerjene v različnih smereh. V splošnem konfyhuryroval nalashtovuvav in sem zelo dolgo, in to ni bil zelo navdihujoč, tako da denar ni bil umesten prilagoditev, maksimalno sem lahko pričakujejo - in zaključek Losa serijsko. In da je v redu delal z osnovnim * .ino datoteki, povezani Leg.h - niso videli element. Ustvarila bergle za Losa (facepalm). Sčasoma otrefaktoryu. In tukaj je pomlad prišla velosezon je bil odprt v polni veljavi, in sem dal svojega hišnega ljubljenčka v primeru, shestylapoho. Torej minilo poletje in jesen toplote.
 Korak 13. Toda dež je prišel, je bilo hladno in heksapod bila vzeta. So bile določene njegove noge, vključno isti bil uveden _thirdQuarterFix izračuna funkcija polarAngle. Problem je bil, da je 2 noge (leva sredina in zadaj levo) premakne, tako da je bila večino časa v III četrtletju:
Zbiramo in sile vodijo proračunske heksapoda

 PolarAngle sem bil naiven - se je izkazalo kotičke pi-pi, da, na osi X. In če je včasih ena od teh 2 noge je moral vrniti v II-četrtletjem, polarAngle vrednost poskočila od Pi Pi do da je dejansko imela negativen vpliv na nadaljnji izračun. Pofyksyl bergla - teh 2 noge polarAngle šteje za "drugačne". Sram, sram me je koda, ampak celoten projekt - dokaz koncepta, edini namen, ki - ne le razumeti, ne morem zbrati realno heksapoda premika ali ne. Zato je treba koda deluje, in prav zdaj. In potem refactor - pererefaktorynh.
 Spopasti s 3. četrtletjem, začeli pedala korak vzorce. V tem razredu uvedena v točki nog privzeto, da je, v kateri je noga, kjer je delo tiho in gladko. Ta točka lahko tyuninhuvaty, pomembna za vse noge so na istem koordinatnem sistemu z (z nogami, da dejansko fizično so na isti ravnini, noge še tuneRestAngles zelo nizki ravni ()). In v istem koordinatnem Z, lahko premika poljubno. Skoraj - ker gibljivost ni neskončna, in da v zameno ne bo šel preko tega dyapazoda - privzeti položaj nog, ki skušajo postaviti nekje blizu sredine tega razpona.
 Korak 14. Koda ni v besedilu citatom, da je preveč osnovna in bom prinesla konec povezavo na polno različico vseh sortsa - istočasno naučijo uporabljati GitHub.
 Zaporedje izbral preprost korak - 3 noge na tleh, 3 - v zraku preuredil. Tako koordinate stopal do privzetem položaju - lahko razdelimo v 2 skupini. Za ti dve skupini I in provertav korak v ciklu (glej funkcijo sprehod () v Buggy.ino). In na koncu, vsak krak izračuna usklajujejo svoje posameznika, ki temelji na privzetem mestu.
 In je šlo! Vendar tako daleč naprej. Na nogah je nosil gumijaste pasove narobe zdrsnila na linolej. Sem odhitela, da ga ustrelil na videu pokazati prijateljem.

 Korak 15. Ga ognjišču-in, seveda, daleč proč.

 
 
 
 
 
 
 
 
   




Яндекс.Метрика