Project: Hexapod

Hallo allemaal, ik ben met een Hexapod bezig. In dit topic wil ik vragen over die Hexapod stellen, want dat zijn er tot nu toe al best wat geweest, en misschien updates showen.

Topic's tot nu toe:

Ik wil het doen met 3 servo's per poot, zes poten in totaal dus 18 servo's. Ik wil ze gaan besturen met een eigengemaakt controllerbord. Hij moet kunnen communiceren met de PC. Hiervoor heb ik al een communicatiebord gemaakt, die zit via USB aangesloten en laat alle data die voorbij komt zien op een Graphisch Touchscreen LCD. Die stuurt dan ook de commando's door naar het controllerbord.

Het communicatiebord werkt met een PIC16F877. Die zit aangesloten aan een Grafisch Touchscreen (klik). De communicatie via USB gaat met een USB naar Serieel module'tje (klik). De Software op de PC is zelf geschreven in VB.Net.

Het Controllerbord werkt met een PIC18F4550. Ik heb daar voor een 16-bits PIC gekozen omdat 14 bits of minder geen uitgebreide berekeningen kunnen doen ((co)sinus). Het schrijven van de programma's doe ik in PDS (Proton Development Suite, volle versie), Basic dus.

Tot nu toe:
Software
Ik heb een prototype poot gemaakt. Het programma kan met gegeven X en Y de hoeken (servowaardes) voor Servo Ay en B uitrekenen. Een plaatje om duidelijker te maken wat ik met die namen bedoel.

http://www.xs4all.nl/~hdenkers/jasper/images/hexapod_poot3.png

Met:
A: "Heup", zit aan het lichaam vast. Ay is het punt wat je hier op het plaatje kan zien, de servo die voor de verplaatsing omhoog en omlaag zorgt. Ax zorgt voor draaien (als je van bovenaf kijkt links rechts).
B: "Knie"
C: "Voet"

Eerst wou ik eerst alle waardes in een Eeprom zetten en dan later uitlezen. Daar ben ik vanafgestapt. Nu maak ik het programma zo een X, Y en Z gegeven kan worden waarbij het programma dan uitrekent wat de servowaardes zijn. Zo denk ik dat ik ook tot body rotations kan komen en "soepele" loopjes.

Mechanica:

Ik ga de hexapod denk ik voor het grootste deel maken van plexiglas en acrylglas. De poten van acrylglas en het scharnierpunt van plexiglas. Die is een beetje lastig uit te leggen, daar zal ik even een foto'tje van maken om te kunnen laten zien hoe die in elkaar zit.

Ideeen zijn altijd welkom, denk je dat dingen anders kunnen zeg het maar. Ik hoor het graag.

Ik ben ook wel benieuwd of er andere CO'ers zijn die een hexapod of andere soort lopende robot gemaakt hebben. En hoe die dat hebben aangepakt.

Links:

Even een vraagje nu. Ik ben bezig met het maken van een prototype poot. Het draaipunt wil ik maken door aan de ene kant de servohendel vast aan het lichaam te maken en aan de andere kant een stuk plexiglas, wat via een bout vast zit aan het lichaam en draait.

Alleen wat is beter, om de servohendel boven of onder te doen? Of maakt dat helemaal niks uit?

Heb trouwens ook even een Applet in java gemaakt, zie link startpost.

Ik heb maar gekozen voor de bovenkant.

Deze poot heb ik uit 5 en 3 mm dik plexi -en acrylglas gemaakt, met de Dremel. Dat is alleen wel een behoorlijk werk en precies goed krijg je het niet. Daarom wil ik het laten uitfrezen.

LED-Maniak heb ik al gemailt, om te vragen hoe/waar hij de onderdelen voor zijn hexapod heeft laten frezen.

Weet iemand anders waar je zulk soort dingen kan laten uitfrezen? Via google kan ik niet op bedrijven komen die dit kunnen doen. Misschien een CO'er die een cnc heeft staan?

Alvast bedankt.

Edit:
Even een foto'tje voor hoe het nu is.

http://www.xs4all.nl/~hdenkers/jasper/images/testopsthexapod1.jpg

[Bericht gewijzigd door tralala op (11%)]

Een vraagje over de code. De berekeningen van de poot duren iets te lang waardoor de frequentie voor de servo's niet meer kloppen. Het signaal klopt dan niet meer en de servo's worden zwakker. Hoe kan ik dit oplossen?

Eigenlijk moet er dus om de 20 ms (50Hz) een servopuls gegeven worden, en tussendoor moeten er berekeningen worden gedaan. Maar hoe kan ik dat doen?

Hmm... ik ga is kijken.

Edit: Ik ben even gaan zoeken, maar ik snap nog niet zo veel van die interrupts. In de handleiding staat volgens mij dat een interrupt wordt ingeschakeld als er op een pin een signaal komt.

Moet ik dan iets maken wat een 50 Hz signaal geeft aan de PIC zodat die steeds de servo's een signaal geeft?

nee, een interrupt kan ook vanuit een timer komen.

Nog mooier, is het gebruik van de PWM (CCP) module van een PIC.

Enige nadeel van het gebruik van dergelijke module is dat er meestal mar 1 of 2 modules op zitten.

Ik zou idd een Timer gebruiken. Lees de datasheet maar eerst over de timer ;-)

Overigens, zou ik dus sowieso niets berekenen, maar gewoon look up tables gebruiken.

[Bericht gewijzigd door Daan Timmer op (13%)]

De 18f4550 heeft twee CCP modules, moet je die dan een 50 Hz signaal laten maken en op een pin van de PIC zetten? Dat lijkt me raar...

Edit: Look up table, bedoel je daarmee alle waardes in de pic zetten en dan steeds uitlezen? Bij een resolutie van 0,5 cm en een bereik van 10 * 20 cm zit je dan al aan 800 waardes, voor 2 servo's zelfs 1600. Dat past niet in de PIC, dan zou het dus via een eeprom oid moeten. En is dat dan niet net zo traag?

look up table in prorgam memmory, de 18F4550 heeft 16k ram volgens mij? (of 32?)

CCP module in PWM modus. Bekijk 'Figure 15-4: PWM OUTPUT' van de datasheet. Pagina 146 van het document zelf, niet van de acrobat paginering (heb hier alleen de datasheet uitgeprint ;-) vandaar dat ik het pagina nummer in acrobat niet weet)

En die PWM output stuurt direct je servo aan.

[edit]
-tik foutje :P Zullen er wel meerdere in zitten /care

Ah op die manier, ik haalde dat door elkaar met variabelen. Dan is het inderdaad handiger om het gewoon in een look up table te zetten.

De servo's sturen laat ik denk ik gewoon software-matig, anders moet ik meerdere PIC's gaan gebruiken.

Die 20 Hz die je noemt is fout.
1 sec / 20mSec = 50 Hz

Je hebt gelijk, heb het even veranderd. 20ms - 50Hz

Voor de frezen van ondedelen kun je ook bij http://www.bigbluesaw.com/ terecht. Zelf geen ervaring mee maar schijnt wel goed en snel te wezen!

Zo dat ziet er goed uit, ook met het online ontwerpen. Ben benieuwd naar de prijzen...

Syntax

Variable = LOOKUP Index , [ Constant { , Constant...etc } ]

Een lookup table, ik dacht het met het bovenstaande commando te doen. Alle waardes dan van te voren uitrekenen en in het programma zetten. Hier kunnen alleen maar 256 constanten in staan... Hoe moet ik dan een tabel maken of de waardes in de PIC zetten?

Alvast bedankt

in een 16-bits PIC doe ik gewoon dit:
(C)


s16 rgb_psv[_FLASH_PAGE] __attribute__((space(prog),aligned(_FLASH_PAGE*2)));

waarbij rgb_psv ook een lookup table is. (Gewoon een array met waardes)

Echter ik weet even 1,2,3 niet meer hoe dit in C18 moet.
Volgens mij:

unsigned int rom jeWaarde[] = {1,2,3};

Als je een andere taal dan C gebruikt kan ik je sowieso niet helpen.

Oh en om een array groter dan 256 te maken moet je in de manual kijken van C18, daarin staat exact beschreven wat je daar voor moet doen.

[Bericht gewijzigd door Daan Timmer op (44%)]

Ik gebruik PICBasic...

Het is al gelukt, doe het nu zo:


ServoAy = CREAD ServoA + Waardes


         ;X     0    1    2    3    4    5    6    7    8    9    10   11   12
ServoA: CDATA	180, 180, 180, 180, 180, 180, 180, 173, 167, 162, 156, 151, 146         ;  0  Y
        CDATA	192, 192, 192, 192, 183, 176, 170, 165, 160, 155, 150, 146, 141         ; -1
        CDATA	180, 177, 173, 170, 166, 163, 159, 156, 152, 148, 144, 140, 135         ; -2

ik heb denk ik nog wel een idee
als je te kort aan geheugen komt zou je het dus allemaal in de eeprom kunnen zetten en de pic het hele programa laten laden uit de eeprom voor dat het nodig is

offtopic :
ik ben blij dat ik een fpga heb dan heb je hier geen last van

@ manga valk,
veel plezier met zo iets dergelijks in een FPGA te maken :-] (ik weet het , moeilijk is het niet, wel veel werk)

het is misschien wel veel werk maar het is wel leuk :)

Tja, ik heb nu drie tabellen, behoorlijk grote, en het neemt maar 1500 bytes programma in. De 18f4550 heeft 32K dus plaats genoeg.

Het zelf maken, of laten frezen van onderdelen zet ik maar uit me hoofd. Ik ga gewoon voor de Phoenix van lynxmotion. Nu ben ik alleen aan het kijken naar servo's. Bij de robots van hun heb ik het idee dat die servo's een beetje overkill zijn. Het gaat voor mij ook een beetje te ver om een paar honderd euro neer te leggen voor de servo's.

Zie de volgende berekening:
Ik ga uit van een bovenbeen van 10 cm. In het ergste geval staat de hexapod op 3 poten. Ik ga uit van een gewicht van ongeveer één kilo. Per poot dus 1000 / 3 = 333 gram. 333 gram op 10 cm = 3,3 kg/cm = 33 Ncm (46 oz/in).

Maar alleen voor het draaien wordt al een HS-475 gebruikt (76 oz/in, 5,5 kg/cm). Voor verticale beweging wordt de HS-645 gebruikt (133 oz/in, 9,6 kg/cm). Dit lijkt mij een beetje overdreven of klopt mijn berekening niet?

Ik vraag me dus af wat jullie adviseren voor servo's, veel geld voor die Hitec servo's neerleggen of goedkope 5 euro servo'tjes nemen?

Alvast bedankt

Niet doen. Uiteindelijk koop je die andere servo's toch...

Tenzij je een ontwerp hebt waarbij het koppel niet rechtstreeks op de servo terecht komt (dmv duw/trekstangen bv) kom je bijna gegarandeerd teleurgesteld uit.Vergeet niet dat je met veel dynamische belasting zit eens je begint te wandelen, en dan zit je daar met je krap toegemeten servo's.

Mijn laatste bot had ik ook berekend, en servo's genomen die net iets meer kracht hadden. Na 3 stappen ligt ie op zn buik.

Zo een 'rule of thumb' is het berekende maximum koppel *3, dan zit je safe.

ja die van conrad zijn meer $4.79 en hebben maar 3.2 kg/cm aan kracht
maar wat als je geen geldboom hebt, dan moet je wel die goedkopen gebruiken (ik wou ze gaan gebruiken want ik heb hier geen geldboom)
maar als je centen genoeg hebt zou ik zeggen neem degenen die ze aanraden

Als je geen geldboom hebt kan je beter het mechanisch ontwerp aanpassen aan je financien :)

not trying to put anyone down, probeer anderen gewoon te behoeden voor de fouten die ik gemaakt heb.

Als je ervoor zorgt dat de krachten op de poot, wanneer die rechtopstaat, loodrecht op de as van de servo vallen, maw zodat de servo's absoluut niets vermogen nodig hebben om de robot rechtop te houden, kan je servo's met betrekkelijk lage kracht gebruiken, àls ze in staat zijn om het gewicht van de poot op te heffen.

Crustcrawler en de oudere generatie lynxmotion bots gebruiken dit principe bv.

...

[Bericht gewijzigd door Anoniem op (100%)]