48         std::vector<uint32_t> robotDiameter(_nr_robots, 0);
    99     bool MultiRobotRouter::getRoutingTable(
const std::vector<Segment> &_graph, 
const std::vector<uint32_t> &_startSegments, 
const std::vector<uint32_t> &_goalSegments, std::vector<std::vector< Checkpoint>> &routingTable, 
const float &_timeLimit)
   101         std::chrono::time_point<std::chrono::high_resolution_clock> tstart = std::chrono::high_resolution_clock::now();
   112         std::vector<std::vector<RouteVertex>> routeCandidates;
   117         uint32_t firstSchedule = 0;
   119         uint32_t lastPlannedRobot;
   124             int32_t firstRobot = -1;
   131                     for(uint32_t i = 0; i < priorityList.size(); i++)
   133                         if(priorityList[i] == firstRobot)
   137                 found = 
planPaths(priorityList, speedList, _startSegments, _goalSegments, firstSchedule, routeCandidates, lastPlannedRobot);
   140                 std::chrono::time_point<std::chrono::high_resolution_clock>  tgoal = std::chrono::high_resolution_clock::now();
   141                 duration = std::chrono::duration_cast<std::chrono::milliseconds>(tgoal - tstart).count();
   154     bool MultiRobotRouter::planPaths(
const std::vector<uint32_t> &_priorityList, 
const std::vector<float> &_speedList, 
const std::vector<uint32_t> &_startSegments, 
const std::vector<uint32_t> &_goalSegments, 
const uint32_t _firstSchedule, std::vector<std::vector<RouteVertex>> &_routeCandidates, uint32_t &_robot)
   159         for(uint32_t i = _firstSchedule; i < 
nr_robots_; i++)
   161             _robot = _priorityList[i];
   166         for(uint32_t i = _firstSchedule; i < 
nr_robots_; i++)
   169             _robot = _priorityList[i];
 
void reset(const uint32_t _nrRobots)
resets the Priority schedule with an initial priority schedule 
 
uint32_t speedScheduleAttempts_
 
uint32_t maxIterationsSingleRobot_
 
virtual void removeRobot(const uint32_t _robot)=0
removes a Robot from the Routing Table 
 
PriorityScheduler priority_scheduler_
 
std::vector< uint32_t > robotDiameter_
 
bool usePriorityRescheduler_
 
virtual const uint32_t getPriorityScheduleAttempts() const 
returns the number of attemps to reschedul the priorities taken 
 
bool planPaths(const std::vector< uint32_t > &_priorityList, const std::vector< float > &_speedList, const std::vector< uint32_t > &_startSegments, const std::vector< uint32_t > &_goalSegments, const uint32_t _firstSchedule, std::vector< std::vector< RouteVertex >> &_routeCandidates, uint32_t &_robot)
 
SpeedScheduler speed_scheduler_
 
MultiRobotRouter(const uint32_t _nr_robots, const std::vector< uint32_t > &_robotDiameter)
constructor 
 
bool getRouteCandidate(const uint32_t _start, const uint32_t _goal, const RouteCoordinatorWrapper &path_coordinator, const uint32_t _robotDiameter, const float &_robotSpeed, std::vector< RouteVertex > &path, const uint32_t _maxIterations)
calculates a route candidate coordinated with other robots by the given route Coordinated ...
 
virtual void setSpeedRescheduling(const bool _status)
enables or disables speed rescheduling 
 
RouteCoordinatorTimed rct_
 
virtual bool setGoalSegments(const std::vector< uint32_t > &_goalSegments)=0
updates the goal segments of the planning attempt 
 
virtual bool addRoute(const std::vector< RouteVertex > &_path, const uint32_t _diameterPixel, const uint32_t _robotId)=0
checks if a robot can enter a segment at a specific time 
 
virtual void setCollisionResolver(const SegmentExpander::CollisionResolverType cRes)
sets the CollisionResolverType used to resolve occured robot collisions 
 
SegmentExpander::CollisionResolverType cResType_
 
virtual bool setStartSegments(const std::vector< uint32_t > &_startSegments)=0
updates the start segments of the planning attempt 
 
void reset(const uint32_t _nrRobots)
resets the speed rescheduler (all speeds to max) 
 
std::vector< std::vector< uint32_t > > robotCollisions_
 
virtual void setRobotDiameter(const std::vector< uint32_t > &_diameter)
sets the robot diameter for every robot 
 
const std::vector< uint32_t > & getRobotCollisions() const 
returns the found robot collisions while planning 
 
std::vector< std::vector< Checkpoint > > generatePath(const std::vector< std::vector< RouteVertex >> &_paths, const RouteCoordinator &routeQuerry_) const 
generates a final Routing Table containing Segment List and Preconditions to other robots ...
 
bool useSpeedRescheduler_
 
void resetAttempt(const std::vector< Segment > &_graph)
 
bool rescheduleSpeeds(const uint32_t _collidingRobot, const std::vector< uint32_t > &_collsisions, std::vector< float > &_newSchedule, int32_t &_firstRobotToReplan)
reduces a selected robots maximum speed 
 
void initSearchGraph(const std::vector< Segment > &_graph, const uint32_t minSegmentWidth_=0)
generates the search graph out of the given graph (and optimizes it) 
 
bool reschedulePriorities(const uint32_t _collidingRobot, std::vector< uint32_t > _collsisions, std::vector< uint32_t > &_newSchedule, uint32_t &_firstRobotToReplan)
rescedules priorities depending on the ound collisions and allready tried schedules ...
 
virtual bool getRoutingTable(const std::vector< Segment > &_graph, const std::vector< uint32_t > &_startSegments, const std::vector< uint32_t > &_goalSegments, std::vector< std::vector< Checkpoint >> &_routingTable, const float &_timeLimit)
computes the routing table according to the given start and goal _goalSegments 
 
uint32_t priorityScheduleAttempts_
 
RouteCoordinator * route_coordinator_
 
virtual void setPriorityRescheduling(const bool _status)
enables or disables priority rescheduling 
 
virtual const uint32_t getSpeedScheduleAttempts() const 
returns the number of attemps to limit the maximum speed of a robot taken 
 
void setCollisionResolver(const SegmentExpander::CollisionResolverType cRes)
sets the collisionResolver used 
 
virtual void reset(const std::vector< Segment > &_graph, const uint32_t _nrRobots)=0
resets the planning session of multiple robots 
 
const std::vector< float > & getActualSpeeds()
returns the computed speed schedule 
 
const std::vector< uint32_t > & getActualSchedule() const 
returns the currently produced speed schedule 
 
virtual void setRobotNr(const uint32_t _nr_robots)
sets the number of robots used