tralala
Huidig project: Hexapod
Goede avond,
Stel A(Heup) zit aan de Hexapod vast, hiervoor neem je coördinaat (0,0). B is de voet met coördinaat (12,-8). C is de knie, hiervan wil je de coördinaten weten. Het enige wat je nog meer weet is de lengtes van het bovenbeen(AC = 5) en het onderbeen(BC = 10). Verder is AB wortel (122 + (-8)2) = 14,42. Hoe reken je de coördinaten van C uit?
Het gaat uiteindelijk oom de hoeken bij A en C voor de servo's. Dat is makkelijk uit te rekenen alleen daarvoor moet je wel het coördinaat van C hebben.
Teken twee cirkels, een met middelpunt (0,0) en straal 5, de ander met middelpunt (12,-8) en straal 10. De snijpunten zijn de coordinaten.
ok dus
je weet lengte 8 en lengte 12
dan kan je lengte d berekenen
dit is inderdaad 14.422
nu je alle lengtes hebt kan je de hoeken uitrekenen
hier zijn wat formules voor (ik reken het niet uit want ik ben slecht in die omzetting):
AC = V(BC² + AB² - 2* BC*AB*cos hoek B)
Dit zou ze moeten zijn in jou geval.
EDIT:
ik denk dat dit de omgezette formule is
cos hoek b = (AC²-BC²-AB²)/(-2*BC*AB)
wat uitkomt op een hoek van 11.15° voor b (niet tegenover de grond maar BC tegenover AB)
[Bericht gewijzigd door chrome op (19%)]
tralala
Huidig project: Hexapod
Op 9 februari 2009 19:35:13 schreef infrarood:
Teken twee cirkels, een met middelpunt (0,0) en straal 5, de ander met middelpunt (12,-8) en straal 10. De snijpunten zijn de coordinaten.
Op papier lukt dat ja, maar als je het met een uC wilt laten uitrekenen lukt dat zo niet.
@chrome
A(0,0) = heup
B(?,?) = knie
C(12,-8) = voet
AB = bovenbeen = 8
BC = onderbeen = 10
AC = 14,422
Even duidelijker plaatje met betere waardes en waar de verhouding kloppen.
Volgens jouw formule:
cos Hoek C = (AB²-BC²-AC²)/(-2*BC*AC)
cos Hoek C = (8²-10²-14,42²)/(-2*10*14,42)
cos Hoek C = (64-100-208²)/-288,4
cos Hoek C = -244/-288,4 = 0,846047
Hoek C = cos inverted van 0,846 = 32,22°
En dat klopt, dankjewel!
klein is fijn
Moderator
Al die floating point rommel en cosinus berekeningen wegmikken en de handel gewoon in een lookup table zetten. Het enige dat je wilt weten is wat hoek B moet zijn om de poot op de grond te krijgen. En dat bij 100 posities?
tralala
Huidig project: Hexapod
Ik wil hem later ook off-road laten lopen. Ik wil de aansturing ook doen door gewoon voor de "voet" x,y,z in te vullen en dat dan de PIC/PC uitrekent welke servowaardes nodig zijn. Bij off road kan dat volgens mij niet met een tabel.
Edit: Sowieso voor lichaamsbewegingen zoals x, y en x draaien is het ook veel makkelijker.
[Bericht gewijzigd door tralala op (17%)]
Daan Timmer
Ik ben programmeur! geen electronicus! http://www.daantimmer.nl/ Er is een ontwerp! nu nog inhoud :-)
Ik heb geleerd met AI dat dit soort dergelijke problemen het beste opgelost kunnen worden zonder echte X/Y coördinaten.
Dit wordt, zo mooi, in het engels genoemd: Configuration Space. Zie: http://en.wikipedia.org/wiki/Configuration_space voor een zeer niet makkelijk te begrijpen uitleg.
IPV X/Y coordinaten te gebruiken wordt er gebruik gemaakt van de hoek van elk scharnier punt. Dus (in het geval van twee scharnier punten) krijg je een x/y vlak die loopt van 0 - 360 voor zowel x als y.
Hiermee kan vervolgens makkelijker gerekend worden om bepaalde posities van je voet te bereken en welke posities hiervoor de scharnier punten moet hebben.
Deze *space* kan je vervolgens verkleinen wat betreft de resolutie om toch nog wel redelijke snel te kunnen rekenen.
Uiteraard werkt een lookup table ook goed. Lijkt mij ook nog steeds wel goed te werken voor een robot die *off-road* moet gaan.
Zo een configuration space is iets ingewikkelder, waarschijnlijk ook wel een stuk langzamer, maar ook een stuk dynamischer.
p.s. miss dat ik het veel moeilijker maak dan het is met deze post hoor
(Vandaar dat ik er ook explicitiet bij zeg dat via een LUT het ook perfect zou moeten werken).
Leuke PDF die wel redelijk goed uitlegt (+plaatjes) over wat ik bedoelde:
http://parasol.tamu.edu/~amato/Courses/padova04/lectures/L1.intro.pdf
[Bericht gewijzigd door Daan Timmer op (13%)]
tralala
Huidig project: Hexapod
Tja, misschien is dat ook een beetje wat je zelf het handigst vind. Maar als je bijvoorbeeld een poot een bepaalde beweging wilt maken, lijkt het mij toch makkelijker om gewoon in de computer een x,y,z in te vullen en dat de robot dan de boot daar naartoe brengt. Ik denk voor wat ik wil met m'n hexapod dat mijn manier het beste werkt. Toch bedankt!
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Laten we de boel eens omdraaien. Kan je de positie van de poot uitrekenen als je de hoeken weet? Niet moeilijk toch?
Vervolgens kan je als je de huidige hoeken weet, en een gewenste positie hebt, de hoeken eerst in "gedachten" iets veranderen bepalen hoeveel je daarvan nodig hebt om op de gewenste positie uit te komen....
Gegeven de huidige positie, draai eerst (in gedachten) de eerste hoek 1 graad. Je krijgt nu een vector van een verplaatsing. Doe dit ook voor de andere hoek. Deze twee vectoren moet je uitrekenen welke som de vector van je gewenste verplaatsing oplevert.
Dit werkt uitstekend voor kleine verplaatsingen, maar iets minder voor grote. Als je nu afspreekt dat je na iedere 5 graden even opnieuw de vectoren gaat uitrekenen, kom je altijd goed uit.
[edit] KIF heeft eigenlijk ook gelijk. Je kunt een tabel maken waar voor alle hoeken de positie in staat. Als je naar een bepaalde positie toe wilt, zoek je de dichtstbijzijnde, en interpoleer je. 5-10 entries per hoek leveren totaal 25 tot 100 tabel entries op. Je kunt ook de tabel omgekeerd genereren. Voor alle gewenste posities de hoeken vooraf uitrekenen.
[Bericht gewijzigd door rew op (19%)]
tralala
Huidig project: Hexapod
Even een programma'tje gemaakt.
De poot staat onder het tab "Simulation", door op de knoppen te drukken verandert de positie. Voor het programma is wel dotnetframework nodig.
Bedankt voor de hulp.
Daan Timmer
Ik ben programmeur! geen electronicus! http://www.daantimmer.nl/ Er is een ontwerp! nu nog inhoud :-)
Oke, nu weet ik het zeker dat mijn .NET f-ed is...
GTA4 werkte al niet meer (Althans, GTA4 misschien wel, maar Rockstar Games Social Club niet meer). En krijg nu met jouw programmatje exact dezelfde error. Namelijk:
-----------------------
| |
| |
| |
| |
| |
| [OK] [CANCEL] |
-----------------------
Verder niets
Ik zou je graag willen helpen maar eerst moet ik vista opnieuw installeren (Voor het eerst sinds de release van vista...) Mijn .NET installatie is naar de kl*te gegaan nadat ik heb willen upgraden naar .NET3.5SP1 Ik had niet genoeg schijfruimte op C schijf, daarna is .NET niet meer werkend te krijgen geweest 
Daan Timmer
Ik ben programmeur! geen electronicus! http://www.daantimmer.nl/ Er is een ontwerp! nu nog inhoud :-)
Zo, 24H is ook weer voorbij. Vandaag eindelijk TinyXP op mijn Macbook geinstalleerd gekregen.
Afin, ik dacht laat ik eens kijken (ik was wel geinteresseerd naar je proggie) maaaar, hij doet niets *-)
Laptop is up-to-date met .NET maar hij start niet op, hij komt niet eens in de Taskmanager te staan (tenzij ik enter ingedrukt houd, dan na 10sec komt er 1tje en istie ook meteen weer weg). Jammer 
tralala
Huidig project: Hexapod
Jammer dat hij het niet doet, misschien moet ik daar wel een installatiepack voor maken...
Nja, voor het idee nog even een screenshot:
Mijn ervaring met servo's is dat als je een aantal precies hetzelfde PWM signaal aanbiedt, ze toch allemaal net even verschillend staan... Daar ga je dan met de complexe rekenarij...
Zoals al eerder vermeld is het geen gek idee om gewoon een look-up table te maken van de diverse servo-standen.
Ik heb dat destijds gedaan met 3 losse PWM generatoren (zijn bouwpakketjes voor bij Conrad) en dan de pulsbreedte meten als de gewenste positie is bereikt. Daarvoor had ik een programmaatje geschreven voor de 16F84 met een LCD eraan.
Als je dit eenmaal hebt gedaan voor een aantal critische posities kun je de rest interpoleren.
Daan Timmer
Ik ben programmeur! geen electronicus! http://www.daantimmer.nl/ Er is een ontwerp! nu nog inhoud :-)
Ik heb ook eventjes zitten kloten, meer als een leuk voorbeeldje om uit te leggen wat ik bedoelde met config spaces.
zie: http://www.uploadarchief.net/files/download/configuratiespace.zip
Geschreven in java.
.exe is bijgevoegd, de sources ook (hele vieze source hoor
) De exe opent een pop-up/webpagina in je default browser van de maker van het programma welke mijn .class naar een .exe om kan zetten (Tsja, freeware ... )
Hij opent twee schermpjes. Eerst gaat hij een en ander berekenen, daarna kan je in het schermpje met de twee schuifbalken zowel de schuifbalken als wel in het witte veld klikken + slepen om de X/Y (graden van de hoeken) te zetten. Probeer de zwarte vlakken te ontwijken
Dat zijn de twee vierkante objecten in eht andere schermpje. (Daarin zal je een arm zien met twee scharnier punten).
Kan eventjes een seconde duren met laden, moet veel berekenen (De collisions worden telkens per opstart berekent)
[edit]
Om zo iets als dit in de praktijk (voor jouw) te gebruiken kan je groffe objecten toevoegen van waar je poot níet mag komen. Vervolgens geef je twee punten aan (hoog/laag) en laat je een path genereren. Output de hoeken naar een *.h als array (lookup table) klaar 
[edit2]
Ik probeer je alles behalve over te halen trouwens om dit te gebruiken!