Ik zeg nog steeds, in dat geval: lookup table. in ROM.

Maar als je een resolutie van 1mm wil zijn dat superveel waardes...

ja dat wou ik ook gaan proberen (gewoon een lookup table, alleen dan in het geheugen van mijn fpga)

Uitgestrekt is de arm 200 mm. 200 * 400 = 80000 waardes, voor de servo's een 16 bits waarde, dus 2 bytes. En ook nog voor 2 servo's.

200 * 400 * 2 * 2 = 320000 bytes...

Leek mij een beetje veel, dus ik doe het nu maar even zo.

Dan zet je toch alleen de sin/cos waardes in een LUT? Als je met 8bits werkt zit je op 2x 256 waardes.

Dat ben ik idd ook nog van plan, maar je hebt ook nog wortel en boogtan.

4x 256 bytes, in ROM, dat zal je niet eens merken met een 4550 :P

Heel veel off topic, en net als een ander gebruik je http://www.circuitsonline.net/aanbod/ maar.

[Bericht gewijzigd door Henry S. op (0%)]

Op 18 juli 2009 12:35:15 schreef Daan Timmer:
Dan zet je toch alleen de sin/cos waardes in een LUT? Als je met 8bits werkt zit je op 2x 256 waardes.

Wat dacht je (algemeen gericht, en natuurlijk de topicstarter in het bijzonder) van alleen sinus? Co-sinus is immers een sinus die 90 graden voor loopt. Bovendien lijken alle flanken van zo'n curve op elkaar dus je hebt in principe maar een tabel tussen 0 en 90 graden nodig. De microcontroller kan die waarden makelijk reconstrueren uit hoeken door te spiegelen. En met een beperkt aantal punten moet je ook een redelijke nauwkeurigheid kunnen behalen als je linear interpoleert tussen die waarden. Vroeger (voor de zakjapanner, ... of is die uitdrukking inmiddels ook al ouderwets ;) ) gebruikte men voor het reken gemak een tabel met logaritmen van sinus/cosinus waarden (als ze geen rekenliniaal gebruikten, maar dat is inprincipe dezelfde oplossing). Waardoor je alleen hoefde optellen/aftrekken ipv vermenigvuldigen/delen.

log(a)+log(b)=log(a·b)

En het resultaat dan weer terug 'up-looken' in de tabel. Dus met een beetje ouderwets vernunft moet je zo'n voet positie wel kunnen berekenen in een fractie van een sekonde. De vraag is alleen waarom. Ik denk niet dat een spin zich zorgen maakt over een sinus curve. Die zet zijn poot neer totdat het niet verder kan.

Op 12 augustus 2009 23:05:26 schreef Valen: Ik denk niet dat een spin zich zorgen maakt over een sinus curve. Die zet zijn poot neer totdat het niet verder kan.

Maar daar zeg je iets zeer interressants, doch duur. Servo's met feedback zijn iets specialer+duurder dan een normale *analoge* servo'.

Ik ken de feedback methode natuurlijk wel ;-) Heb hier een mooi boekje (of toch niet, ligt kennelijk nog bij een vriend)

zie: http://www.ai.mit.edu/projects/genghis/ en bekijk de PDF. Overigens, dat boek is schitterend als je geinterresseerd bent in robotica + AI ;-)

wat is het hier stil de laatste tijd
ik heb nu 9 servo's besteld http://www.rctstore.nl/art!!!!5017!NL
maar die hadden ze niet meer dus heb ik voor dezelfde prijs de http://www.rctstore.nl/112485-servo-hs485hb/art!!!zoek%5Ehs%20485hb!35… gekregen
straks de max II micro kit bestellen als aansturing
ik ben trouwens bezig de hele body zelf te maken op mijn stage adres

ik zou ook graag weer eens een update over u hexapod willen zien
(dit kan nog een strijd gaan worden pic tegen cpld :):):))

Haha, ben benieuwd! Hoever ben jij nu? Kan je al wat bewegingen maken? Hoe zit het met je hardware?

Ben ook weer bezig geweest, niet erg veel alleen. Ik ben nu bezig met het optimaliseren van de code. Wat ik nu heb en wat ook goed werkt:

CalcAB:

;Servo waardes berekenen van servo Ay en B

; AC uitrekenen
   AC = CX * CX ; Kwadraat X
   AC = AC + (CY * CY) ; Kwadraat X + Kwadraat Y
   AC = SQR(AC) ; Wortel (X*X + Y*Y)

; Hoek c1 uitrekenen
   C1flt = (CY / CX)
   C1flt = ATAN(C1flt)
   C1 = 57.3 * C1flt ; Hoek berekenen in graden (180/pi = 57.295...
   
; cos Hoek C2 = (AB²-BC²-AC²) / (-2*BC*AC)
; Bereken Cos C2
;AB²-BC²-AC²
   C2 = ABAB_BCBC - (AC * AC)
; / (-2*BC*AC)
   C2flt = BC2 * AC
   C2flt = C2 / C2flt
;Cosinus is berekent, bereken hoek in radialen
   C2flt = ACOS(C2flt)
   C2 = 57.3 * C2flt ; Omrekenen naar graden
   C3 = -180 - C1 + C2

   BXflt = C3 / 57.3 ; 57,296 = 180 / pi
   BXflt = COS BXflt
   BX = BXflt * B_C
   BX = CX + BX
   
   BYflt = C3 / 57.3 ; 57,296 = 180 / pi
   BYflt = SIN BYflt
   BY = BYflt * B_C
   BY = CY - BY

   Aflt = BY / BX
   Aflt = ATAN (Aflt)
   Aflt = 57.3 * Aflt ; 180/PI = 57.295...
   Aflt = 90 - Aflt

   B = CX - BX
   Bflt = B /(CY - BY)
   Bflt = ATAN (Bflt)
   Bflt = 57.3 * Bflt ; 180/PI = 57.295...
   Bflt = 180 -(Aflt - Bflt)

   Aflt = Aflt / 180 * 1840
   Servo0 = 575 + Aflt
   Bflt = Bflt / 180 * 1815
   Servo1 = 2365 - Bflt
   Servo2 = 1500

RETURN

Variabalen en constanten:

DIM AX AS DWORD
DIM AY AS DWORD
DIM BX AS DWORD
DIM BXflt AS FLOAT
DIM BY AS DWORD
DIM BYflt AS FLOAT
DIM CX AS DWORD
DIM CY AS DWORD

SYMBOL AB = 76
SYMBOL B_C = 125
SYMBOL ABAB_BCBC = -9849 ; 76^2 - 100^2 = -9849 ; AB kwadraat - BC kwadraat alvast uitgerekend
SYMBOL BC2 = -250 ; -2 * 125 ; -2 * BC alvast uitgerekend

DIM AC AS WORD
DIM C1 AS DWORD
DIM C1flt AS FLOAT
DIM C2 AS DWORD
DIM C2flt AS FLOAT
DIM C3 AS FLOAT

DIM A AS BYTE
DIM Aflt AS FLOAT
DIM B AS DWORD
DIM Bflt AS FLOAT

DIM Servo0 AS WORD
DIM Servo1 AS WORD
DIM Servo2 AS WORD

Waarbij de servo's als volgt gebruikt worden:

Servo0 = Omhoog/omlaag bij 'heupen'
Servo1 = Omhoog/omloog bij 'knie'
Servo2 = Zijwaartse beweging, nu nog niet gebruikt

Servo waardes worden doorgestuurd naar aparte servocontroller. Heb je interesse voor de hele code, mail me.

Bij 1 loop gaat dit nog goed, bij 2 of 3 ook nog wel. Met een oefenprogramma'tje(de vierkante beweging van het filmpje) is de snelheid goed. Alleen wanneer ik de loop 6 keer uitvoer gaat het net te traag...

Mijn vraag is dus, hoe en waar zouden jullie verbeterpunten in de code aanbrengen?

[Bericht gewijzigd door tralala op (22%)]

overstappen van Basic naar C of assembly?

de hardware heb ik nu de laatste 9 servo's komen er ook aan
het programma ben ik nog mee bezig zie mijn site voor updates van de code (http://mangavalk.webklik.nl/page/home)
hij wordt alleen niet iedere dag geüpdatet
en de body ben ik bijna mee klaar
(maar ze willen hem loopend zien weggaan(dat wordt dus gewoon een stukje vooruit :) de driehoek\driepoots loop ))

Hardware? Zelf gemaakt of heb je die MSR hardware gekocht?

En je code? Gebruik je inverse kinematics, of gewoon simpele bewegingen?

Op 30 september 2009 18:00:30 schreef Daan Timmer:
overstappen van Basic naar C of assembly?

Ik heb een licentie gekocht voor Proton PICBasic, dus zou dit eigenlijk wel willen gebruiken... Zijn er nog opties? Anders ga ik het waarschijnlijk verdelen over 2 PIC's.

de hardware is mijn mmk max II micro kit
de code staat op mijn site onder hexapod>verilog
de code is nog niet klaar en/of compleet
in het begin
nu dus
wilde ik het rechtstreeks uit het geheugen gaan trekken
maar op lange duur wil ik net zo iets als u heeft gaan gebruiken

Rechtstreeks uit geheugen trekken? Nog geen wiskunde zegmaar?;)

Met hardware bedoelde ik eigenlijk de robot zelf. Zelf gemaakt? Of ook net zoiets als ik, een pakket gekocht?

Ik ga denk ik maar naar assembley kijken, even tutorial zoeken:P Aanbevelingen?

bekijk de datasheet van de betreffende PIC's. Achterin staan alle beschikbare instructies.
Her en der door de documentatie staan voorbeelden per peripheral over hoe je het aan moet sturen in assembly.

Het enige wat je moet *leren* is rekenen met assembly. De rest staat al in de datasheet.

Op 1 oktober 2009 09:14:55 schreef tralala:Ik ga denk ik maar naar assembley kijken, even tutorial zoeken:P Aanbevelingen?

Ik zou gewoon C gaan programmeren met de SDCC. Dat is een prima open source compiler en werkt onder linux en windows.

Ik ga denk ik liever in C programmeren. Ik heb ervaring met Java, en dat is wel een beetje te vergelijken met C volgens mij.

Ik heb SDCC geïnstalleerd, alleen hoe start je hem op:P Het lijkt me wel wat, alleen ik snap niet hoe ik de compiler opstart...

zou ik mogen vragen hoe u java heeft geleerd via school \ boeken of via een tutorial online
want ik ben op zoek naar een goeie tutorial
want het lijk me toch wel makkelijk om op de pc zelf ook wat programma's te kunnen maken

http://www.dgp.toronto.edu/~mjmcguff/learn/java/

Met Eclipse als IDE, ik deed het wel met applets. Testje wat ik een keer gemaakt heb: Java Applet

Andere vragen via mail aub...

[Bericht gewijzigd door tralala op (35%)]