Colectăm și forțat să curgă hexapod buget
O mulțime de lucruri de făcut înainte de a ajunge aici este această imagine:

- pentru fiecare picior a fost de 3 grade de libertate - 3dof (3 dimensiuni de libertate), astfel încât un 2dof exemplu de realizare mai simplu - oferă o astfel de insecte sentiment și 4dof - excesivă, 3dof și așa permite vârfului liber picior se deplasează în spațiul 3D;
- 6 picioare. Din nou, nu este de 4 (atunci când robotul sare stângăcie), dar nu a fost încă 8 păianjeni care au excesiv;
- dimensiuni mici;
- ieftin la cost;
- cu un minim de carduri și conexiuni.
Pasul 1. În primul rând, desigur, a fost necesar pentru a alege o placa de baza pentru firimituri. La fel ca un moment bun sau rău pentru a citi de momentul Arduino. Dar a fost la el și privit ca opțiune principală. controlorii de instalații sanitare - el însuși nu a avut timp să ia o placă mai avansată cu procesor ARM, de exemplu - este scump, și imaginind cum să program, cum să lucreze cu concluzii PWM, etc - pentru o lungă perioadă de timp. Un Arduini: IDE lansat, cod napedalil, încărcați făcut clic - și salut, au deja să clipească. Frumusețe! ;)
La început am început să se uite la mega Arduino și clone, ca Numărul de ieșiri PWM care pot conduce Servais au avut o multime. Permiteți-mi să vă reamintesc că hexapod 3dof nevoie de 3 * 6 = 18 iobagi, și canalul de management separat. Dar apoi am găsit o adevărată yazz printre mega Arduino, o plată de la Dagu, suna ca Red Back Spider Controller. Aici este pe eBay.
Acesta oferă toate din producția sa în forma de terminat 3-pini (teren, alimente, semnal) și decuplare de alimentare cu energie. Controlorul de putere în sine este stabilă, iar conectorii sunt dviglov ca este (UPD:. nu cum să mănânce, dar, de asemenea, stabilizat de 5 volți și aparent decuplat de la sursa de alimentare controler, din cauza interferențelor în funcționarea controlerului 18 iobagi lucrează simultan nu contribuie). Acest lucru face mai ușor de aplicat pentru un terminal de alimentare cu energie suficientă 7-30 volți (pitalnika de la 901 la PC eee 12V si 3A - a fost suficient pentru a bâzâie toate 18 servo) și nu păcăli cu sursa de alimentare separată și dviglov logica. De asemenea, ar, în viitor, este ușor să-l tot pune pe ambalaj monstru Li-Po baterie la 7,4 volți. Și cu toate acestea, din punct de vedere al software-ului - acest lucru este normal Arduino Mega compatibil cu software-ul și libami, și fier (altele decât Schild, sunt instalate direct pe mega originale - acestea vor rula). Adevărat preț chiar mai mare decât chiar mega originale, dar toate celelalte plusuri compensat acest lucru.
Etapa 2. Apoi, servo-urile. Pe eBay, la cerere, micro servo sunt multe diferite. Am luat cel mai puternic dintre cele mai mici și mai ieftine, în greutate de 9 grame, cutiile de viteze din plastic. Dacă luați o mulțime în cazul în care acestea trimit în loturi - este mai ieftin. Am luat 3 cutii de 6, se pare, a ieșit mai puțin de 2 $ pe bucata. Privind în perspectivă, voi spune că regret că nu este cheltuit mai mult și să ia servo cu unelte de metal și rulmenți cu bile. Aceste materiale plastice au fost reacții negative destul de vizibile, iar o criza caracteristică cu o forță excesivă atunci când swap-urile de viteze. Din cauza reculul - cinematica destul de dificil de configurat exact (da, este, în general, cel mai greu sa dovedit).
În timp ce așteaptă comanda, am citit, modul în care oamenii iluminați anima creatiile lor. Desigur, au apărut imediat cinematica inverse. Pentru a spune pur și simplu și direct despre sharnitnye „membrele“, atacantul cinematica - acest lucru este atunci când sunt unghiuri de intrare ale articulațiilor, precum și de ieșire avem un model al membrelor în spațiu, iar coordonatele la punctul de membrelor. Cinematica inverse - funcționează în mod evident, în sens invers - este de intrare coordonatele la punctul extremității, în cazul în care avem nevoie pentru a ajunge, iar la ieșire vom obține unghiuri care sunt necesare pentru a transforma balamalele să-l scoate. Servo primesc doar poziția unghiulară de intrare, în care au nevoie pentru a transforma (o linie de semnal codificat PWM / PWM).
Pasul 3. Începeți cu faptul, așa cum am citit: cred că prin punerea în aplicare a IR. Dar repede a ajuns să simtă că este prea complicat pentru cazul meu. Ambele greoaie pentru a pune în aplicare, și de calcul foarte dificil - calculul este iterativ. Și am 6 picioare, fiecare dintre acestea trebuie să fie considerate ca IR, și pur și simplu nu foarte vioaie arhitectura 16MHz AVR. Dar numai 3 grade de libertate. Și ușor de ghicit că la un punct arbitrar în „Atingerea câmpului“ se poate ajunge la un singur mod. Decizia sa maturizat în cap.


Marvel la problema, și a visat că, dacă eu sunt pe baza robotului în viitoarea joncțiune a terminatorului, care declară război umanității, apoi mai târziu cu Dzhon Konnor Schwarzenegger se va întoarce la mine aici, în trecut, și va selecta prototipul și se topesc în Muntele Blestemat. Dar nimeni nu a venit înapoi, nu este selectat nimic, și am continuat în liniște.
Pasul 4. Sa constatat că IR nu este de temut, în cazul meu, sa ajuns la o geometrie banală, trigonometrie. Face mai ușor de aplicat la nivelul articulațiilor, am apelat la Wikipedia și citi despre insecte. Ei au nume speciale pentru elementele membrului:

În limba rusă, de asemenea, are propriul nume foarte interesant pentru acest lucru, dar „castron“, „trohanter“, „shin“ etc. fiind în cod, nu s-ar lasa-ma sa dorm. Pentru ca am 3 membrele și Servais relevante din stânga numele Coxa, femurul, tibia. Picior prototip de mai sus, este clar că nu au nici măcar să coxa părți separate. Este doar două servo ținute împreună cu benzi de cauciuc. Femurul - implementat o fâșie de material plastic, la care ambele părți sunt montate pârghiile iobagi. Astfel, ultima servodvizhok rămasă - este începutul tibiei, pentru extinderea la aceasta, care are o bucată de plastic cu suruburi.

Figura I prezintă o dată și o metodă de calcul a primului unghi - este unghiul de rotație al controlului Coxa servo, rotirea întregului membru în plan orizontal. În diagrama, Once roșu marcat variabilele utilizate în codul (nu toate). Nu foarte ically matematică, dar este convenabil. Este clar că suntem interesați este unghiul-brainer. First primaryCoxaAngle - este pur și simplu dintr-un unghi (0, A) pe axa X (care este echivalentă cu punctul de colț A în coordonate polare). Dar, diagrama arată că la acest lucru foarte picior - nu raspalozhena acest unghi. Motivul este că axa de rotație coxa nu este pe „linia de jos“ - Nu știu cum să-l spun în mod corect. Nu este în planul în care articulația de rotație, iar celălalt 2 este vârful piciorului, aici. Acesta poate fi ușor compensată, considerând additionalCoxaAngle (ca numărătoarea - nici măcar nu deranjez pentru a opri, bine, după ce toate erau încă în școală, nu?).
Total, avem prima bucată de cod, este o acoperire metodă internă (Punct dest):
Acolo dest - acesta este punctul în care trageți NAWO, _cStart - coordonatele punctelor de fixare (și centrul de rotație) coxa, să ia în considerare distanța de la hDist _cStart dest la un plan orizontal. DONT_MOVE - este doar un steag, indicând faptul că coxa nu au unde să se rotească și să păstreze poziția curentă (ca dest - undeva direct pe axa de rotație a coxa - rar, dar se întâmplă). Aici cAngle - aceasta este unghiul la care trebuie să se abată de la unghiul său inițial servo (care este în mijlocul gama de operare). Se observă că, de asemenea, yuzaetsya _cStartAngle - este unghiul în spațiu, care este rotit de DeWalt servo, în timpul instalării. Despre _thirdQuarterFix am explicat mai târziu, dacă nu uitați.
Pasul 6. După aceea, totul devine mai ușor. Trebuie doar să se uite la planul „linia de jos“ de mai sus-menționate:

Astfel, problema se reduce la punctul de surf brusc intersecția cercurilor 2. Unul - la punctul în care „cresc“ femurului nostru, al doilea - un punct în care avem nevoie pentru a ajunge (pentru a avea coordonatele locale 2d). Raza cercului - lungimea femurului și tibiei respectiv. În cazul în care cercurile se intersectează - într-una din cele 2 puncte de vânzare pot fi aranjate în comun. Am ales întotdeauna în partea de sus a „îngenuncheze“ în monstru a apărut, nu în jos. Dacă nu se suprapun - că nu ține de punctul țintă. Un pic mai mult de tranziție cod în planul este elementar, doar câteva capcane încă luate în considerare și documentate în comentariile, așa că nu rup capul meu atunci, examinând codul. Pentru simplificare, în acest local de coordonate „plan de picior“, am ales punctul de origine în cazul în care în creștere de femur:
Pasul 7. Acum localDestX și localDestY - coordonatele punctului țintă. Tot ceea ce rămâne - pentru a găsi punctul de intersecție a cercurilor cu centre (0,0) și (localDestX, localDestY) și raze și _fLength _tLength (respectiv, lungimea femurului și lungimea tibiei). Cu aceasta, de asemenea, elevul poate descurca, dar presupun o mulțime de erori, pentru a te testa și tot ceea ce oricine poate verifica dacă această formulă pentru cel mut, lăsați un link la surse în cazul în care clar și razzhovana înțeles această problemă geometrică elementară:
Tot există încă un pic - pe coordonatele primite pentru a calcula unghiurile corespunzătoare pentru femurului și tibiei iobăgimea:
Pasul 8. elementarschinu Din nou - coordonatele unghiulare toate. Sper ca numirea variabilelor trebuie să fie înțeles, de exemplu, _fStartAngle - acesta femurului Unghiul de start, unghiul la care femurului este direcționat în mod implicit. Și ultima linie a ajunge metoda () (el a plecat, și a fluturat mâna lui):
Metoda de mișcare oferă deja în mod direct echipa Servite. De fapt, chiar și atunci a trebuit să adauge tot felul de lucruri pentru a le proteja de unghiuri rele (care transforma servo nu se poate, dar va încerca), precum și pentru celălalt picior, care zarkalno localizate și / sau trimise de cealaltă parte. Dar, între timp, lucrăm cu un singur labă.
Etapa 9. Aceste piese - acesta este codul de final care este departe de a fi perfectă, și cu siguranță poate fi îmbunătățită. Dar funcționează! Niciodată nu merge dincolo de cinematicii inverse polnofunktsionalnuyu geometrie liceu, trigonometrie, am implementat pentru picioare 3dof! Da, și vom obține o decizie imediat, într-o singură iterație. Pentru a face acest lucru toate lucrările, piciorul a trebuit să fie măsurate cu grijă, și să configurați constatările de clasă. inclusiv o lovitură de colț, ce a fost cel mai dificil de măsurat pe produsul finit. Poate că în cazul în care proiectarea în AutoCAD și să facă unele randari frumoase - ar fi mai ușor cu măsurarea unghiurilor, dar am avut nici timpul, nici dorința de a face cu această emoție.
Etapa 10. Apoi a fost necesar pentru a termina jocul cu acest articol confecționat manual, pe un picior departe uprygaesh (deși astfel de robot ar ieși foarte interesant). Dar am nevoie de un hexapod. M-am dus să caute cele mai apropiate de piață de vechituri plexiglas. Am găsit 2 bucată mare - una de 3 mm grosime (doar pentru corp, m-am gândit), iar cealaltă de 2 mm și albastru (alte extremități în ton servo). În câteva săptămâni, am sculptat o noapte de a face ceva din ea. schițe pe hârtie. Exemple - ca totul este în regulă, atunci este de până la un fierăstrău.






Pasul 11: Și aici este, monstru de peste mări, de șase picioare. Când am testat un picior, nutream acest lucru într-un fel lăsat pitalnikom din afara șurubului. Destul. Dar să se hrănească 6 picioare de la ea a fost prea înfricoșător. Pentru că de ceva timp am închis mâinile, gândindu-mă că am nevoie pentru a obține pitalnik mai potrivite. Dar sa dovedit totul mult mai ușor, am menționat deja mai sus - a venit de la pitalnik eee PC-ul 901. Ei bine, bine.
Etapa de lucru 12. Debug 6 picioare dovedit a fi mult mai dificilă decât scrierea motorului de un picior. picioare jumătate a fost reflectat în raport cu cealaltă. În plus, toate îndreptate în direcții diferite. În general, pot configura și personaliza toate foarte mult timp, și nu am fost foarte inspirat, deoarece instrumente de depanare convenabile nu au fost de până la ceea ce am putea aștepta - jurnalul de ieșire în serie. Și care a lucrat bine de principala * fișierul .ino și de la Leg.h conectat - nu a văzut obiectul dorit. cârje Dilatare pentru log (facepalm). De-a lungul timpului, refactor. Și apoi există primăvara a venit, velosezon a fost deschis în vigoare, și i-am dat-o companie Sixpawed în dulap. Așa a trecut vara și o parte caldă a toamnei.
Pasul 13. Dar a plouat, era frig, iar HEXAPODAL a fost îndepărtat. Picioarele lui au fost optimizat, inclusiv cea pentru funcția de calcul _thirdQuarterFix polarAngle a fost introdus. Problema a fost că cele două picioare (stânga mijloc și stânga spate) sa mutat, astfel încât cele mai multe ori au fost în trimestrul III:
Un polarAngle am fost naiv - se întoarce de la unghiuri la pi pi, în raport cu axa X. Și dacă, uneori, una dintre aceste 2 picioare necesare pentru a transforma în trimestrul II-lea, The polarAngle valoare a crescut de la pi la pi, care au de fapt un efect negativ asupra calculului ulterioare. Fixed o carja - pentru aceste 2 picioare polarAngle este considerat „diferit“. Ți fie rușine, rușine mă pentru codul, dar întregul proiect - o dovadă a conceptului, al cărui scop unic - ușor de înțeles, pot colecta hexapod realiste în mișcare sau nu. Deoarece codul ar trebui să funcționeze, chiar acum. Și apoi restructurează - pererefaktoring.
El a făcut față cu al treilea trimestru, am început să pedaleze modele de teren. Pentru a face acest lucru, a pus în piciorul de clasă punct prestabilit, și anume în care piciorul este atunci când robotul este încă în picioare și drepte. Acest punct poate fi reglat, principalul lucru pe care toate picioarele au fost pe aceeași z coordonate (cu picioarele efectiv fizic localizate pe același plan, în picior au chiar și cele mai tuneRestAngles de nivel scăzut ()). Și în același Z coordonate, ele se pot deplasa aproape orice doriți. Aproape - deoarece gama de mișcare nu este infinit, și că, atunci când etapa nu este de a merge dincolo de acest diapazoda - poziția implicită a picioarelor care încearcă să plaseze undeva mai aproape de centrul acestui interval.
Etapa 14. Codul de atunci textul nu mai este citat, este prea elementar, și eu sunt la sfârșitul sunt link-uri la versiunea completă a tuturor sortsy - în același timp, să învețe cum să folosească GitHub.
Secvența de pași ales simplu - 3 picioare pe sol, 3 - aer permutate. Astfel, coordonatele picioarelor în raport cu poziția lor implicită - pot fi împărțite în 2 grupe. Pentru aceste două grupuri, și am cotite pas în ciclul (a se vedea funcția de mers pe jos () în Buggy.ino). Dar, în cele din urmă, fiecare picior dat se coordoneze lor individuale, în funcție de poziția sa prestabilită.
Etapa 15. Up-și vatra, desigur, de departe. Dar nu am terminat încă) Popedalil o altă seară -. Și a adăugat posibilitatea de a muta în orice direcție (dar nu de cotitură corp)) .. Plus pentru netezirea funcția menționată (smoothTo ()) între mișcările care se mișcă ușor piciorul (ridicare din nou în 2 grupe, dintre care una este întotdeauna în partea de jos, creatura în picioare pe ea, în timp ce celelalte se ridică și se mută) la o nouă poziție. Este necesar ca creatura nu este tras brusc în jos, schimbarea de direcție (această caracteristică nu este suficient, oh, cât de multe joc de caractere din anii anteriori). Și el a fugit vioi în orice direcție - în lateral, în diagonală:
Ambele fișier sortsy Grand poate fi vizualizat aici. Eu dau un link la o revizuire specifică, la momentul scrierii. Pentru că, în viitor, toate pot fi foarte diferite.
Rezultatele, care până în prezent sunt:
- nituită hexapod - este fezabil;
- scrie-l de la tine cinematica răzuibile -, de asemenea, destul de o forță la orice (dezvoltator);
- bugetul poate fi minim, singurul lucru care are nevoie într-adevăr să fie cheltuite - l servomecanisme; și deci, dacă există un fier de lipit, puteți face orice microcontroler; este mult mai convenabil decât mai scumpe, cu toate acestea;
- pe Servakh la mai bine să nu salveze, dar, de asemenea, cel mai ieftin - munca;
- satisfacția programării nu am experimentat un copil de 9 ani, când am văzut pentru prima dată în spectrul ZX cerc de calculator, și a învățat mai întâi să scrie applet-uri pentru el; astfel încât kayfovo atunci când codul nu este doar undeva să lucreze și ceva acolo cineva arată, și se execută chiar în fața ta și sperie pisica.
În fața mai multor algoritmi avansați pentru mișcarea lină a corpului, precum și de control și baterii fără fir, desigur.