control and supervision of a team of robots
DESCRIPTION
Control and Supervision of a Team of Robots. --Alberto Valero. Interface Server. The RAgent figure. Robot Client. Navig. Mapper. Web Services. REPOSITORY. A generic example in some detail. Robot Client. ScanMatcher. Mapper. Interface Server. getMap(). getPose(). getLaser(). - PowerPoint PPT PresentationTRANSCRIPT
Control and Supervision of a Team of Robots
--Alberto Valero
The RAgent figure...
Robot Client Navig. Mapper
REPOSITORY
InterfaceServer Web Services
A generic example in some detail
Robot Client ScanMatcher Mapper Interface
Server
getMap()getPose()getLaser()setSpeed()setJog()
LaserRobot PoseMapSpeedJog
The Classical Hierarchical Model
Exploration
Path Planning
Navigation
Motion executer
Target Pose
Path
Speed & Jog
Motion commands
Put a human in the loop
Hierarchical HRI
Exploration
Path Planning
Navigation
Motion executer
Target Pose
Path
Speed & Jog
Motion commands
Autonomy Levels
Let’s see it!
Robot Client Navig. Mapper
REPOSITORY
InterfaceServer
The module structure
Robot Client ScanMatcher Mapper Interface
Server
getMap()getPose()getLaser()setSpeed()setJog()
Navigator Path Planner ExplorationAutonomyManager
InterfaceClient
StallConditionPath Alert
ExplorationAlertUnblock
Module
Interface Client and Server
InterfaceClient
InterfaceServer
getMap()getPose()getLaser()setSpeed()setJog()
http://192.168.1.1:9871
register(url)
currentPath()currentTargetPose()
robotStalled()victimFound()robotStatus()
Some code (I)#define PROPERTY_LASER_DATA "in/laserData"#define PROPERTY_DESIRED_SPEED_INPUT "in/speed"#define PROPERTY_DESIRED_JOG_INPUT "in/jog"#define PROPERTY_DESIRED_SPEED "out/desiredSpeed"#define PROPERTY_DESIRED_JOG "out/desiredJog“
Some code (II)bool SafeTeleOperationModule::initConfigurationProperties(){
SESSION_TRY_START(session)session->createStorage("RLaserData",PROPERTY_LASER_DATA,"Robot Laser Readings (link in)");session->createDouble(PROPERTY_JOG, "Robot Jog (please link)", RDouble::RAD_SEC);1.0);session->createDouble(PROPERTY_DESIRED_SPEED, "Robot Desired speed (please link)", RDouble::M_SEC, 0.0);session->createDouble(PROPERTY_DESIRED_JOG, "Robot Desired Jog (please link)", RDouble::RAD_SEC, 0.0);session->createDouble(PROPERTY_DESIRED_SPEED_INPUT, "Robot Desired speed (please link)", RDouble::M_SEC, 0.0);session->createDouble(PROPERTY_DESIRED_JOG_INPUT, "Robot Desired Jog (please link)", RDouble::RAD_SEC, 0.0);SESSION_END(session)return true;SESSION_CATCH_TERMINATE(session)return false;
}
Some code (III)
bool SafeTeleOperationModule::init(){
SESSION_TRY_START(session)session->listen(PROPERTY_DESIRED_SPEED_INPUT);session->listen(PROPERTY_DESIRED_JOG_INPUT);
SESSION_END(session)return true;SESSION_CATCH_TERMINATE(session)return false;
}
Some code (and IV)void SafeTeleOperationModule::exec(){
while (session->wait(), !exiting) {SESSION_TRY_START(session)session->lock(PROPERTY_LASER_DATA, HERE);RLaserData* laserData=session-
>getObjectAsL<RLaserData>(PROPERTY_LASER_DATA);
int numOfPoints=laserData->points.size();float minRange=DBL_MAX;
for (int i=0; i<numOfPoints; i+=3){if (minRange>laserData->points[i].reading) minRange=laserData-
>points[i].reading;session->unlock(PROPERTY_LASER_DATA);
float desiredSpeed;if (minRange < 0.5){
desiredSpeed=0.0;}else{
desiredSpeed=session->getDouble(PROPERTY_DESIRED_SPEED_INPUT);}session->setDouble(PROPERTY_DESIRED_SPEED, desiredSpeed);SESSION_END_CATCH_TERMINATE(session)
}}
Let’s complicate the System
Single-User-Single-Robot
Single-User-Multiple-Robot
Single-User-Robot-Team
Single-User-Multiple-Robot
REPOSITORY
InterfaceServer
RobotClient
REPOSITORY
InterfaceServer
RobotClient
Single-User-Robot-Team
REPOSITORY
InterfaceServer
RobotClient
REPOSITORY
InterfaceServer
RobotClient
REPOSITORY
TeamServer
TeamCoordinator
cucciolomammolo
teamCoord/out/robot1TargetPose=@rdk2://cucciolo/navigator/in/targetPose teamCoord/out/robot2TargetPose=
@rdk2://mammolo/navigator/in/targetPose
ExampleInit End
So much to do
That’s all for now