- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 28

Thema: Sensorik am RP6, Befehle und Allgemeines

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    773

    Sensorik am RP6, Befehle und Allgemeines

    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
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.04.2009
    Beiträge
    523
    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
    773
    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
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.04.2009
    Beiträge
    523
    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
    773
    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

Ähnliche Themen

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

Berechtigungen

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

12V Akku bauen