32 using namespace MotionPlanningGroup;
50 if (in.getPlanPlatformMovement())
54 if (!in.isCSpacePlatformMovementBoundsMinSet())
57 <<
"platform movement should be planned, but the min movement bounds were not set.";
61 if (!in.isCSpacePlatformMovementBoundsMaxSet())
64 <<
"platform movement should be planned, but the max movement bounds were not set.";
68 cspaceSimox = cspaceSimox2d;
69 Vector3fRange movBounds;
70 movBounds.min.e0 = in.getCSpacePlatformMovementBoundsMin()->x;
71 movBounds.min.e1 = in.getCSpacePlatformMovementBoundsMin()->y;
72 movBounds.min.e2 = in.getCSpacePlatformMovementBoundsMin()->z;
73 movBounds.max.e0 = in.getCSpacePlatformMovementBoundsMax()->x;
74 movBounds.max.e1 = in.getCSpacePlatformMovementBoundsMax()->y;
75 movBounds.max.e2 = in.getCSpacePlatformMovementBoundsMax()->z;
76 cspaceSimox2d->setPoseBounds(movBounds);
80 cspaceSimox =
new SimoxCSpace{getWorkingMemory()->getCommonStorage()};
84 AgentPlanningInformation agent;
85 agent.agentProjectNames = in.getAgentProjectName();
86 agent.agentRelativeFilePath = in.getAgentRelativeFilePath();
88 if (in.isCSpaceKinemaicChainNamesSet())
90 agent.kinemaicChainNames = in.getCSpaceKinemaicChainNames();
92 if (in.isCSpaceAdditionalJointsForPlanningSet())
94 agent.additionalJointsForPlanning = in.getCSpaceAdditionalJointsForPlanning();
96 if (in.isCSpaceJointsExcludedFromPlanningSet())
98 agent.jointsExcludedFromPlanning = in.getCSpaceJointsExcludedFromPlanning();
101 agent.collisionSetNames = in.getCollisionSetNames();
102 if (in.isInitialJointValuesSet())
104 agent.initialJointValues = in.getInitialJointValues();
106 agent.agentPose = in.getInitialAgentPose();
108 if (agent.kinemaicChainNames.empty() && agent.additionalJointsForPlanning.empty())
110 ARMARX_ERROR_S <<
"no joints set for planning! (define CSpaceAdditionalJointsForPlanning "
111 "and/or CSpaceKinemaicChainNames)";
116 ARMARX_VERBOSE_S <<
"Loading agent from project '" << agent.agentProjectName <<
"' and path '"
117 << agent.agentRelativeFilePath <<
"'";
119 cspaceSimox->setAgent(agent);
121 cspaceSimox->addObjectsFromWorkingMemory(getWorkingMemory());
122 cspaceSimox->setStationaryObjectMargin(in.getStationaryObjectMargin());
123 VectorXf start = cspaceSimox->jointMapToVector(in.getConfigStart());
124 if (start.size() !=
static_cast<std::size_t
>(cspaceSimox->getDimensionality()))
127 <<
"demensions, but the cspace has " << cspaceSimox->getDimensionality()
133 VectorXf stop = cspaceSimox->jointMapToVector(in.getConfigStop());
134 if (stop.size() !=
static_cast<std::size_t
>(cspaceSimox->getDimensionality()))
136 ARMARX_ERROR_S <<
"the stop config has " << stop.size() <<
"demensions, but the cspace has "
137 << cspaceSimox->getDimensionality() <<
" dimensions.";
143 CSpaceBasePtr cspace = cspaceSimox;
145 if (in.getPlanPlatformMovement())
148 VectorXf scale = {0.005, 0.005, 1};
149 scale.resize(cspaceSimox->getDimensionality(), 1);
151 scaledCspace->scaleConfig(start);
152 scaledCspace->scaleConfig(stop);
153 cspace = scaledCspace;
156 float dcdStepSize = 0.1;
158 std::lock_guard<std::mutex> lock{
taskMutex};
164 "Statechart.PlanMotionBase.RRT",
165 in.getPlanningTimeInSeconds(),
167 "Statechart.PlanMotionBase.PostProcess",
168 in.getTrajectoryOptimizationTimeout()
172 while (!isRunningTaskStopped() && !
task->finishedRunning())
175 std::this_thread::sleep_for(std::chrono::milliseconds(20));
177 if (TaskStatus::eDone ==
task->getTaskStatus())
180 PathWithCost p =
task->getPathWithCost();
184 scaledCspace->unscalePath(p.nodes);
189 setOutput(
"Trajectory", trajectory);
200 std::lock_guard<std::mutex> lock{
taskMutex};