PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Odometrie in microcontroller packen?



bexter
15.05.2005, 19:20
Grüße an alle fleißigen Programmierer!
Kann mir jemand verständlich erklären, wie man einen Roboter Karten anlegen läßt, bzw irgendwelche guten Links dazu?
Muß ich dafür Differentialgleichungen lernen, ableiten, und vorallem wie soll man so einen Algorithmus mit Multiplikationen divisionen und Cos und Sin Funktionen in einen Pic-Controller integrieren, wen der diese Rechenoperationen gar nicht kennt?

Bin für Tips, Tricks, Links, Anleitungen wirklich dankbar, um dieses Spannende Gebiet möglichst schmerzfrei zu lernen!
Danke schon mal ! :-k

binaer
15.05.2005, 19:31
Eine Möglichkeit Karten anzulegen ist, dass der Roboter einfach immer am Rand entlang fährt und dabei jede Kurve, Distanzen etc speichert. Aus diesen Daten kann man dann am PC eine Karte errechnen.

Multiplikationen kann man durch eine Schleife um eine Addition machen, oder die shift befehle bewirken glaub immer /2 und *2. Die müsste es bei Pic auch geben, bei AVR gibt es sie sicher.
Trigonometrische Funktionen sind glaub net so einfach machbar. Aber da kann sich ja sicher noch ein Mathematiker zu Wort melden ;)

lg binaer

15.05.2005, 19:36
Danke schon mal binaer! Ist nicht schlecht, aber ich will ja schließlich auch erkannte Objekte eintragen, und direkt umsetzen, nicht erst am Pc errechnen.

binaer
15.05.2005, 19:36
http://www.avr-asm-tutorial.net/avr_de/rechnen/index.html

Da ist das binäre Multiplizieren / Dividieren erklärt.
Zwar für einen AVR ausgelegt, das Prinzip müsste aber auch für einen Pic gelten.

lg binaer

bexter
15.05.2005, 19:40
Danke war vorhin nicht eingeloggt! Das ist ja schonmal was! O:)
Ich hab schon formeln gesehen, die ohne Trigonometrie auskommen. dafür ist mul,div,add,sub genug glaub ich! Die ensprechenden Befehle nachzubilden frisst aber sicher auch genug leistung!(lässt sich halt nicht vermeiden! 8-[

binaer
15.05.2005, 20:36
ja, aber bei z.B. 10MIPS hat man doch genügend zeit für eine schleife um eine Multiplikation auszführen. So schnell wird der Roboter auch wieder net unterwegs sein ;)

lg binaer

15.05.2005, 21:12
hast recht! Eine Multi zwingt den controller nicht in die Kinie! Aber das was ich vorhabe bestimmt! [-o< Denke über einen Robo nach, der mit einem Algo progrmmiert ist, von dem ich mal irgendas gelesen hab! Er soll sich selbstständig eine karte der umgebung machen, und Objekte damit vor deren erkennung umfahren. Noch nichts welbewegendes, aber der Trick: Er soll objekte, die mehrmals erkannt wurden höhere Prioritäten zuordnen, und andere, die in seinem Terrain nur einmal erkannt wurden, nach einer Zeit wieder vergessen. Eine Art künstliches Gedächtniss also...
Dadurch soll Rechenleistung im endeffekt gespart werden, da ja stationäre Obekte Bekannt sind!
Ob sich das mit ein paar Pic hinkriegen lässt, bin ich grad am ausarbeiten! Ich will jeder speziellen Aufgabe ein eigenes Gehirn geben, und die Pics untereinander Vernetzten über eine der Schnittstellen. Ganz oben steht dann nur mehr der hauptprozessor (warscheinlich 16f876) der alles koordiniert und sich um die Steuerung kümmert!
ich weiß ich hab mir viel vorgenommen für mein zweites Roboprojekt, aber wenn schon dann ordentlich!!!!!

Marvin
16.05.2005, 04:41
Hi bexter,
ich habe mit meinem Marvin I ähnliche Pläne, auch er soll eine Karte erstellen und sich daran orientieren, allerdings werde ich ihm dafür ein Funkmodul verpassen und den Hauptteil der "KI" in den PC verlagern, einfach wegen der ungleich größeren Rechenleistung die mir damit zur Verfügung steht.
Auch ich möchte die Karte flexibel gestalten, d.h. für jedes Feld der Karte wird eine Wahrscheinlichkeit eingetragen mit der sich an dieser Stelle ein Objekt befindet.
Anfangs ist die Karte natürlich leer und jedesmal wenn Marvin ein Hinderniss ortet, wird die Wahrscheinlichkeit für diese Feld erhöht. (Ich habe pro Feld 8 Bit also 256 Wahrscheinlichkeitstufen geplant). In gewissen Zeitabständen werden alle Felder deren Wahrscheinlichkeit unterhalb eines Schwellwertes liegen erniedrigt, so verschwinden Objekte die nicht wiedergesehen werden mit der Zeit von der Karte. Objekte die so oft gesehen wurden, dass der Schwellwert überschritten wurde werden als permanent angenommen und nicht erniedrigt, damit Marvin z.B. nicht vergisst wo die Wände sind.
Mal sehen ob's klappt, wird einige Zeit dauern bis das soweit ist.

Grüsse
Marvin

Florian
16.05.2005, 08:31
Guten morgen!
Wie habt ihr vor die Positionen der Gegenstände zu speichern?
Mit der Odometrie erhaltet ihr ja nur ungefähre Positionen, also müssen diese sehr genau sein, aber wie wollt ihr mit ihnen die Position vom Roboter bestimmen und dementsprechend auch von den Gegenständen?

binaer
16.05.2005, 12:46
[quote="bexter"]
Dadurch soll Rechenleistung im endeffekt gespart werden, da ja stationäre Obekte Bekannt sind!
[quote]
Dass Rechenleistung gespart wird, glaub ich eher net, bei dem Rechenaufwand für die Karte ;)
Aber trozdem interessant.

Das Problem das Florian anspricht, dürfte auch noch knifflig werden. Denn der Fehler zwischen Messung und tatsächlicher Bewegung vervielfacht sich bei jeder Kurve.
evt könnte man den Roboter durch mehrere Bakes mit verschiedener Frequenz genauer positionieren. Man könnte sicher kontrollieren, wie der Roboter im Raum steht. Geht es allerdings um komplexere Gebäude, kann man das vergessen. KA, wie man das dann machen soll.

lg binaer

16.05.2005, 12:49
Zu marvin: Ist a toll, das nicht nur ich soviel vorhab! Das mit dem Funkodul ist eine gute Idee für stationäre Roboter! Ich hätte gern einen der sich überall zurechtfindet! Ist halt eine Frage was man machen möchte. 8-bit Auflösung für eine Posotion ist ja ganz ordentlich da hast Du 256 Stufen der Priorität, für einen Pc kinkerlitzchen, muß ich mal durchrechnen ob sich das mit Mic auch ausgeht, da ja für eine Feld-Matrix aus Variablen ein Register pro Stelle herhalten müsste!

bexter
16.05.2005, 12:59
Sorry Jungs war nicht eingeloggt! Zu Florian: Klar ist die Odometerie nicht überragend genau, außer auf kurze Entfernungen und wenn dafür gesorgt wird, das die Räder nicht den Bodenkontakt verlieren, wenig Getriebespiel,usw... Außerdem veringern große Biegeradien die Genauigkeit so weit ich verstanden hab! Die position wird dann einfach als X,Y position berechnet, und in einem Variablenfeld gespeichert, in dem einer Variable zB. 10cm2 zugeteilt werden, 10m2 dann 100x100 Variablen sind...
Gruß

Florian
16.05.2005, 13:15
Ahja, da habt ihr euch aber ganz schön was vorgenommen! ;o)
Viel Erfolg! :o)

Jared
21.05.2005, 09:28
Nocheinmal zu den Trigonometrischen Funktionen

Ich würde eine Tabelle für sin 0-90 Grad anlegen den cos aus cos x = sin (90-x) berechnen und für die anderen Quadranten die Vorzeichen anpassen das ist sicher viel schneller als alles andere (und beliebig genau). Der Speicherverbrauch sollte im Vergleich zur Umgebngsmatrix auch nicht ins Gewicht fallen.