@@ -142,15 +142,17 @@ std::string motionTypeToString(const MotionType type)
142142MoveJPrimitive::MoveJPrimitive (const MotionTarget& target, const double blend_radius,
143143 const std::chrono::duration<double > duration, const double acceleration,
144144 const double velocity)
145- : MotionPrimitiveWithTarget(target, blend_radius, duration, acceleration, velocity)
145+ : MotionPrimitiveWithTarget(blend_radius, duration, acceleration, velocity)
146146{
147+ setTarget (target);
147148}
148149
149150MoveJPrimitive::MoveJPrimitive (const urcl::vector6d_t & target, const double blend_radius,
150151 const std::chrono::duration<double > duration, const double acceleration,
151152 const double velocity)
152- : MotionPrimitiveWithTarget(Q(target), blend_radius, duration, acceleration, velocity)
153+ : MotionPrimitiveWithTarget(blend_radius, duration, acceleration, velocity)
153154{
155+ setTarget (Q (target));
154156}
155157
156158void MoveJPrimitive::setTarget (const MotionTarget& target)
@@ -177,15 +179,17 @@ void MoveJPrimitive::setTarget(const MotionTarget& target)
177179MoveLPrimitive::MoveLPrimitive (const urcl::Pose& target, const double blend_radius,
178180 const std::chrono::duration<double > duration, const double acceleration,
179181 const double velocity)
180- : MotionPrimitiveWithTarget(target, blend_radius, duration, acceleration, velocity)
182+ : MotionPrimitiveWithTarget(blend_radius, duration, acceleration, velocity)
181183{
184+ setTarget (target);
182185}
183186
184187MoveLPrimitive::MoveLPrimitive (const MotionTarget& target, const double blend_radius,
185188 const std::chrono::duration<double > duration, const double acceleration,
186189 const double velocity)
187- : MotionPrimitiveWithTarget(target, blend_radius, duration, acceleration, velocity)
190+ : MotionPrimitiveWithTarget(blend_radius, duration, acceleration, velocity)
188191{
192+ setTarget (target);
189193}
190194void MoveLPrimitive::setTarget (const MotionTarget& target)
191195{
@@ -209,14 +213,16 @@ void MoveLPrimitive::setTarget(const MotionTarget& target)
209213
210214MovePPrimitive::MovePPrimitive (const urcl::Pose& target, const double blend_radius, const double acceleration,
211215 const double velocity)
212- : MotionPrimitiveWithTarget(target, blend_radius, std::chrono::milliseconds(0 ), acceleration, velocity)
216+ : MotionPrimitiveWithTarget(blend_radius, std::chrono::milliseconds(0 ), acceleration, velocity)
213217{
218+ setTarget (target);
214219}
215220
216221MovePPrimitive::MovePPrimitive (const MotionTarget& target, const double blend_radius, const double acceleration,
217222 const double velocity)
218- : MotionPrimitiveWithTarget(target, blend_radius, std::chrono::milliseconds(0 ), acceleration, velocity)
223+ : MotionPrimitiveWithTarget(blend_radius, std::chrono::milliseconds(0 ), acceleration, velocity)
219224{
225+ setTarget (target);
220226}
221227
222228void MovePPrimitive::setTarget (const MotionTarget& target)
@@ -241,7 +247,7 @@ void MovePPrimitive::setTarget(const MotionTarget& target)
241247
242248MoveCPrimitive::MoveCPrimitive (const urcl::Pose& via_point, const urcl::Pose& target, const double blend_radius,
243249 const double acceleration, const double velocity, const int32_t mode)
244- : MotionPrimitiveWithTarget(target, blend_radius, std::chrono::milliseconds(0 ), acceleration, velocity)
250+ : MotionPrimitiveWithTarget(blend_radius, std::chrono::milliseconds(0 ), acceleration, velocity)
245251 , mode(mode)
246252 , via_point_(via_point)
247253{
@@ -251,7 +257,7 @@ MoveCPrimitive::MoveCPrimitive(const urcl::Pose& via_point, const urcl::Pose& ta
251257
252258MoveCPrimitive::MoveCPrimitive (const MotionTarget& via_point, const MotionTarget& target, const double blend_radius,
253259 const double acceleration, const double velocity, const int32_t mode)
254- : MotionPrimitiveWithTarget(target, blend_radius, std::chrono::milliseconds(0 ), acceleration, velocity)
260+ : MotionPrimitiveWithTarget(blend_radius, std::chrono::milliseconds(0 ), acceleration, velocity)
255261 , mode(mode)
256262 , via_point_(via_point)
257263{
@@ -275,6 +281,11 @@ void MoveCPrimitive::setVia(const MotionTarget& via_point)
275281
276282void MoveCPrimitive::recomputeType ()
277283{
284+ if (target_ == nullptr || via_point_.index () == std::variant_npos)
285+ {
286+ type = MotionType::UNKNOWN ;
287+ return ;
288+ }
278289 const bool target_is_pose = std::holds_alternative<urcl::Pose>(*target_);
279290 const bool via_is_pose = std::holds_alternative<urcl::Pose>(via_point_);
280291 if (target_is_pose && via_is_pose)
@@ -297,46 +308,52 @@ void MoveCPrimitive::recomputeType()
297308
298309void MoveCPrimitive::refreshLegacyFields ()
299310{
300- std::visit (
301- [&](const auto & target_variant) {
302- using T = std::decay_t <decltype (target_variant)>;
303- if constexpr (std::is_same_v<T, urcl::Pose>)
304- {
305- target_pose = target_variant;
306- }
307- else if constexpr (std::is_same_v<T, Q>)
308- {
309- target_pose = urcl::Pose{};
310- }
311- },
312- *target_);
313- std::visit (
314- [&](const auto & via_variant) {
315- using T = std::decay_t <decltype (via_variant)>;
316- if constexpr (std::is_same_v<T, urcl::Pose>)
317- {
318- via_point_pose = via_variant;
319- }
320- else if constexpr (std::is_same_v<T, Q>)
321- {
322- via_point_pose = urcl::Pose{};
323- }
324- },
325- via_point_);
311+ if (target_ != nullptr )
312+ {
313+ std::visit (
314+ [&](const auto & target_variant) {
315+ using T = std::decay_t <decltype (target_variant)>;
316+ if constexpr (std::is_same_v<T, urcl::Pose>)
317+ {
318+ target_pose = target_variant;
319+ }
320+ else if constexpr (std::is_same_v<T, Q>)
321+ {
322+ target_pose = urcl::Pose{};
323+ }
324+ },
325+ *target_);
326+ }
327+ if (via_point_.index () != std::variant_npos)
328+ {
329+ std::visit (
330+ [&](const auto & via_variant) {
331+ using T = std::decay_t <decltype (via_variant)>;
332+ if constexpr (std::is_same_v<T, urcl::Pose>)
333+ {
334+ via_point_pose = via_variant;
335+ }
336+ else if constexpr (std::is_same_v<T, Q>)
337+ {
338+ via_point_pose = urcl::Pose{};
339+ }
340+ },
341+ via_point_);
342+ }
326343}
327344
328345OptimoveJPrimitive::OptimoveJPrimitive (const urcl::vector6d_t & target, const double blend_radius,
329346 const double acceleration_fraction, const double velocity_fraction)
330- : MotionPrimitiveWithTarget(Q(target), blend_radius, std::chrono::milliseconds(0 ), acceleration_fraction,
331- velocity_fraction)
347+ : MotionPrimitiveWithTarget(blend_radius, std::chrono::milliseconds(0 ), acceleration_fraction, velocity_fraction)
332348{
349+ setTarget (Q (target));
333350}
334351
335352OptimoveJPrimitive::OptimoveJPrimitive (const MotionTarget& target, const double blend_radius,
336353 const double acceleration_fraction, const double velocity_fraction)
337- : MotionPrimitiveWithTarget(target, blend_radius, std::chrono::milliseconds(0 ), acceleration_fraction,
338- velocity_fraction)
354+ : MotionPrimitiveWithTarget(blend_radius, std::chrono::milliseconds(0 ), acceleration_fraction, velocity_fraction)
339355{
356+ setTarget (target);
340357}
341358
342359void OptimoveJPrimitive::setTarget (const MotionTarget& target)
@@ -361,16 +378,16 @@ void OptimoveJPrimitive::setTarget(const MotionTarget& target)
361378
362379OptimoveLPrimitive::OptimoveLPrimitive (const urcl::Pose& target, const double blend_radius,
363380 const double acceleration_fraction, const double velocity_fraction)
364- : MotionPrimitiveWithTarget(target, blend_radius, std::chrono::milliseconds(0 ), acceleration_fraction,
365- velocity_fraction)
381+ : MotionPrimitiveWithTarget(blend_radius, std::chrono::milliseconds(0 ), acceleration_fraction, velocity_fraction)
366382{
383+ setTarget (target);
367384}
368385
369386OptimoveLPrimitive::OptimoveLPrimitive (const MotionTarget& target, const double blend_radius,
370387 const double acceleration_fraction, const double velocity_fraction)
371- : MotionPrimitiveWithTarget(target, blend_radius, std::chrono::milliseconds(0 ), acceleration_fraction,
372- velocity_fraction)
388+ : MotionPrimitiveWithTarget(blend_radius, std::chrono::milliseconds(0 ), acceleration_fraction, velocity_fraction)
373389{
390+ setTarget (target);
374391}
375392
376393void OptimoveLPrimitive::setTarget (const MotionTarget& target)
0 commit comments