-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Posenberechnung

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    26.12.2008
    Beiträge
    7

    Posenberechnung

    Anzeige

    Hallo,
    ich habe vor, mittels Odometrie die jeweilige Pose (x, z, theta) des RP6 zu berechnen. Ich weiß, dass das vermutlich verhältnismäßig ungenau werden wird, aber versuchen möchte ich es trotzdem. Mein Problem dabei ist es nun, die einzelnen Koordinaten auf Nachkommastellen zu berechnen. Das Problem tritt beispielsweise dann auf, wenn der RP6 nicht mehr eindeutig in x- bzw in z-Richtung fährt. Hierbei müsste ich mit cos() und sin() weitermachen um die "genaue" Position zu bestimmen, und genau da gibt es jetzt das Problem: Er berechnet mir cos() und sin() nur ganzzahlig. Gibt es da ne Möglichkeit, wenigstens auf ein, zwei Nachkommastellen cos(), bzw. sin() zu berechnen?
    Ich habe da auch schon mit einem Kumpel drüber gerätselt, jedoch sind wir bisher auf keine Lösung gekommen.
    Ich hoffe ihr könnt mir weiterhelfen.

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    Er berechnet mir cos() und sin() nur ganzzahlig. Gibt es da ne Möglichkeit, wenigstens auf ein, zwei Nachkommastellen cos(), bzw. sin() zu berechnen?
    ?
    Ich denke 'mal, dass du die math.h includiert hast und deren Funktionen nutzt. Dann definierst du die Variablen als double und bekommst die nötigen Nachkommastellen.

    Gruß Dirk

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    26.12.2008
    Beiträge
    7
    hm...also die math.h habe ich includiert und die werte speicher ich auch in einer double-variablen. Es könnte sonst noch sein, dass es einfach an der Ausgabe liegt. Wie ist es denn möglich eine "Double-Zahl" über den RP6 auszugeben? (Sorry, dass ich hier solche Fragen stelle, aber ich habe dazu nichts gefunden und bin noch absoluter Frischling bzgl. des RP6)

    Gruß
    XAro

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.551
    Die Sinusfunktion (und ihre Geschwister) ist in der AVRLib math.h definiert als

    double sin ( double __x )

    da kommt die Variable sowieso als double zurück. Wenn ich mich nicht total irre, rechnet der GCC intern diese Funktionen als single - das spielt aber für Dich sowieso keine Rolle: Es sind auf alle Fälle Argument und Rückgabewert Gleitkommazahlen im double-Format und keine Ganzzahlen.

    ... Wie ist es denn möglich eine "Double-Zahl" über den RP6 auszugeben? ...
    Leider kann ich Dir zum RP6 nicht helfen. Aber wenn Du nicht weißt wie das ausgegeben wird - dann ist wohl Deine Ausgabekonvertierung das Problem.
    Ciao sagt der JoeamBerg

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    Hallo XAro,
    Es könnte sonst noch sein, dass es einfach an der Ausgabe liegt.
    Ja, der RP6 hat in seinen Libs keine fertige Ausgabefunktion für Gleitkommazahlen.

    Hier eine Funktion, die eine float Variable in einen String umwandelt, den man dann mit den RP6-Befehlen ausgeben kann:
    Code:
    /**
     * This function makes a string out of a float value.
     * Example:
     *   float myvar = 11.34; 
     *   char text[6]; 
     *   float2string(myvar,2,text);  // 2 Dezimalstellen 
     *   writeString(text); // o.ä. z.B. auf das Display 
     */
    void float2string(float value, int decimal, char* valuestring) 
    { 
        int neg = 0;    
        char tempstr[20]; 
        int i = 0;    
        int j = 0;    
        int c;    
        long int val1, val2; 
        char* tempstring; 
        tempstring = valuestring; 
        if (value < 0) {neg = 1; value = -value;} 
        for (j=0; j < decimal; j++) {value = value * 10;} 
        val1 = (value * 2); 
        val2 = (val1 / 2) + (val1 % 2); 
        while (val2 !=0) { 
            if ((decimal > 0) && (i == decimal)) { 
                tempstr[i] = (char)(0x2E); //0x2E = Punkt
                i++; 
            } 
            else { 
                c = (val2 % 10);
                tempstr[i] = (char) (c + 0x30); //0x30 = Null
                val2 = val2 / 10; 
                i++; 
            } 
        } 
        if (neg) { 
            *tempstring = '-'; 
            tempstring++; 
        } 
        i--; 
        for (;i > -1;i--) { 
            *tempstring = tempstr[i]; 
            tempstring++; 
        } 
        *tempstring = '\0'; 
    }
    Gruß Dirk

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    26.12.2008
    Beiträge
    7
    Hallo Dirk,

    vielen vielen Dank für deine Methode . Das Programm läuft und ich kann weiterarbeiten. Du hast mir sehr weitergeholfen!! Danke auch an oberallgeier!!
    Beste Grüße

    XAro

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    16.11.2008
    Ort
    Frankfurt
    Alter
    33
    Beiträge
    21
    Xaro, hastes schon fertig implementiert? ich hab mithilfe der odometrie und koppelnavigation auch schon bewegungsmuster erstellt, aber auf nem uni-roboter, und selbst dort war es ziemlich ungenau..
    Ich fänds super, wenn du mal ein Bild der errechneten Strecke posten könntest, weil ich vorhatte, das auch für den RP6 zu implementieren..

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    22.04.2008
    Ort
    Frankfurt
    Alter
    35
    Beiträge
    68
    Das interessiert mich auch brennend. irgendwie ist das rumgefahre und lediglich auf Objekte reagieren dann doch irgendwie öde!

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.12.2005
    Beiträge
    535
    Hallo, zusammen!

    Vielleicht hilft Euch die angehängte pdf-Datei hier

    http://www.roboternetz.de/phpBB2/zei...=399422#399422

    weiter?

    mare_crisium

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    16.11.2008
    Ort
    Frankfurt
    Alter
    33
    Beiträge
    21
    hi mare_crisium, danke für den link. ne, mir gings eigentlich nicht um die diversen möglichkeiten, wege zu messen, sondern speziell um die koppelnavigation mit den radencodern des rp6..

    Hast du deine Messdaten schon mal geplottet und z.B. mit überlagerten Fotos von oben vom Robo verglichen? Sowas wäre mal interessant..Wenn das genau genug ist könnte ich mir überlegen gegen meine Überzeugung doch mal nen Maussensor zu verwenden...

    So wie's aussieht meldet sich Xaro nicht mehr, also heisst das wohl doch auf gut Glück selbst implementieren..

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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