-         

Ergebnis 1 bis 4 von 4

Thema: Servo Controller

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.11.2004
    Beiträge
    451

    Servo Controller

    Anzeige

    Hi,

    Ich bin gerade dabei einen Servo Controller zu Programmieren. Für einen 4-Beinigen Roboter.

    Ich verwende AVR Studio und einen Mega 168 mit 20Mhz also sollte ich genug rechenleistung haben.

    Er soll 12 Servos in 4 ms Steuern, was auch nicht weiter schwer ist.

    In den restlichen 16 ms soll er berechnungen vornehmen, die etwas komplizierten sind:

    Code:
    Servo(1) = arctan(128-(x/y))
    
    Servo(2) = arctan(Wurzel((128-x)²+y²))-4/(200-2)+180-y/2)
    
    Servo(3) = 2*arcsin((1/2*wurzel((128-x)²+y²))/10)
    x,y und z sind dabei die bewegungen, die der Körper des Roboters macht. Sie werden vom Hauptcontroller übertragen.

    Meine Frage ist jetzt, wie kann ich am einfachsten einen arctan bzw arcsin und Wurzel rechnen?

    Dafür gibts es ja keine vorgefertigten befehle.

    Für arctan und arcsin werde ich warscheinlich eine Tabelle nehmen müssen. Und bei der Wurzel? über ein Näherungsverfahren?

    ich hoffe ihr habt bessere Vorschläge, oder vlt auch einfachere.

    ps. meine assembler kenntnisse sind nicht die besten (bin z.Z. bei timern und interupts) sollte aber nicht so wichtig sein, weil es sich nur um rechnungen handelt.

    mfg robin

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.551

    Re: Servo Controller

    Hi Robin,

    sieht so aus, als würdest Du da irgendeine Rechenmethode abgekupfert haben aus einer Fachliteratur, mit der Du die Winkelstellungen der Gelenke aus den Raumkoordinaten der Bein-Endpunkte rechnest - oder Du hast Dir so etwas selbst hergeleitet. Dann könnte es eine Möglichkeit geben, das Ganze durch maximal eine Wurzel, Rest nicht-transzendent, zu rechnen, wenn Du den Pythagoras sinnvoll anwendest. Überleg Dir das mal.

    Aber vielleicht rechnest Du etwas Anderes, zumal ja dasteht, dass x, y und z Bewegungen sind - na und dann musst Du halt diese transzendenten Funktionen durch (abgebrochene) Reihenentwicklungen (Taylor) rechnen. Dürfte zeitaufwendig werden, zumal ich bei fünften und siebenten Potenzen vermute, dass es NUR noch real Sinn macht. Selbst wenn Du eine Mathelib für eine Hochsprache bekommst - es wird böse viel Zeit kosten.

    Da Du alles in Assembler rechnen willst fürchte ich, dass Du an eine Integerberechnung denkst. Na da kann/will ich jetzt nichts Konstruktives beisteuern. Ich habe auf nem m168/20MHz in C eine kurze Realrechnung gemacht (fünfter Absatz im zitierten Posting) und die dauert schon reichlich. Vielleicht ist das für Dich ein Anhaltspunkt zu Deiner Annahme:
    Zitat Zitat von robin
    ... Mega 168 mit 20Mhz also ... genug rechenleistung ...
    Ciao sagt der JoeamBerg

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.11.2004
    Beiträge
    451
    hi,

    die Rechnungen habe ich mir selbst hergeleitet^^.

    Die Möglichkeit mit nur einer Wurzel gibt es leider nicht, hab ich zumindest nicht erkannt^^.

    Hab leider nur die hälfte verstanden von dem was du geschrieben hast (Studierst du Mathe??).
    Dein vorschlag mit der Taylor näherung hab ich nicht verstanden, was bringt mir das, wenn ich viel zeit verbrauch? ich hab doch nur 16 ms und muss in dieser Zeit alles ausrechnen und evtl. noch 3 Byte empfangen.

    Aus diesem Grund habe ich auch hier gepostet, damit mir eine einfachere vlt. sogar schnellere Lösung vorgeschlagen wird und nicht etwas noch komplizierters.

    Aber trotzdem danke für deine bemühungen, was auch immer du mir damit sagen wolltest.^^

    Ich werde sofern mir niemand eine besser Möglichkeit vorschlägt meine Berechnung mit 2 Tabellen Lösen (Arctan & Artcsin) und einer Näherung für die Wurzel hab da auch schonmal etwas gefunden, ist aber schon zu lange her, find ich jetzt auf die schnelle nicht mehr.

    mfg robin

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.551
    Du hast nach einer Berechnung gefragt
    ... einen arctan bzw arcsin und Wurzel rechnen? ...
    Deshalb hatte ich Dir kurz die Möglichkeit skizziert, die ich kenne. Und diese Funktionen sind eben leider gerade die, die in Digitalrechnern am längsten brauchen. Das ist nicht meine Schuld - und ich weiß nicht, ob jemand schnelle Rechenmethoden kennt. Ich würde Dir ja gerne einen Arithmetik-Coprozessor empfehlen, wenn ich so etwas für Atmel-Controller kennen würde. Gibts aber wohl nicht. Hoffentlich hat jemand bessere Ratschläge.

    Du hast natürlich recht, dass Du mit einer fertigen Tabelle vermutlich recht schnell arbeiten kannst. Das dürfte schon ein guter Weg sein.

    Viel Glück.
    Ciao sagt der JoeamBerg

Berechtigungen

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