-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: Laser Ortungssystem 1cm Genauigkeit auf 15 m

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    14.05.2006
    Beiträge
    260

    Laser Ortungssystem 1cm Genauigkeit auf 15 m

    Anzeige

    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.




    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.






    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:

    Code:
    $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:

    Code:
    $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
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken imgp2163.jpg   imgp2162.jpg   detektor.jpg   imgp2134.jpg   bake_berechnung.jpg  


  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von Michael
    Registriert seit
    17.01.2004
    Ort
    Karlstadt
    Alter
    48
    Beiträge
    1.254
    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

  3. #3
    Super-Moderator Lebende Robotik Legende Avatar von Manf
    Registriert seit
    30.01.2004
    Ort
    München
    Alter
    64
    Beiträge
    12.366
    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)
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken winkel_115.jpg  

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    14.05.2006
    Beiträge
    260
    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.

    .

    Der Link zu den Videos müssten jetzt stimmen.


    .


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

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von Michael
    Registriert seit
    17.01.2004
    Ort
    Karlstadt
    Alter
    48
    Beiträge
    1.254
    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

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    14.05.2006
    Beiträge
    260
    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

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von Michael
    Registriert seit
    17.01.2004
    Ort
    Karlstadt
    Alter
    48
    Beiträge
    1.254
    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

  8. #8
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    14.05.2006
    Beiträge
    260
    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

  9. #9
    Erfahrener Benutzer Roboter Genie Avatar von Michael
    Registriert seit
    17.01.2004
    Ort
    Karlstadt
    Alter
    48
    Beiträge
    1.254
    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
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken winkel_166.jpg  

  10. #10
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    14.05.2006
    Beiträge
    260
    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.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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