The CURVACE Simulator (CS) is a windows utility that allows to compute simulated sensor output for different kinds of CURVACE sensors. It is based on OpenSceneGraph (OSG), a rendering toolbox based on scene graphs. Thus the CS is able to use all scene files that are compatible with OSG (e.g. OpenFlight (.flt) ). A full list of supported scene file formats can be found on the OpenSceneGraph website.
The basic principle of the CS is to render a set of views of the loaded scene and then to compute the simulated sensor readings from these scene views. A more detailed description on this topic can be found in the projects deliverables D3.1 and D3.2. The next image shows an example of the rendered view of the scene. The view on the screen serves only visualisation purposes however while an offscreen view of the scene with a much higher resolution is rendered for the simulation.
The second image shows the generated output corresponding to the above view with brightness values drawn as large square pixels.
One of the goals for this utility is to allow researchers virtual experiments with CURVACE sensors without needing access to the hardware sensors. The Curvace Simulator in contained in the Visual Processing Package.
The software is still in development but many features are already implemented and no mayor bugs are known
Running CurvaceSimulator
After starting the simulator it will show you a selection dialog of various sensors that can be used. The list of sensors can be extended by external libraries (the path to these libraries is defined in simulator.ini by 'libraryPath'). If you don't have a selection, you either need to get some sensor libraries or set the path correctly.
[Note: if CurvaceSimulator was built with CURVACESIMULATOR_PLUGINSUPPORT disabled in the cmake options, no plugins are loaded and only builtin sensors are available]
When the sensor is selected it may take a moment to precompute internal sensor data, load the last used scene and set up the views. Note that the simulation starts at a 0-position looking along the negative z-axis. Depending on your scene file there might be nothing to see, so just turn around a bit to find your scene :)
Moving in the scene: You can turn around by clicking/holding the left mouse button into the rendered scene. The camera rotates around the x and y axis. By holding shift you can switch to turning around x and z axis. The right mouse button can be used to translate through the scene (along x/z axis, or by holding shift along x/y axis).
Paths:
The simulator is able to interpolate a path between defined viewpoints within the scene. A path is recorded by pressing SPACE for each viewpoint you want to add to the path. You can step through all viewpoints with the PgUp/PgDown keys or you can move along the path with the arrow keys. The created path can automatically be followed by pressing ENTER. You can load or save paths through the path menu.
Path files contain one path node per line. Each line consists of 16 values representing the entries of the corresponding nodes transformation matrix which is a product of a homogeneous rotation and translation matrix containing the position and oritentation of the node.
The processing queue: In the menu you can open the processing queue configuration (processing queue->configure). On the right you find a selection of processing modules (Additional modules can be added by plugin). If you select a module you can see its description at the bottom. you can add modules by clicking 'add'. The simulated data will go through all selected processing modules (shown on the left) in the order from top to bottom. For example if you add 2 DataViewer modules and a Noise module between them you will see the data without noise in the first DataViewer and the data with noise in the second DataViewer.
Dataviewer : this module opens a window that shows the data as it is within the processing queue
Delbruck
InertialData
Noise
NormalizeSensitivity
OpticFlow : computes ground truth optic flow from the scene and displays it in a new window
OpticFlowLKT
SaveData : allows to save the data at this point to a CurvaceDataStream for offline viewing/processing
SaveDataText
SendData
You can move around in the scene using the mouse. Left button rotates, right button translates, hold shift to switch axis. Pressing 'h' should give you some help on the console.