Roeper
live long and prosper www
hallo allemaal,
ik ben laatst begonnen met een quadrupod project. De eerste prototype is klaar en ben nu bezig met de arduino codes voor de verschillende bewegingen. Maar de code is nog niet helemaal optimaal.
Ik vroeg me af wat nou de makkelijkste codetype is, aangezien ik twee verschillende soorten manieren heb gevonden.
Je kan de code opbouwen als zijnde graden, of een code type gebruiken en met voltage/milliseconde werken. Welke is nou de meest logische? Ik dacht om eerst de graden code te doen en als ik weet welke graden alle servo's moeten hebben en een optimale programma heb, ik de code eventueel nog makkelijk kan omzetten naar voltage/milliseconde.
Uiteindelijk ben ik wel van pan uit te breiden naar een hexapod, en zou ik hem graag willen besturen met een ps3 controller.




uiteindelijk heb ik wel nog de vierde poot, hoor. Deze bestelling van de servo's bij conrad was fout gegaan, maar deze hebben ze later nageleverd.
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Een quadrupod is volgens mij niet zo handig. In theorie kan je twee tegenover mekaar liggende poten tegelijk optillen en verplaatsen, maar dan moet ie balanceren op de overige twee poten.
Alternatief kan je op drie poten staan en 1 poot proberen te verplaatsen. Maar ook dan is er een balanskwestie: als het massa middelpunt net verkeerd is, gaat de verkeerde poot de lucht in.
Je moet zelf bepalen wat je het makkelijkste vind werken met "graden" of zo.
Soms loont het de moeite om op een bepaalde manier naar een probleem te kijken. Dan worden de berekeningen ineens makkelijk.
Dus bijvoorbeeld: als je de graden van de servo's weet, kan je redelijk makkelijk de positie van het uiteinde van je poot uitrekenen. Maar als je die positie hebt, is het uitrekenen van de gewenste stand van de servo's niet triviaal.
Als je de huidige positie van de poot hebt, en de verandering van de positie door kleine veranderingen van de servos doorrekent, krijg je drie vectoren. Door de gewenste verandering uit te drukken in een combinatie van die vectoren krijg je de benodigde veranderingen van de servo posities.
Of er betere truuken zijn om deze dingen uit te rekenen weet ik niet. (dit is volgens mij "werkbaar", of er nog een "en als je het zo benaderd is het super simpel" is, weet ik niet...)
Roeper
live long and prosper www
was ook de bedoeling om gelijk een hexapod te bouwen, maar om gelijk 150 eu uit te geven alleen aan servo's, dacht ik eerst wat kleiner te beginnen en later uit te breiden.
Met een quadrupod zal zowieso inderdaad drie poten minimaal op de grond te houden, zodat het middelpunt in deze driehoek valt.
De volgende site schrijft wat nfromatie over de code, maar meer kan ik er niet echt over vinden. Misschien dat iemand nog een site weet waar ik me wat meer in kan verdiepen.
http://rcarduino.blogspot.nl/2012/01/can-i-control-more-than-x-servos-…
Want zoals ik al zei ik wil wel gaan uitbreiden naar en hexapod met 18 servo's en dan zal ik gaan moeten werken met seriele programmering? zeg ik het goed? Ik had om mee te testen een 16kanaals adafruit servodriver besteld. Deze kan via daisychaining uitbreiden naar 32 kanaals.
Overweeg voor het kopen van de servo's anders Hobby-King misschien scheelt dat in de prijs.
Ik zou zelf eerst vier functies schrijven met de basis bewegingen:
- poot_omhoog(poot_nr, hoever)
- poot_omlaag(poot_nr, hoever)
- poot_naar_achter(poot_nr, hoever)
- poot_naar_voren(poot_nr, hoever)
Vervolgens zou ik dan iets maken dat 2 analoge waardes, één voor vooruit/achteruit en één voor links/rechts, om kan zetten naar die bewegingen.
De waarde voor vooruit/achteruit zou ik omzetten naar de tijd tussen de bewegingen van de poten. Langzamer vooruit/achteruit is de poot minder snel bewegen.
De waarde voor links/rechts zou ik gebruiken om te bepalen hoe ver je de poot naar voren zet. Wil je naar links (en tegelijkertijd naar voren, zoals in een auto dus) dan moet je de poten aan de linker kant minder ver naar voren zetten dan de poten aan de rechter kant. Hoe scherper naar links, hoe groter het verschil tussen links en rechts.
Voor draaien om de as kun je dan nog iets aparts maken.
Bovenstaande is wat me zo te binnen schiet, ik heb verder geen ervaring met zulke (mooie!) robot spinnentjes maar misschien kun je er toch wat mee 
Emiel
EDIT: vond na wat ebay'en dit.
Roeper
live long and prosper www
De eerste stappen van me quadrupod. Maar ga me toch even verdiepen in die inverse kinematics en de berekeningen daarvoor. n hoe de arduino code opgebouwd moet worden. Schijnt niet heel moeilijk te zijn. Dus op hoop van zegen, dan maar.
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Gaaf man!
ik heb diverse hexapods gezien waarbij de poten wat schuiven tijdens het lopen. Volgens mij is dat een teken van "slecht geprogrammeerd.
Het massa middelpunt in de driehoek van de overige drie poten manouvreren is een goed idee. Ik wist niet zeker of het kan.
Roeper
live long and prosper www
Ja, bij mij is het ook nog niet helemaal goed hoor, maar dit is ook mijn wel één van mijn eerste geschreven arduino programma. Ik heb wel een beetje in het verleden geëxperimenteerd, dat waren kleine dingetjes
De berekeningen voor IK zijn niet lastig, daar kom ik wel uit. Das alleen maar hoeken en graden. Das alleen maar SOS, CAS en TOA. Persoonlijk, zal de C-taal het lastigst zijn en het meeste tijd in beslag nemen.
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Het mooiste is als je het voor mekaar krijgt om van t=0 tot t=1 de positie van de "body" van x=0 lineair naar x=V kan laten lopen.
Als je het lekker snel doet, denk ik dat je niet aan dat gewichtsverplaatsen hoeft te doen. Dan krijg je dus van t=0 tot t=0.5 dat in het assenstelsel van de quadropod zelf twee poten lineair over de grond bewegen, terwijl de andere twee naar voren bewegen en op t=0.5 klaar zijn om het over te nemen.... (ik geloof dat dit "draf" is).
Roeper
live long and prosper www
pfff..... snap zo goed wat je bedoeld. Als je bedoeld in de zin van snelwandelen of galloperen, denk ik niet dat ik me daar aan ga wagen. Dat draf en trot.
Ik zat afgelopen weekend me quadrupod een beetje netjes te maken en alle bedrading weg te werken. Dus ik de plug van de servo leaders eraf gehaald en alle draden te wikkelen. Heb ik over het hoofd gezien dat ik de plus en de min per ongeluk omgedraaid in de plug terugdeed. Dus toen ik me printplaatje gemaakt had voor bovenop me arduino, en de spanning erop legde, brandde een servo door
Ik BALEN!!
Maar ik heb vandaag 7 servo's HS311 besteld (voor de uitbreiding naar hexapod in de toekomst), een ps3 controller + compatible bluetooth dongle. Binnenkort weer een update met foto's
Roeper
live long and prosper www
Zo afgelopen weekend mijn bestelling binnen met een ps3 controller en bluetooth dongle. De usb-shield voor mijn arduino is nog onderweg vanuit china, maar de controller doet het in ieder geval draadloos via me pc. Dus dat scheelt.
Hopelijk ken ik hem binnenkort via de usb shield op de monitorweergave in arduino krijgen, dan hoef ik daarna alleen maar het programma te schrijven. Ziet er in ieder geval rooskleurig uit.
Roeper
live long and prosper www
Eureka! Heb met mijn Keyes USB host shield en dongle me servo's aan de praat weten te krijgen met me ps3 controller. 
Nu verder met me programma schrijven.
Roeper
live long and prosper www
begint een beetje een monoloog te worden zo, maar goed. Dan wel mijn voortgang als soort archief dan maar, zoiets.
Mijn IK berekening heb ik net gemaakt voor de startpositie. Deze komt redelijk goed uit, hij zou op 90-60-60 uit moeten komen. Maar servo 1 komt tussen 50 en 55 en servo 2 tussen 65 en 70. Misschien dat ik de afstand niet nauwkeurig heb opgemeten van het X,Y coordinaat van de poot.
Nu wordt het tijd om deze berekening in een arduino sketch te schrijven en de microcontroller deze berekening ongeveer elke 20ms te laten. Dit gaat nog wel even duren, want ik heb niet veel pap gegeten van de C-taal. wordt vervolgt........

[Bericht gewijzigd door Roeper op (14%)]
Roeper
live long and prosper www
Bedankt!! 
Ja, ben blij met de vooruitgang,
Langzaam maar gestaag.
Iemand toevallig nog wat tips voor de opbouw van de arduino sketch?
Moet ik bijvoorbeeld de berekeningen in een library zetten en de loop in de Atemga uploaden? of iets dergelijks, dat ik via die weg binnen de 32kB blijf?
//=================================================================
// De code, welke hier stond is verwijderd. Om misvattingen te voorkomen.
// Deze was niet geheel correct. Bij vragen, PB! :)
//=================================================================
Dit is wat ik tot nu toe heb opgebouwd,
Ik heb een Arduino Uno, welke een adafruit 12channel servo driver aanstuurt. Hierop zitten de servo's.
Op de Arduino zit een Keyes bluetooth shield met een dongle voor de ps3 controller.
Alle op- en aanmerkingen zijn meegenomen,
[Bericht gewijzigd door Roeper op (61%)]
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Op 13 december 2014 21:42:20 schreef Roeper:
Moet ik bijvoorbeeld de berekeningen in een library zetten en de loop in de Atemga uploaden? of iets dergelijks, dat ik via die weg binnen de 32kB blijf?
Nee, dit heeft geen zin. Een library is een stuk code die "standby" staat. Als je hem niet gebruikt blijft ie op je computer, maar als je hem wel gebruikt gaat ie mee de atmega in.
Dit heeft zin voor dingen als "spi" als je die niet gebruikt, dan kost het je ook geen code in je atmega. Of een algemene "3D transformatie-library". Daarvan zou jij nu "niet alles" gebruiken, dus hoeft ook niet alles naar de atmega.
Maar voorlopig neem ik aan dat je alleen dingen schrijft die je ook nodig hebt, dus maakt het niet uit.
Als je met zo'n project begint lijkt het na zeg "2 dagen programmeren" alsof je binnenkort tegen de limiet aanloopt. Dat komt omdat je dan een paar grote libraries hebt gebruikt die een hoop ruimte innemen. Maar als je dan zelf gaat programmeren, gaat het maar heel langzaam hoeveel extra je nodig hebt.
Roeper
live long and prosper www
Maar voorlopig neem ik aan dat je alleen dingen schrijft die je ook nodig hebt, dus maakt het niet uit.
Ja, voor zover wel. Maar ik ben natuurlijk nog lááááng niet klaar. hahaha heb veel uitbreidingen in me hoofd. maar das toekomst. Eerst maar is even aan de praat krijgen.
Als je met zo'n project begint lijkt het na zeg "2 dagen programmeren" alsof je binnenkort tegen de limiet aanloopt. Dat komt omdat je dan een paar grote libraries hebt gebruikt die een hoop ruimte innemen. Maar als je dan zelf gaat programmeren, gaat het maar heel langzaam hoeveel extra je nodig hebt.
Het valt gelukkig mee inderdaad.
//=================================================================
// De code, welke hier stond is verwijderd. Om misvattingen te voorkomen.
// Deze was niet geheel correct. Bij vragen, PB! :)
//=================================================================
Ik heb de bovenstaande code erbij gemaakt. De code werkt, maar op een of andere duistere reden zit het nog niet helemaal lekker met de coordinaten.
Sorry dat ik nederlands en engels in de code door elkaar gebruik ik heb overal en nergens stukje code bijelkaar geraapt zegmaar. 
Roeper
live long and prosper www
OK!!
Vergeet alles wat ik ervoor zei over de sketch. Ik ben er achter dat alles in radialen rekende. En dat de femur hoek als negatief naar voren kwam.
EUREKA!!! IK HEB HEM WERKEND !! JAJAJA Mijn weekend is helemaal goed! Als over een paar weken hoor dat ik mijn tentamen van afgelopen zaterdag met een voldoende heb afgerond nou, dan, dan......
Roeper
live long and prosper www
De IK berekeningen van de body inverse kinematics heb ik nu ook door, dit is dan alleen van bewegingen rondom de z-as. De andere assen ga ik de komende dagen berekenen en dan moet ik deze nog even invoegen in me arduino code.

Roeper
live long and prosper www
De volgende berekening: ROLL
Weet iemand toevallig een manier om een combinatie van twee knoppen de arduino een actie te laten uitvoeren?
de volgende functie reageert op allebei, of knop-UP of KNOP LEFT.
if(PS3.getButtonClick(UP) || PS3.getButtonClick(LEFT))
{}
Nu zoek ik een functie-code om de arduino op allebei de knoppen te reageren. Dus én knop-UP én KNOP-LEFT. Weer iemand toevallig dit?
[Bericht gewijzigd door Roeper op (65%)]
logische OR (||) veranderen door logische AND (&&) ?
if((PS3.getButtonClick(UP)) && (PS3.getButtonClick(LEFT)))
{
}
Roeper
live long and prosper www
oh, serieus? Wist niet dat je dat had in de C-taal, opzich logisch dat het allemaal digitaal is.
Ik ga even inlezen en uitproberen, THANKS!! 
Had dezelfde vraag een hele tijd geleden op een post bij circuits@home gevraagd, maar nog steeds maar geen antwoord. Toen was ik nog bezig met de bluetooth dongle en de PS3 controller.
Roeper
live long and prosper www
Ja, daar was ik dus al bang voor. Heb nu de IK klaar, eigenlijk moet ik alleen nog voor Pitch wat schrijven. Maar ben nu bezig met de instellingen voor de PS3 controller:
Binary sketch size: 33,078 bytes (of a 32,256 byte maximum).
En dan heb ik alleen maar even kijken of ik hem met de R2 op en neer kan laten bewegen:
if(PS3.PS3Connected || PS3.PS3NavigationConnected) {
invoercoordinaten(4, 4, map(PS3.getAnalogButton(R2_ANALOG), 0, 255, 0, 3));
ROLL(0);
YAW(0);
calculate_angles();
calculate_angletoPWM();
Moveleg_1();
Moveleg_2();
Moveleg_3();
Moveleg_4();
}
if(PS3.getButtonClick(PS)) {
PS3.disconnect();
}
}
Eigenlijk moet ik nog even alles netjes benoemen, heb nu y_1, y_11, y_0 enz. enz. Misschien dat ik dan maar even moet kijken of ik hem kan inkorten en netjes kan maken.

