Documentation for cedar 5.0 (overdue oud)

Below, you can find a list of current changes of cedar. Please keep in mind that we try to keep our interfaces as stable as possible. This doesn't mean the software is crash- or bug-free.

Currently, there are still a few classes and frameworks that are under development. Here's a list of interfaces that are likely to undergo major changes:

everything in devices

the class CoordinateTransformation in processing::steps

known issues

On Windows, some of the GL drawing functionality for kinematic chains and related classes is not implemented.

Using multiple 3D convolutions in separate threads slows down all involved convolutions

Some of the interactive CAREN tests may not run if you do not have the corresponding meshes.

Using the field plot and switching dimensionality might lead to messed up plots. Please reopen the field plot.

Singleton-related classes may sometimes cause crashes when programs exit. If you experience random crashes when your own programs exit and the stack contains cedar::aux::Log::getMemoryDebugFlag(), this may be the cause. As a workaround, make sure to reset all smart pointers at the end of your main method (the usual cause are global-scope smart pointers that send a log message after the log singleton was freed.)

In rare cases, moving elements into groups breaks the triggering chain, which leads to steps not being iterated correctly. This can be fixed by saving and loading the architecture. If you encounter such a (reproducible) situation, please let us know.

Single elements cannot be loaded as linked templates into architectures. They are simply added to the architecture.

When a net reader step revalidates its output while the architecture is running, this can lead to connections temporarily flashing in different colors. This can take a while, depending on how complicated the revalidation process is, but is normal. Connections also sometimes are blue for a short time.

When net readers and writers are in the same architecture, this can sometimes lead to crashes. This seems to be a YARP issue.

Unreleased

none

Released versions

The following are the changes made in the release versions.

Version 5.0.0

build system

fixed an error that made it imposssible to use opencv versions that are not in /usr/local/include.

There is a new plot called Multi0DPlot. This is mainly intended to be used for showing the state of (EB) nodes in an architecture, thus, it should be used in conjunction with an architecture widget. See the tutorial for architecture widgets for details.

The use of (Looped)Triggers has been remodeled completely. They are no longer shown in the architecture. Instead, each looped element is, by default, connected to a default trigger that is created automatically. If you want to use more triggers, you can now do so via the simulation control widget (shift + t, or click the corresponding button in the toolbar/menu). This allows you to add triggers, remove them and change their settings. There is also a new mode for seeing what steps are connected to what triggers. This can be enabled from the toolbar and the menu ("color elements by trigger"). In addition to showing what trigger elements are connected to, hovering over a step in this mode will also display in what order it will trigger its subsequent steps.

The time factor setting is now saved per architecture. New architectures start with time factor 1.

You can now declare favorite element classes in the elements tab. Right-click on any element to favorite/unfavorite the class.

There is now a search bar in the element class list.

The UI elements (log, elements, properties etc.) are now locked by default and cannot be moved. You can unlock them in the windows menu.

The net reader and writer steps now work much more smoothly than before. They now automatically revalidate their connections as soon as possible, and indicate that they are not receiving data by turning yellow.

Version 4.1.0

You can now add special widgets to architectures that allow you to define special plots and more. These can be opened from the cedar gui, and their layout and contents are read from files. See the "Architecture Widgets" tutorial for details on how to use this feature.

ElementDeclarations can now provide a ConnectableIconView. This allows users to specify a custom class for displaying the icon of a step. Among other things this can be used to change the icon based on the value of a parameter. One such example is the static gain, which now changes its color based on the sign of the gain factor. Note, that this is optional, and the default behavior is the same as before. Details on how to implement such a view can be found in the processing framework tutorial.

Double-clicking a boost in the boost control widget now shows the boost in the architecture.

In the settings of cedar, you can now choose the default plot that opens for 2d matrices.

The start/stop buttons of the cedar gui have been remodeled. There is now a start button which, as before starts all triggers in an achitecture. It also starts the global timer. When pushed, it turns into a pause button which halts all triggers as well as the global timer. Pushing the pause-button will turn it back to a start button which can then be used to resume the simulation. An addded reset button can reset the simulation; i.e., it resets the architecture as well as the global timer.

Added a python plotting script for recorded data (in tools/recordedDataProcessor).

DataSlots can now be marked as serializable. What this means is that the data stored in them will be stored in the architecture when it is saved, and restored later on when it is loaded. In addition, users can manually save and load data for these slots from the right-click menu of step items.

Groups now work as intended: one can freely move elements between groups, existing connections are preserved, using group connectors if necessary. In the gui, grouping is drag-and-drop-based.

Group templates can now be added in two ways:

They can be copied into the current architecture. Any changes to the original template will not be reflected.

They can be linked into the architecture. Only the file- and groupname will be stored, and the group will be re- loaded from the stored file every time the architecture is loaded. Note: linked groups cannot be edited to avoid conflicts. Any edits must be made to the file containing the imported group. To link in templates, hold ctrl while dragging them from the elements tab.

Step configurations can now be copied and pasted in the GUI using Ctrl+C and Ctrl+Shift+V.

In the GUI, one can use Ctrl+F to bring up a search window to center on specific steps

cedar now allows to slow down or speed up the global timers, effectively allowing for (0.0,2.0] x real-time.

cedar now notices if there were any changes made to an architecture and notifies the user about this when closing a file.

Looped triggers now have a tool tip showing statistics.

Improved performance of triggering chains.

Improved loading and connecting time for large architectures.

Reordered some menu entries in cedar. The 'Manage plugins ..." dialog is now found under Tools.

Data slots and connections give feedback about their validity and possible errors. This only works for elements using input type checks.

Version 3.0.0

build system

libQGLViewer is now optional. If it is not present, many of the GL components of cedar, including the kinematic chain simulator will likely not function properly.

general

The plugin system has been changed. It is no longer specific to the processing framework, although it is not (yet) used elsewhere. Plugins can now be added in an improved manager. They are found in a different way, now: a list of user-defined paths is searched for a plugin of a given name by appending certain directories (such as the plugin name itself and a "build" folder.) Using this new functionality, architectures now store which plugins they require.

cedar:unit

The unit framework was replaced by typedefs to the boost unit framework.

There is now a command line parser available. This is intended to make software that performs experiments easy to customize; it features auto-generated help texts, reading and writing of options to file and some sanity checking of user inputs. It is still being developed.

LinePlots now have an option in their context menu to set fixed limits for the y axis.

There is now a history plot for 1D matrices.

We added line and surface plots that are based on Vtk. This means that instead of (or in addition to) qwt and qwtplot3d, you can now use these plots.

Some plotting libraries (qwt and qwtplot3d) have now become optional.

ImagePlots can now display a legend. There is also an option to set a fixed scale for the color. These functions can be accessed via the right-click menu (note that they are only available if a matrix is being plotted. For images, these options don't exist.)

The processingIde can now be started with the "--no-log" option. This will redirect all log messages to the terminal and can be very helpful when steps send too many log messages, leading to a lock-up of the user interface.

There is now a system to automatically perform input type checks in processing steps; this can replace writing of the determineInputValidity function. See the documentation and processing tutorial for details.

In the processingIde, you can now select a default display mode for steps. The available modes are: icon and text (old behavior, newly created steps are always shown with icon and text), icon only (newly created steps show only an icon) and text for looped (newly created steps always show their icon, text is only shown if the steps are looped, this is the new default)

gui::PluginManagerDialog now allows you to remove unused entries of plugins.

The "plot all" function can now be replaced by other plots where appropriate. For example, for neural fields, the field plot now replaces it. In such cases, plot all can still be accessed from the "defined plots" menu.

The processingIde now offers a tool for checking architecture consistency. It is still a very early version and will be extended in the future. For now, it only checks if all looped steps in the current architecture are connected to a looped trigger. The tool can be accessed from the "windows" menu.

LoopedTriggers in the processingIde can now be iterated manually, i.e., you can push a button to perform a single step.

The processingIde now has a boost control widget. From it, you can activate and change the strength of any boost in the current architecture. The widget can be accessed from the "tools" menu, or by pressing control+b.

Connections can now be toggled to being "smart", i.e., having heuristically determined corners to unclutter architectures - this mode is fully automatic, so there's now way to move any lines around by hand.

DataSlots now scale when you drag a connection close to them. You can configure (and disable) this behavior in the tools -> settings -> user interface menu of the processingIde.

Please note that step icons can now only have the svg format. If you have an icon in a different format, please embed it in a svg file using, e.g., inkscape.

Connections of selected steps in the processingIde are now hightlighted. This behavior is active by default and can be disabled in the settings menu.

Version 1.0.9

Fixed a bug in the resize step that lead to weird results when the step was being used with 1d inputs.

cedar::aux::conv

using 3D convolutions in separate threads doesn't crash anymore, but the introduced lock slows down all involved convolutions (FFTW plan creation is not thread-safe). This will be fixed with a rewrite of FFTW code.

Version 1.0.8

build system

fixed issues when linking to non-qt4 versions of QWT and libQGLViewer when qt3 and qt4 versions were present on the system.

Disabled the as-needed switch of gcc/ld; on newer Linux versions, this caused cedardyn to not be loaded properly at runtime, which meant fields and other steps from that library not showing up properly. This problem still persists on Windows/MSVC.

cedar::aux::net

fixed issues with GCC 4.7 and the NetTransporter (Reader/Writer) code (only occured when the optional YARP dependency was included)

Version 1.0.0

IMPORTANT: when connections are removed, the inputConnectionChanged method is now called (as should always have been the case); please test your steps accordingly and make sure you check whether the new data is not a null pointer!

You can now define plots in ElementDeclarations. Plots, in this case, are a list of data that is to be plotted together.

The resize step now orders its dimensions consistently in two-dimensional cases; unfortunately, this means that all old architectures will need to flip their size order (used to be [width, height], is now [height, width]).

Plot widgets now no longer dock in the processingIde!

Steps can now take care of locking their inputs and outputs manually by setting a flag. This may be useful if steps lock data for a long time even though they are not accessing it, potentially preventing other steps in the processing chain from running.

Version 0.9

fixed a critical bug in LoopedThread::singleStep, which used microseconds instead of milliseconds for step()

cedar::aux::Configurable now inherits from boost::noncopyable, explicitly stating that you should never use the copy constructor. Instead, you should use the functions Configurable::copyTo and Configurable::copyFrom.

Templated functions in cedar::aux::math now have an "alias" version that can be called without a template parameter. This function automatically decides which template version to call based on the matrix types.

Added a function cedar::aux::System::locateResource that helps with finding cedar resources (i.e., config files etc.) independent of the current working directory. See the documentation for details.

the cedar::aux::Base class was removed

The old ConfigurationInterface is being phased out now. For this purpose, a transitional interface has been developed that should mostly work with the old code. If you run into trouble, add the following line to your cedar configuration file: set (CEDAR_LIBCONFIG_LEGACY_MODE 1 CACHE BOOL "Use libconfig legacy mode.") If you set this flag to 0, libconfig++ is no longer needed as a dependency! Some unit tests may fail, though.

merged AbstractFactory and AbstractFactoryDerived with Factory and FactoryDerived (including some changes to the interfaces)

introduced new FactoryManager class

gl::Object has been renamed to gl::RigidBody

There are some new Parameter types: ObjectListParameter and ObjectParameter. They allow dynamically selecting the type of one or more objects. For example, these allow to dynamically select the type of the Sigmoid as well as the combination of kernels in the neural field.

Added a new Log class to cedar::aux. Using this is the new standard logging mechanism (over std::cout), as it can be redirected at will, e.g., to the console (default) or some user interface. To access the log, use the corresponding cedar::aux::LogSingleton::getInstance(). See the Logging tutorial in the documentation or cedar::aux::Log.

NumericParameters (DoubleParameter, IntParameter, UIntParameter) no longer need minimum and maximum values. They also have a new constructor that takes a math::Limits object which is the new, recommended way of setting the limits. The same is true for NumericVectorParameters.

Added Data classes for stereo images and image sets.

There is now a generalized structure for convolution. This structure wraps opencv and, optionally, fftw convolution! For more, see the documentation for the cedar::aux::conv::Convolution class.

The net namespace was added. This namespace contains wrappers around yarp's functionality and is available if cedar is compiled with yarp.

when loading a plugin, the PluginProxy now also looks for a plugin description file. This file may contain some information about your plugin in case you don't want to hardcode it, e.g., it can contain icon paths for processing steps. See documentation of cedar::proc::PluginDeclaration for details.

Overhauled the plotting system. You can now select different types of plots for data in the processingIde where available.

added grouping functionality for processing

added promotion of data slots for networks

Some outputs and parameters have been renamed. If your architectures fail to load, check that the connections use the correct names.

processingIde

The IDE now remembers whether or not snap to grid is active.

Implemented zooming in the IDE; apart from the controls that are directly visible, scrolling is also possible with the mouse wheel (hold down ctrl)

The property pane now indicates when parameters have been changed since the last save.