rockin_santa
16.05.2008, 19:49
Hallo Zusammen,
Ich möchte meinem Bot (ATmega32, oder größer) die Positionsbestimmung über IR-Baken ermöglichen und schwanke zwischen 2 Möglichkeiten.
1.)
Mehrere feste bekannte IR-Baken mit codiertem Rundumlicht aufstellen und dem Bot einen drehbaren Empfänger geben, der den Winkel zwischen seiner Längsrichtung und dem Einfallwinkel ermitteln kann. Kombiniert mit einem Magnetfeldsensor als Kompass wäre man mit wenig Rechenaufwand in der Lage eine vektorielle Position zu ermitteln.
2.)
Mehrere feste bekannte IR-Baken aufstellen, die auf ein codiertes IR-Signal mit einem US-Signal antworten, dessen Laufzeit gemessen werden kann. Hierbei ist der Rechenaufwand erheblich mehr.
Aus der Sicht eines Programmieranfängers ist die erste Methode sicherlich attraktiver, allerdings hat sie 2 Nachteile:
- Es ist mehr mechanischer Aufwand, höherer Stromverbrauch, mehr Gewicht und mehr Volumen.
- Die Zeit, drei Baken mechanisch zu peilen dauert viel länger, als drei Laufzeitmessungen. Diese können sogar während der Fahrt erfolgen.
Aus diesen Gründen möchte ich die zweite Methode verwirklichen. Hierzu habe ich mir ein paar Gedanken zur Genauigkeit gemacht:
Als Areal habe ich meinen Garten mit annährend ebenem Rasen und einer maximalen Ausdehnung von knapp 30m zu jeder Seite.
Die Lichtgeschwindigkeit beträgt bekanntlich ca. 300.000 km/sek. Bei der Größe des Areals kann sie vernachlässigt werden.
Die Schallgeschwindigkeit liegt bei 343 m/sek. Wenn ich nun einem µC den 16bit-Timer starte, das IR-Licht aussende und das Zählregister auf Null setze, und das US-Signal interruptgesteuert das Zählregister auslesen läßt, habe ich einen Fehler von ein paar Takten.
Diese sind vernachlässigbar, da ich pro 10mm Abstand zum Sender 233 Takte habe (bei 8 MHz Systemtakt). Ohne Prescaler komm ich auf 2,8m Abstand, die ich mit dem 18bit-Timer messen kann. Zähle ich dann noch in einer Interruptroutine ein Register hoch, kann ich den ganzen Garten abdecken.
Mir würde eine Genauigkeit von 10cm völlig ausreichen, ich behaupte mal, das wird klappen.
Jetzt ist die Mathematik mein Problem. Drei Laufzeiten von festen Objekten wären in der Vektorrechnung 3 bekannte Ortsvektoren mit je einem bekannten Radius.
Allerdings weiß ich nicht, wie ich den Schnittpunkt dieser 3 Kreise berechnen kann. Zu Kreisen und Geraden oder Ebenen habe ich im Internet googelnderweise Material finden können, aber zu dem Problem mit 3 Kreisen, bzw. 2 Kreisen und der resultierenden Geraden und einem 3. Kreis finde ich nichts.
Hat sich hier schon mal jemand mit so einem Rechenverfahren auseinandergesetzt und ist zu einer Lösung gekommen oder hat Anregungen?
Abschließend sei noch erwähnt, dass die Positionsberechnungen in C auf dem µC erfolgen sollen. Allerdings ist es nicht zwingend, dass diese während der Fahrt erfolgen müssen.
Ich bin auch erstmal nicht an C-Code interessiert, sondern der grundlegenden mathematischen Lösung. Allerdings kann diese speziell sein, denn in jedem Fall schneiden sich 3 Kugeln in einem Punkt.
Zu guter Letzt würde mich auch interessieren, ob hier auch andere an diesem Problem arbeiten oder dieses System nutzen möchten, wenn das Mathematische soweit gelöst ist.
schönes Wochenende :)
rockin_santa
Ich möchte meinem Bot (ATmega32, oder größer) die Positionsbestimmung über IR-Baken ermöglichen und schwanke zwischen 2 Möglichkeiten.
1.)
Mehrere feste bekannte IR-Baken mit codiertem Rundumlicht aufstellen und dem Bot einen drehbaren Empfänger geben, der den Winkel zwischen seiner Längsrichtung und dem Einfallwinkel ermitteln kann. Kombiniert mit einem Magnetfeldsensor als Kompass wäre man mit wenig Rechenaufwand in der Lage eine vektorielle Position zu ermitteln.
2.)
Mehrere feste bekannte IR-Baken aufstellen, die auf ein codiertes IR-Signal mit einem US-Signal antworten, dessen Laufzeit gemessen werden kann. Hierbei ist der Rechenaufwand erheblich mehr.
Aus der Sicht eines Programmieranfängers ist die erste Methode sicherlich attraktiver, allerdings hat sie 2 Nachteile:
- Es ist mehr mechanischer Aufwand, höherer Stromverbrauch, mehr Gewicht und mehr Volumen.
- Die Zeit, drei Baken mechanisch zu peilen dauert viel länger, als drei Laufzeitmessungen. Diese können sogar während der Fahrt erfolgen.
Aus diesen Gründen möchte ich die zweite Methode verwirklichen. Hierzu habe ich mir ein paar Gedanken zur Genauigkeit gemacht:
Als Areal habe ich meinen Garten mit annährend ebenem Rasen und einer maximalen Ausdehnung von knapp 30m zu jeder Seite.
Die Lichtgeschwindigkeit beträgt bekanntlich ca. 300.000 km/sek. Bei der Größe des Areals kann sie vernachlässigt werden.
Die Schallgeschwindigkeit liegt bei 343 m/sek. Wenn ich nun einem µC den 16bit-Timer starte, das IR-Licht aussende und das Zählregister auf Null setze, und das US-Signal interruptgesteuert das Zählregister auslesen läßt, habe ich einen Fehler von ein paar Takten.
Diese sind vernachlässigbar, da ich pro 10mm Abstand zum Sender 233 Takte habe (bei 8 MHz Systemtakt). Ohne Prescaler komm ich auf 2,8m Abstand, die ich mit dem 18bit-Timer messen kann. Zähle ich dann noch in einer Interruptroutine ein Register hoch, kann ich den ganzen Garten abdecken.
Mir würde eine Genauigkeit von 10cm völlig ausreichen, ich behaupte mal, das wird klappen.
Jetzt ist die Mathematik mein Problem. Drei Laufzeiten von festen Objekten wären in der Vektorrechnung 3 bekannte Ortsvektoren mit je einem bekannten Radius.
Allerdings weiß ich nicht, wie ich den Schnittpunkt dieser 3 Kreise berechnen kann. Zu Kreisen und Geraden oder Ebenen habe ich im Internet googelnderweise Material finden können, aber zu dem Problem mit 3 Kreisen, bzw. 2 Kreisen und der resultierenden Geraden und einem 3. Kreis finde ich nichts.
Hat sich hier schon mal jemand mit so einem Rechenverfahren auseinandergesetzt und ist zu einer Lösung gekommen oder hat Anregungen?
Abschließend sei noch erwähnt, dass die Positionsberechnungen in C auf dem µC erfolgen sollen. Allerdings ist es nicht zwingend, dass diese während der Fahrt erfolgen müssen.
Ich bin auch erstmal nicht an C-Code interessiert, sondern der grundlegenden mathematischen Lösung. Allerdings kann diese speziell sein, denn in jedem Fall schneiden sich 3 Kugeln in einem Punkt.
Zu guter Letzt würde mich auch interessieren, ob hier auch andere an diesem Problem arbeiten oder dieses System nutzen möchten, wenn das Mathematische soweit gelöst ist.
schönes Wochenende :)
rockin_santa