Architecture:RPD Server

From The BABEL Development Site
Revision as of 21:06, 19 May 2009 by Jlblanco (talk | contribs) (RPD_Server)
Previous: Event Codes Next: ACHRIN


This special module MUST BE ALWAYS present, since it is used by all the modules at start-up to determine their configuration based on the XML database.

Al services should be executed in less than 100ms, except the getLogicalDevicePose service which may require invoking several other services to acquire the current configuration of mobile parts of the robot. Notice that the returned information for any logical device implicitly includes the parameters for opening the associated HAD layer driver module. This information is extracted from the physical devices table in the database and automatically put together to all responses of the server to make easy the opening of drivers by layer 2 modules.

NOTE: The most important service here for now is getSettingsForModule, which is a replacement for individual .ini files in modules.

BABEL service group BABEL services to implement




out string name ) </cpp>

Returns the name of the currently selected RPD, as appearing in the selected_RPD table



out string x, out string y )


Returns the 2D shape of the robot, as stored in the RPD_shape2D… table of its descriptor.



in string myModuleName, out short aliasCount ) </cpp>

This service must be used by modules that support "aliasing" to discover how many internal instances (or "alias") must be created. This number is also the required number of subsequent calls to "getSettingsForModule"



in string myModuleName, in string myAlias, out string settings ) </cpp>

Returns a multi-line text in the form “key=value” with settings for a specific calling module name (and optionally an alias name, left blank if not used). This text is the content of the field "config" for the table “<robot_name>:<moduleName>:Alias".

NOT USED YET!! <cpp>


out BABEL::RPD_Server::SeqOfLogicalDevices devices ) </cpp>

Returns all the information for all the logical devices on the robot. See Appendix III for BDL definitions

NOT USED YET!! <cpp>


in string type, out BABEL::RPD_Server::SeqOfLogicalDevices devices ) </cpp>

Returns all the information for logical devices on the robot of the specified type (case insensitive comparison). See Appendix III for BDL definitions.

NOT USED YET!! <cpp>


in unsigned long deviceID, out double x, out double y, out double z, out double yaw, out double pitch, out double roll, out boolean static, out boolean devNotFound ) </cpp>

Returns the current 3D pose of the indicated device (if not found, devNotFound will be true). This includes solving the cinematic chain, even for the case of mobile joints. If the device has a static pose, static will be true, and its pose must not be requested anymore.

RPD Visual Editor

Definition of RPD_SERVER data types in BDL

<cpp> struct TLogicalDevice { unsigned long id; // The numerical ID of each device string type; // The logical device type boolean isChainingPoint; // Whether the device can be the base // for other devices. unsigned long idOfBase; // The id of the base device COMMMON::THomogeneousMatrix pose3D; // The 3D pose of this device relative // to the base one. string implementation; // The name of the HAD layer module.

COMMMON::SeqOfParamValuePairs params; // The params for the HAD module. };

typedef sequence<TLogicalDevice> SeqOfLogicalDevices;