Vi samlar in och krafter ägda heksapoda

 Utelämnande rozkazni om hur jag kom på idén att bygga heksapoda (det var massor av videor på YouTube), gå direkt till urvalsprocessen detaljerna. Det var januari 2012. Jag vet precis vad jag vill ha från mitt arbete och vad - nej. Jag gillar:

 att varje ben var 3 frihetsgrader - 3dof (3 dimensioner av frihet), som ett enklare alternativ 2dof - gör en sådan känsla av insekter och 4dof - gång, 3dof och så kan du fritt flytta spetsen på foten i 3D rymden;
 6 meter. Återigen, detta är inte 4 (om klumpiga robot hoppar), men inte 8 som spindlar som är överdrivet;
 liten storlek;
 billigt till självkostnadspris;
 med ett minimum av brädor och anslutningar.

 Steg 1. Först, naturligtvis, var tvungen att välja moderkort för barnet. Många bra och dålig tid att läsa av tiden för Arduino. Men på honom och såg som huvudalternativet. Löd själv controller - det fanns ingen tid och ta mer avancerade styrelse med ARM CPU, till exempel - det är dyrt, och förstå hur deras program, hur man arbetar med PWM fynd, etc. - långa. En arduyna: IDE lanserade, napedalyl koden, ladda upp nedtryckt - och hej, har du det blinka. Skönhet! ;)
 Först började jag titta på Arduino mega och kloner, så de PWM utgångar som kan kontrolleras servo hade de nog. Kom ihåg att 3dof heksapoda behöver 3 * 6 = 18 livegna och komponentkanalhantering. Men sedan hittade jag en riktig Yazz bland Arduino mega, en avgift på Dagu, ring Red Back Spider Controller. Här är det på ebay.
 Det erbjuder alla sina utgångar som slutade 3-pin (mark, livsmedel, tonen), och lösningen av mat. Power of Controller stabiliserats, och kontakten är dvyhlov som är (UPD: inte hur, men också stabiliserad 5 volt Och tydligen lösas med Power regulator som inblandning med styrenheten 18 samtidiga livegna gör inte.). Detta gör filen till terminalen 7-30 volt mat tillräcklig effekt (eee pc frågeformulär från 901 till 12V och 3A - var nog för alla 18 servosurrande) och inte lurar med separat strömförsörjning och logik dvyhlov. Även i framtiden kommer är det lätt att sätta på detta monster pack Li-Po batteri 7.4 volt. Och med allt detta, programmat synvinkel - detta är ett vanligt arduyinov mega kompatibel programvara och lybamy och järn (annat än shyldov, monteras direkt på de ursprungliga mega - de kommer inte att fungera). Priset är dock högre än ens den ursprungliga Mega, men alla andra proffsen uppväger det.
 Steg 2. Nästa servon. På ebay micro servo Fråga dem mycket annorlunda. Jag tog den mäktigaste av de minsta och billigaste, 9 gram i vikt, plast redskap. Om du tar massor där de levererar partier - är billigare. Jag tog 3 förpackningar med 6 verkar ha hänt mindre än 2 dollar styck. Jag ska berätta för er att inte ångrar bringade mer och ta servo med metall växlar och kullager. Dessa plaster var ganska märkbar motreaktion, och den karaktäristiska kritan när överdriven kraft när hoppar växlar. På grund av den motreaktion - kinematik ganska svåra att justera exakt (som i allmänhet är det svåraste visade sig).
 Det är allt som jag beställde, leverans gjorde det cirka 100 kr. Batterier och sändare / mottagare för övervakning och radyoupravlyaemosty - lämnade för senare. Eftersom radiostyrda maskin jag har och inte undra vad som verkligen intresserade mig - det är fötterna! Videoklipp gå smidigt heksapodov på YouTube - Jag såg fascinerat honom, såg, och varje gång tårarna rullande nerför hans kinder, och jag kvävde väsande "Jag vill! ". Jag skulle inte be en färdig pjäs, och jag vill göra de flesta något är!
 I väntan på att läsas som utbildade människor animera sina skapelser. Naturligtvis dök genast omvänd kinematik. Om du säger helt enkelt och direkt om sharnytnыe "lemmar", de direkta kinematik - det är där den ingående lämnat hörn lederna, och utgången har vi en modell av lemmen i rymden, koordinaterna för extrempunkter lemmen. Omvänd kinematik är - uppenbarligen strider - ingången mottagna koordinaterna för extrempunkter lemmen där vi behöver för att nå, och utgången får vi vinklar som behöver vända gångjärn för att åstadkomma detta. Servo bara få den ingående vinkelläge i vilket de behöver för att återvända (en signaltråd kodad PWM / PWM).
 Steg 3. Jag började med, som att läsa, tänka igenom genomförandet av IC. Men snart kom en känsla av att mitt fall det alltför komplicerat. Och så besvärligt att genomföra och beräknings mycket svårt - beräkningen är iterativ. Och jag har 6 ben, som var och en bör anses som IC, och bara inte mycket smarta 16Mhts Arkitektur AVR. Men bara 3 frihetsgrader. Och lätt att gissa att den godtyckliga punkten i dotyahuvannya "kan nå bara ett sätt. Beslutet har mognat i mitt huvud.
 Men sedan kom februari och skiften - en från Kina, en annan Storbritannien. Det första jag brukar bara pohravsya Betala arduyinov - pomorhal popylykal LED och en högtalare ansluten där. Sedan började själva genomförandet IC, i körteln. Vad han byggde en prototyp meter från skrot (ganska mild plastmasska som är lätt att skära med sax, skruvar och fästen - alla av de kits utlösare). Denna terminator benet fäst direkt till styrelsen arduynы. Du kan överväga hur budgeten gjorde lederna.
Vi samlar in och krafter ägda heksapoda

Vi samlar in och krafter ägda heksapoda

 Pomyluvavsya detta fall och pomriyav att om jag bygger detta arbete i framtiden spayayu terminator, vilket förklarar krig mot mänskligheten, senare med John Connor Schwarzenegger kommer att återvända till mig här tidigare och kommer att välja denna prototyp och dess rasplavyat i Orodruyne. Men ingen kom tillbaka, ingenting tas bort, och jag gick på tyst.
 Steg 4. Man fann att IR inte behöver frukta, i mitt fall det kom ner till triviala geometri, trigonometri. Lättare att gälla för lederna, vände sig till Wikipedia och hedrad av insekter. De har speciella namn för lem:
Vi samlar in och krafter ägda heksapoda

 Rysk har också sina mycket intressanta namn för detta, men "skål", "vertluh", "ben", etc., medan det i koden inte tillät mig att sova. Så I 3 lemmar och relevant servoledighet namnet Coxa, lårben, skenben. Från prototyp meter över visar att jag inte ens behöver Coxa separata delar. Det är bara två servo bundna elastiska band. Lårben - genomfört en remsa av plast, där båda sidor är monterade spakar livegna. Således, den sista kvarvarande servodvyzhok - till början av skenbenet, sträcker sig till vilken den är fastskruvad en plastbit.
 Steg 5. Lanserat redaktören, inte mudstvuya skapat filen Leg.h och i den klassen Leg. Och ett gäng extra Muti. Antag att det finns en punkt i rymden A (yxa, ay, az), vilket bör nå. På ovanifrån ser ut så här:
Vi samlar in och krafter ägda heksapoda

 Figur I visade omedelbart ett sätt att beräkna den första vinkeln - rotationsvinkeln för servo, styra Coxa, som roterar hela lemmen i ett horisontalplan. Diagrammet omedelbart markerade röda variabler som används i koden (inte alla). Inte mycket matematiskt, men bekväma. Det är uppenbart att vi är intresserade hörnet är elementär. Första primaryCoxaAngle - är bara vinkeln (0; A) till axeln X (motsvarande En hörnpunkt i polära koordinater). Men diagrammet visar att medan själva benet - inte raspalozhena vid denna punkt. Anledningen är att rotationsaxeln i Coxa är inte att "line up" - Jag vet inte hur jag ska säga det på rätt sätt. Inte i det plan i vilket den roterande leden och den andra är 2 fot spets, här. Detta kan lätt kompenseras, med tanke additionalCoxaAngle (eftersom den ansåg - även utruzhdayus stopp eftersom var fortfarande i skolan, eller hur?).
 Tillsammans har vi den första bit kod, denna metod insidor räckvidd (Point & dest):

 flyta hDist = sqrt (sqr (dest.x - _cStart.x) + sqr (dest.y - _cStart.y));
 flyta additionalCoxaAngle = hDist == 0,0? DONT_MOVE
 : Asin (_cFemurOffset / hDist);
 flyta primaryCoxaAngle = polarAngle (dest.x - _cStart.x, dest.y - _cStart.y, _thirdQuarterFix);
 flyta cAngle = hDist == 0,0? DONT_MOVE
 : PrimaryCoxaAngle - additionalCoxaAngle - _cStartAngle;

 Här dest - detta är den punkt där nazho drag, _cStart - koordinaterna för hårdvara (och rotationscentrum) coxa, i hDist överväga avståndet från _cStart till dest i horisontalplanet. DONT_MOVE - det är bara en flagga, vilket innebär att coxa inte behöver någonstans att vända och lämna den aktuella positionen (som dest - någonstans mitt på rotationsaxeln coxa - sällan, men det händer). Här cAngle - detta är ett hörn där du vill att servo kommer att avvika från sin ursprungliga vinkel (som är i mitten av sitt arbetsområde). Det kan ses att när yuzaetsya _cStartAngle - är vinkeln i rymden, som är tillbaka av servo devoltu, under installationen. Om _thirdQuarterFix berätta senare om du inte glömmer.
 Steg 6. Då det blir ännu enklare. Vi behöver bara titta på den tidigare nämnda planet "line up":
Vi samlar in och krafter ägda heksapoda

 Således problemet plötsligt reduceras till att finna skärningspunkten av två cirklar. One - till den punkt där "växer" vår lårbenet, den andra - den punkt där vi behöver för att nå (2d lokala koordinater). Radierna för cirklarna - längden på lårbenet och skenbenet, respektive. Om cirklarna skär i en av 2 poäng kan placeras gemensamt. Vi väljer alltid toppen till "knä" på monstren böjdes upp, inte ner. Om inte överlappar - det är inte dotyanemsya till målpunkten. Lite kod, byta till planet är helt enkelt bara ett par fallgropar beaktas och dokumenteras i kommentarerna som jag har inga förbryllad då granska koden. För enkelhetens skull i denna lokala koordinat "plan up" Jag valde ursprunget punkt där växande lårbenet:
  // Flytta till lokala Coxa-Lårben-målet koordinatsystem
 // Observera fallet när hDist<= _cfemuroffset.="" this="" is="" for="" the="" blind="">
 // Vi har aldrig inte kan nå den punkt som är närmast den _cStart sedan
 // Lårben offset (_fStartFarOffset)
 flyta localDestX = hDist sqr (_fLength + _tLenght))
 {
 log ("inte kan nå!");
 return false;
}

 Steg 7. Nu localDestX och localDestY - koordinaterna för slutpunkten. Allt som återstår - att hitta skärnings cirklar centrerade på (00) och (localDestX, localDestY), och radier _fLength och _tLength (respektive längden och lårbenet längd tibia). Med denna elev också misslyckas, men jag erkänner att det finns många fel att kontrollera själv och alla kan göra för att kontrollera vilken typ av dumma formler, lämnar en referens som är tydlig razzhovana denna elementära geometriska problem:
  // Hitta gemensamt som cirkeln skär (ekvationer från http://e-maxx.ru/algo/circles_intersection & http://e-maxx.ru/algo/circle_line_intersection)
 float A = -2 * localDestX;
 flyta B = -2 * localDestY;
 float C = sqr (localDestX) + sqr (localDestY) + sqr (_fLength) - sqr (_tLenght);
 float X0 = -A * C / (sqr (A) + sqr (B));
 flyta Y0 = -B * C / (sqr (A) + sqr (B));
 flyta D = sqrt (sqr (_fLength) - (sqr (C) / (sqr (A) + sqr (B))));
 flyta mult = sqrt (sqr (D) / (sqr (A) + sqr (B)));
 float yxa, ay, bx, genom;
 ax = X0 + B * mult;
 bx = X0 - B * mult;
 ay = Y0 - A * mult;
 med = Y0 + A * mult;
 // Välj lösning på toppen som gemensamt
 flyta jointLocalX = (ax & gt; bx)? ax: bx;
 flyta jointLocalY = (ax & gt; bx)? ay: efter;


 Allt det är fortfarande lite av de mottagna koordinaterna för att beräkna rätt vinklar för lårben och skenben livegna:
  flyta primaryFemurAngle = polarAngle (jointLocalX, jointLocalY, false);
 flyta Fangle = primaryFemurAngle - _fStartAngle;
 flyta primaryTibiaAngle = polarAngle (localDestX - jointLocalX, localDestY - jointLocalY, false);
 flyta TANGLE = (primaryTibiaAngle - Fangle) - _tStartAngle;

 Steg 8. Igen эlementarschyna - vinkel koordinater allt. Jag hoppas namngivning variabler bör redan vara klar, till exempel _fStartAngle - det lårben start vinkel, den vinkel vid vilken lårbenet riktas som standard. Och den sista raden metoden räckvidd () (han sa att han gick och vinkade):
  flytta (cAngle, Fangle, härva); 

 Metod drag direkt skriva servo. I själva verket är det även då hade att lägga till alla möjliga saker för skydd mot dåliga vinklar (vilket servo inte kan återvända, men kommer att försöka), samt andra ben som är zarkalno och / eller skickas till den andra parten. Men så länge vi bara arbeta med en tass.
 Steg 9. Dessa bitar - det här är den sista koden, vilket är långt ifrån perfekt, och det kan säkert förbättras avsevärt. Men det fungerar! Aldrig gick för high-school geometri, trigonometri, vi har genomfört polnofunktsyonalnuyu ynversnuyu kinematik för 3dof fötter! Ja, och vi får lösningen direkt, i en iteration. För att göra det allt arbete, hade benet noggrant mätas och konfigurera klass data som erhållits. inklusive den vinkel som den svåraste att mäta i den färdiga produkten. Kanske om ett projekt avtokad och göra några trevliga gör - det skulle vara lättare med mätning av vinklar, men jag hade inte tid eller lust att ta itu med denna känsla.
 Februari har bara börjat, och video fot var redan gjort. För att testa IC, gjorde jag benet beskriva alla möjliga siffror i rymden (du måste konsekvent utlösa räckvidd, undviker den punkt på rektangeln eller cirkel koden trist och tråkigt, så gör inte citerar (och färdiga experiment för att spåra primitiver, har jag allmän vypylyav)):

 Steg 10. Sedan hade att avsluta spelet med denna produkt på ett ben är inte uprыhaesh (även om denna robot skulle göra riktigt intressant). Men jag behöver heksapod. Jag gick för att leta efter närmaste loppmarknad plexiglas. Hittade 2 olika delar - en 3 mm tjock (bara för kroppen, tänkte jag), en annan 2 mm och blått (till andra lemmar, matcha servo). Om några veckor ristade jag ut en kväll för att göra något med den. Han gjorde skisser på papper. försökt på - som om allt är OK, då fallet för en bågfil.
Vi samlar in och krafter ägda heksapoda

Vi samlar in och krafter ägda heksapoda

Vi samlar in och krafter ägda heksapoda

Vi samlar in och krafter ägda heksapoda

Vi samlar in och krafter ägda heksapoda

Vi samlar in och krafter ägda heksapoda

Vi samlar in och krafter ägda heksapoda

Vi samlar in och krafter ägda heksapoda

Vi samlar in och krafter ägda heksapoda

Vi samlar in och krafter ägda heksapoda

 Steg 11. Och här är det, utomeuropeiska monster shestylapoe. När jag testar ett ben, jag hade den här grejen på något sätt lämnat enkäter på externa skruvar. Nog. Men foder 6 meter från honom var alltför skrämmande. Så för ett tag jag hängde upp hans händer, tänkte att jag måste få en mer lämpligt frågeformulär. Men det visade sig mycket lättare, jag nämnde ovan - kom från enkät eee pc 901. Tja, bra.
 Steg 12. Upprätta arbete 6 fot visat sig svårare än skriva en fot motor. Hälften ben var spegelbilder på den andra. Förutom alla syftar i olika riktningar. I allmänhet konfyhuryroval nalashtovuvav och jag är mycket lång, och det var inte mycket inspirerande, så pengar var inte bekväm inställning, max jag kunde förvänta sig - avslutningsvis Losa Serial. Och det fungerade bra med grundläggande * .ino fil, den anslutna Leg.h - har inte sett varan. Klockade kryckor för Losa (facepalm). Så småningom otrefaktoryu. Och här är en fjäder kom velosezon öppnades i full kraft, och jag gav ditt husdjur ifall shestylapoho. Så gick sommaren och hösten värme.
 Steg 13. Men regnet kom, det var kallt och heksapod extraherades. Hans fötter var etablerade, inklusive samma infördes _thirdQuarterFix funktionsberäkning polarAngle. Problemet var att 2 fot (vänster mellersta och bakre vänstra) flyttas så att det mesta var i III kvartalet:
Vi samlar in och krafter ägda heksapoda

 En polarAngle Jag var naiv - det visade hörn pi-pi till, axeln X. Och om ibland en av dessa 2 meter var tvungen att återvända till II-a kvartalet, hoppade värdet polarAngle från Pi till Pi som faktiskt hade en negativ inverkan på den fortsatta beräkningen. Pofyksyl krycka - för dessa 2 meter polarAngle anses "annorlunda." Skam, skam på mig koden, men hela projektet - ett proof of concept, den enda syfte - inte bara förstår, jag kan samla realistisk heksapoda flytta eller inte. Därför bör koden fungera, och just nu. Och sedan Refactor - pererefaktorynh.
 Cope med kvartal 3, började trampa stegkombinationer. För denna klass införs i punkt Leg standard, det vill säga i vilken foten är där arbetet är tyst och smidigt. Denna punkt kan tyuninhuvaty viktigt att alla fötter var på samma koordinatsystem z (med ben att faktiskt fysiskt var på samma plan, är Leg fortfarande mycket låga tuneRestAngles nivå ()). Och i samma koordinatsystem Z, kan de röra sig godtyckligt. Nästan - eftersom rörelseomfång är inte oändlig, och det i sin tur inte kommer att gå utöver denna dyapazoda - default fötternas placering försöker placera någonstans nära mitten av detta intervall.
 Steg 14. Koden är inte i texten i citatet, det är för grundläggande och jag kommer att föra i slutet av en länk till den fullständiga versionen av alla sortsa - samtidigt lära sig att använda github.
 Sekvens valde en enkel steg - 3 fötterna på jorden, 3 - i luften omorganiseras. Således koordinaterna för fötterna till deras standardläge - kan delas in i två grupper. För dessa två grupper I och provertav steg i cykeln (se funktionen promenad () i Buggy.ino). Och i slutändan, varje ben beräknas en koordinat deras individuella, baserat på dess standardplats.
 Och det gick! Men så långt fram. På fötterna bar han gummiband till fel gled på linoleum. Jag rusade att skjuta det på video för att visa för vänner.

 Steg 15. Genom härden-och, naturligtvis, långt borta.

 
 
 
 
 
 
 
 
   




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