Hallo WL,
das sieht ja sehr gut aus.
Welche Resultate kannst Du damit erreichen:
-Reichweite
-Genauigkeit
-Welche Umgebungsbedingungen (Tageslicht im Freien)
Bernhard
Hallo WL,
das sieht ja sehr gut aus.
Welche Resultate kannst Du damit erreichen:
-Reichweite
-Genauigkeit
-Welche Umgebungsbedingungen (Tageslicht im Freien)
Bernhard
Hallo Willi,
wie wird zwischen Bakenreflexionen und anderen Reflexionen unterschieden?
@Bernhard667
Die Reichweite wird vom Kollimator(Leistung und Strahldurchmesser) und dem Reflektormaterial bestimmt.-Reichweite
-Genauigkeit
-Welche Umgebungsbedingungen (Tageslicht im Freien)
Außerdem sollte (muß) Sender und Empfänger auf der optischen Achse zum Reflektor liegen.
Mit einem 1mW Kollimator und der 3M-Folie habe ich ca.10m erreicht.
Die Genauigkeit ist abhängig von der Auflösung des Winkelmessers (im Beispiel 144000/U entspr.0,0025°), dem mechanischen Aufbau (Präzision und Spielfreiheit des Getriebes) und der Position auf dem Feld (NICHT linear !).
Auf einer kleineren Testfläche(5*4m) würde ich mal für diesen Prototypen ganz vorsichtig ~ 1cm angeben.
Tageslicht spielt eigentlich keine Rolle. Es sei denn, die Sonne steht sehr tief und in einer Linie mit Scanner und Reflektor.
@vohopri
Das ist in der Tat ein Problem:
wie wird zwischen Bakenreflexionen und anderen Reflexionen unterschieden?
z.B. Rundglas (Flaschen) oder Flachglas (Fensterscheiben) sind für die Lichtschranke (gute) Reflektoren.
Bis auf weiteres:
Entweder die Verstärkung des Empfängers verringern (weniger Reichweite) oder Refexionen vermeiden !
Notwendig, aber noch nicht realisiert:
Im Normalfall werden 3 Baken/U detektiert. Wenn es mehr sind muß eine Plausibilitätskontrolle die n.i.O. Reflexionen ausfiltern (auf die ToDo-Liste).
Wenn gleich nach dem Einschalten schon mehr als 3 erkannt werden ist diese Blase aber geplatzt !
mfG
Willi
Nun zur Software.........
Funktion Winkelerfassung:
(Impulse_Software.pdf in .zip)
Wie schon weiter oben erwähnt kommen die Impulse leider nicht immer als geschlossene Formation an (ideal) sondern sind oft "zerhackt" (Reflektor verschmutzt o.ä.). Dies muss die Software ausbügeln:
Bei einer Umdrehung des Scanners werden die Winkelinformationen (in der Int0) in die Arrays "Wa(x)" >(für Winkelanfang) und "We(x)" >(für Winkelende) eingetütet (schwarz in der Abb.).
Code:'-------------------------------------------------------------------------- Int0_int: Counter1 = 0 'hier werden die empfangenen Impulse gezählt Led = 0 Laser_anf_low = Pina : Portc.6 = 1 : Waitus 2 '&b00 lesen Laser_anf_mid = Pina : Portc.6 = 0 : Portc.7 = 1 : Waitus 2 '&b01 lesen Laser_anf_high = Pina : Portc.7 = 0 '&b10 lesen Waitus 40 '~2 Impulse ausblenden Bitwait Pind.2 , Reset 'Burst Ende Lesezaehler = 1 'Zählerwert speichern Waitus 5 Lesezaehler = 0 Waitus 5 Laser_end_low = Pina : Portc.6 = 1 : Waitus 2 '&b00 lesen Laser_end_mid = Pina : Portc.6 = 0 : Portc.7 = 1 : Waitus 2 '&b01 lesen Laser_end_high = Pina : Portc.7 = 0 '&b10 lesen Waitus 2 Target_quali = Counter1 'Anzahl der empfangenen Impulse Toggle Buzzer 'kurze akustische Rückmeldung Incr Anz_target 'Anzahl der Impulspakete Winkelanz(anz_target) = Target_quali 'Impulse > Array Wa(anz_target) = Laser_anf 'Winkel_anfang > Array We(anz_target) = Laser_ende 'Winkel_ende > Array Waitus 40 'Wartezeit Led = 1 Eifr.0 = 1 'evt. anstehenden Interrupt löschen Return
Nach dem Ereignis "Umdrehung_beendet" (blau in der Abb. >später mehr dazu) werden diese Arrays auf "Zusammenhang" abgefragt und das Resultat wieder ab Wa(1) & We(1) abgelegt.Code:'------------------------------------------------------------------------------- Sub Positionserfassung 'hier werden die Empfangsdaten ausgewertet If Umdrehung_beendet = 1 Then Anz_target_fertig = 1 'Ältere BASCOM-Versionen können nicht mit Index "0" ! If Anz_target > 1 Then Temp_wa(1) = Wa(1) 'Anfang merken For N = 1 To Anz_target 'Schleife über alle Pakete Diff = Wa(n + 1) - We(n) 'Differenz zwischen den Paketen If Diff < 0 Then Diff = Diff + 144000 '"0"-Durchgang If Diff > 0 And Diff < 700 Then '700 ist die Toleranz (~1,7°) Winkelanz(anz_target_fertig) = Winkelanz(anz_target_fertig) + Winkelanz(n + 1) 'nur Impulse addieren Else Wa(anz_target_fertig) = Temp_wa(anz_target_fertig) 'Anfang eintüten We(anz_target_fertig) = We(n) 'Ende eintüten Templ1 = We(anz_target_fertig) - Wa(anz_target_fertig) 'Differenz If Templ1 < 0 Then 'auf "0"-Durchgang prüfen Templ1 = Templ1 + 144000 'ggf. korrigieren End If Templ1 = Templ1 \ 2 Templ1 = Templ1 + Wa(anz_target_fertig) If Templ1 > 144000 Then '"0"-Durchgang ? Templ1 = Templ1 - 144000 'ggf. korrigieren End If Winkel(anz_target_fertig) = Templ1 'endlich geschafft ! Incr Anz_target_fertig 'nächstes Paket Temp_wa(anz_target_fertig) = Wa(n + 1) 'nächsten Anfang merken Winkelanz(anz_target_fertig) = Winkelanz(n + 1) 'nächste Impulsanzahl merken End If Next N End If Decr Anz_target_fertig 's.o. If Anz_target_fertig = 3 Then '!!!!!!! NUR 3 BAKEN ERGEBEN SINNVOLLE WERTE !!!!!!!!! W1 = Winkel(1) \ 4 'für Übertragung zum MASTER bevor evtl. ge"swap"t wird ! W2 = Winkel(2) \ 4 'eigentlich wird nur Winkel(2) gebraucht W3 = Winkel(3) \ 4 W1_word = W1 'für 16Bit-Übermittlung (TWI) W2_word = W2 W3_word = W3 Call Winkel_sortieren Call Positionsberechnung(t_ab , T_bc) Lesefehler = 0 'Gut Sound Buzzer , 3 , 3700 'Gut Berechnen_winkel = Gamma \ 2 'wann kann ich loslegen ? Berechnen_winkel = Berechnen_winkel * 400 Berechnen_winkel = Berechnen_winkel + Winkel(2) If Berechnen_winkel > 144000 Then Berechnen_winkel = Berechnen_winkel - 144000 End If If Berechnen_winkel > 143360 Then Berechnen_winkel = 0 'letztes Stück passt nicht ganz Berechnen_fenster = Berechnen_winkel + 2048 Else Ist_x_gemessen = 0 : Ist_y_gemessen = 0 Incr Lesefehler Sound Buzzer , 3 , 700 'Schlecht End If X_word = Ist_x_gemessen 'für 16Bit-Übermittlung (TWI) Y_word = Ist_y_gemessen Anz_target_merk = Anz_target Quali_merk = 0 For N = 1 To 50 Quali_merk = Quali_merk + Winkelanz(n) 'für die Statistik Next N Portb.4 = 1 'Ich habe frische Daten für MASTER (HS) Umdrehung_beendet = 0 '"aufräumen" hat die Mutti gesagt Anz_target = 0 For N = 1 To 50 Winkelanz(n) = 0 Winkel(n) = 0 Wa(n) = 288000 Temp_wa(n) = 0 We(n) = 0 Next N End If End Sub
Also steht jetzt im Array:
Wa(1) & We(1) >1.Paket
Wa(2) & We(2) >2.Paket
Wa(3) & We(3) >3.Paket
Nun müssen wir nur noch die Mitte ausrechnen:
[ Wa+((We-Wa)/2) ] kommt nach Winkel(x) (in der Abb. rot).
Weiterhin wird die Anzahl der zusammenhängenden Pakete in der Variablen Anz_Target_fertig abgelegt. Wenn diese den Inhalt 3 hat kann weitergearbeitet werden, wenn nicht > Pech gehabt !!!
Das Array "Winkelanz(x)" beinhaltet jetzt die Anzahl der Impulse pro Paket und gestattet es Rückschlüsse auf den Abstand zur Bake und/oder die Qualität der Reflexion zu ziehen.
Fragen hierzu ?
Als nächstes ist das Problem zu lösen:
"Der Roboter dreht sich ja auch !" (Sub Winkel_sortieren "Berechnen_winkel" / "Berechnen_fenster" u.s.w.)
mfG
Willi
Hallo Willi,
da gibt es anscheinend schon recht interessante Erfahrungen.
Plausibilitätskontrolle ist bei der Navi an vielen Stellen nötig, damits zuverlässig wird. Das system kann ja anhand der Karte wissen, wie viele Baken sichtbar sein müssen. Dan können die stärksten Signale weiter verrechnet werden, während die schwächeren verworfen werden.
Abhängig von der möglichen Häufigkeit der Peilungen können die Peilungen auch geprüft werden, ob sie nahe genug an der Letzten sind, oder ob eine einen Hüpfer gemacht hat.
Du wirst ja sehen, was im Einsatz dann notwendig sein wird.
Hallo vohopri,
Nach ca. 2 Jahren Entwicklung bleibt das nicht aus.da gibt es anscheinend schon recht interessante Erfahrungen.
Dan können die stärksten Signale weiter verrechnet werden, während die schwächeren verworfen werden.
Die stärksten Signale müssen nicht unbedingt von den 3 Baken kommen (meist ist es aber so....).
Flachglas z.B. liefert nur ein kurzes Impulspaket.
Am besten sind natürlich aktive Baken. Dann wird es eindeutig und die Geometrie des Spielfeldes kann wesentlich komplexer werden (>ToDo_2012).
Im Augenblick verwende ich das ganze für eine "Flächenbearbeitung" so:Abhängig von der möglichen Häufigkeit der Peilungen können die Peilungen auch geprüft werden, ob sie nahe genug an der Letzten sind, oder ob eine einen Hüpfer gemacht hat.
-1. Startpunkt Ladestation: Position und Winkel ermitteln
-2. Odometrie danach korrigieren
-3. nach >= 7m Strecke abfahren und Zielpunkt erreicht: Position und Winkel ermitteln (wenn nicht möglich> nächsten Zielpunkt anfahren / Fehler incr.)
-4. Odometrie korrigieren
-5. u.s.w. (3. & 4.) bis Fläche fertig
-6. Position und Winkel ermitteln dann zurück in Ladestation
Während der Fahrt macht die Messung wenig / keinen Sinn. Wenn man den Winkel zur Bake B zeitnah an das übergeordnete System melden würde könnte man zumindest Rückschlüsse auf die Ausrichtung ziehen (Ist / Soll-Vergleich).
Du wirst ja sehen, was im Einsatz dann notwendig sein wird.
Das ganze Projekt ist noch längst nicht abgeschlossen.................
mfG
Willi
Hallo WL,
also das interessiert mich hier stark.
Ich hatte auch schon mal am Thema automatisches Rasenmähen gearbeitet. Damals wolte ich mit aktiven Ultraschallbaken die Navigation erledigen. Verlor dann aber die Lust.
Als ich mit dem Thema schon durch war, fiel mir noch die ultimative Lösung für Navigation ein, rotierender Laser. Offensichtlich hattest Du die gleiche Idee.
Die Genauigkeit scheint ja sehr gut zu sein.
Du modulierst das Lasersignal. Das scheint zu reichen, Falschlicht zu unterdrücken. Wenn Du evtl noch optisch filtern willst/musst, schauch doch mal auf meine Homepage.
Du rotierst offensichtlich einen punktförmigen Laser und mußt deshalb den Reflektor auch treffen. Wie wäre es einen Linienlaser zu rotieren. Der trifft viel leichter die Bake.
Die Bake ist 3M Folie, schreibst Du. Ist das so eine "Katzenaugen" Folie.
Ich hatte geplant, permanent zu rotieren, auch während der Fahrt. Du scheinst nur gelegentlich zu messen. Hat das einen speziellen Grund?
Bernhard
Die 3M Folie ist vermutlich eine normale Reflektorfolie. Das Prinzip ist das gleiche wie bei einem Katzenauge nur das hier die Tiefe geringer ist. Das Katzenauge ist einige mm stark, die Folie ist eben eine Folie und dadurch sehr dünn. Diese hat aber auch einen Nachteil, sie reflektiert nicht so stark wie ein Katzenauge. Ich habe letzte Woche getestet ein Katzenauge (das mit dem Stapler zerstört wurde) gegen eine Folie (für Drehzahlmessgerät) zu tauschen, da ich keinen neuen Reflektor montieren wollte (der ist öfter zu tauschen). Dieser Reflektor ist für ein Rolltor. Ein Sicherheitslichtschranke damit das Tor wieder auffährt wenn der LS beim Schließen des Tores unterbrochen ist.
PS: 3M ist ein Hersteller der diese Folie u.A. herstellt.
http://de.wikipedia.org/wiki/Reflektorfolie
MfG Hannes
Geändert von 021aet04 (28.09.2011 um 20:41 Uhr)
Hallo Bernhard667,
schön das hier mal Leben reinkommt........
Ich bin selbst überrascht wie gut das klappt.Die Genauigkeit scheint ja sehr gut zu sein.
Die verwendeten Reflektoren bestehen aus einem Rohr (3cm Durchmesser / 1m hoch) mit der Diamond-Folie von 3M.Du rotierst offensichtlich einen punktförmigen Laser und mußt deshalb den Reflektor auch treffen. Wie wäre es einen Linienlaser zu rotieren. Der trifft viel leichter die Bake.
Bei nicht zu hügeligen Gelände reicht das. Außerdem ist da noch die kardanische Aufhängung...........
Ein Linienlaser verteilt seine Strahlleistung auf ein schmales Band von x Metern Länge (je nach Spreizwinkel und Abstand) . Da kommt u.U. so gut wie nichts mehr zurück.
Der Empfänger kann dann nicht mehr so simpel aufgebaut sein !
Ich kenne verschiedene Reflektorfolien. Diese scheint die geeignetste zu sein. Ich kenne keine "Katzenaugen" mit rundem Profil.Die Bake ist 3M Folie, schreibst Du. Ist das so eine "Katzenaugen" Folie.
Rotation ist dauernd gegeben um (grob) die Winkel zu erfassen (im nächsten Beitrag näheres). Präzise Erfassung ist aber nur bei stehenden Fzg. möglich.Ich hatte geplant, permanent zu rotieren, auch während der Fahrt. Du scheinst nur gelegentlich zu messen. Hat das einen speziellen Grund?
Eine Umdrehung dauert mindestens 1 Sekunde. Je nach Geschwindigkeit Deines Fahrzeug's verändern sich die währenddessen die Winkel zu den Baken (erheblich).
Noch schlimmer ist das bei Kurven oder rotieren des Fahrzeuges. Das wird so nichts !!!
Wie schon erwähnt wird hauptsächlich mit der Odometrie gefahren und nur ab und zu korrigiert.
@021aet04
Wie gesagt, es gibt verschiedene Folien..............
Ich verwende diese: 3M Diamond Grade(tm) Serie 983 silber
mfG
Willi
Lesezeichen