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