Ultraschall und Rauschen für SimRobot TKP: Ultraschall und Rauschen für SimRobot

Datum: 18.06.1995
Gruppe 42

Autoren:

Stichworte:


Zusammenfassung:

SimRobot wurde um Ultraschallsensoren sowie um die Simulation von Ungenauigkeiten der Sensoren erweitert.


Anfangsüberlegungen

Für unsere weitere Arbeit im Projekt werden wir sicher noch so manches Mal auf SimRobot zurückgreifen müssen. Da wir später in der Realität voraussichtlich mit Ultraschallsensoren arbeiten werden, die noch nicht in SimRobot implementiert waren, wollten wir ebendiese einbauen. In unseren bisherigen Experimenten war uns desweiteren aufgefallen, daß die Simulation zu genau und damit ihre Ergebnisse nicht leicht in die Realität übertragen werden können. Die Implementierung von festlegbaren Ungenauigkeiten für jeden einzelnen Sensor sollen hier Abhilfe schaffen.

Ultraschallsensoren

SimRobot kennt jetzt einen neuen Sensor namens ULTRASONIC, der einen Ultraschallsensor mit definierbaren Öffnungswinkeln, Auflösungen und Reichweiten simuliert. Ein echter Ultraschallsensor sendet in einem möglichst scharf begrenzten und definierten Überdeckungsbereich Frequenzen im Ultraschallbereich aus und empfängt das Echo, das von Gegenständen im Schallbereich des Sensors zurückgeworfen wird. Die Zeit, die zwischen dem Aussenden und dem Empfangen vergeht, ist ein Maß für die Distanz der Gegenstände vom Sensor. Normalerweise kann man aus den vom Ultraschallsensor gelieferten Werten jedoch nur auf die Distanz zum nächsten Gegenstand schließen. Der simulierte Ultraschallsensor liefert also auch nur einen Wert, der die Entfernung des nächsten Gegenstandes zum Ultraschallsensor in ?SimRobot-Einheiten? angibt. SimRobot unterscheidet grundsätzlich zwei Arten von Sensoren: SingleSensoren und MultiSensoren (die Namen sind an die Klassennamen der Implementierung angelehnt). Singlesensoren sind als Sensoren definiert, die normalerweise nur einen Wert berechnen und nur einen Rückgabewert liefern (z.B. Whisker), während Multisensoren mehrere Werte berechnen und liefen (z.B. Camera). Nun ist es so, daß der Ultraschallsensor zwar mehrere Werte berechnet, aber trotzdem nur einen Rückgabewert liefert. Er ist also in dieser Weise eine Art Zwitter. Ich habe mich dafür entschieden, den ULTRASONIC-Sensor als SIM3DSingleSensor zu implementieren. Im Gegensatz zu den meisten anderen SingleSensoren versteht er aber die Attribute SIZE, RESOLUTION und DEPTH. Wie bei den MultiSensoren auch erwartet SIZE zwei Fließkommawerte, die die Öffnungswinkel in x und y Richtung in Grad angeben. Die Voreinstellung ist jeweils 1. Das RESOLUTION-Attribut gibt an, wie stark die Öffnungswinkel in x und y Richtung aufgelöst werden. Auch dieses Attribut erwartet zwei Fließkommawerte. Die Voreinstellung ist 0 für beide Richtungen. Diese Voreinstellung führt jedoch zu einem Laufzeitfehler, so daß das RESOLUTION-Attribut also auf jeden Fall angegeben werden muß. Mit dem DEPTH-Attribut kann man angeben, in welchem Entfernungsbereich der Ultraschallsensor sensibel ist. Es erwartet zwei Ganzzahlwerte. Der erste Wert gibt an, wie nah der nächste erkennbare Gegenstand sein darf, damit er korrekt erkannt wird. Für alle Gegenstände, die sich näher am Sensor befinden, als dieser Wert angibt, gibt der Sensor eine Entfernung zurück, die diesem Wert entspricht. Analog dazu legt der zweite Wert fest, wie groß die maximale Reichweite des Sensors ist. Auch Gegenstände, die sich weiter entfernt befinden, sieht der Sensor in dieser Entfernung. Die Voreinstellungen für die kleinste und die größte Entfernung sind 0 und 1. Der Rückgabewert des Ultraschallsensors liegt immer zwischen 0 und 1 inclusive. Je kleiner der Wert ist, desto näher war der nächste erkannte Gegenstand. Der kleinste mögliche Wert entspricht dabei der Entfernung zu einem Gegenstand, der genau in der durch das erste Argument von DEPTH angegebenen Entfernung lag oder sich noch näher am Sensor befand. Der größte mögliche Wert entspricht analog der Entfernung zu einem Gegenstand, der sich genau in der durch das zweite Argument von DEPTH festgelegten Entfernung befand oder sogar noch weiter entfernt war. Der Rückgabewert des Ultraschallsensors ist also immer in bezug auf die Argumente des DEPTH-Attributes zu interpretieren. Waren die Argumente beispielsweise x und y, so entspricht ein Rückgabewert von z einer Distanz von x+z*(y-x). Die Implementierung des Ultraschallsensors beruht auf der des Facettensensors: Es werden im durch SIZE festgelegten Öffnungswinkel des Ultraschallsensors jeweils so viele Distanzwerte berechnet, wie die durch RESOLUTION gewählte Auflösung angibt. Von allen berechneten Distanzwerten wird das Minimum ausgewählt. Ist es kleiner als das erste Argument des DEPTH-Attributs, dann wird dieses erste Argument als Rückgabewert gesetzt. Ist das Minimum größer als das zweite Argument des DEPTH-Attributs, dann wird das zweite Argument zurückgegeben. Liegt das Minimum zwischen den Argumenten des DEPTH-Attributs, so wird es in der oben beschriebenen Weise auf das Intervall von 0 bis 1 herunterskaliert und dann zurückgegeben. Der implementierte Ultraschallsensor weicht insofern von realen Sensoren ab, als die von ihm ausgesendeten Signale von allen Gegenständen gleich gut reflektiert werden. In der Realität hingegen hängt es stark von der Oberfächenbeschaffenheit und vom Material des zu detektierenden Gegenstandes ab, wie gut die Ultraschallsignale reflektiert werden und dementsprechend vom Sensor wieder aufgenommen werden können. Diese Schwäche der Simulation ist nicht unbedingt eine Schwäche der Implementierung des Ultraschallsensors, sondern der Implementierung der Gegenstände in der SimRobot-Welt allgemein. Es ist zu überlegen, ob man nicht die Fähigkeit der Gegenstände implmentieren sollte, bestimmte Frequenzen zu reflektieren.

Ungenauigkeiten

Sensoren können jetzt mit dem ACCURACY-Attribut mit einer Ungenauigkeit belegt werden, deren Größe für jeden einzelnen Sensor festgelegt werden kann. In unseren Experimenten mit dem FisherTechnik-Roboter und auch in unseren theoretischen Überlegungen war uns aufgefallen, daß die Ergebnisse einer exakten diskreten Simulation wie SimRobot nicht sehr aussagekräftig sind, weil sie u.a. die natürlichen Ungenauigkeiten von Sensoren nicht berücksichtigt. Das ACCURACY-Attribut, das für jeden SimRobot-Sensor einzeln definiert werden kann, erwartet ein Fließkomaargument von 0 bis 1. Der Wert 1 steht dabei für absolute Genauigkeit des Sensors. Ist das ACCURACY-Attribut für einen Sensor nicht angegeben, so ist er automatisch absolut genau (hat also die ACCURACY 1). Kleinere Werte als 1 bedeuten eine Ungenauigkeit des Sensors. Ist die ACCURACY z.B. 7, so können Fehler bis zu 30 Prozent auftreten. Es ist dabei zu beachten, daß die fehlerbehafteten Rückgabewerte der Sensoren aus dem vom Anwender erwarteten Wertebereich herausfallen können. Für den Ultraschallsensor gilt z.B., daß durch Ungenauigkeiten auch Werte außerhalb des durch das DEPTH-Attribut festgelegten Intervalls erzeugt werden können. Jeder einzelne Ausgabewert eines Sensors wird mit einem individuellen Fehler versehen. Der Fehler wird für jeden Ausgabewert zufällig ausgewählt und über eine Fehlerfunktion und das ACCURACY-Argument auf den (genauen) Ausgabewert angewendet. Die Fehlerfunktion sorgt dafür, daß kleinere Fehler häufiger auftreten als größere. Die Berechnung sieht dabei wie folgt aus: value=value+value*(1-accuracy)*errorfunc(random)*sgn(random) wobei random eine ganze Zahl im Definitionsbereich der Fehlerfunktion ist.