hallo hanno
zunächst danke für deine Erklärungen. Soweit ist das Problem mit der inversen Kinematik allerdings schon gelößt. Zumindest was die berechnung und positionierung jedes einzelnen Beines angeht. Und wie gesagt alles mit nur einem Atmega8. Ich denke da der Berechnungstakt von ca. 10 Hz durchaus ausreichend ist oder?
Deine weitergehenden Erläuterungen sind sicher auch ganz IO soweit aber doch nicht ein ureigenes Problem eines Laufbots. Diese Problematik tritt doch ebenso bei Radsystemen auf. Wichtiger wäre doch sich zuerst über Schrittfolgen Gedanken zu machen, aber dafür mußte mein Hexabot erst einmal Gestalt annehmen. Für meine derzeitigen Kontrollen habe ich im Moment allerdings nur 1 Bein (mal eben zusammengestellt)zur Verfügung, welches ich wechselweise Teste.
@hopix, ganz ehrlich ich kenn hier einige im Forum die einen Hexa mit inverser Kinematik gebaut haben und de haben alle deutlich mehr Rechenpower verwenden müssen als einen Mega8. In sofern würde es mich etwas verwundern, wenn es bei dir funktioniert.
Schliesslich muss jedes Bein individuell berechnet werden und dafür die PWM signale bereitgestellt werden.
hi
nene ist schon OK. Wer möchte schon gerne "Enten" aufsitzen. Für konstruktive Kritik bin ich immer offen.
Allerdings wundere ich mich schon ein bischen und stelle mir folgende Fragen:
Ist dieser Code so unglaublich das ich nicht Ernst genommen werde?
Ist der Code so uninteressant da es doch recht wenig Rückmeldungen hier gibt?
Bin ich ggf. im falschen Forum damit?
Wenn du ein STK500 hast stelle ich dir auch gerne eine .hex datei zur verfügung als DEMO mit den entsprechenden Servoanschlußbezeichnungen ausgelegt für Standardservos.
gruß hopix
PS mal sehen das ich das mit dem Video morgen erledigt bekomme
@hopix sagen wir es anders mein Programm oder Algo dafür umfasst 800 Lines of Code. Der von MeckPommER umfasst pro Atmega32 etwas weniger aber auch insgesammt 800. Damit würde es einen also wundern wenn es mit weniger als 800 Lines geht.
Aber ich hab mir gerade nochmal deinen Code angesehen und weis jetzt auch wo das Problem ist:
Du steuerst nur ein Bein und kommst auf 10Hz ansteuerung.
Für MeckPommER und mich hat sich ergeben, dass Servos mindestens mit 50Hz angesteuert werden müssen und noch dazu 6 Stück, d.h. für jedes Bein bleiben ~3,3ms für die Berechnung. Außerdem ist es Pflicht bzw. notwendig jeden Servo mit Signalen zu versorgen auch wenn seine Berechnung gerade nicht erfolgt. D.h. solange keine neuen Werte berechnet wurden müssen die alten Werte an den Servo übergeben werden.
Außerdem ist dein Algo nur die Bewegung für ein Bein d.h. die Bewegung aller 6 Beine mit unterschiedlichen Startpositionen fehlt komplett (nein die bewegen sich nicht synchron wenn sie mal gestartet haben, sondern alle individuell).
Mit diesem Algo wirst du auch keine Kurfen laufen können und nicht schräg oder seitwärts. Aber gerade darin liegt die Stärke der IK.
hier ist u.a. die 50Hz Servosignale zu sehen.
Keine bange ich schummel nicht es werden 6 Beine berechnet, und die nicht benötigten ergebnisse ins nirvana geschickt. Leider mußte ich bei den Servoausgängen auch ein wenig tricksen sonst hätte ich ja keine Eingabe mehr gehabt. Aber auch hier sein versichert es handelt sich um mehr als nur die 3 zu sehenden Servos.
wollt ihr euch den kompletten code dazu noch mal ansehen?
Zu euren rund 800 lines, Ich habe ja nicht behauptet das mein hexa damit schon laufen könnte. Wichtig ist aber das die Position der Fußspitze jetzt in globalwerten angegeben werden kann. Die gewünschten Positionen sollte man dem mega8 jetzt per Schnittstelle mitteilen, also übergeordnet Bewegungsablauf programmieren. Aber dazu brauche ich erst einmel einen kompletten Hexabot.
Ach ja eines will ich nicht verschweigen ein kleiner fehler steckt da noch in der inversen kinematik, beim überschreiten einer gewissen Position geht der Fuß ganz nach unten. Den Fehler bin ich gerade noch am suchen, ein geschwindigkeitsproblem wir nach meiner einschätzung dadurch aber nicht entstehen.
Na, das nenne ich doch mal eine Herausforderung, einen Hexapod mit 18 Servos mit einem Mega8 zum Laufen zu bekommen!
Ob das nun geht oder ob du noch was Wichtiges vergessen hast, darüber brauchen wir uns ja nicht groß zu unterhalten, das merkst du ja selber, sollte es so sein
Sicher ist aber, das du neu entwickelst und dabei vielleicht sogar einiges besser machst als wir. I drück you alle Daumen und bin neugierig
Was meiner Meinung nach auch viel Rechenpower frisst ist die Tatsache, das die Beine ja nicht nur einzeln ein anderes Ziel ansteuern müssen, sondern auch ersteinmal deren Ansatzpunkt (oder auch Montagepunkt am Hexapod) im Raum berechnet werden muss.
Mein Ansatz, das Ganze auch mehrere Controller aufzuteilen, war einfach Sicherheitsdenken. Ich wollte nach Möglichkeit nie am Limit des Controllers arbeiten, sondern stets auch noch genug Rechenpower zur Verfügung haben, um weitere Funktionalitäten in die Beine einzubasteln.
Eine dieser Funktionen, für die ein Mega8 dann auf jeden Fall nicht ausreichen dürfte, ist bei meinem Bot die Berechnung, welches Bein denn nun als nächstes zu Bewegen ist. Ich folge da keiner festgelegten Sequenz, sondern lasse die Beincontroller berechnen, wie weit die aufgesetzte Fussspitze eines Beines vom optimalen Standpunkt entfernt ist. Diese Entfernungsangaben werden zum Mastercontroller übermittelt, der dann (auch anhand von nicht realisierbaren Beinkombinationen) ermittelt, welches Bein nun zu setzen ist.
hi meckpommer
zunächst einmal
Danke fürs Daumen drücken.
Das Problem hierbei sehe ich allerdings weniger in der Rechenpower. Derzeit läuft es mit 8 Mhz internem Takt. Da "nur" 18 Servos benötigt werden kann man ja getrost auf 2 Stk von den 20 maximal möglichen verzichten und hierfür die Quarzanschlüsse freilassen. So kommt noch einiges an Rechenpower hinzu.
Ein Mega32 hat davon ja auch nicht mehr.
Das Problem liegt eher in dem begrenzten Programmspeicher. Der ist schon zu ~ 95% voll. Hier reicht es also gerade noch für die Schnittstelle.
Deine Idee deiner Beinberechnung gefällt mir, ebenso das Video.
Mal sehen wie ich das hinbekomme.
Lesezeichen