44 for(uint32_t i = 0; i <
threads_; i++)
56 std::vector<uint32_t> robotRadius(_nr_robots, 0);
60 for(uint32_t i = 0; i <
threads_; i++)
119 bool MultiRobotRouterThreadedSrr::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)
121 std::chrono::time_point<std::chrono::high_resolution_clock> tstart = std::chrono::high_resolution_clock::now();
135 std::vector<std::vector<RouteVertex>> routeCandidates;
140 uint32_t firstSchedule = 0;
142 uint32_t lastPlannedRobot;
147 int32_t firstRobot = -1;
155 for(uint32_t i = 0; i < priorityList.size(); i++)
157 if(priorityList[i] == firstRobot)
162 found =
planPaths(priorityList, speedList, _startSegments, _goalSegments, firstSchedule, routeCandidates, lastPlannedRobot);
165 std::chrono::time_point<std::chrono::high_resolution_clock> tgoal = std::chrono::high_resolution_clock::now();
166 duration = std::chrono::duration_cast<std::chrono::milliseconds>(tgoal - tstart).count();
181 bool MultiRobotRouterThreadedSrr::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 &_lastRobot)
184 for(uint32_t i = _firstSchedule; i <
nr_robots_; i++)
186 uint32_t robot = _priorityList[i];
191 uint32_t plannedRobots = _firstSchedule;
196 uint32_t startCount = plannedRobots;
197 int32_t currentFailedI = -1;
201 std::vector<std::thread>
s;
202 s.resize(maxCount - startCount);
204 std::vector<RouteCoordinatorWrapper> rcWrappers;
205 for(
int i = startCount; i < maxCount; i++)
207 uint32_t robot = _priorityList[i];
209 rcWrappers.push_back(rcW);
212 for(
int i = startCount; i < maxCount; i++)
214 uint32_t robot = _priorityList[i];
215 uint32_t
start = _startSegments[robot];
216 uint32_t goal = _goalSegments[robot];
218 float speed = _speedList[robot];
219 std::vector<RouteVertex> &routeCandidate = _routeCandidates[robot];
221 uint32_t index = i - startCount;
224 s[index] = std::thread(
225 [wr, robot,
start, goal, diameter, speed, &routeCandidate, iter, &sr]()
239 for(std::thread & t :
s)
245 for(uint32_t i = startCount; i < maxCount; i++)
247 uint32_t robot = _priorityList[i];
248 uint32_t planner = i - startCount;
254 if(!
srr[planner].getLastResult())