- LiFePO4 Speicher Test         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 343

Thema: .: Vinculum :. - Hexabot

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    12.04.2008
    Alter
    40
    Beiträge
    557
    Also vereinfacht die Bahn, die ein Punkt(z.B. Schwerpunkt oder Drehpunkt) auf der Basis zwischen Start und Ziel verfolgen soll?

    Dann müsste doch die Distanz nicht als Gerade (Pythagoras -> Gleichschenklige Weiber, her damit!) sondern als Bogen berechnet werden. Für die Berechnung eines Punktes auf einer Kreisbahn wäre das entsprechend Bild hier   Die Bogenlänge geteilt durch den maximal zurücklegbaren Weg pro Schritt würde dann die Anzahl der benötigten Schritte ergeben.

    Sollte ich nur Blödsinn oder unnützes Zeug schreiben wink doch bitte kurz mit dem Zaunpfahl. Will nicht mit unqualifizierten Aussagen nerven
    Alles ist möglich. Unmögliches dauert nur etwas länger!

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von HeXPloreR
    Registriert seit
    08.07.2008
    Ort
    Soltau - Niedersachsen
    Alter
    46
    Beiträge
    1.369
    Ich denke auch der Lösungsanstz ist der Richtige, nur sollte man vermutlich eine Kreisbogenbahn, wenn man Kurven läuft, in viele kleiner Punkte zerteilen... und diese Punkte dann mit Geraden verbinden, damit man die Steigung einfach herausbekommt.
    Man kann natürlich auch den Kreisbogen mit Sinus/Cosinus in verschiedenn (aktueller) Winkeln bearbeiten damit man einzelne Punkte herausbekommt. Dazu muss man aber einen Drehpunkt setzen.

    Das der Roboter nur schräg läuft mit Drehung des Körpers halte ich für ein Gerücht: Auch hier gilt, er macht das was man ihm sagt.

    Wenn er schräg läuft hat man ggf nicht die richtige Bahnberechnung ausgewählt.
    Wenn es verschieden Zielpositionen die aber für den gesamten Roboter (Mittelpunkt, Centrum ...wie auch immer...) gibt, dann sind diese alle nacheinander zu berechenen und anzulaufen.
    Wenn die Strecken unterschiedlich sein können, dann gibt es mehrere Wege nachdem man die Strecke A-Z des Körpers und der Beinkurve kennt:
    1.die Bewegung der Beine anpassen, also kürzer oder länge Schrittweite.
    2 die Bewegung mit vordefinierten fester Schrittweite und am Ende der Strecke den Rest des Weges ermitteln der nicht mehr in einen vollen Schritt passt. Das bedeutet das jedes Bein das letzte zu bewegbare Bein sein kann. Auch sollte man bedenken, das der Körpermittelpunkt nicht unbedingt auch den gleichen Abstand zu allen Fußpunkten haben muss - also nicht unbedingt der wirkliche Zielpunkt sein muss. Man könnte damit also auch noch etwas schieben und die Füße ggf extra nachberechnen wenn einen die Position eines einzelnen Fußes nicht gefällt. Da gilt es dann die erlaubte Toleranz einzustellen wo der Zielpunkt liegen darf, damit man mit den Beinen den Körper ggf letztendlich aufs Ziel schieben kann.

    Ich verstehe Dein Bild mit dem unteren IF - Else nicht recht. Warum ist translatorisch zu rotatorsch getrennt? Wozu ist das gut?

    Das Problem was ich hier sehe ist, das es nichts damit zu tun hat ob ein Betrag der Schritte je translatorisch zu rotatorisch größer als der andere ist?
    Dazu müsstest Du nochmnal was sagen.
    Der Winkel kann auch nicht einfach vorggeben werden, jedenfalls nicht wenn man auch gleichzeitig Koordinaten vorgibt - denn man weiß ja eigentlich garnicht ob der Winkel zu den Koordinaten passt, ob also die Gerade den Zielpunkt schneidet. Man kann nur eines von den beiden vorgeben, wo bei Vorgabe eines Winkel auch noch die Länge (Vektoren) der Strecke angegeben werden sollte, damit die Bewegung dort beendet bzw auch die Schrittzahl berechnet werden kann. Sonst läuft er eben weiter bis "was neues" kommt, dazu muss die maximale Schrittweite por Bein also zwingend vorhanden sein.

    Also man erechnet sich Koordinaten aus Winkel + Länge oder den Winkel + Länge aus Koordinaten.

    Ein Frage stellt sich mir noch: Welchen Schrittmodus benutzt Du als Grundlage 3x3, 4x2, 5x1? Mischung?
    Meine Idee ist vielleicht kommt es zu einem Denkfehler wenn man sich auf eine bestimmte Schrittart einschiesst ala "ein Schritt muss immer genau so lang sein". Ich denke da liegt eher der Knackpunkt des Problems.

    Um nochmal auf die sinnvolle Anzahl der Schritte zurück zu kommen: Die liegt zwischen einer Definition von maximaler Schrittlänge pro Schritt/Schub bis nicht bewegt.
    Lege die maximale Schrittlänge fest, dann kannst du erst berechnen wieviele Schritte mindestens nötig sind.
    Lege die minimale Schrittlänge fest, dann kannst Du berechnen wieviele Schritte maximal nötig sind.
    Wichtig ist hier zu unterscheiden ob eine Kurve oder eine Strecke gelaufen werden soll.
    Und auch ob die Koordinaten (kurze Strecken) mit Körperverschiebung nur mit Schub ohne Schritt zu erreichen sind und eine nachfolgende Korrektur der Fußpunkte gewünscht ist.

    Das sind mal son paar von meine Gedanken dazu. Ich hab die Lösung auch noch nicht so richtig fertig - und solange kommt in meinem eigenen Beitrag auch nichts neues
    Geändert von HeXPloreR (19.09.2013 um 16:29 Uhr)

  3. #3
    Moderator Robotik Einstein Avatar von HannoHupmann
    Registriert seit
    19.11.2005
    Ort
    München
    Alter
    42
    Beiträge
    4.534
    Blog-Einträge
    1
    Es gibt grundsätzlich zwei Dinge zu unterscheiden:

    1) Die Bewegung der Fußspitze über den Boden
    2) Die Bewegung des Hexas durch den Raum.

    2 folgt aus 1 bzw. 2 ist eine aneinanderreihung von Schritten (1).

    Zu 1) Es gibt hier einmal eine translatorische Bewegung, dabei ändert sich die Ausrichtung des Hexas nicht. Soll heißen, er zeigt z.B. immer nach vorn und läuft dann eben Schräg (der Ego-Shooter-Spieler spricht von Strafen). Soll sich die "Blickrichtung" ändern, dann braucht es eine rotatorische Bewegung. Beide sind jedoch bei einem 3DOF Hexa unabhängig voneinander. D.h. er kann sich um jeden beliebigen Punkd drehen drehen oder eben schräg in alle Richtungen laufen.
    Natürlich könnte man auch beide Bewegungen überlagern, dann kommt dabei raus, dass der Hexa z.B. 2m nach vorn läuft und sich dabei einmal um die eigene Achse dreht (Drehwinkel 360°, vereinfach um den Mittelpunkt des Hexas) d.h. zwischendurch würde er rückwärts laufen. Theoretisch möglich, aber schwer zu implementieren. Weiter müssen hier die ganzen Berechnungen zur Schrittlänge und ob sich die Fusspitze nun auf einem Bogen oder einer Geraden bewegt berechnet werden.

    zu 2) Ausgehend von einem Start Punkt auf dem man ein Koordinatensystem legt (x und y, wie in meiner Zeichnung) und einem Zielpunkt der ebenfalls ein Koordinatensystem bekommt und einen Winkel. Warum? Nun bei der Berechnung von Industrierobotern hat man ein Basiskoordinatensystem (dort ist der Roboter befestigt) und ein Tool-Koordinatensystem (dort ist z.B. der Greifer). Es gibt eine Ist Position des Greifers und eine Soll Position des Greifes, die mit 6 Punkten angegeben wird, x,y,z und alpha, beta, gamma, da Greifer in allen Lagen orientiert werden können. Die Steuerung rechnet nun aus, wie aus der Ist, die Soll Position erreicht werden kann...DH-Matrix und so.
    Zum Glück habe ich keinen Sechs-Achs-Roboter sondern einen deutlich einfacheren: Z-Achse gibt es nicht nur nur x und y (die translatorischen Bewegungen). Bei der Rotation sieht es noch einfacher aus, hier gibt es kein alpha und beta (solange der Hexa weiter parallel zum Boden ist) sondern nur um die Z-Achse = Gamma. Daraus ergibt sich eine Verschiebung in x und y Richtung plus eine Drehung. Vereinfacht man das oben gezeigte Beispiel indem man den Drehwinkel weg lässt, dann wird der Roboter einfach schräg durch den Raum laufen. Mit dem Drehwinkel 45° muss er sich auch noch drehen dabei. Allerdings wird er keine schöne Kurve laufen, wie man das bei einem Auto erwartet, sondern eben schräg zur Seite und dabei eine überlagerte Drehung ausführen. Diese Bahn zerlegt man dann in viele kleine Teilstücke und lässt sie den Roboter ablaufen.

    Hier gleich die Antwort auf die Frage von HexPlorer: Gibt man z.B. vor: "Bleib auf der Stelle stehen aber dreh dich um 180°" würde ich keinen einzigen Schritt nach vorn oder hinten brauchen, aber eben x-Schritte für die Drehung. Gleiches gilt für: "Lauf 10 Schritte gerade nach vorn, aber ohne Drehung" wieder hätten wir einmal 10 Schritte und einmal 0 Schritte. Die Abfrage IF/ELSE soll einfach die Anzahl der Schritte auswählen, die größer ist und dann ausführen. Im ersten Fall würden sich dx und dy = 0 und damit keinen Beitrag zur Bewegung der Fusspitze haben. Nur Winkel = 180° wird sich auswirken.

    Zu den Schritten an sich:
    Grundsätzlich bevorzuge ich ein 5x1, da es deutlich stabiler ist als 3x3 wenn auch langsamer. Vielleicht implementiere ich auch, dass bei geraden Strecken ohne Rotation ein 3x3 erlaubt ist. Für den Anfang ist 5x1 einfacher.

    Richtig, maximale Schrittlänge wird durch die Mechanik bestimmt. Muss ich mal noch ausrechnen, welche Länge hier möglich ist bzw. welche Länge sinnvoll. Sollte die Strecke zwischen Ist und Ziel kleiner als 1 Schritt sein, dann kommt meine +1 in der Berechnung zum tragen (übrigens auch, wenn der Rest zum Ziel nicht ganz passt, dann wird eben nochmal ein Schritt mehr gemacht). Damit erreicht der Hexa zwar nicht exakt die Position, aber alle Beine bewegen sich und stehen danach wieder stabil.


    Bisher habe ich mich nicht daran gewagt eine richtige Bahnkurve zu berechnen, warum:
    Exkurs zum Thema Bahnkurven:
    Nehmen wir als Beispiel ein Auto fährt um eine 90° Kurve. Zu Beginn steht das Auto mit der Ausrichtung Norden, am Ende steht das Auto mit der Ausrichtung Osten. Durch den Winkel der Vorderräder fährt es eine Kurve, solange der Radius dieser groß genug ist. Bei zu kleinen Radien, funktioniert es gar nicht, bei sehr großen Kurvenradien wird es ein sehr kleiner Lenkwinkel. Soweit dürfte das jedem klar sein. Bezeichnen wir diese Kurve als Bahnkurve und versuchen wir sie in der Mathematik abzubilden, wird es ein wenig komplex, denn wir müssen wissen wie groß der Radius ist und wo der exakte Mittelpunkt des Kreisbogens liegt. Für Teilstücke auf einem Kreis - wie bei einer 90° Kurve - ist die Bahnkurve sehr leicht mit einem Bogensegment (siehe Formel von Arkon) zu berechnen. Bei meinem letzten Hexa konnte ich die Koordinaten Kreismittelpunkts vorgeben und wieviel Grad das Kreissegment hat, eine reine rotatorische Bewegung.

    Dieses Beispiel ist trivial, denn es hat nur einen Kreis den es zu berechnen gilt. Will man aber z.B. die Strecke von mir bis zu euch als Bahnkurve darstellen (vereinfacht nehmen wir eine Strasse), dann wird es eine Unmenge an Kreisen mit unterschiedlichen Radien und Mittelpunkten geben die aneinandergereiht werden, bzw. in manchen Fällen sogar eher etwas wie ein Polynom sein. Diese Bahnkurve mathematisch zu berechnen und dann in Teilstücken als einzelne Schritte abzulaufen dürfte noch mal um einiges mehr Aufwand bedeuten.

    Zurück zum Auto und der 90° Kurve und wie mein Hexa diese Strecke bewältigen würde:
    - Der Hexa würde einfach Schräg zum Zielpunkt laufen und sich dort um 90° drehen bzw. bei Überlagerung der beiden Bewegungen: eben schräg laufen und sich dabei drehen. Solange kein Hauseck im Weg ist kein Problem!
    Praktisch: Egal wie klein der Radius des Kreises ist, der Hexa schafft es, da er auch auf der Stelle drehen kann.
    Praktisch 2: Er wählt den kürzesten Weg um das Ziel zu erreichen.
    Unpraktisch: Er bleibt am Hauseck hängen.

    - - - Aktualisiert - - -

    Und weils so schön ist, hier meine persönliche Aufgabenstellung.

    Folgende Bahn soll im Hexabot implementiert werden:
    Klicke auf die Grafik für eine größere Ansicht

Name:	IMG_0790.jpg
Hits:	19
Größe:	34,7 KB
ID:	26432

    Erlärung: Der Roboter startet bei Pos 1 mit Ausrichtung nach rechts. Läuft einer Kreisbahn bis zu Pos 4. Verändert dann die Ausrichtung zum Mittelpunkt Pos 5. Diese Bewegung von 4 zu 5 ist eine überlagerte translatorische und rotatorische Bewegung. Danach bewegt sich der Roboter auf dem Kreisbogen mit Ausrichtung auf die Mitte. Ab Pos 8 schräg Richtung Pos 10. Alternativ kann auch hier wieder eine überlagerte Bewegung implementiert werden, dann is die Ausrichtung des Roboters am Ende (Pos 10) parallel zur Geraden.

    Bisher kann mein Phoenix² nur entweder translatorisch oder rotatorisch:


    Siehe 1:02 bis zur Flasche laufen, dann um die Flasche drehen mit Ausrichtung auf die Flasche.
    Ab 1:47 translatorische Bewegungen gerade aus, schräg, rückwärts.

    Vereinfacht könnten man von Pos 8 zu Pos 10 auch mit 1 Schritt trans, 1 Schritt rota, erreichen.

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von HeXPloreR
    Registriert seit
    08.07.2008
    Ort
    Soltau - Niedersachsen
    Alter
    46
    Beiträge
    1.369
    Also Hanno,

    ich denke wenn man eine Gerade oder einen Bahnkurve läuft, dann zählt alleine der nächste Punkt der von den Beinen angefahren werden soll.

    Eigentlich ist es sogar egal ob der Bot eine Gerade läuft oder eine Kurve, wenn man die Kurve in kleine Strecken unterteilt "merkt" der das nicht mal wirklich.
    Die Ausrichtung wohin der Roboter läuft hängt davon ab, ob sich das Koordinatensystem gedreht hat oder nicht. Das dreht sich also nur, um im Beispiel von mir zu bleiben, wenn man ihm einen Winkel vorgibt der der nächsten Steigung des nächsten Geradensegments entspricht. Jetzt dreht man das Koordinatensystem des Roboters dem nächsten Winkel entsprechend. Wenn man die Winkel Änderung danach wegschmeisst hat man keinen Bezug mehr zum Urschprung, deswegen muss der mindestens mit der bisherigen Winkeländerung aufgerechnet werden. Das würde die Bahnkurve der Körpermittelpunktes ergeben.
    Daneben muss aber für jedes Bein auch eine Berechnung durchgeführt werden die die Beine zur Körperbewegung mitnimmt- also in die IK gegegben wird - da wäre dann auch der Abstand des Beines von Körpermittelpunkt wichtig. Jetzt stellt man entweder jedem Bein eine eigene Kurve für die Fußpunkte bereit, oder lässt je eine Beinseite auf nur einer Kurve laufen. Die beiden Kurven teilt man auch in die Anzahl der Segmente der Körperkurve.... wobei ich grade beim schreiben merke, die braucht man dann wohl auch nicht mehr... - also es ergeben sich mindestens zwei Kurven eine mit kurzen, eine mit langen Segmenten, die Segmentschnittpunkte werden mit Geraden verbunden und diese langen Geraden dürfen nun nicht länger sein als die maximale Schrittlänge eines Beines.
    Wenn man jetzt den Winkel zum Zielpunkt berechnet hat, kann kann man darüber auch die Geradenteilstücke berechen entweder mit Drehung oder ohne, wichtig ist nur das die Beinberechnung davon weiß ob ein Drehwinkel vorliegt oder nicht - also ob schräg gegangen werden soll oder pro Geradensegment um den anteiligen Winkel mitgedreht wird.

    Fazit: Zum Laufen würde ich zwei Geradensegmente aus n-Segmenten einführen, auf denen sich die Fußpunkte befinden, eine Radius wird bestimmt je nachdem wie stark die Kurve sein soll <= 90°; der Abstand des Fußpunktes zum Körpermittelpunkt wird bestimmt um den Abstand der Fußkurve vom Körpermittelpunkt und damit die Länge der Geraden auf der inneren sowie Äusseren "Kurve" zu erhalte.

    Zeichen mal eine Kreis auf Deinen Koordiantensystem oben, mit einem Schnittpunkt im Startpunkt und einem im Zielpunkt - dann zeteilst Du das kürzer Kreissegment gleichmässig mit Geraden. Der Winkel alpha wird automatisch pro Gerade anteilig mit geteilt.
    Geändert von HeXPloreR (19.09.2013 um 19:50 Uhr)

  5. #5
    Moderator Robotik Einstein Avatar von HannoHupmann
    Registriert seit
    19.11.2005
    Ort
    München
    Alter
    42
    Beiträge
    4.534
    Blog-Einträge
    1
    Eigentlich ist es sogar egal ob der Bot eine Gerade läuft oder eine Kurve, wenn man die Kurve in kleine Strecken unterteilt "merkt" der das nicht mal wirklich.
    Schon richtig, aber irgendjemand muss ihm ja sagen, wohin der nächste kleine Schritt gehen muss. Also kommt wieder die Bahnkurve ins Spiel.

    Worauf ich im Prinzip hinaus will lässt sich ohne Probleme als Mensch machen. Geh einfach zur Türe des Zimmers und dreh dich dabei einmal um 360°, danach läufst du mit Blick zur Wand zurück zum PC. Jeder bekommt das hin, sich durch den Raum zu bewegen und dabei um seine Achse zu drehen oder quer zu laufen mit dem Gesicht in eine bestimmte Richtung. Genau das Gleiche geht mit einem Hexa auch, wenn die Mathematik dahinter gut genug ist.

    Jetzt stellt man entweder jedem Bein eine eigene Kurve für die Fußpunkte bereit...
    Darauf läuft es hinaus und die Mathematik dafür gilt es zu entwickeln.
    ...oder lässt je eine Beinseite auf nur einer Kurve laufen
    Wenn ich dich richtig verstehe, willst du in etwa das implementieren was auch ein Panzer macht. Er bewegt eine Seite schneller als die Andere (nur eben Ketten statt geraden Stückchen) bzw. bei dir länger und kürzer. Finde ich persönlich nicht besondern effizent, wenn man Beine hat. Bei meinem Phoenix² hatte ich bereit für jeden Fuss eine eigene Kurve, alles andere reduziert die Möglichkeiten doch schon sehr.

    Im Prinzip ist meine Steuerungen für den Hexa in mehreren Ebenen angelegt:

    1a Ebene: Inverse Kinematik: Es werden aus der Vorgabe die Winkel der Servos alpha beta gamma berechnet
    2 Ebene: Inverse Kinematik: Position der Fussspitze im Raum bestimmt durch f(x,y,h)= alpha, beta gamma übergeben an die Ebene 1.
    2 Ebene: Inverse Kinematik: Lage des Körpers, kippen um die Längs und die Querachse f(Q, L)=dh und Übergabe der daraus resultierenden Höhenänderung
    3a Ebene: Bahnplanung Fusspitze: Schritt: Vorgabe der Kurve auf der die Fussspitze entlang läuft f(dx, dy, ddh) mit Übergabe an Ebene 2
    3b Ebene: Bahnplanung Fusspitze: Rückführung der Fussspitze auf die Anfangsposition f(dx, dy, ddH)
    4 Ebene: Bahnplanung Körper: Bewegung im Raum von Start zu Zielkoordinaten mit entsprechender Ausrichtung f(ddx, ddy, Teta, h)
    5 Ebene: Bewegung im Raum: Erstellen von Zielsequenzen um finale Position zu erreichen.

    Ebene 1 und 2 sind abgeschlossen, jetzt will ich 3 und dann 4 implementieren. Die höhere Ebenen geben die Vorgaben immer weiter an die unteren Ebenen. Später ist dann noch geplant, dass ein Gyro die Lage überwacht und die Werte an die Ebene 2 übergibt.
    Ebene 5 wird später die Abstandssensoren auswerten und anhand von erkannten Hindernissen einen Weg ermitteln, der um diese Hindernisse herum führt. Diese Ziele werden an Ebene 4 übergeben, die daraus ableitet, wie sich der Körper bewegen muss, um die Ziele zu erreichen. In der Ebene 3 werden daraus die Schritte generiert für jedes Bein und an Ebene 2 übergeben. Diese muss dann aus der Lage des Körpers und den Schrittvorgaben die Position der Fußspitze berechnen, die es zu erreichen gilt. Diese Werte werden an die Ebene 1 übergeben, die daraus dann tatsächliche Servowinkel generiert.

    Natürlich muss man das nicht so kompliziert und komplex aufbauen, man kann sich das Leben einfacher machen in dem man rotation und Bewegen unabhängig anlegt. Dann dreht sich der Roboter erst in die Richtung und läuft dann immer gerade aus, dreht sich wieder, läuft gerade aus und so weiter. So braucht man nur drehen und gerade aus laufen implementieren. Ebene 5 und 6 können mit einer Fernsteuerung vom Menschen übernommen werden.

    In Ebene 6 stell ich mir vor, dass eine Zielpunkt auf einer Karte angegeben wird und dieser erreicht werden soll. Dazu überprüft der Hexa die Sensoren und läuft auf direktem Weg zum Zielpunkt, stößt er dabei auf ein Hindernis versucht er einen Weg außen rum zu finden. Optimaler weise erstellt er dabei noch eine Karte, auf der das Hindernis eingetragen wird. Ist nach umgehen des Hindernisses der Zielpunkt erreicht: Perfekt. Falls nicht versuch einen anderen Weg zu finden. In dieser oder noch höheren Ebenen kann der Roboter dann auch erkennen, ob z.B. ein Durchgang breit genug ist um ihn quer zu durchlaufen oder er sich erst auf längs drehen muss.

    usw.


    PS:
    11.412.211.223.344.111 Ebene: Weltherrschaft!
    Geändert von HannoHupmann (20.09.2013 um 13:08 Uhr)

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.11.2004
    Beiträge
    451
    Die Lösung ist eigentlich ganz einfach, 12Divisionen und 5 Vergleiche.

    Dein Roboter hat doch bestimmt eine Maximalgeschwindigkeit pro berechnungsschritt vorgegeben und bewegungsrichtung vorgegeben.
    Also z.B. X,Y,Z maximal 5mm/Berechnung, alpha,beta,gamma je 5°/Berechnung.
    Jetzt Teilst du deinen Zurückzulegenden Weg durch das Maximum der jeweiligen Bewegungsrichtung (temporär, der alte Wert wird weiterhin benötigt). Größter Teiler.
    Danach bestimmst du das Maximum der Ergebnisse und Teilst deine Bewegungsrichtungen durch den zuvor bestimmten Teiler.

    --> Dein delta, das du zurücklegen musst um eine gleichmäßige Bewegung zwischen A und B zu erreichen.
    Geändert von robin (20.09.2013 um 10:01 Uhr)

  7. #7
    Moderator Robotik Einstein Avatar von HannoHupmann
    Registriert seit
    19.11.2005
    Ort
    München
    Alter
    42
    Beiträge
    4.534
    Blog-Einträge
    1
    @robin, so einfach ist es leider nicht oder ich versteh deine knappe Erklärung einfach nicht.

    Die Bewegung ist nicht von der Geschwindigkeit abhängig, die hat überhaupt nichts damit zu tun. Es geht um eine Strecke und nicht wie schnell die Strecke zurückgelegt wird.
    Es gibt natürliche eine maximale Strecke die die Fussspitze zurück legen kann. Diese Strecke ist davon abhängig wie weit die Spitze vom Drehpunkt in der Hüfte entfernt ist und damit wie hoch der Körper des Hexas über den Boden gehalten werden soll. D.h. hier hat man es mit einer variablen Strecke zu tun.

    Auch deine Erklärung beschreibt nicht, wie die Bewegung der Fussspitze als Ableitung der Gesamtbewegung des Roboters aussehen muss. Einfaches aufsummieren von dx, dy Schritten funktioniert leider nicht, solange nicht irgendwo vorgegeben ist wie dx und dy aussehen muss.

    Zurück zum Problem:
    Im Moment ist die Aufgabenstellung 4a und 4b zu implementieren. D.h. wie müssen die 6 individuellen Bahnkurven der Füße aussehen um alle Bewegungen des Hexas abzudecken. Also laufen in alle Richtungen + dabei drehen um jeden beliebigen Winkel oder um es weniger technisch auszudrücken: wie müssen die Bahnkurven aussehen um Walzer tanzen zu können!

  8. #8
    Benutzer Stammmitglied Avatar von Ryoken
    Registriert seit
    18.12.2008
    Ort
    bw
    Beiträge
    84
    Zitat Zitat von HannoHupmann Beitrag anzeigen
    Hier gleich die Antwort auf die Frage von HexPlorer: Gibt man z.B. vor: "Bleib auf der Stelle stehen aber dreh dich um 180°" würde ich keinen einzigen Schritt nach vorn oder hinten brauchen, aber eben x-Schritte für die Drehung. Gleiches gilt für: "Lauf 10 Schritte gerade nach vorn, aber ohne Drehung" wieder hätten wir einmal 10 Schritte und einmal 0 Schritte. Die Abfrage IF/ELSE soll einfach die Anzahl der Schritte auswählen, die größer ist und dann ausführen. Im ersten Fall würden sich dx und dy = 0 und damit keinen Beitrag zur Bewegung der Fusspitze haben. Nur Winkel = 180° wird sich auswirken.

    Zu den Schritten an sich:
    Grundsätzlich bevorzuge ich ein 5x1, da es deutlich stabiler ist als 3x3 wenn auch langsamer. Vielleicht implementiere ich auch, dass bei geraden Strecken ohne Rotation ein 3x3 erlaubt ist. Für den Anfang ist 5x1 einfacher.
    Also wenn schon jeweils ein Bewegungsschema für reine Geradeaus- bzw. Drehbewegung vorhanden ist, würde ich für eine geschmeidige Fortbewegung eine einfache Überlagerung versuchen:
    Für die Drehung bewegen sich vermutlich die einen Beine vorwärts und die anderen Rückwärts - es gibt also quasi eine Differenz in den Bewegungsvorgaben für die Beine. Da zur Fortbewegung die Vorwärtsbewegung evtl. schon ausgeschöpft ist, kann man diese Differenz bei Überlagerung also nur durch Verlangsamung der "Kurveninneren" Beine erreichen. Der erzielbare Betrag verringert (halbiert?) sich dadurch also.
    Wenn man jetzt eine Bahnplanung hat, sollten die auszuführenden translatorischen und rotatorischen Operationen bekannt sein. Dann die Bewegungsvorgaben einzeln berechnen, die für die Rotation noch durch Faktor 2 (?; s.o.) oder etwas höher, für glatteren Ablauf, Teilen, zur Translation addieren und das ganze ausführen lassen.

    Zitat Zitat von HannoHupmann Beitrag anzeigen
    Aber kommen wir zurück zur Aufgabenstellung oder besser gesagt meinem aktuellen Problem:
    Nochmal der Selbstversuch: zur Türe laufen und sich dabei in der Vorwärtsbewegung um die eigene Achse drehen. Diese Bewegung enthält, dass man ein paar Schritte rückwärts läuft, dann seitwärts dann wieder gerade aus. Soweit kann das jeder Mensch durchführen, da er seine Füße auf die entsprechenen Punkte am Boden stellt die Beine dazu passend bewegt.

    Ein Hexabot kann diese Bewegung genauso ausführen, allerdings muss die Bewegung vorher berechnet werden. D.h. diese spezielle Bewegung gliedert sich in eine Bewegung Richtung Türe = translatorisch und eine Bewegung um die eigene Mittelachse = rotatorisch. Beide Bewegungen werden gleichzeitig ausgeführt und überlagern sich damit.

    Beschreibt die Fußspitze von der minimal Position zur maximal Position eine Gerade auf dem Boden ist diese Bewegung nicht möglich, dann wäre es nur eine gerade Bewegung in eine Richtung. Keine Frage eine Kreis oder Kurvenbewegung lässt und muss hier in viele kleine Geradenstückchen unterteilt werden. Die Bewegung ist also eine abfolge von kleinen Geradenstückchen. Die Frage ist also, A: wie müssen die einzelnen Teilstücken der Bewegung von min zu max aussehen, damit sich der Körper nach vorn bewegt und gleichzeitig dreht und B: wie kann diese Bewegung rechnerisch dargestellt werden?

    Vorüberlegung:
    Zeichnet man sich beide Bewegungen auf, sieht man eine Gerade von min zu max (für die Bewegung nach vorn) und eine Tangente auf dem Kreisbogen um den Roboter zu drehen. Summiert man beide Bewegungen auf, erhält man eine Bewegung dazwischen die der gewünschten entsprechen sollte. Nur nach jeder kleinsten Teilbewegung des Roboters ändert sich seine Ausrichtung
    Hier scheinen sich für mich auch wieder (übergeordnete) Bahnplanung und "konkrete" Bewegungsplanung des Bots (Schrittfolge) zu vermischen. Die Berechnung über Kreissegmente dürfte außerdem recht aufwendig werden, oder?

    Zitat Zitat von HannoHupmann Beitrag anzeigen
    Ansatz 3: Bisher und bei Phoenix² implementiert
    Zerlegen der Bewegung in zwei Teilbewegungen: Drehen um den Mittelpunkt und dann gerade aus laufen. Sehr trivial aber möglich, insbesondere sieht man an der Rechnung oben, dass ich damals schon "Drehen um einen beliebigen Punkt im Raum" implementiert habe. D.h. es muss gar nicht der Mittelpunkt sein um den sich der Roboter dreht, die daraus entstehenden Bahnkurven sind in meiner Berechnung dargestellt und wie man sieht auch nur Geraden, die in der Summe dann eine Kreisbewegung ergeben.

    Meine Problemstellung ist also weniger, wie es übergeordnet aussieht, sondern mehr die reine, banale Mathematik um die Theorie der Bewegung in die Praxis der Bahnkurve einer Fußspitze umzusetzen. Es wird bei diesen komplexen Bewegungen immer auf eine individuelle Bahnkurve für jedes Bein hinaus laufen (was übrigens viel einfacher ist als man denkt), ist bei uns ja nicht anders wenn wir die oben beschriebene Bewegung ausführen.
    Das dürfte die einfachste und flexibelste Umsetzung sein.
    Ähnelt wohl auch meinem oben beschriebenen Ansatz. Nur würd ichs nach der getrennten Berechnung, dann aber überlagern.

    Das Türproblem ist allerdings auch schon recht speziell ist finde ich. Dadurch das zu der geraden Hauptrichtung der Bewegung trotzdem eine Drehung kommen soll hast Du ja unterwegs zwischen "straightforward" und "90° seitlich" quasi beliebige "Strafing-Winkel" zu bewältigen, um in der Hauptrichtung auch noch vorwärts zu kommen. Die müssten wahrscheinlich vorher erstmal "eintrainiert" werden.
    A mistake is evidence that someone tried to do something.
    It`s not impossible - it just costs more

  9. #9
    Moderator Robotik Einstein Avatar von HannoHupmann
    Registriert seit
    19.11.2005
    Ort
    München
    Alter
    42
    Beiträge
    4.534
    Blog-Einträge
    1
    Für die Drehung bewegen sich vermutlich die einen Beine vorwärts und die anderen Rückwärts

    Gilt nur für Drehungen bei denen der Drehpunkt innerhalb des Roboters liegt. Für Drehpunkt außerhalb bewegen sich die Beine in die gleiche Richtung. Der Radius bzw. die Länge der Bogensehne ändert sich. Das hatte ich schon bei meinem Phoenix² implementiert. Lässt sich allerdings sehr leicht errechnen, wenn man für die Drehung die Vorgaben v,w (die x und y Koordinaten des Drehpunkts) und den Winkel teta angibt um wie viel Grad der Roboter sich um den Punkt drehen soll. Bei v,w = 0, gilt was du sagst, dann bewegt sich eine Seite nach vorn und die Andere zurück. Bei v = 20 und w = 0, wäre es eben eine Bewegung auf dem Kreisradius. Für jedes Bein wird dann ein eigenes Bogensegment berechnet mit der dazugehörigen Tangente und einer spezifische Länge (berücksichtigen des Abstands vom Drehpunkt).

    Mittlerweile habe ich die Aufgabenstellung sehr weit lösen können. Die Rotatorische Bewegung wird wie oben berechnet und durch die Translatorische überlagert. Daraus wird die Schrittlänge und die Bahnkurve berechnet für jedes Bein berechnet. Am Ende der Bahnkurve erfolgt die Rückführung zur Startposition, mit einer kleinen Trajektorie damit es sanfter aussieht. Wenn sich alle Beine einmal über die Schrittlänge bewegt haben ist ein Voll_Schritt fertig. Aus Teta und dem maximal möglichen Winkel der pro VollSchritt gedreht werden kann ergibt sich die Anzahl der Voll-Schritte für drehen und bei translation nehme ich einfach x²+y² = Distanz² und Teile die Distanz durch die kleinste Schrittlänge.

    Weitere Features die bereits implementiert sind: Ich kann drei Geschwindigkeiten wählen ob ich nun 3:3, 4:2, oder 5:1 bewegen möchte (Anzahl der Beine am Boden : Beine in der Luft) die Berechnung ermittelt dann automatisch die korrekten Punkte auf der Bahnkurve und natürlich wie schnell sich die Motoren generell drehen sollen. Natürlich auch kippen und neigen wird berücksichtigt.
    Das lässt sich alles mit genügend Mathematik erschlagen und aktuell bin ich dabei die Formeln im Code darzustellen und dann wird es vermutlich ziemlich viel debugging geben.

    Ob diese Berechnung schon für mein Tür-Problem reicht kann ich schwer sagen, im Prinzip ja, aber vielleicht muss ich auch noch eine übergeordnete Ebene programmieren.

  10. #10
    Moderator Robotik Einstein Avatar von HannoHupmann
    Registriert seit
    19.11.2005
    Ort
    München
    Alter
    42
    Beiträge
    4.534
    Blog-Einträge
    1
    So der Code ist geschrieben, aber funktioniert natürlich noch nicht, gestern habe ich es nur noch geschafft die Translation zu debuggen.

    Anderes Thema: Servos
    Leider ist ein weiterer Servo (BMS-705MG) ausgefallen und ich vermute einer steht kurz davor, aber der Reihe nach.
    1) Servo lässt sich gar nicht mehr ansteuern, wenn er manuell bewegt wird, geht er sehr schwergängig.
    2) Servo wird noch angesteuert aber dreht sich auch schon deutlich schwerer als die übrigen.

    Der letzte Servo (BMS660 DMG + HS 52) der ausgefallen ist hatte deutliche Brandspuren auf der Steuerplatine. Motor und Getriebe haben noch wunderbar funktioniert.
    Leider habe ich noch keine Ahnung was diesen "Tod" verursacht, denn noch bewegen sich die Beine nur in der Luft, d.h. ohne Belastung.
    Kann es einfach an der Chinaproduktion liegen?
    EDIT: Gerade bei Hobbykin.com gelesen: "Der gute erste Eindruck (Getriebespiel, Rueckstellgenauigkeit usw.) steht einer sehr geringen Lebensdauer gegenber. Die Motorbuersten sind stark unterdimensioniert und brennen schnell ab, was zum Ausfall des Servos führt. ... Betroffen sind auch BMS 706, 760, 761 mit identischem Motor !!"Frage ist nun, kann man das irgendwie verbessern/optimieren?


    Dummerweise ist meine ganze Konstruktion auf diese beiden Abmessungen abgestimmt, so dass ich die Servos nicht einfach mit einer anderen Marke austauschen kann.

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. CFK Hexabot
    Von MichaF im Forum Vorstellungen+Bilder von fertigen Projekten/Bots
    Antworten: 14
    Letzter Beitrag: 19.08.2010, 22:03
  2. atmega und Vinculum
    Von elcomportal im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 0
    Letzter Beitrag: 27.05.2008, 22:47
  3. hexabot
    Von patrickgera im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 11
    Letzter Beitrag: 29.04.2008, 22:09
  4. LVProg - Linux Vinculum (USB Hostcontroller) Programmer
    Von Surveyor im Forum Open Source Software Projekte
    Antworten: 0
    Letzter Beitrag: 01.11.2007, 03:08
  5. Hexabot
    Von Derboss im Forum Vorstellung+Bilder+Ideen zu geplanten eigenen Projekten/Bots
    Antworten: 36
    Letzter Beitrag: 22.09.2007, 11:32

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress