Forum: Mikrocontroller und Digitale Elektronik Ortung mittels Ultraschall - Projektvorstellung / Hilfegesuch


von Moritz N. (mox-mox)


Angehängte Dateien:

Lesenswert?

Hi,
Ich möchte in meinem Zimmer ein Ortungssystem auf Ultraschallbasis 
realisieren um einem Roboter so das genaue Navigieren zu ermöglichen. Da 
ich momentan einfacher Zivi bin, scheiden für mich Ideen wie 
Differential GPS-Beitrag "Ortung und Genauigkeit" aus 
Kostengründen aus. Ich möchte wie im 
Beitrag "relative Ortung" beschrieben, meine Roboter 
per Ultraschall orten lassen.
(Für diejenigen, die den referenzierten beitrag nicht lesen: )
Das bedeutet, dass der Roboter zu einem Zeitpunkt einen 
Ultraschallimpuls aussendet und dieser dann von 3 Empfängern im Raum 
empfangen wird. Über die Laufzeit des Ultraschallimpulses kann man dann 
die Position bestimmen.

Da mein Roboter jedoch möglichst eigenständig operieren soll, möchte ich 
nicht nur bei festgelegten Zeitpunkten einen US-Impuls senden (schon 
allein wegen der nötigen Syncronisation), sondern zu beliebigen 
Zeitpunkten die aktuelle Position erfragen können.
Da das Ortungssystem somit den Sendezeitpunkt nicht kennt, erfährt es 
nur die Differenzen der drei Laufzeiten ( Signal 2 braucht soviel länger 
als Signal 1, Signal 3 braucht soundsoviel länger als Signal 1).
Da die Laufzeit des Ultraschallsignals zur Wegstrecke analog ist, werde 
ich im Weiteren nur noch von der Strecke sprechen.
Wenn ich nun um den Empfänger der zuerst das Signal empfangen habe einen 
!!kleinen!! Kreis ziehe, und dann um den zweiten Empfänger einen Kreis 
ziehe, dessen Radius um die Differenz der Ultraschalllaufzeit größer 
ist, und so auch beim dritten Empfänger verfahre, so treffen sich die 
drei Kreise in einem Punkt, wenn ich die drei Radien gleichmäßig 
vergrößere (siehe Kreise.png).
Aufgrund dieser Überlegung habe ich ein Gleichungssystem aufgestellt, 
welches den Schnittpunkt der drei Kreise beschreibt, welcher ja die 
Position des Robots ist.

Dabei sei xa die x-Koordinate des ersten Empfängers und ya die 
y-Koordinate. xb und yb, sowie xc und yc gelten respektive für für den 
zweiten und dritten Empfänger.
x und y sind die Koordinaten des Schnittpunktes.
dA, dB und dC sind die Laufzeitdifferenzen, diejenige des Empfängers, 
der zuerst etwas empfangen hat ist immer Null.
r ist der Radius des kleinsten Kreises.

Ich habe dieses Gleichungssystem in wxMaxima getestet (Datei im Anhang) 
und solange nur ganze Zahlen verwendet werden, liefert es die richtigen 
Ergebnisse. Wenn gebrochene Zahlen vorkommen, liefert Maxima kein 
Ergebniss, ich gehe davon aus, dass dies daran liegt, dass dann kein 
exaktes Ergebniss vorliegt.

Ich habe auch schon zwei mögliche Platinen erstellt, doch die werde ich 
erst ätzen lassen, wenn ich davon ausgehen kann, dass das ganze dann 
auch funktionieren wird.

Für mich verbleiben nun noch zwei Probleme für deren Lösung ich das 
Forum um Hilfe anrufe:

1:) Ich habe keine Ahnung, wie ich die Gleichung ohne ein CAS lösen 
würde. (Beziehungweise meine Ansätze führen [im CAS] zu falschen 
Ergebnissen).
2:) Ich habe noch weniger Ahnung, wie ich das ganze dann wirklich in 
brauchbaren, schnellen Code für einen AVR umwandeln würde. Damit meine 
ich, dass ich das Problem sehe, den Rechenteil dann auch in meine 
Firmware zu übernehmen, bis jetzt waren meine Projekte noch ein 
Stückchen einfacher. Aber wahrscheinlich wird sich das zweite Problem 
klären, wenn sich das erste klärt.

Was haltet Ihr von der Idee/dem Projekt? Denkt Ihr, dass es 
funktionieren wird/kann? Seht Ihr (schon) Fehler?

mit freundlichen Grüßen,
mox-mox

Anhang:
Koordinatensystem.geo: 'Zeichnung' zu öffnen mit Euklid Dyna Geo 
http://www.dynageo.de/
Kreise.png: Bildschirmabbild von Koordinatensystem.geo für diejenigen, 
die Dynageo nicht 'runterladen wollen
US_Ortung.wxm: wxMaxima-Dokument
http://maxima.sourceforge.net/
ANTI-GPS-Platine.zip: Platinen und Schaltpläne für Eagle

von dummy (Gast)


Lesenswert?

>Was haltet Ihr von der Idee/dem Projekt?

Nichts. Es sei denn dein Zimmer ist völlig leer.

von Moritz N. (mox-mox)


Lesenswert?

Sofern da nicht was großes zwischen Bot und Empfänger ist, sollte 
Ultraschall da doch drum rum fliesen, oder etwa nicht?

von Niels K. (niels-k)


Lesenswert?

Von den Zeiten her sollte es gehen.

Schall: 300m/s --> 3,3Millisekunden pro Meter. Dann die Differenzen 
bestimmen und berechnen. Die Kreise sollten durch Rechtecke angenähert 
werden. Die Kreisformel wird sonst zu lang.

von Moritz N. (mox-mox)


Lesenswert?

Hi, sorry falls die Frage jetzt blöd klingt, aber wie genau kann ich die 
Kreise durch Rechtecke annähern? Ich mein, wenn ich den zu bestimmenden 
Punkt nicht kenne, wie wird dann das Rechteck festgelegt? Könntest du da 
etwas genauer werden? Weil so kann ich mir da irgendwie wenig drunter 
vorstellen. :(

Danke für die Antworten bis jetzt.

mox-mox

von Niels K. (niels-k)


Lesenswert?

Im Grunde müsste es so gehen:

(x − xM)2 + (y − yM)2 = r2

Gefragt sind ja nicht nur die Mittelpunkte. R ist der Abstandszeitwert 
der mit den Sensoren gemessen wird. Xm und Ym sind die Mittelpunke des 
Kreises. x und y die Laufwerte. Diese Laufzeitwerte werden für zwei 
Kreise zwei Lösungen liefern (beim Gleichsetzen). Daraus lassen sich 
dann zwei Werte für Ym und Xm bestimmen.

Das mit einem uP in Echtzeit zu berechnen, wird happig am Limit liegen. 
Zumal hier mehrere verschachtelte Gleichungen vorliegen werden, die alle 
für sich gelöst werden müssen. Die Lösungen dafür kann man schnell mit 
einem CAS bestimmen. Per Hand wird es ab zwei Kreisen dann doch 
fehleranfällig. Ich empfehle Dir eine Version von Mathcad (V 6.0). Damit 
lassen sich diese Fragestellungen in geschlossene Ausdrücke umschreiben.

Bei einer Annäherung des Kreises an ein Rechteck (Geradengleichungen), 
in Form von Polygonzügen, könnte man mit einfacher Vektorrechnung den 
gemeinsamen Punkt bestimmen.

Viel Erfolg

von Moritz N. (mox-mox)


Lesenswert?

Hi,
Erstens: Sollen die 2er Quadrate sein?
-> Wenn sie Quadrate sind, dann hast du da die Gleichung für nen Kreis 
da stehen und kein Rechteck.
-> Wenn sie wirklich einfache 2er sind, dann kann man sie auch weglassen 
(Distributivgesetz)

Zweitens: Wenns so einfach wäre, dann hätte ich das ja schon, mein 
Problem liegt doch darin, dass ich eben keinen absoluten Wert für r 
kenne, weil ich die absolute Laufzeit nicht kenne:
Mein bot soll zu einem beliebigen Zeitpunkt (=> Ortungsgerät kennt 
diesen Zeitpunkt nicht) einen Ultraschallimpuls senden. Wenn der erste 
von drei Empfängern etwas "hört", startet er einen Timer, und an diesem 
werden dann die Zeitpunkte an denen der Zweite und der Dritte Empfänger 
etwas "hören" gemessen. Somit kann ich nur sagen, dass die Strecke zum 
Zweiten Empfänger um einen bestimmten&bekannten Betrag länger ist, als 
die Strecke zum Ersten, und dass die Strecke zum Dritten Empfänger um 
einen anderen auch bestimmten&bekannten Betrag länger ist.

Wenn du Du Dir mein Gleichungssystem im Ausgangspot anguckst, wirst du 
feststellen, dass es fast identisch ist zu deiner Gleichung, mit der 
Ausnahme, dass ich den Kreisradius eben in den bekannten und den 
unbekannten Teil aufgeteilt habe.

Gruß,
mox-mox

p.S.: Danke für den Tipp mit MathCAD, das werde ich ausprobieren.

edit: Rechtschreibung (schwer die deutsche Sprache seien...)

von Niels K. (niels-k)


Lesenswert?

Ich sage Dir das wirklich nur ungerne, aber: Das Projekt ist vermutlich 
zu aufwendig. Über das Thema wurden bereits mehrere Doktorarbeiten 
angefertigt - es hat es wirklich in sich.

Falls Du Dich trotzdem nicht davon beirren lässt, zwei kleine Tipps:

Variante 1:
Bau ein zweites Referenzsystem ein. Ich würde eine IR-Diode nehmen. 
Diese steht in Sichtkontakt zu einer Deiner Ultraschallstationen. Sendet 
Dein Fahrzeug die Position per Ultraschall, so leuchtet die Diode. Damit 
timest Du Deine Messung.

Variante 2:
Lass die Stationen das Ultraschallsignal emitieren. Nicht gleichzeitig, 
sondern kurz nacheinander. Dadurch errechnet das Fahrzeug seine Position 
anhand der Schnittpunkte der einzelnen Laufzeiten und (!!!) dem Versatz 
der Signalanfänge.

Und ja, es sind Quadrate ^2. (auch ich musste irgendwann den LK Mathe 
absolvieren...)

von STK500-Besitzer (Gast)


Lesenswert?

>-> Wenn sie Quadrate sind, dann hast du da die Gleichung für nen Kreis
>da stehen und kein Rechteck.

Seit wann breiten sich Wellen einer annähernd punktförmigen Quelle 
rechteckig aus?

von Martin L. (Gast)


Lesenswert?

Weil niemals exakt lohnt es sich nur die jeweils (beiden) Schnittpunkte 
der Standkreise zu berechnen. Gibt bei drei Kreisen am Ende 6 Punkte und 
deren Mittelwert ist dann mit entsprechender Genauigkeit Deine Position.
Und die beiden Schnittpunkte von zwei Kreisen sollte man auch noch mit 
Bleistift und Papier lösen können. U.U. lohnt sich die Verwendung eines 
anderen Koordinatensystems als dem Rechtwinkligen. (Denn dort lassen 
sich Kreise nicht als geschlossene Funktion y=f(x) darstellen was dann 
immer die Fallunterscheidung obere Hälfte/untere Hälfte mit sich 
bringt.)
Ansonsten - es muss nicht immer zwei Schnittpunkte geben wenn die Kreise 
sich nicht überlappen - dann bietet es sich dann die beiden Punkte 
welche am nächsten zueinander liegen als Wertepaare zu verwenden.

Viele Grüße,
 Martin L.

PS: Ich denke das Projekt ist nicht besonders anspruchsvoll und gut 
nebenher machbar. Ne Doktorarbeit wird es jedenfalls nicht - dafür 
müsste man schon noch die Reflektionen mit einbeziehen.

von Matthias B. (matthias882)


Lesenswert?

Hallo

Ich würde den Roboter einen Ultraschall-Impuls aussenden lassen, auf den 
die 3 Stationen dann quasi antworten. Das ganze noch ein bißchen 
zeitversetzt. Soll heißen Station 1 antwortet sofort, Station 2 nach 
genau einer halben Sekunde, 3 nach einer Sekunde (bei größeren Räumen 
evtl. anpassen damit es nicht zu Überschneidungen kommt).
Der Rob enpfängt diese Signale wieder. Er kann somit klar die jeweilige 
Station idendifizieren und kann nach dem Prinzip die absolute Entfernung 
zu jeder Station ausrechnen. Die 3 Absoluten Entfernungen sollten sich 
dann recht einfach zu den Koordinaten verrechnen lassen...

von STK500-Besitzer (Gast)


Lesenswert?

Wozu eigentlich 3 Empfänger?
In der Ebene würde auch 2 (erstmal) reichen.

Hast du schon mal einen Test gemacht?
Ich würde zwei Empfänger an ein Osziloskop hängen und mir den zeitlichen 
Versatz zwischen den Signalen angucken.
Interessant wären auch die Echos.
Gibt es eigentlich omnidirektionale Luft-Ultraschall-Wandler?
Oder zumindest welche mit einem großen Öffnungswinkel?

von Richard U. (ronw)


Lesenswert?

> Wozu eigentlich 3 Empfänger?
> In der Ebene würde auch 2 (erstmal) reichen.

Aber nur wenn die Empfänger geschickt platziert werden. Sonst sind 
nämlich mit nur 2 Empfängern 2 Lösungen möglich.

Das ganze Problem ist sehr ähnlich zur Positionsbestimmung mit 
Satellitennavigationssystemen. Dabei wird das Gleichungssystem immer 
stückweise linearisiert und dann iterativ gelöst. Das sollte auch in 
diesem Fall die einfachste Möglichkeit sein. Am besten einfach mal im 
Quellcode von einem Open-Source GNSS Empfänger nachvollziehen.

von STK500-Besitzer (Gast)


Lesenswert?

>Aber nur wenn die Empfänger geschickt platziert werden. Sonst sind
>nämlich mit nur 2 Empfängern 2 Lösungen möglich.

Darauf sollte man schon achten.
Drei Sensoren machen schon Sinn, wenn sich die Sensoren nicht direkt auf 
der gleichen Ebene wie der Sender befinden (unterschiedliche Höhen).
Zum Ausprobieren reichen aber zwei und ein Oszilloskop.

>Das ganze Problem ist sehr ähnlich zur Positionsbestimmung mit
>Satellitennavigationssystemen. Dabei wird das Gleichungssystem immer
>stückweise linearisiert und dann iterativ gelöst. Das sollte auch in
>diesem Fall die einfachste Möglichkeit sein. Am besten einfach mal im
>Quellcode von einem Open-Source GNSS Empfänger nachvollziehen.

Triangulation im Bereich des Wasserschalls ist schon etwas älter, sollte 
also auch nicht einfacheren Mitteln als Satellitennavigation 
funktionieren.

von Detlef _. (detlef_a)


Angehängte Dateien:

Lesenswert?

Du hast die Hyperbelnavigation neu erfunden, die Standlinien konstanter 
Laufzeitdifferenz sind Hyperbeln, Loran arbeitet (arbeitete?) z.B. so. 
Deswegen wird es für die Lösung der obengenannten Gleichung sicher 
Standards geben, die sich bestimmt finden lassen.

Ich habe allerdings mal Mathematica nach der Lösung oben aufgestellten 
Gleichungssystems gefragt.
Das geht so:
CForm[Solve[{(x - xa)^2 + (y - ya)^2 == (r)^2,
      (x - xb)^2 + (y - yb)^2 == (r + dB)^2,
      (x - xc)^2 + (y - yc)^2 == (r + dC)^2}, {x, y, r}]]

Es gibt zwei Lösungen, die enthalten Quadratwurzeln, eine wird ein 
komplexes Ergebnis liefern. Die Lösung ist allerdings in der source 
länger als 1/2Megabyte ;-))) , das frißt nicht jeder C-Compiler.

Ausprobiert hab ichs nicht.

Math rulez!
Cheers
Detlef

PS: Ich bin auch der Meinung, dass die Ortung mit Ultraschall nicht 
gehen wird, weil dir Mehrwegausbreitung und Reflexionen das versauen.

von Moritz N. (mox-mox)


Lesenswert?

Hi,
danke für die vielen Antworten, sorry, dass ich erst jetzt antworte, war 
ziemlich viel los die Woche, und ich hab die eMailbenachrichtigung 
übersehen.
Also, der Reihe nach durch:

@  Niels Keller (niels-k):
1.) Ich wollte nicht Deine Mathekenntnisse in Frage stellen, das war 
nicht böse gemeint. Ich habe mich nur gefragt, in welchem Zusammenhang 
das zu dem Rechteck stehen sollte, das Du davor erwähnt hattest. Ich war 
schon davon ausgegangen, dass Du das als Quadrate meintest.
2.) Das mit den Doktorarbeiten wusste ich nicht, ich hätte nciht 
gedacht, dass das so kompklex ist. Aber Deine beiden Ansätze klingen 
eigentlich ganz gut :-)


@ STK500-Besitzer:
1.) Falls die Frage, seit wann sich die Wellen einer nahezu 
Punktförmigen Quelle Reckteckförmig ausbreiten an mich gerichtet ist, so 
möchte ich auf jenen Satz von  Niels Keller (niels-k) verweisen:
> ...Die Kreise sollten durch Rechtecke angenähert
> werden. Die Kreisformel wird sonst zu lang.
2.) Drei Empfänger deshalb, weil 2 nicht reiche, wenn man den 
Sendezeitpunkt nicht kennt ;-)
3.) Ich hätte wegen den Öffnungswinkeln zuerst einfach mal drauf 
vertraut, dass ich einfach was empfange. Wen das nicht geht, dann hätte 
ich versucht, mit einer art Kegel den Schall abzulenken. Quasi so:

        ________
        \       /
         \     /
  (((     \   /     )))
           \ /

        _______
        \      /
         \    /
          |  |
          |__|


@ Martin Laabs (mla):
Aus reiner Neugier: Welches Koordinatensystem schwebt Dir da vor?

@ Matthias Becher (matthias882):
Kligt auch gut.

@  Richard W. (ronw):
Super Tip mit dem Quellcode. Muss ja nicht das Rad neu erfinden.

@  Detlef _a (detlef_a):
Irgendwie war Deine Antwort ernüchternd. Danke, dass Du mir deutlich 
gemacht hast, dass meine Idee definitiv nicht so einfach wird, wie ich 
es mir vorgestellt habe.
------------------------------------------------------------------------ 
---


=> Mein Favorit ist wohl die Idee mit einer zusätzlichen Leutdiode. Das 
vereinfacht das das Problem entscheidend, und wenn ich für jeden 
Empfänger nur einen Empfang zulasse, dann sollte ich damit eventuell 
Refektion in den Griff bekommen oder zumindest mildern.

Danke für eure Anregungen!!!

von Martin L. (Gast)


Lesenswert?

> @ Martin Laabs (mla):
> Aus reiner Neugier: Welches Koordinatensystem schwebt Dir da vor?

Na ein polares Koordinatensyste.

Da ist jedenfalls der Kreis im Ursprung sehr einfach und nur vom Winkel 
abhängig. Verschobene Kreise sind dann zwar wieder von zwei Variablen 
abhängig aber wenigstens ist es noch eine Funktion.

Viele Grüße,
 Martin L.

PS: Wobei ich mir ziemlich sicher bin, dass man das Problem auch mit der 
Schulvektorarithmetik (evt. LK) lösen kann.

von Gast XIV (Gast)


Lesenswert?

In der Vermessungstechnik nennt sich das ganze Bogenschnitt bzw. 
Bogenschlag und es gibt Formeln dafür.

von Gast (Gast)


Lesenswert?

Sorry wenn ich mich einmische.

1. Die Schallgeschwindigkeit ist von der Temperatur abhängig und liegt 
bei Luft bei ca. 331,5m/s + 0,6 v/°C, oder bei ca. 343m/s bei 20°C. 
Luftströmungen (offenes Fenster) beeinflussen die Messung nicht 
unerheblich.

2. Bei einer Ultraschall-Sender-Empfänger Kombi ist das Signal am 
Empfänger nicht exakt. Will sagen Du gibst 20 Rechteck-Impulse auf den 
Sender und hast beim Empfänger ein Sinusförmiges Signal das sich langsam 
aufbaut (fast Fischförmig sieht das aus). D.H. Du must die 
Schaltschwelle für Deinen Empfänger knapp über das Rauschen, aber tief 
genug setzen um die erste Welle zu erwischen. Nimmst Du erst die 2te 
oder 3te Welle war, verschieb sich Deine Messung um ca. 9mm bzw. 18mm.

Ich habe das mal versucht und konnte einen Punkt im Raum mit +- 10mm 
(kugelförmig) Genauigkeit Orten. Das ganze mit 4 Sendern und 1 
Empfänger.

Also: Temperatur einkalkulieren, und mehrfach Messen und dadurch 
Ungenauigkeiten rausrechnen bzw. ausfiltern.

von STK500-Besitzer (Gast)


Lesenswert?

>2.) Drei Empfänger deshalb, weil 2 nicht reiche, wenn man den
>Sendezeitpunkt nicht kennt ;-)

Hast du auch drei Ohren?
Natürlich reichen 2 Empfänger für eine Ebene (2D-Messung).
Wenn man den Abstand zwischen den beiden Empfänger weiß (und konstant 
hält) und die Schallgeschwindigkeit kennt (Das Klima im Zimmer sollte 
möglichst konstant sein...), dann sollte man aufgrund des 
Laufzeitunterschieds zwischen den beiden Empfänger seh einfach auf die 
Position des Senders schliessen können. Da gibt es dann höchstens das 
Problem, dass sich der Sender "vor" oder "hinter" den Sensoren befindet. 
Das sollte man aber durch den räumlichen Aufbau in den Griff bekommen 
(z.B. dadurch, dass der Roboter sich nur auf einer Seite des Messaufbaus 
befinden kann).

von hp-freund (Gast)


Lesenswert?

Bei nur 2 Empfängern muß der Sender und der Empfänger irgend wie 
synchronisiert werden. Die Messung der Laufzeitdifferenz allein genügt 
nicht.
Bsp:4m zum 1. und 3m zum 2. -> Diff 1m == 10m zum 1. und 9m zum 2. 
Empfänger auch 1m Diff.

Aber das Ganze ist machbar. Ich habe die Berechnung für einen Atmega8 in 
C geschrieben und im AVR Studio simuliert.

Meine Variante:
Ein Sender und drei Empfänger. Der Sender sendet einen Impuls der bei 
einem Empfänger zuerst ankommt (t1) dann am Zweiten (t2) und am Dritten 
(t3).
Bei t1 ist Strecke s1=0 bei t2 ist s2=(t2-t1)*vSchall und bei t3 ist 
s3=(t3-t1)*vSchall. Die Koordinaten x1,y1,x2,y2,x3,y3 und die dazu 
gehörigen Strecken s1,s2,s3 werden der Funktion übergeben. Es spielt 
dabei auch keine Rolle welche Strecke 0 ist.
Die Auswertung braucht 4,8kB Programmspeicher und ist in etwa 10ms bei 
16MHz abgearbeitet.

...
hp-freund

von STK500-Besitzer (Gast)


Lesenswert?

>Bei nur 2 Empfängern muß der Sender und der Empfänger irgend wie
>synchronisiert werden. Die Messung der Laufzeitdifferenz allein genügt
>nicht.
>Bsp:4m zum 1. und 3m zum 2. -> Diff 1m == 10m zum 1. und 9m zum 2.
>Empfänger auch 1m Diff.

Gute Begründung.

von Visitor (Gast)


Angehängte Dateien:

Lesenswert?

Für Lego-Mindstorms gibt es dazu eine Projektbeschriebung, vielleicht 
hilft Dir das weiter.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.