-         

Ergebnis 1 bis 8 von 8

Thema: Lightfollowing + Weg merken

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    02.03.2008
    Ort
    Kärnten
    Alter
    27
    Beiträge
    10

    Lightfollowing + Weg merken

    Anzeige

    Guten Tag,
    ich habe mir vor kurzem ein RP6 Robotersystem gekauft, und versuche nun ein C programm zu schreiben, damit der RP6 einer Taschenlampe folgt, den zurückgelegten weg merkt und wieder zum Ausgangspunkt zurückfindet.

    Den Teil mit Lightfollowing gibts ja schon als Beispielprogramm, aber hätte irgendjemand eine Idee wie ich den Weg speichern und zurückfahren könnte?
    Ich hab mir das so gedacht: Ich definiere ein globales dreidimensionales Array in dem jeweils die Geschwindigkeit des linken und rechten Antriebs und die Zeit die er so verblieben ist, gespeichert werden. Bei Berührung eines Bumpers soll er dan genau diese gespeicherten Abfolgen von unten nach oben ausführen.

    Wäre diese Idee realisierbar? Oder gibt es bessere Vorschläge?
    Hätte vielleicht jemand Tipps?

    mfg

  2. #2
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Für kürzere Strecken könnte man das so machen. Zum glück braucht man dazu auch kein 3 D Array sondern nur 3 eindimensionale. Man hat aber trotzdem recht wenig Speicher, sodass man eventuell eine sparsamere Methode wählen müßte. Statt 2 Geschwindigkeiten und der Zeit könnte man ja auch 2 mal Geschwindigkeit mal Zeit gleich Strecke speichern. Man verliert die Geschwindigkeitsinformation, aber die braucht man ja nicht unbedingt. Dabei könnte man dann eventuell längere Strecken zusammenfassen als im Format oben. Noch kürzer wären Punkte im Rechtwinkligen Koordinaten, aber das braucht einiges an Mathematik.

    Nach einiger Zeit/Strecke hat man dann aber ein typisches Odometireproblem: Die Fehler summieren sich auf und man kennt die genaue Richtung nicht mehr. Wie gut man wieder zurückfindet hängt dann von der Hardware und dem Untergrund ab.

  3. #3
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Hallo

    So etwas in der Richtung hatten wir mal mit dem asuro besprochen:
    http://www.roboternetz.de/phpBB2/zei...ag.php?t=31262

    Ich denke, dein Vorhaben ist realisierbar, allerdings ist es nicht einfach.

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  4. #4
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.912
    muss die zeit überhaupt gespeichrt werden? bei gleichbleibenden messabständen nicht... es reicht doch, z.B. alle 0,5 sek die gefahrene strecke zu speichern, und man bräuchte nur 2 arrays: strecke_links und strecke_rechts
    kleinschreibung ist cool!

  5. #5
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Hallo

    Bringt das Speichern der Wegstrecken echt einen Vorteil? Auch hierbei fliesen sehr viele Fehler ein, die nachgefahrene Strecke wird sicher von der orginalen Fahrt abweichen. Zumal wir ja zurückfinden wollen, dass erschwert es noch mehr.

    Hier mal ein anderer Ansatz: Der RP6 fährt mit halbwegs konstanter Geschwindigkeit durch die Gegend (MoveatSpeed()) und untersucht in festen Intervallen ob sich die Lichtverhältnisse verändert haben und er seinen Kurs ändern muss. Wenn ja, wird die Änderung und der Zeitpunkt (absolut seid dem Start oder relativ seid der letzen Änderung) gespeichert.

    Noch einfacher: Man speichert z.B. alle Sekunde die Helligkeitswerte der Sensoren die man zuvor zur Änderung der Route verwendet hat. Zum Nachfahren des Weges prüft man dann nicht die Sensoren sondern die gespeicherten Werte, so dass der RP6 meint, er würde wieder der Lampe folgen. Um den Weg zurück zu finden, legt man den Rückwärtsgang ein und prüft die gespeicherten Werte vom letzten bis zum ersten Wert zurück. Diesmal muss man aber die getroffenen Wegentscheidungen spiegeln, denn wir fahren ja rückwärts. So werden eventuell sogar die Antriebsunterschiede kompensiert.

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    10.08.2007
    Beiträge
    47
    Hi,

    ich wuerde das Problem in mindestens drei Unteraufgaben zerlegen.
    1) einer Befehlsliste folgen -> automatisiert eine bestimmte Strecke abfahren
    2) die Befehlsliste rueckwaerts abarbeiten -> falls die Befehle einfach strukturiert sind ist das nicht so kompliziert
    3) Erstellen der Befehlsliste auf verschiedenem Input (z.B. Lernen waehrend des Fahrens, von einem Weggenerator auf dem PC, eine selbsterstellte Karte,...)

    Fuer 1) reichen Befehle der Art "Drehen auf der Stelle um einen bestimmten Winkel" und Fahren einer bestimmten Strecke (oder alternativ mit best. Geschwindigkeit eine bestimmte Zeit). Damit kann ich jeden Punkt erreichen. Der Speicherverbrauch dieser Liste ist nicht gross.
    2) das Invertieren dieser Liste ist nicht schwer (nur die Winkel muessen angepasst werden)
    3) das ist komplexer ... Wenn wir uns auf eine bestimmte Geschwindigkeit festlegen und in bestimmten Zeitabstaenden folgende Taetigkeiten vornehmen, ist die Befehls-Liste gut zu erstellen.
    - Sensorwerte pruefen: bei Bedarf Drehen auf der Stelle, bis Ziel mittig, gerade Fahrt vorwaerts.
    - ein Drehbefehl wird direkt abgelegt
    - ein Geradefahrt-Befehl wird erstellt, wenn der naechste Drehbefehl anliegt. Das kumuliert die Anzahl der Geradefahrt-Befehle auf ein Minimum

    hth
    Kay

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    02.03.2008
    Ort
    Kärnten
    Alter
    27
    Beiträge
    10
    Danke schonmal für die Tipps,
    ich Suche derzeit eine Funktion zum Zeitnehmen, aber ich kann in der Standartbibliothek nichts finden.
    Kann mir hierbei jemand weiterhelfen?

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    06.02.2008
    Ort
    Kiel
    Alter
    54
    Beiträge
    36
    Zeit nehmen kannst Du doch über die Stopwatch!
    Gruß thietho

Berechtigungen

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