97 std::unique_ptr<armarx::navigation::global_planning::GlobalPlannerParams>
99 instantiateGlobalPlannerParams(globalPlannerParams, params);
105 std::lock_guard g{*properties_.safetyGuardParamsMutex};
106 if (properties_.safetyGuardParams !=
nullptr)
108 safetyGuardParams = *properties_.safetyGuardParams;
112 params.safetyGuardIgnoredRegions |
113 ranges::views::transform(
114 [](
const core::arondto::BoundingBox2D& bbDto) -> Eigen::AlignedBox2f
116 Eigen::AlignedBox2f bbBo;
125 generalParams = properties_.defaultGeneralConfig;
128 if (params.enableRampingStart.has_value())
130 generalParams.enableRampingStart = params.enableRampingStart.value();
132 if (params.enableRampingEnd.has_value())
134 generalParams.enableRampingEnd = params.enableRampingEnd.value();
136 if (params.enableRampingCorners.has_value())
138 generalParams.enableRampingCorners = params.enableRampingCorners.value();
140 if (params.rampLength.has_value())
142 generalParams.rampLength = params.rampLength.value();
144 if (params.cornerVelocity.has_value())
146 generalParams.cornerVelocity = params.cornerVelocity.value();
148 if (params.boundaryVelocity.has_value())
150 generalParams.boundaryVelocity = params.boundaryVelocity.value();
152 if (params.cornerLimit.has_value())
154 generalParams.cornerLimit = params.cornerLimit.value();
157 if (params.inCollisionDistanceThresholdForRecovery.has_value())
159 generalParams.inCollisionDistanceThresholdForRecovery =
160 params.inCollisionDistanceThresholdForRecovery.value();
163 << generalParams.inCollisionDistanceThresholdForRecovery <<
" mm";
165 generalParams.navigateCloseAsPossible = params.navigateCloseAsPossible;
167 << (generalParams.navigateCloseAsPossible ?
"enabled" :
"disabled");
170 ARMARX_INFO <<
"Re-planning after a failed global plan: "
171 << (retryTimeout_.toSecondsDouble() > 0
172 ?
"enabled (budget " + std::to_string(retryTimeout_.toSecondsDouble()) +
174 : std::string(
"disabled"));
176 if (generalParams.enableRampingStart or generalParams.enableRampingEnd or
177 generalParams.enableRampingCorners)
179 ARMARX_INFO <<
"Velocity ramping is enabled (start=" << generalParams.enableRampingStart
180 <<
"; end=" << generalParams.enableRampingEnd
181 <<
"; corners=" << generalParams.enableRampingCorners
182 <<
"; rampLength=" << generalParams.rampLength
183 <<
"; cornerVelocity=" << generalParams.cornerVelocity
184 <<
"; boundaryVelocity=" << generalParams.boundaryVelocity
185 <<
"; cornerLimit=" << generalParams.cornerLimit <<
").";
188 if (params.velocityLimitLinear.has_value())
190 generalParams.maxVel.linear = params.velocityLimitLinear.value();
192 if (params.velocityLimitAngular.has_value())
194 generalParams.maxVel.angular = params.velocityLimitAngular.value();
196 if (params.trajectoryParametrization.has_value())
199 generalParams.parametrization);
202 ARMARX_INFO <<
"Configuring navigator to respect the velocity limits:";
203 ARMARX_INFO <<
"linear: " << generalParams.maxVel.linear;
204 ARMARX_INFO <<
"angular: " << generalParams.maxVel.angular;
211 if (params.enableLocalPlanning)
216 if (params.enableSafetyGuard)
222 if (params.goalReachedThresholds.has_value())
225 goalReachedCfg.
posTh = params.goalReachedThresholds->posTh;
226 goalReachedCfg.
oriTh = params.goalReachedThresholds->oriTh;
227 goalReachedCfg.
linearVelTh = params.goalReachedThresholds->linearVelTh;
228 goalReachedCfg.
angularVelTh = params.goalReachedThresholds->angularVelTh;
231 ARMARX_INFO <<
"Goal reached config override: posTh=" << goalReachedCfg.
posTh
232 <<
"mm, oriTh=" << goalReachedCfg.
oriTh <<
"rad, linearVelTh="
233 << goalReachedCfg.
linearVelTh <<
"mm/s, angularVelTh="
241 memorySubscriber.reset();
244 memorySubscriber.emplace(
id, srv_->memoryNameSystem);
248 iceNavigator = srv_->iceNavigatorFactory.createConfig(cfg,
id);
251 .navigator = iceNavigator.get(), .subscriber = &memorySubscriber.value()});
263 arondto::NavigatingSkillParams defaultParameters;
265 defaultParameters.enableRampingStart = std::nullopt;
266 defaultParameters.enableRampingEnd = std::nullopt;
267 defaultParameters.enableRampingCorners = std::nullopt;
268 defaultParameters.rampLength = std::nullopt;
269 defaultParameters.cornerVelocity = std::nullopt;
270 defaultParameters.boundaryVelocity = std::nullopt;
271 defaultParameters.cornerLimit = std::nullopt;
273 defaultParameters.inCollisionDistanceThresholdForRecovery = std::nullopt;
275 defaultParameters.navigateCloseAsPossible =
false;
278 defaultParameters.retryTimeout = 0.0F;
280 defaultParameters.enableLocalPlanning =
false;
281 defaultParameters.enableSafetyGuard =
true;
282 defaultParameters.safetyGuardIgnoredRegions =
283 std::vector<armarx::navigation::core::arondto::BoundingBox2D>();
284 defaultParameters.velocityLimitAngular = std::nullopt;
285 defaultParameters.velocityLimitLinear = std::nullopt;
288 defaultParameters.trajectoryParametrization = std::nullopt;
289 defaultParameters.globalPlanningAlgorithm = arondto::GlobalPlanningAlgorithm::SPFA;
290 defaultParameters.p2pCheckCollisionsAlongTrajectory =
false;
293 defaultParameters.goalReachedThresholds = std::nullopt;
295 return defaultParameters;