- Labornetzteil AliExpress         
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
    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.

  2. #2
    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)

  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
    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)

  4. #4
    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)

  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
    @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!

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.11.2004
    Beiträge
    451
    Warum willst du mit 6 verschiedenen Bahnkurven rechnen? Selbst für Geländegänge ist nur eine Manipulation von Z der einzelnen Beine nötig (in der Regel über Endschalter am Fuß gelöst).

    In deiner Obersten Berechnungsebene (Ebene 4+) hast du ein starres Koordinaten System mit fester Ausrichtung im Raum, im prinzip eine Karte. Hier drauf bewegt sich dein Roboter als Vektor (Punkt mit Richtung/-en).
    Den Sinn von ebene 3 versteh ich nicht, denn deine IK muss nur 2 Dinge kennen, die aktuelle Position und delta Werte für jede Richtung/Drehung um daraus die neuen Servowinkel zu errechnen.

    So würde ich das machen:
    5+ Ebene: Map erstellen, Kolisionserkennung, Autonomes Laufen im Raum über X verschiedene Punkte
    4 Ebene: Bahnplanung Körper: Bewegung im Raum von Start zu Zielkoordinaten einer größeren Teilstecke P1 zu P2, danach P2 zu P3....
    3 Ebene: Teilschritte aus Bahn von Ebene 4 Erzeugen in abhängigkeit von maximal geschwindigkeit.
    2a Ebene: Inverse Kinematik: Position der Fussspitze im Raum bestimmt durch f(x,y,h)= alpha, beta gamma übergeben an die Ebene 1.

    2b 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
    1 Ebene: Servosignale Generieren

    Machen wir mal ein kleines Beispiel:
    Dein Roboter befindet sich im Koordinatensystem an Punkt P1=(0,0,0,0°) und soll über P2(10cm,10cm,0,60°) nach P3(20cm,10cm,0,60°) laufen, ob das ganze jetzt als Kurve oder Gerade ist, spielt erstmal keine Rolle. Das ist jetzt Ebene 5+ und gibt einen Weg vor, der abgearbeitet werden soll ähnlich einem GCode.

    Ebene4 bearbeitet jetzt nur eine Zeile des "GCodes" gehe von P1 nach P2. Alle weiten Punkte sind für Ebene4 ersteinmal uninteressant.

    Ebene3 arbeitet jetzt immer nur Teilstücke des Weges aus Ebene4 ab (man kann wohl Ebene 3 und 4 zu einer zusammenfassen). Die Größer der Teilstücke hängt von der Geschwindigkeit ab, mit der z.B. die Strecke zurückgelegt werden soll (schleichen, Trap, galopp) oder die als Maximum definiert ist (durch geschwindigkeit der Servos und Mechanik). Die Geschwindigkeitsangabe besteht aus einer Strecke pro berechnung und einem Winkel pro berechnung (als beispiel mal 10ms pro Berechnung). Sagen wir 5mm/Berechnung und 1°/Berechnung. Ausgehend von einer geraden zwischen P1 und P2 bedeutet das einen Abstand von ~141mm /5 = 28 Berechnungsschritte. Für den Winkel werden aber 60 benötigt. Hier kann man um einen gleichmäßigen gang zu ermöglichen und sich nicht 32 Berechnungen lang am ende zu drehen, die Geschwindigkeit anpassen. Also 141mm/60=2,35mm/Berechnung. Das wäre dann der Teilschritt der Bahnkurve und wird als deltaX,deltaY,...deltaalpha an die IK übergeben.

    Ebene2: Inverse Kinematik und Kontrolle ob Bein zurückgesetzt werden muss.

    Ebene1: Winkel in Zeit umrechnen und PPM-Signal erzeugen.

    Das ganze lässt sich natürlich noch verfeinern und z.B. Beschleunigungsrampen einbauen. Ebene 2 könnte man mit Sicherheit auch noch mehrfach unterteilen z.B. mit Schwerpunktberechnung etc.

    So würde ich das auf jedenfall machen, hoffe das ist jetzt etwas verständlicher, wie ich das gemeint habe.

  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
    Im Prinzip reden wir vom selben, bis auf die Tatsache mit der Geschwindigkeit. Eine Wegstrecke wird nun mal nicht in Geschwindigkeit gemessen sondern in Länge und auch ein Winkel lässt sich sehr gut in eine Länge umrechnen. Es geht auch nicht darum ob der Hexa schnell oder langsam den Weg zurück legt, zumal die Servos alle mit gleicher Geschwindigkeit laufen müssen d.h. ich kann keinen schneller oder langsamer laufen lasse. Grundsätzlich kann ich für alle Servos die Geschwindigkeit rauf setzen, dann wird er schneller in allen Servos oder eben langsamer für alle Servos.
    Ein weiterer Punkt ist, dass man den Servos nur Signale geben kann, aber keine Rückmeldung bekommt wo sie sich tatsächlich befinden. Abgesehen davon ist es das Gleiche.

    an Punkt P1=(0,0,0,0°) und soll über P2(10cm,10cm,0,60°) nach P3(20cm,10cm,0,60°) laufen, ob das ganze jetzt als Kurve oder Gerade ist, spielt erstmal keine Rolle.
    Leider geht es genau darum!

    Die Schwierigkeit liegt nicht in der übergeordneten Theorie, sondern z.B. darin wie die Mathematik aussehen muss um den Roboter z.B. zu drehen. Nun ist drehen um den Mittelpunkt noch recht einfach, aber drehen um einen beliebigen Punkt braucht eben 6 unterschiedliche Bahnkurven. Bei reinen bewegungen schräg oder gerade ist es deutlich einfacher. Hier mal die Berechung von meinem Phoenix² Projekt, die hatte noch eine feste Vorgabe für die Höhe h!
    Klicke auf die Grafik für eine größere Ansicht

Name:	Berechnung_02.jpg
Hits:	28
Größe:	92,7 KB
ID:	26438Klicke auf die Grafik für eine größere Ansicht

Name:	Berechnung_03.jpg
Hits:	18
Größe:	71,4 KB
ID:	26439

    Heute Nachmittag habe ich mal versucht die beiden Linien auf denen sich die Beine bewegen werden zu überlagern. Da sich allerdings das Koordinatensystem dabei mit dreht ist es rechnerisch ziemlich aufwendig die ursprüngliche Weglinie im neuen Koordinatensystem darzustellen. Soviel Rechenpower hat mein µC vermutlich nicht.

  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
  •  

fchao-Sinus-Wechselrichter AliExpress