Welcome to OpenRDK website!
Introduction
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 GitHub. We also have a generated API documentation.
- 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 on the right), 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.
In the figure on the right, thehwInterface
module pushes laser scan and odometry objects into queues, that are remotely accessed by thescanMatcher
module, which, in turn, pushes the estimated poses in another queue, for themapper
to access to them. Finally, the mapper updates a property which contains a map.
</ul>
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).
</p>
OpenRDK comprises also RConsole (RDK Console), which allows for remote operations, inspection, parameter updates, etc.