PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Odemetrie Asuro verbessern



mitch0815
22.01.2012, 14:56
Die Asuro Odemetrie


Ich habe mich wie wahrscheinlich schon etliche vor mir mit der Odemetrie der des Asuros beschäftigt. Das Ziel was ich dabei verfolge ist etwas hochgegriffen. Der Asuro soll sich frei in einem Raum bewegen. In diesem Raum sind diverse Hindernisse platziert, welcher der Asuro erkennen soll und sich die Position des Hindernisses merken soll, so dass er beim nächsten mal wenn er Kurs auf das Hindernis nimmt dieses souverän umfahren soll. Später sollen dem Asuro beliebige Ziele im Raum mitgeteilt werden welche er ansteuern soll. Soviel zur Zielsetzung.

Schnell habe ich festgestellt dass die Odemetriedaten des Asuros nicht viel Taugen. Das fängt schon dabei an das meines Erachtens die Hell und Dunkel unterschiede über den AD-Wandler erkannt werden soll. Dazu kommt das die Zahnräder auf der Achse sehr viel spiel haben und dadurch sich die Amplitude des erfassten Signals sehr variiert. Zudem muss ich gestehen dass ich dieses Verfahren als ziemlich kompliziert halte, und auch nicht so recht verstanden habe.

Ich habe mir nun den Schaltplan des Asuros genauer betrachtet und festgestellt, dass die Eingänge des Atmels auf denen die Fototransistoren liegen auch sekundär als PinChange Interrupts verwendet werden können. Ich habe ein kleines Programm geschrieben in dem diese Methode getestet werden sollte. Es funktionierte nur leider nicht sehr zuverlässig was bei diesem Signal auch kein Wunder war.
21279
Signal des Fototransistors

Wenn jetzt bei diesem Signal noch ein Flatterndes Zahnrad Fremd licht Einwirkung dazu kommt ist schnell klar dass nicht jede Signaländerung erkannt werden kann.
Nun war ich erst mal etwas enttäuscht von meinem Asuro.
Ich schaute bei Google na „Odemetrie Asuro“ um zugucken was für Probleme es alles gibt. Und ob es vielleicht auch eine Lösung für mein Problem gibt. Außer Lösungen die mit dem AD-Wandler liefen habe ich leider nichts gefunden. Da ich jetzt aber so auf eine Lösung mit Einer Interrupt Routine versteift war, in dem ich die Impulse einfach nur zählen brauch, kam ich auf die Idee den Asuro ein wenig umzubauen. Und zwar wollte ich jetzt einen Einstellbaren Schmitt-Trigger zwischen Fototransistor und Mikrocontroller bauen.
21280

Diese Schaltung sollte jetzt nun wie folgt in den Asuro eingebaut werden.
2128021281





















Nun kann man mit den Potis die Schwellspannung einstellen.
21282


Die blaue Linie ist die Schwellspannung des Schmitt-Triggers.
Am Ausgang erhält man dann ein relativ sauberes Rechteckt Signal:
21283

Nun hat man einen sehr guten und zuverlässigen Odemetriesignal, dessen Impulse man in einer Interrupt Routine zählen und auswerten kann.

Ob ich schaffe mein eigentliches Ziel erreichen werde kann ich bis jetzt noch nicht sagen. Aber ich dachte mir dass es eine gute Idee wäre meine bis jetzt gesammelten Erkenntnisse zu veröffentlichen da ich solch eine Methode im Netz noch nicht gefunden habe. Ich hoffe ich konnte einigen hiermit helfen.

oberallgeier
22.01.2012, 15:29
... dieses Verfahren ... kompliziert ... nicht so recht verstanden habe.
... Google na „Odemetrie Asuro“ ... Außer Lösungen die mit dem AD-Wandler liefen habe ich leider nichts gefunden ...
Im asuro-Wiki gibts dazu ne Lösungshinweise., vielleicht hätte Google gern, dass Du Odometrie richtig schreibst - und nicht Odeme... - letzteres klingt ja eher nach Ödemen.

Die Beilagscheibe an der Odometrieachse (eingeführt wohl 2005 von Weja - klick) (https://www.roboternetz.de/community/threads/7348-Asuro-Odometrie-Fehler) - evtl. noch die Abdeckung drauf - und schon gibts diese guten und eindeutigen Signalgänge:

......https://www.roboternetz.de/community/attachment.php?attachmentid=12484&d=1216716200

siehe dieser Thread (klick). (https://www.roboternetz.de/community/threads/30344-Algorithmen-zur-Bahnplanung?p=355231&viewfull=1#post355231)

Mal gespannt was Deine Lösung(en) so bringen.

radbruch
22.01.2012, 16:28
Hallo

Wie fast alle Funktionen des asuro ist auch die Odometry minimalistisch aufgebaut. Gegen verschobene Ritzel hilft die U-Scheibe, gegen Fremdlicht eine Abdeckung:

https://www.roboternetz.de/phpBB2/files/asuroscheibe.jpg (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=8153)
(Aus: https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=8153)

Erstaunlich finde ich, dass beim nahezu baugleichen probot die Odometriy ohne ADC funktioniert:

https://www.roboternetz.de/community/threads/49725-Pro-Bot-128-mit-Bascom?p=486267&viewfull=1#post486267
https://www.roboternetz.de/community/threads/49725-Pro-Bot-128-mit-Bascom?p=486857&viewfull=1#post486857

Der ProBot hat einen kleineren Vorwiderstand vor den LEDs (probot: R5 mit 220 Ohm, asuro: R22 mit 470 Ohm)), Empfänger ist identisch. Ist das der entscheidende Unterschied?

Gruß

mic

markusj
22.01.2012, 16:35
Schnell habe ich festgestellt dass die Odemetriedaten des Asuros nicht viel Taugen.

Kann ich so nicht nachvollziehen. Meine Odometrie-Routinen haben bisher immer sehr zuverlässig gearbeitet, ich habe als Modifikation die Fototransistoren abgedeckt, die Zahnräder mit schwarzem Tonkarton ebenfalls lichtdicht gemacht und über Klemmringe das Spiel des Zahnrads eliminiert. Die Ungenauigkeit der Odometrie wird durch den Schlupf der Räder verursacht. Wenn du ganz langsam fährst, kannst du mit der Odometrie relativ genau Navigieren, aber das hängt auch immer vom Untergrund ab ... Beschleunigungs- und Bremsrampen helfen übrigens auch.

Das was du mit zusätzlicher Hardware "erschlägst", kann mit etwas Hirnschmalz auch die Software realisieren ...

Ach ja: Wie kommt dein ASURO zu Pin Change Interrupts? Die gibts doch erst bei neueren AVRs, mein ASURO ist mit einem Mega8 ausgerüstet - Und der hat definitiv keine PCINTs sondern nur zwei externe Interrupts, von denen einer für die Taster verwendet wird.

mfG
Markus

radbruch
22.01.2012, 16:48
Hallo

Tja, der Mega8 hat tatsächlich keinen interruptfähigen Pinchange-Eingang an Pin 23/24. Es ist einfach immer doof, wenn man ungeprüfte Aussagen nachplappert. Entschuldigung.

Gruß

mic

mitch0815
23.01.2012, 06:33
Erstmal sorry das ich Odemetrie gechschrieben habe und nicht odometrie. Ich verwende keinen Mega 8 sondern einen Mega 168 hätte ich sagen sollen hatte ich nur vergessen das ich diesen schon Lage drauf habe. Dachte er wäre 100% pin gleich.

markusj
23.01.2012, 11:35
Beim Mega168 gibt es zwei wesentliche Unterschiede: 1. Er kann mehr und 2. Er verwendet als Referenzspannung für ADC/Komparator 1,1V statt 2,56V. Kompatibilität bedeutet ja nicht, dass der Neue nicht leistungstärker sein darf ;)

mfG
Markus

rossir
23.01.2012, 22:21
Hallo,
ich bin eher der Typ "Software". Deshalb stimme ich @markusj zu und sage, dass auch Software weiter hilft. Hier https://www.roboternetz.de/community/threads/35184-AsuroLib-V2.8.0rc1-veröffentlicht/page2?p=337746&viewfull=1#post337746 habe ich gezeigt, dass selbst bei sehr schlechten AD-Wandler Signalen kein Tick verloren geht. Diese Lösung ist unabhängig von der Amplitude (solange keine near-flatline vorliegt). Insbesondere ist sie unabhängig von irgendwelchen Thresholds die man vorher ermitteln und dann konstant einstellen muss.

markusj
23.01.2012, 23:23
In der TinyASUROLib habe ich noch einen dritten Weg implementiert: Eine Flankenerkennung. Solange man nicht mit einem Blitzlicht auf den ASURO losgeht ist diese Option sehr zuverlässig und erforderte keine Kalibrierung, die Schwellenwerte sind nach meiner Erfahrung unproblematisch.

mfG
Markus

oberallgeier
24.01.2012, 16:32
... Ich verwende keinen Mega 8 sondern ... 168 ... Dachte er wäre 100% pin gleich.Na ja, der 168er ist sozusagen pingleich. ABER der 168 ist innen NICHT immer vergleichbar - z.B. die Timer sind etwas anders, auch manche Register . . . deshalb sind die beiden Controller nicht (nicht immer) codekompatibel, von der internen Spannungsreferenz steht schon etwas hier usf.

Ich hatte meine Messungen oben mit dem ADC von einem mega8 gemacht - originaler asurocontroller - aber vergleichbare Ergebnisse mit dem mega168 auch erhalten. Beim 168er hatte ich für eine gute Spannungsstabilität von Vcc gesorgt und die Vcc am AREF als Referenzspannung genommen. Das ist aber nur eine von mehreren Möglichkeiten, die interne Referenz ist eine andere Möglichkeit.

markusj
24.01.2012, 17:07
Ich hatte meine Messungen oben mit dem ADC von einem mega8 gemacht - originaler asurocontroller - aber vergleichbare Ergebnisse mit dem mega168 auch erhalten. Beim 168er hatte ich für eine gute Spannungsstabilität von Vcc gesorgt und die Vcc am AREF als Referenzspannung genommen. Das ist aber nur eine von mehreren Möglichkeiten, die interne Referenz ist eine andere Möglichkeit.
Das funktioniert weil die Asurolib für alle Messungen (außer der Batteriespannung) VCC als Referenz verwendet. Aus dem Grund ist ja überhaupt erst ein sinnvolles Upgrade auf die neueren AVRs möglich, ohne alles über den Haufen werfen zu müssen. Ich muss mir Mal die Unterschiede genauer ansehen, vielleicht unterstützt die nächste Version meiner Lib die Mega[4|8|16|32]-Reihe dann auch.

mfG
Markus