PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Laser Ortungssystem 1cm Genauigkeit auf 15 m



Christian H
27.06.2008, 23:22
Liebe Robo-Gemeinde,

seit etwa 1/2 Jahr gehe ich mit einem Laser-Ortungssystem schwanger. Ich habe es soweit, dass ich auf etwa 15 m den Winkel zu einer Bake auf 0,1 Grad genau bestimmen kann. Letztlich wäre es nur noch ein kleiner Schritt mit dem Aufbau einer 2. Bake die xy-Koordinaten in einem Areal von etwa 10x10 m und einer Wiederholungsrate von etwa 50 Hz auf einen cm genau zu bestimmen. Allerdings kann ich mich nicht aufraffen das Projekt zu Ende zu basteln.

Sicherlich kommt jetzt der Tip mit DGPS: Einfach die Positionsangaben von 2 GPS subtrahieren. DGPS ist aber bei weitem nicht so einfach. Ich habe noch von keinem funktionierenden DGPS im Forum gelesen. Wegen Interferenzen und Mehrfachausbreitung ist DGPS wohl auch nur auf freiem Feld praktikabel. Kamera und Bildverarbeitung wären eine Alternative, erfordern aber mehr Rechenpower.


Prinzip:
Die Bake arbeitet mit einem rotierenden, vertikal aufgefächerten Laserstrahl.
1. Idee: Ein feststehender Spiegel erzeugt zusätzlich ein Spiegelbild von dem rotierende Laserstrahl. Aus dem Rhythmus der im Detektor eintreffenden Laserstrahlen (direkt und reflektiert) ergibt sich exakt der Winkel zum Spiegel.

http://www.rasenrobo.de/bake/Bake.JPG
http://www.rasenrobo.de/bake/IMGP2134.JPG

2. Idee: Im Detektor bilden 2 Photodioden einen Spannungsteiler. Lichtschwankungen, Fremdlicht wird hierdurch weitgehend eliminiert. Die rotierenden Laserstrahlen treffen aber die beiden unmittelbar nebeneinander angeordneten Photodioden nacheinander. D.h. es werden scharfe Impulse von wenigen us Dauer generiert. Über Transistorverstärker, Hochpass geht das Signal in einen Mikrokontroller.

http://www.rasenrobo.de/bake/Detektor.JPG
http://www.rasenrobo.de/bake/IMGP2162.JPG
http://www.rasenrobo.de/bake/IMGP2160.JPG
http://www.rasenrobo.de/bake/IMGP2163.JPG

Zum Aufbau:
Als Bake läst sich wunderbar eine ausrangierte Festplatte verwenden. Je mehr Platten desto besser. Durch die Masse ergibt sich eine konstante Drehgeschwindigkeit, welche natürlich für die Genauigkeit des Systems essentiell ist. Zum Auffächern des Laserstrahls läßt sich gut eine Feinsicherung verwenden.

Die Ansteuerung des Festplattenmotors erfolgt wie mit einem brushless-Regler. Die Position des Plattenstapels bestimme ich über Markierungen und einen CNY70 (die EMK auszuwerten ist mir viel zu kompliziert). Im Mikrokontroller werden je nach Plattenposition nacheinander die 3 Eingänge des Festplattenmotors über FETs (z.B. von der Festplattenplatine abgebrochen) angesteuert. Damit läßt sich eine konstante Rotationsgeschwindigkeit vorgeben.

BASIC - Peogramm in einem Atiny zum Ansteuern des Festplattenmotors:



$regfile = "ATTINY2313.dat"
$crystal = 8000000

Config Pind.6 = Output
Config Pinb.0 = Output
Config Pinb.1 = Output
'Config Pinb.2 = Input

Dim T0 As Word , T1 As Long , T2 As Long , T3 As Long , T4 As Long , T5 As Long , J As Byte , Jj As Long


Enable Interrupts

Config Int0 = Rising
Enable Int0 'enable the interrupt

On Int0 Label0

Config Timer0 = Timer , Prescale = 8
On Timer0 Timererh
Enable Timer0
Start Timer0


For J = 1 To 5
Portb.1 = 0 : Portb.0 = 0 : Portd.6 = 1
Waitms 20
Portb.1 = 0 : Portb.0 = 1 : Portd.6 = 0
Waitms 20
Portb.1 = 1 : Portb.0 = 0 : Portd.6 = 0
Waitms 20
Next
Xx1:


T1 = 100000
Do
If T1 > 10000 Then

Stop Timer0
T4 = T0
Shift T4 , Left , 8
T4 = T4 + Tcnt0
Start Timer0

T4 = T4 + T5

If T4 > T1 Or T4 <= T2 Then
Portb.1 = 0 : Portb.0 = 0 : Portd.6 = 1
End If

If T4 > T2 And T4 <= T3 Then
Portb.1 = 0 : Portb.0 = 1 : Portd.6 = 0
End If

If T4 > T3 And T4 <= T1 Then
Portb.1 = 1 : Portb.0 = 0 : Portd.6 = 0
End If

Else

Portb.1 = 0 : Portb.0 = 0 : Portd.6 = 0

End If
Loop




Label0:
Stop Timer0
T1 = T0 : Shift T1 , Left , 8
T1 = T1 + Tcnt0 : T0 = 0 : Tcnt0 = 0
Start Timer0
T2 = T1 / 3 : T3 = T2 : T3 = 2 * T3
'T5 = T1 : Shift T5 , Right , 3, '/ 100 : T5 = T5 * 15
T5 = T1 / 100 : T5 = T5 * 15
Return


Timererh:
Incr T0
Return




Als Detektor sind ein Spannungsteiler aus 2 Reihen von Photodioden (4 jeweils parallel) ein 2 stufiger Transistorverstärker und ein Hochpass in einem HF-Gehäuse untergebracht. Am Ausgang geht´s nach einem Hochpass in einen weiteren Transistorverstärker und direkt in den Mikrocontroller. Das Programm misst laufend die Zeitabstände zwischen den Impulsen. Verwertet werden die Impulse dann, wenn die Summe zweiter aufeinanderfolgender Impulsintervalle genau der Rotationsdauer der Bake entspricht. Hierdurch können 1. falsche Impulse eliminiert werden. 2. können Impulse auch richtig 2 Baken zugeordnet werden, wenn diese mit unterschiedlicher Rotationsgeschwindigkeit arbeiten. Rotfilter vor den Photodioden.

Basic - Programm im Detektor:



$regfile = "m32def.dat"
$crystal = 4000000

'$regfile = "ATTINY2313.dat"
'$crystal = 8000000

Config Lcd = 16 * 2
Config Lcdbus = 4
Config Lcdpin = Pin , Db4 = Porta.2 , Db5 = Porta.3 , Db6 = Porta.4 , Db7 = Porta.5 , E = Porta.1 , Rs = Porta.0

Cls
Config Pind.2 = Input

Dim T1 As Long , T2 As Long , T0 As Word , T3 As Long , T4 As Long , T3a As Long , F1 As Single , F2 As Single
Dim V(5) As Single , Vv As Single

Enable Interrupts

Config Timer0 = Timer , Prescale = 8
On Timer0 Timererh
Enable Timer0
Start Timer0



Do


Do : Loop Until Pind.2 = 0 'warten auf 1. Impuls
Stop Timer0
T3 = T0:
Shift T3 , Left , 8
T3 = T3 + Tcnt0 : T0 = 0 : Tcnt0 = 0 'T3 unwichtig
Start Timer0 'Uhr auf 0 und starten
Waitms 1

Do : Loop Until Pind.2 = 0 'warten auf 2. Impuls
Stop Timer0
T2 = T0:
Shift T2 , Left , 8
T2 = T2 + Tcnt0 : T0 = 0 : Tcnt0 = 0 'T2 erstes Impulsintervall
Start Timer0 'Uhr auf 0 und starten
Waitms 1

Do : Loop Until Pind.2 = 0 'warten auf 3. Impuls
Stop Timer0
T1 = T0:
Shift T1 , Left , 8
T1 = T1 + Tcnt0 : T0 = 0 : Tcnt0 = 0 'T1 zweites Impulsintervall
Start Timer0

T3 = T1 : T3 = T3 + T2 'T3=T2+T1 Zeit für 1 Umdrehung
If T1 > T2 Then 'kürzestes Zeitintervall von T1
T1 = T2 'und T2 auswählen. >> T1 ist
End If 'immer direkt-reflektiert

Locate 1 , 1 : Lcd T3 :
If T3 > 29200 And T3 < 29500 Then 'Selektion von passenden Werten
'Mittelwert aus 3 Messungen:
V(3) = V(2) : V(2) = V(1) : V(1) = T1 / T3 : V(1) = V(1) * 120
Vv = V(1) : Vv = Vv + V(2) : Vv = Vv + V(3)
Locate 2 , 1 : Lcd Vv:
End If
Xx1:
Loop


Timererh:
Incr T0
Return


Video: Der Detektor befindet sich in etwa 15 m Abstand von der Bake. Die Anzeige in der unteren Zeile gibt Grad zum Spiegel der Bake an. Sie schwankt um etwa 0,1 Grad. Verschiebt man den Detektor ändert sich die Positionsangabe.
[stream:fe8a376a4f]http://www.rasenrobo.de/bake/IMGP2168.avi[/stream:fe8a376a4f]
[stream:fe8a376a4f]http://www.rasenrobo.de/bake/IMGP2169.avi[/stream:fe8a376a4f]

oder youTube
http://www.youtube.com/watch?v=1T4V-J581R4
http://www.youtube.com/watch?v=K84CkFU-zxY


Verbesserungsmöglichkeiten:
Bake: Der Laser wird nicht seitlich, sondern genau über der Nabe der Festplatte angebracht. Ein mm-großer Spiegel sollte dann ausreichend sein. Der feststehende Spiegel kann dann näher am rotierenden angebracht werden. Der tote Winkel durch Verdeckung des Speigelbildes könnte dadurch verringert werden.
Mit welcher Anordnung des feststehenden Spiegels könnte man diesen toten Winkel ganz vermeiden?

Wer kann den Verstärker im Detektor verbessern ? Ich bin Elektroniklaie. Wichtig ist ein Ansprechen im us-Bereich.

Zahlenbeispiel: Breite der Photodioden 5mm. 10 m Abstand >>> Kreisumfang 63 m >>> 1:10000. Bei 50 Hz ergibt das eine Impulsbreite von 1:500000 sec = 2 Mikrosekunden. Daraus ergibt sich auch, dass mit üblichen frequenzkodierten IR sender und Detektoren eine ähnliche Genauigkeit und Auflösung nicht erreicht werden kann.

Nu, was haltet Ihr von der Sache ?

Christian H

Michael
27.06.2008, 23:41
Hallo Christian H,

irgendwie ist mir nicht klar, wie jetzt die Winkelmessung funktioniert?
Die Bake sendet einen Rundstrahl, der zusätzlich noch vom Spiegel dahinter reflektiert wird? Wo steckt da die Winkelinformation?

Im Text ist von einem Video die Rede, das nicht verlinkt ist. Kannst du das noch nachreichen?

Kannst du (oder einer der Moderatoren) die Bilder etwas verkleinern, damit ich auf meinem 19 Zöller nicht quer scrollen muß?
Damit wird der Text leichter les- und erfaßbar ;)

Gruß, Michael

Manf
28.06.2008, 06:29
Mit welcher Anordnung des feststehenden Spiegels könnte man diesen toten Winkel ganz vermeiden?
Ich denke der Arbeitsbereich der Bake ist etwa 90° minus der Abdeckung durch den Drehspiegel auf der einen Seite und minus der Begrenzung durch den endlichen festen Spiegel auf der anderen Seite.

Einen vertikal aufgeweiteten Strahl kann man auch über den Drehspiegel hinweg leiten und die Anordnung entsprechend neigen.

Insgesamt muss man bei der Aufweitung das Arbeitsfeld berücksichtigen damit sich die Leistung nicht zu sehr verteilt. (Feinsicherung)

Christian H
28.06.2008, 11:35
Hi,
ein Abstrahlwinkel von fast 180 Grad wäre wohl möglich, wenn man den Laserstrahl von oben auf einen 45 Grad Drehspiegel lenken würde. Dann wäre der Laser schon mal aus dem Weg. Mit 2 90 Grad aneinanderliegenden Spiegel könnte man dann den reflektierten Strahl über den Drehspiegel lenken.

http://www.rasenrobo.de/Bake/Bake180%20Grad.jpg.

Der Link zu den Videos müssten jetzt stimmen.


http://www.rasenrobo.de/Bake/Bake%20Berechnung.jpg.


Ich hoffe, dass das Prinzip jetzt verständlich ist. Falls nicht nochmal nachfragen.

Michael
28.06.2008, 11:55
Hallo Christian_H,

ich fasse es mal zusammen, nur damit ich sehe, ob es so richtig ist:
Der Laser wird durch einen Drehspiegel über das, ähh, Zielfeld gelenkt.
Der Strahl streicht im Uhrzeigersinn darüber.
Der rückseitige (feste) Spiegel lenkt das Signal, wenn es über die Zielfeld-abgewandte Seite streicht, wieder zum Zielfeld, sodaß dort der Strahl in entgegen dem Uhrzeigersinn entlangstreicht.
Der Zeitunterschied beim Auftreffen der beiden Strahlen auf das Ziel wird als Winkelinformation ausgerechnet.
Soweit richtig?
Wenn deine Anordnung (theoretisch) 180° abdeckt, wie unterscheidest du am Empfänger, in welchem der beiden Quadranten sich das Ziel befindet?

Gruß, Michael

Christian H
28.06.2008, 12:09
Hallo Michael,

ja, so funktioniert´s.

wenn der Strahl von der Seite kommt, ergibt sich keine Zweideutigkeit, da der Strahl ja während jeder Drehung auch auf die Rückseite des Drehspiegels fällt. Dadurch ist immer das Zeitintervall "reflektiert-direkt" größer als "direkt - reflektiert".

Du hast recht. Bei der komplizierteren Anordung mit Laser oben hat man eine Zweideutigkeit, die man aber dadurch beheben könnte, dass man den Laser periodisch ein und ausschaltet, was sich ja über den Mikrokontroller problemlos machen läßt. Schaltet man den Laser an während er bei 0 Grad ist, weiss man dass der erste Impuls z.B. der reflektierte ist. Dann kommt der direkte. Läßt man nach einer vollen Drehung des Spiegels den Laser für eine volle Drehung abgeschaltet ist reflektiert-direkt immer größer als direkt - reflektiert.

Gruß Christian

Michael
28.06.2008, 12:48
Hallo Christian_H,


Schaltet man den Laser an während er bei 0 Grad ist, weiss man dass der erste Impuls z.B. der reflektierte ist. Dann kommt der direkte. Läßt man nach einer vollen Drehung des Spiegels den Laser für eine volle Drehung abgeschaltet ist reflektiert-direkt immer größer als direkt - reflektiert.
Das Abschalten für 1 Umdrehung sorgt imho nicht für Klarheit, der Abstand der Doppelpulse vergrößert(verdoppelt) sich nur, weil ja für 1 Umdrehung der Laser dunkel bleibt.


wenn der Strahl von der Seite kommt,
achso, ja, so könnte es gehen. Damit reduzierst du den Bereich auf 1 Quadranten und bräuchtest keine Dunkeltastung. Allerdings wird der Fehler größer, je näher der Empfänger an der Bake ist.

Kannst du das mathematische Modell, welches beim Empfänger angewendet wird, hier erklären?

Gruß, Michael

Christian H
28.06.2008, 13:26
Hi,

habe im basic-Programm des Detektors noch einige Kommentare eingefügt. Hoffe, dass sich hierdurch einiges erklärt. Ist nichts besonderes.
2 aufeinanderfolgende Impulsintervalle TA und TB bestimmen. Summe der Intervalle ergibt eine Umdrehungsdauer des Spiegels. Da nicht klar ist ob das erste Intervall "direkt-reflektiert" oder "reflektiert-direkt" ist, wird einfach das kürzere ausgewählt und als TA gespeichert in Beziehung zur Gesamtrotationsdauer gesetzt:

Winkel = TA /(TA+TB)*180 Grad. Eben da diese Beziehung derart einfach ist, ist die Methode sehr robust.

Eindeutigkeit läßt sich sicherlich auch bei Laser von oben und 180 Grad Blickfeld erreichen. Das läßt sich irgendwie hinbiegen.

Größere Probleme sehe ich im Gleichlauf des Motors, wenn man noch höhere Auflösung erreichen will. Die Auflösung weiter nach oben zu treiben erscheint mir durchaus reizvoll. Eine Auflösung auf Detektorbreite, also einige mm in einer Entfernung von 15 m wären theoretisch ja denkbar. Entscheidend ist hierfür die konstante Drehbewegung des Motors. Vielleicht ließe sich hier mit einem Glockenankermotor (s. Faulhaber, Wikipedia) noch etwas verbessern. Dabei kommt mir, dass der Detektor mit 4 MHz läuft. Den werde ich noch mit 20MHz austauschen. Vielleicht bringt das noch etwas an Genauigkeit. Auch eine Abschirmung des Detektors gegen Umgebungslicht durch eine Blende wäre noch denkbar. Mit einem Servo könnte man ja den Detektor abwechselnd immer grob ich Richtung der Baken einstellen.



Gruß Christian

Michael
28.06.2008, 15:05
Hallo Christian_H,

ja, klar, der Winkel entspricht ja am Ende der Zeitdauer der Pulsabstände bezogen auf die Gesamtdauer, soweit ist das jetzt geklärt ;)
Aber du kannst mit deinem jetzigen Aufbau nicht unterscheiden, auf welcher Seite die Pulse kommen, ich habe dazu ein Bild angehängt.
Messung A'-A unterscheidet sich nicht von C-C'

Der Gleichlauf des Motors ist imho vernachlässigbar, du hast doch genug Schwumngmasse dran.


Mit einem Servo könnte man ja den Detektor abwechselnd immer grob ich Richtung der Baken einstellen.
Wie kriegst du die Richtung der Bake raus?
Bisher hast du den Senderwinkel, aber nicht den des Empfängers.

Gruß, Michael

Christian H
28.06.2008, 15:30
Hi,

ei freilich geht´s. Stell dir vor, dass der Laser immer wenn er auf Deiner Zeichnung senkrecht nach oben strahlt aus- oder eingeschaltet wird. Dann gibt es nie das kurze Zeitintervall A ´ A. Ein Robo rechts oben kann nur Impulse erhalten die mit A starten und mit A´enden, wobei der Spiegel nach Deiner Zeichnung etwa 270 Grad dreht.

Mit dem Verfahren ist vorerst nur der Senderwinkel zu bestimmen. Mit 2 Baken ergibt das aber die genaue Position eines Robos (z.B. Rasenmäher) wie z.B. auch mit GPS . Die Richtung in der der Robo steht kann man mit einem Kompass bestimmen, oder aber aus aufeinanderfolgenden Positionsmessungen wenn der Robo fährt. Auch das ist kein Problem.

Im Moment bin ich noch am tüfteln wodurch sich die geringen Schwankungen der Winkelangaben um 0,1 Grad ergeben. Ich denke die Drehung des Motors ist letztlich das größte Problem. Schließlich erfolgt die Beschleunigung der Platten nur in bestimmten Winkelpositionen, welche durch die Lage der Magnete vorgegeben ist. Die Regelung auf eine konstante Drehzahl bedingt auch, dass eine diskrete Schwankung um den Sollwert vorliegt. Drehzahl sinkt knapp unter Soll >> Beschleunigung. Drehzahl knapp darüber>> Motor dreht kurz ohne Antrieb. Die Schwankungen sind sicher minimal. Aber um auf eine genauigkeit von 1 cm auf 15 m Abstand zu kommen ist bereits eine Konstanz von 1: 6300 erforderlich. Jemand der mit Regelungstechnik bewandert ist (PID) könnte da wohl noch einiges verbessern.

Felix G
28.06.2008, 15:46
Wenn man den Laser auf zwei unterschiedliche Arten moduliert, abhängig davon ob er gerade den Spiegel trifft oder nicht, sollte sich dieses Problem eigentlich lösen lassen

Michael
28.06.2008, 17:54
Hallo Christian_H,


Stell dir vor, dass der Laser immer wenn er auf Deiner Zeichnung senkrecht nach oben strahlt aus- oder eingeschaltet wird. Dann gibt es nie das kurze Zeitintervall A ´ A. Ein Robo rechts oben kann nur Impulse erhalten die mit A starten und mit A´enden, wobei der Spiegel nach Deiner Zeichnung etwa 270 Grad dreht.
aha, verstehe, damit halbierst du aber die Abtastfrequenz.


Mit 2 Baken ergibt das aber die genaue Position eines Robos (z.B.dann brauchst du aber auch 2 Detektoren in unterschiedlicher Höhe sonst weißt du ja nicht, von welcher Bake das Signal kam.


Die Richtung in der der Robo steht kann man mit einem Kompass bestimmen, oder aber aus aufeinanderfolgenden Positionsmessungen wenn der Robo fährt. Auch das ist kein Problem.
glaubst du ;)

Die Schwankungen in der Winkelauflösung liegen am System selbst. Bei 15m Entfernung und 50Hz Drehfrequenz ergibt sich eine Umfangsgeschwindigkeit von 2356 m/s. Während eines Taktes des Controllers ist der Strahl schon 0,6mm weitergewandert. Neben dem Interrupts laufen noch diverse andere Befehle ab, die werden z.B. erst fertiggemacht, bevor in den IRQ gesprungen wird. Manche brauchen nur einen Takt, manche derer 3.
Also ist 0,1° ein gutes Ergebnis.
Wenn du alle Stellen nach dem 10tel abschneidest, sieht es auch nicht mehr so unruhig aus ;)

@Felix_G:

Modulation ist bei Christian nicht vorgesehen. Für die Erkennung einer Frequenz sind vielleicht 100 Takte nötig. Bei einem 1cm breiten Laserpunkt und einer Geschwindigkeit von 2356 m/s müßte man den Strahl mit mindestens 23,56MHz modulieren. Einen zweiten mit noch höherer Frequenz.

Gruß, Michael

Felix G
28.06.2008, 18:00
Naja, Modulation wäre eine Möglichkeit gewesen...

daß man das nicht bei jeder beliebigen Geschwindigkeit machen kann ist klar, der Spiegel müsste mit einer entsprechend geringeren Drehzahl laufen.

Andere Möglichkeit: eine LED mit einer anderen Wellenlänge als der Laser, die auf der Rückseite des Spiegels montiert ist.
edit: oder noch viel einfacher, eine LED die eben ein und ausgeschaltet wird, abhängig vom Winkel des Spiegels.


Natürlich gäbe es auch noch viele weitere Varianten wie sich dieses (Teil-) Problem lösen lässt.

Manf
28.06.2008, 19:34
Eine konstante Drehzahl beim Plattenantrieb mit Synchronmotor erreicht man am besten ohne Regelung.

Wenn die elektrische Phase (Quarz) und die räumliche Phase (symmetrischer Aufbau) gut übereinstimmen bleiben Schwingungen gering.
Man kann dann noch die Phasenschwingungen minimieren indem man die Ansteuerung sinunsförmig (trapezförmig) und nicht zu kräftig macht. Dazu hilft noch, wie gesagt, hohes Trägheitsmoment und geringe Reibung.

Ohne Regelung hat man auch nur drehzahlsynchrone Störungen die sich in einer konstanten und nur vom Winkel abhängigen Phasenabweichung, einer Nichtliearität des Systems äußern.

Mit einer Regelung die Zeitkostanten einbringt kann man daraus ein asynchrones Phasenrauschen machen, das man eher vermeiden will.

Ein Glockenankermotor mit Kommutator bringt eher etwas Kontaktrauschen ein.