OpenRDK is a modular software framework focused on rapid development of distributed robotic systems. It has been designed following users' advice and has been in use within our group for several years. By now OpenRDK has been successfully applied in diverse applications with heterogeneous robots and as we believe it is fruitfully usable by others we are releasing it as open source.
The OpenRDK can be downloaded from SourceForge.net. If you find any problem or you want more help, you can subscribe to the OpenRDK Support Mailing List.
- In our framework the main entity is a software process called agent. A module is a single thread inside the agent process; modules can be loaded and started dynamically once the agent process is running.
In the following on the right we see an example. Two agents are executed on two different machines and three modules run inside them: hwInterface retrieves data from a laser range finder and the odometry from a robotic base; given this data, scanMatcher uses a scan-matching algorithm in order to estimate the robot positions over time; mapper uses the estimated robot positions, together with the laser scans, to build a map of the environment.
- An agent configuration is the list of which modules are instantiated, together with the values of their parameters and their interconnection layout. It is initially specified in a configuration file.
- Modules communicate using a blackboard-type object, called repository (see figure below), in which they publish some of their internal variables (parameters, inputs and outputs), called properties. A module defines its properties during initialization, after that, it can access its own and other modules' data, within the same agent or on other ones, through a global URL-like addressing scheme. Access to remote properties is transparent from a module perspective; on the other hand, it reduces to shared memory (OpenRDK provides easy built-ins for concurrency management) in the case of local properties.
- Special queue objects also reside in the repository and they share the same global URL-like addressing scheme of other properties.
Attach:first-example-color.png Δ | An example of two agents with some modules inside
In the figure above, the
hwInterface module pushes laser scan and odometry objects into queues, that are remotely accessed by the scanMatcher module, which, in turn, pushes the estimated poses in another queue, for the mapper to access to them. Finally, the mapper updates a property which contains a map.
All these entities are implemented in the OpenRDK core and usually all a developer is requested to do is to create a new module, that is a very easy task indeed (from the point of view of the framework: he can concentrate on the real problem, without having to care much about the framework).
OpenRDK comprises also
rconsole (RDK Console), which allows for remote operations, inspection, parameter updates, etc.
Attach:rconsole1.jpg Δ | RConsole GUI