27 #include "../../CSpace/CSpace.h"
54 catch (Ice::Exception& e)
57 <<
"The worker thread of worker " << workerId
58 <<
" had an Ice::Exception! \nStack trace:\n"
59 << e.ice_stackTrace();
76 ARMARX_VERBOSE_S <<
"[worker " << workerId <<
"] request for update " << updateId <<
" (of "
125 cspace->initCollisionTest();
128 const auto cspaceDims = cspace->getDimensionsBounds();
129 std::vector<std::pair<float, float>> dimensionBounds{};
133 std::back_inserter(dimensionBounds),
134 [](
const FloatRange& dim) { return std::make_pair(dim.min, dim.max); });
138 dimensionBounds.end()},
142 auto cspaceDerived = CSpacePtr::dynamicCast(cspace);
153 {
return cspaceDerived->isCollisionFree(cfg); });
178 (*sampler)(randomCfg.data());
180 const auto nearId = primTree.getNearestNeighbour(randomCfg);
181 const auto& nearNode = primTree.getNode(nearId);
183 const auto reachCfg = steer(nearNode.cfg, randomCfg);
184 if (reachCfg != nearNode.cfg)
189 const auto nearSecondId = secnTree.getNearestNeighbour(reachCfg);
190 const auto& nearSecondNode = secnTree.getNode(nearSecondId);
192 const auto reachSecondCfg = steer(nearSecondNode.cfg, reachCfg);
193 if (reachSecondCfg != nearSecondNode.cfg)
197 if (reachSecondCfg == reachCfg)
207 std::move(pPart2.begin(), pPart2.end(), std::back_inserter(p));
208 task->setPath({p,
"Path"});
221 task->workerHasAborted(workerId);
254 const NodeId& parent,
255 bool addToPrimaryTree)
257 cspace->initCollisionTest();
259 tree.addNode(cfg, parent, workerId);
264 localUpdates.back().updatesPerTree.at(treeId).nodes.emplace_back(
265 NodeCreationUpdate{cfg, parent});
269 static_cast<Ice::Long>(tree.getNodes().at(workerId).size()) -