The OpenRDK framework: a not-so-short tutorial Part 1: basic topics Daniele Calisi, Andrea Censi
The OpenRDK framework - tutorial part 1 - OpenRDK Workshop - March 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 ( )
The OpenRDK framework - tutorial part 1 - OpenRDK Workshop - March 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 Repository, properties and URLs 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 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 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 An example hwInterface agent1 localizer agent2 mappernavigator repository speed laserScan odometry laserScan odometry estimatedPose robotPose laserScan map robotPose map targetPose speed
The OpenRDK framework - tutorial part 1 - OpenRDK Workshop - March Property links 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 rdk://agent1/hwInterface/laserScan rdk://agent1/hwInterface/odometry
The OpenRDK framework - tutorial part 1 - OpenRDK Workshop - March Property sharing 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. rdk://agent1/hwInterface/laserScan rdk://agent1/hwInterface/odometry rdk://agent2/localizer/odometry rdk://agent2/localizer/laserScan rdk://agent2/localizer/estimatedPose rdk://agent1/hwInterface/laserScan rdk://agent1/hwInterface/odometry Property sharing ON_CHANGE/PERIODIC TCP/UDP …
The OpenRDK framework - tutorial part 1 - OpenRDK Workshop - March The example revised hwInterface agent1 localizer agent2 mappernavigator repository speed laserScan odometry robotPose laserScan robotPose map targetPose laserScan odometry estimatedPosemap speed
The OpenRDK framework - tutorial part 1 - OpenRDK Workshop - March The example revised hwInterface agent1 localizer agent2 mapper navigator robotPose targetPose estimatedPose map robotPose odometry laserScan speed
The OpenRDK framework - tutorial part 1 - OpenRDK Workshop - March 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 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 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) localizer/odometry (in, queue) localizer/laserScan (in, queue) localizer/estimatedPose (out, queue) hwInterface/speed (in) hwInterface/laserScan (out, queue) hwInterface/odometry (out, queue) logWriter/odometry (in, queue) logWriter/laserScan (in, queue) logWriter/fileName (param) logReader/fileName (param) logReader/odometry (out, queue) logReader/laserScan (out, queue) LOG RESULT LOG
The OpenRDK framework - tutorial part 1 - OpenRDK Workshop - March usarsimClient/speed (in) usarsimClient/laserScan (out, queue) usarsimClient/odometry (out, queue) Case study: the mapper module Using odometry instead of estimated pose Using simulator (e.g., Stage, USARSim, etc.) 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 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) 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) usarsimClient/speed (in) usarsimClient/laserScan (out, queue) usarsimClient/odometry (out, queue)
The OpenRDK framework - tutorial part 1 - OpenRDK Workshop - March Questions Questions? We are on SourceForge: 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