-         

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 28

Thema: Sensorik am RP6, Befehle und Allgemeines

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    755

    Sensorik am RP6, Befehle und Allgemeines

    Anzeige

    Hallo!
    Ich mus nächste Woche ein kleines Projekt mit dem RP6 an meiner Uni machen und hätte da noch ein paar Fragen:

    Ich habe die Beispielprogramme TV-Remote und Slave zusammengelegt, sodass ich den Bot also per IR-Fernbedienung steuern kann.
    Jetzt möchte ich folgendes machen:
    Der Bot bekommt einen IR-Befehl "Dort, wo du jetzt bist, das ist nun dein Startpunkt!!!". Dann fahre ich den Bot einfach in der Gegend herum, wies mir eben so passt. Irgendwann sage ich dem Bot mit einem neuen Code: "So, das ist nun dein Zielpunkt".
    Während der Ganzen Fahrt misst der Bot Strecke und Drehwinkel mit den Odometern und "weiß" daher stets, wo in seinem Koordinatensystem mit x- und y-Koordinaten und "Start" als Koordinatenursprung, er sich befindet. Also weiß er auch, wo er am Zielpunkt ist und in welchem Winkel er gerade steht.
    Am Ende kommt der Befehl "Fahre direkt zum Start zurück!" und er fährt direkt auf den Startfleck zu, weicht Hindernissen aus und nimmt nach jedem Hinderniss wieder den direktesten Weg ein.
    Dass das nicht supergenau wird, weiß ich natürlich schon...

    Nun zu meinen Fragen:
    1.: Das wichtigste: Ist der Bot dazu fähig? Hat er dafür genügend Speicher? Kann er sinus, cosinus und tangens?
    2.: Soll die Base oder die M32 rechnen? Mir wäre Base lieber...
    3.: Wie kann ich die Odometer stets abfragen? Immer, wenn ein Fernbedienungsknopf losgelassen wurde, muss der Bot Strecke und Winkel in ein Register schreiben (wohl in ein Array) und x und y berechnen sowie seinen Winkel.
    4.: Das Projekt startet Donnerstag und soll schon Freitag wieder fertig sein, also heut in einer Woche. Es wäre der Hammer, wenn ich Mittwoch bis Freitag hier jemanden erreichen könnte falls Akute Fragen bestehen!!!!


    So, danke Euch schon mal
    Fabian

  2. #2
    Erfahrener Benutzer Roboter-Spezialist Avatar von RolfD
    Registriert seit
    07.02.2011
    Beiträge
    414
    Hallo,
    da sich die Fehler (Winkel, Fehler duch Reibung/durchrutschen) in dieser Anordnung aufaddieren, ist das nicht einfach zu lösen - müsste aber gehen. Die Base reicht dafür sicherlich und wenn du nicht Kilometer zurück legst langt auch der Speicher mit ca. 1,5 Kb. Da auf M32 und Base beide CPUs gleich sind, ist der Vorteil einer M32 mit vielen freien Ports kaum gegeben. Für die Odometrie bietet die RP6lib Funktionen, welche auf der RP6 CD ist. Die wirst Du aber ggf. abändern müssen. Trigonometrische Funktionen lassen sich mit der libc oder mit eigenen Mathelibs umsetzen. Sowas findet sich mit Google für AVRs. Ich halte das für machbar, habe aber meine Zweifel an der Genauigkeit. "Ungefähr" wird der Bot aber zurück finden. Von einem Master/Slave Konzept würde ich dringend abraten da das I2C nicht sonderlich stabil ist. Für Zuhause ist das egal aber als Projekt an der Uni kommt es nicht gut wenn der Bot streikt oder unwillig reagiert.
    LG Rolf
    Sind Sie auch ambivalent?

  3. #3
    RN-Premium User Roboter-Spezialist
    Registriert seit
    21.04.2009
    Beiträge
    522
    Prinzipiell bin ich mir nicht ganz sicher, ob du das so hinbekommst...
    Wie "genau" muss das ganze denn sein?
    Vor allem bei Drehungen stimmen die Werte eben gut und gerne schon mal auf +-20° nicht...
    Du könntest dir Räder an den RP6 bauen, damit sollte es genauer gehen.

    Vom Speicher her musst du dir halt was schönes ausdenken, wie du das speichern willst.
    Du könntest hier aber auch die M32 nehmen und in den EEPROM schreiben. Das ist ganz easy.

    CPU auf Base und M32 sind in der Tat die selben, allerdings ist die M32 doppelt so schnell getaktet (16Mhz). Ob das ein Vorteil ist glaube ich kaum...
    Du willst ja nicht sonst was berechnen...

    @Rolf, ich denke schon, dass er I2C benutzen kann. Bevor du deine Stresstests gemacht hast,
    hat sich ja noch nie jemand beschwert, die Probleme tauchen also nur unter bestimmten Bedingungen auf.

    Also wie gesagt, bastel doch mal schnell ein Programm mit einem festem Ablauf drinne (2m vor, 30° drehen, 3m vor, 70° drehen, 1m zurück) und danach das ganze eben noch mal von hinten.
    Dann "sollte" er ja wieder am Anfang stehen... Wird er aber nicht

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    755
    Nun ja, da ich das ganze in einem Raum mit rutschfestem, gleichmäßigem Boden mache, denke ich, dass sich der Schlupf der Ketten gering hält. Klar, in einem Wohnzimmer mit teils Hochflor-Teppich, teils Parkett und noch ein bisschen Fließen dazu, gibts da so seine Probleme...
    Ich hatte mir das so gedacht: Array anlegen: long int ArrayName[30][30] für 30 "Operationen", erste Spalte für die Strecken, zweite für die Winkel. Der Einfachheit halber werde ich zunächst nur geradeaus fahren und mich auf der Stelle Drehen. Kurven lass ich mal weg...
    Eigentlich liegt mein Hauptproblem noch in der Odometerabfrage. Es gibt ja Befehle für "Fahre soundso weit", "drehe soundso viele Grad". Was ich brauche ist eine Abfrage der Strecke, die bei Tastendruck der taste z.B. "Vorwärts" beginnt und die gefahrene Strecke ausgiebt, sobald der Bot stehen bleibt.
    Da finde ich keinen schon fertig gebastelten Befehl?!
    D.h., den müsste ich selber basteln, oder? Also auf die Lichtschranke zugreifen und dann schwarze/weiße Streifen zählen und nach Manual die Strecke berechnen, oder?

    Danke Euch schon mal!

  5. #5
    RN-Premium User Roboter-Spezialist
    Registriert seit
    21.04.2009
    Beiträge
    522
    Wie gesagt, probier es einfach mal aus.
    Die aktuelle Strecke kannst du definitiv auslesen, beim Winkel weiß ich es gerade nicht.
    Ansonsten lässt den RP6 immer fest vorgegeben 45° drehen oder so und machst das dann paar mal hintereinander.

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    755
    Zu dem Auslesen der Strecke hab ich was in der Lib.c gefunden:
    Code:
    /*****************************************************************************/
    // Encoders
    
    // Timing variable used for speed calculation:
    volatile uint8_t speed_timer;
    
    // Speed measurement variables
    volatile uint16_t mleft_counter;
    volatile uint16_t mright_counter;
    volatile uint16_t mleft_speed;
    volatile uint16_t mright_speed;
    
    // Distance
    volatile uint16_t mleft_dist;
    volatile uint16_t mright_dist;
    
    // This is only used for the selftest program.
    // You don't need this for your own programs!
    #ifdef DEBUG_MEASURE_DUTY_CYCLE
        volatile uint16_t cycle_h_l;
        volatile uint16_t cycle_l_l;
        volatile uint16_t cycle_h_r;
        volatile uint16_t cycle_l_r;
        
        volatile uint8_t cycle_h_l_tmp;
        volatile uint8_t cycle_l_l_tmp;
        volatile uint8_t cycle_h_r_tmp;
        volatile uint8_t cycle_l_r_tmp;
    #endif
    
    /**
     * External Interrupt 0 ISR
     * (ENCL)
     *
     */
    ISR (INT0_vect)
    {
        mleft_dist++;
        mleft_counter++;    
        
        // Only used for selftest program:
        #ifdef DEBUG_MEASURE_DUTY_CYCLE
            if(isEncoderLeft()) {
                cycle_l_l = cycle_l_l_tmp;
                cycle_l_l_tmp = 0;
            }
            else {
                cycle_h_l = cycle_h_l_tmp;
                cycle_h_l_tmp = 0;
            }
        #endif
    }
    Ich denke, das müsste es sein, oder? Dann kann ich einfach zu Beginn eines Fahr-Vorgangs mleft_dist und mright_dist auf Null setzen und danach auslesen, ins Array schreiben und Koordinaten berechnen?!?!?!

    MfG

  7. #7
    RN-Premium User Roboter-Spezialist
    Registriert seit
    21.04.2009
    Beiträge
    522
    Korrekt. Anhand der unterschiedlichen Strecken könnte man sich übrigens auch mit etwas Mathe den Winkel ausrechen

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    755
    Meinst du jetzt, dass ich mir nach einem Drehmanöver den gedrehten Winkel berechne? Dafür gibts glaube ich auch schon vorgefertigte Funktionen für rotate etc.
    Oder meinst du, dass ich mir nur die gesamt gefahrenen Strecken der linken und rechten Kette ansehe, durch die Differenz aus beiden auf den Winkel schließe? Das ginge glaube ich nicht...

    Kann der RP6 Trigonometrie?

  9. #9
    RN-Premium User Roboter-Spezialist
    Registriert seit
    21.04.2009
    Beiträge
    522
    Ohne allzu viel drüber nachzudenken müsste man anhand der gefahren Strecke WÄHREND dem Drehen (auf der Stelle) über ein paar Kreisfunktionen auch den Winkel berechnen können.
    Ist mir aber jetzt zu spät dafür du hast ja dann quasi eine Strecke auf einer Kreisbahn, also einen Kreisabschnitt. Damit kann man eigentlich auch den entsprechenden Winkel berechnen.

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    755
    Jojo, das geht. Danke Dir!!!
    Werd das schon hinbekommen

    Was ich aber noch nicht weiß: Wie schauts mit Sinus, Cosinus und Tangens aus? Die bräuchte ich um mit Strecke und Winkel einen x- und y-Koordinaten zu berechnen...

    Bis denne...
    Fabian

Seite 1 von 3 123 LetzteLetzte

Ähnliche Themen

  1. Allgemeines zum C't-Bot
    Von Jobot im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 5
    Letzter Beitrag: 03.02.2010, 20:16
  2. Allgemeines Lob!
    Von adrisch im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 1
    Letzter Beitrag: 28.04.2007, 11:23
  3. c-control, allgemeines zu analog I/O
    Von Haveaniceday im Forum C-Control II
    Antworten: 1
    Letzter Beitrag: 26.04.2007, 14:20
  4. Allgemeines Handbuch?
    Von sonium im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 12.01.2006, 13:14
  5. Allgemeines Verständniss der Grundschaltungen
    Von Crash32 im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 16.12.2005, 20:04

Berechtigungen

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