160 likes | 297 Views
The OpenRDK framework: a not-so-short tutorial Part 1: basic topics. Daniele Calisi , Andrea Censi. OpenRDK summary. Goals Ease of development fast prototyping concurrent engineering Ease of debugging (graphical) inspection tools common module structure Modularity code reuse
E N D
The OpenRDK framework:a not-so-short tutorialPart 1: basic topics Daniele Calisi, Andrea Censi
OpenRDK summary • Goals • Ease of development • fast prototyping • concurrent engineering • Ease of debugging • (graphical) inspection tools • common module structure • Modularity • code reuse • loosely coupling • Lightweightness and efficiency • General information • Written in C++, supports C++ modules • Works on Linux, MacOsX, Windows (Cygwin) • It is Open Source ( http://openrdk.sf.net ) The OpenRDK framework - tutorial part 1 - OpenRDK Workshop - March 2009
OpenRDK main features and concepts RAgent (Process) Module (Thread) Module (Thread) Module (Thread) Module (Thread) Repository (Blackboard) Properties: rdk://agent2/localizer/odometry (pose) rdk://agent2/localizer/laserScan (scan) rdk://agent2/localizer/estimatedPose (pose) rdk://agent2/navigator/maxSpeed (double) rdk://agent2/mapper/map (map) rdk://agent2/navigator/userInfo (string) … Repository (Blackboard) The OpenRDK framework - tutorial part 1 - OpenRDK Workshop - March 2009
URL are globally unique Published property roles Input/Output Parameters Debug information, etc. “Subdirectories” Types Integers, strings, floating-point numbers, etc. Images, maps User defined types Repository, properties and URLs rdk://agent1/hwInterface/speed rdk://agent1/hwInterface/odometryPose rdk://agent1/hwInterface/robotSerialPort rdk://agent1/hwInterface/currentSpeed … rdk://agent2/localizer/laserScan rdk://agent2/localizer/estimatedPose rdk://agent2/mapper/map rdk://agent2/navigator/maxSpeed rdk://agent2/navigator/speed … The OpenRDK framework - tutorial part 1 - OpenRDK Workshop - March 2009
Configuration and object persistence • Specify the initial configuration of each agent: the configuration file • XML format • Contains the list of modules to be instantiated • Contains property (initial) values • Contains connections among modules • Can be used to • Load initial module parameters • Save and load module states • Load static inputs (e.g., pre-built maps) • Currently it is created in two steps • Add/remove modules using a console (i.e. non graphical) tool • Set property values editing the file by hand The OpenRDK framework - tutorial part 1 - OpenRDK Workshop - March 2009
An example agent2 agent1 hwInterface localizer mapper navigator laserScan odometry robotPose map targetPose speed robotPose laserScan laserScan odometry estimatedPose map speed repository repository The OpenRDK framework - tutorial part 1 - OpenRDK Workshop - March 2009
Property links rdk://agent1/hwInterface/laserScan rdk://agent1/hwInterface/odometry • Connect modules • Suggested policy • A module creates its own properties during the initialization • A module reads from and writes to its own properties • Property links • Connect inputs and outputs of different modules • Are stored in the configuration file • Similar to UNIX symbolic links • Can refer to remote repositories rdk://agent2/localizer/odometry rdk://agent2/localizer/laserScan rdk://agent2/localizer/estimatedPose rdk://agent2/mapper/robotPose rdk://agent2/mapper/laserScan rdk://agent2/mapper/map rdk://agent2/navigator/map rdk://agent2/navigator/robotPose rdk://agent2/navigator/targetPose rdk://agent2/navigator/speed The OpenRDK framework - tutorial part 1 - OpenRDK Workshop - March 2009
Property sharing rdk://agent1/hwInterface/laserScan rdk://agent1/hwInterface/odometry • A module, through links, can access remote properties • Repository actions: • Requests properties • Publishes them locally • Options: • When to send updates • Network protocol • Data reconstruction layer • E.g. maps, images, etc. Property sharing ON_CHANGE/PERIODIC TCP/UDP … Property sharing rdk://agent1/hwInterface/laserScan rdk://agent1/hwInterface/odometry rdk://agent2/localizer/odometry rdk://agent2/localizer/laserScan rdk://agent2/localizer/estimatedPose The OpenRDK framework - tutorial part 1 - OpenRDK Workshop - March 2009
The example revised agent2 agent1 hwInterface localizer mapper navigator laserScan odometry robotPose map targetPose speed robotPose laserScan laserScan odometry estimatedPose map speed repository repository The OpenRDK framework - tutorial part 1 - OpenRDK Workshop - March 2009
The example revised agent2 agent1 targetPose navigator speed hwInterface robotPose map odometry estimatedPose localizer mapper robotPose laserScan The OpenRDK framework - tutorial part 1 - OpenRDK Workshop - March 2009
Tools: RConsole • RConsole implementation • Is itself an RAgent • Uses property sharing • Can be used for • Remote inspection • Debugging • Parameter tuning • Preliminary GUI building for specific applications The OpenRDK framework - tutorial part 1 - OpenRDK Workshop - March 2009
Case study: concurrent engineering • Example: developing the localizer, mapper and navigator modules • Three students are assigned one module each • Hardware and simulator interface modules are already available • First step: interface design (inputs/outputs) hwInterface/speed (in) hwInterface/laserScan (out, queue) hwInterface/odometry (out, queue) localizer/odometry (in, queue) localizer/laserScan (in, queue) localizer/estimatedPose (out, queue) mapper/robotPose (in, queue) mapper/laserScan (in, queue) mapper/map (out) navigator/robotPose (in) navigator/targetPose (in) navigator/map (in) navigator/speed (out) The OpenRDK framework - tutorial part 1 - OpenRDK Workshop - March 2009
Case study: the localizer module • Using logging/replaying during development • Save a log of a single run and then replay it • Use well-known logs databases (e.g., RAWSEEDS) hwInterface/speed (in) hwInterface/laserScan (out, queue) hwInterface/odometry (out, queue) logReader/fileName (param) logReader/odometry (out, queue) logReader/laserScan (out, queue) LOG localizer/odometry (in, queue) localizer/laserScan (in, queue) localizer/estimatedPose (out, queue) RESULT LOG logWriter/odometry (in, queue) logWriter/laserScan (in, queue) logWriter/fileName (param) The OpenRDK framework - tutorial part 1 - OpenRDK Workshop - March 2009
Case study: the mapper module • Using odometry instead of estimated pose • Using simulator (e.g., Stage, USARSim, etc.) usarsimClient/speed (in) usarsimClient/laserScan (out, queue) usarsimClient/odometry (out, queue) hwInterface/speed (in) hwInterface/laserScan (out, queue) hwInterface/odometry (out, queue) localizer/odometry (in, queue) localizer/laserScan (in, queue) localizer/estimatedPose (out, queue) mapper/robotPose (in, queue) mapper/laserScan (in, queue) mapper/map (out) The OpenRDK framework - tutorial part 1 - OpenRDK Workshop - March 2009
Case study: the navigator module • As before • Use odometry, simulator clients • Pre-built map from configuration file • RConsole for target poses input hwInterface/speed (in) hwInterface/laserScan (out, queue) hwInterface/odometry (out, queue) usarsimClient/speed (in) usarsimClient/laserScan (out, queue) usarsimClient/odometry (out, queue) localizer/odometry (in, queue) localizer/laserScan (in, queue) localizer/estimatedPose (out, queue) mapper/robotPose (in, queue) mapper/laserScan (in, queue) mapper/map (out) navigator/robotPose (in) navigator/targetPose (in) navigator/map (in) navigator/speed (out) MAP (configuration file) The OpenRDK framework - tutorial part 1 - OpenRDK Workshop - March 2009
Questions Questions? We are on SourceForge: http://openrdk.sourceforge.net Credits: Prof. Daniele Nardi Developers: Daniele Calisi, Andrea Censi Early contributors: A. Farinelli, G. Grisetti, L. Iocchi Current contributors: F. Giannone, L. Iocchi, M. Leonetti, L. Marchetti, D. Nardi, P. de la Puente, G. Randelli, M. Sbarigia, A. Valero, R. Vicario Calisi is the one to blame The OpenRDK framework - tutorial part 1 - OpenRDK Workshop - March 2009