heise online
  • c't
  • iX
  • Technology Review
  • Mac & i
  • mobil
  • Security
  • Netze
  • Open Source
  • Developer
  • c't-TV
  • Download
  • Telepolis
  • Resale
  • Foto
  • Autos
  • Preisvergleich
  • Stellenmarkt
  • Abo
  • weitere Angebote
    • Shop
    • Artikel-Archiv
    • Veranstaltungen
    • Whitepapers
    • heise-marktplatz
    • IT-Markt
    • Tarifrechner
    • Jobs bei Heise

c't Magazin
  • Startseite
  • Artikel
  • c't-Projekte
  • Hotline & FAQ
  • Treiber & mehr
  • Kolumnen
Software zu Projekten Allgemeine Hinweise
Archiv-Suche Newsletter RSS-FeedRSS

c't › c't-Projekte

Trac
  • Login
  • Help/Guide
  • About Trac
  • Preferences
  • Wiki
  • Timeline
  • Roadmap
  • Browse Source
  • View Tickets
  • Search

Context Navigation

  • Start Page
  • Index
  • History
  • Last Change

-- Rohbau -- bin grad am Schreiben -- Seite noch nicht verlinken -- hkr --

Dokumentation Simulationsarchitektur

    Subsystem für Simulation
 ______________________________
/                              \


 World
    |


 MasterSimulator                              SimulatedBot
    |                                           |
    | hat                                       | hat
    |                                           |
    v                                           v
  Simulatoren-Liste:                          BotComponent-Liste:
                             beeinflusst 
  Licht-Simulator links    -------------->    Lichtsensor links
                             beeinflusst 
  Licht-Simulator rechts   -------------->    Lichtsensor rechts

                                              LCD

                                              Fehlersensor
                             beeinflusst 
  Encoder-Simulator links  -------------->    Encoder links
                             beeinflusst 
  Encoder-Simulator rechts -------------->    Encoder rechts

  ...                                         ...

Wo kommen simulierte Werte her?

Am Beispiel des Lichtsensors -- die anderen Sensoren funktionieren ähnlich.

                      run() (1x pro Sim-Schritt)
                        |
                        |
                        |
          fragt         v           aktualisiert                    .------> Gui
World  <--------- Licht-Simulator ---------------> Lichtsensor -----|
                                                                    '------> TCP zum C-Code
                                                                         
  • World: Komplexe Klasse. Weiß, wo Lichtquellen, Wände usw. sind. Kann daher für den Licht-Simulator ausrechnen, wieviel Licht er sieht.
  • Licht-Simulator: Kurze Klasse. Besteht aus dem Code, der den Lichtwert von der Welt holt und an den Sensor durchreicht. Der Lichtwert ist ein int zwischen 0 (Sensor sieht soviel Licht wie er messen kann) und 1023 (Sensor sieht kein Licht). Weiß seine Position (gemessen vom Bot-Zentrum) und seine Blickrichtung.
  • Licht-Sensor: Kurze Klasse. Ist nur ein Int, der sich anzeigen kann (Gui) und der sich ins TCP schreiben kann.

Warum die extra Simulatoren? Die alten Licht-Sensoren haben sich selber ihre Lichtwerte von der World geholt. Im neuen Sim ist das aufgeteilt in Simulator und Sensor. Der Grund ist, dass das Applet auch Sensoren braucht, aber keine Abhängigkeit zu Java 3D haben soll (J3D ist nötig fürs Berechnen der Lichtwerte). Mit dem neuen Ansatz kann das Applet einfach die Simulatoren nicht erzeugen und fertig.

Code des Licht-Simulators (etwas vereinfacht):

private final Point3d distFromBotCenter = ...;
private final Vector3d headingInBotCoord = ...;
private final double OPENING_ANGLE_IN_RAD = 180°;

public void run() {
	lightSensor.set( // Setze Lichtsensor auf ...
		world.sensLight( // ... Helligkeit, die auf einen Sensor fällt
			distFromBotCenter, // Wo sitzt der Sensor?
			headingInBotCoord, // Wohin schaut der Sensor?
			OPENING_ANGLE_IN_RAD // Öffnungswinkel
		)
	);
}

Wo kommt der MasterSimulator eines Bots her?

Wenn ein neuer Bot zur World hinzugefügt wird, ruft sie ihre Methode createSimulator() auf. Diese erzeugt für einen CtBotSimTcp einen MasterSimulator, für einen CtBotSimTest einen leeren Simulator, der nichts tut.

Download in other formats:

  • Plain Text

Trac Powered

Powered by Trac 0.11.7
By Edgewall Software.

http://www.ctmagazin.de/
http://www.ctmagazin.de/projekte/

  • Datenschutzhinweis
  • Impressum
  • Kritik, Anregungen bitte an c't-WWW
  • Mediadaten
  • Copyright © 2011 Heise Zeitschriften Verlag
  • International: The H, The H Security, The H Open Source