Difference between revisions of "Architecture:RPD Server"

From The BABEL Development Site
(RPD_Server)
(RPD_Server)
Line 8: Line 8:
  
 
= RPD_Server =
 
= RPD_Server =
 +
 +
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.
 
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.

Revision as of 10:41, 18 May 2009

Previous: Event Codes Next: ACHRIN


RPD_Server

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

RPD_Server

<cpp>

getRobotName(

out string name ) </cpp>

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

<cpp>

getRobot2DShape(

out COMMMON::SeqOfFloats x, out COMMMON::SeqOfFloats y )

</cpp>

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

<cpp>

getAllLogicalDevices(

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

<cpp>

findLogicalDevicesByType(

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.

<cpp>

getLogicalDevicePose(

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.

<cpp>

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 “ini” for the table “INI_<moduleName>[+<myAlias>]@<robotName>”.




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;

</cpp>