-
Notifications
You must be signed in to change notification settings - Fork 689
Feature: New FREE command in Pilz planner for free-space trajectory generation #3610
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
due to derivatives discontinuouties normal composite fail to Pose IK
|
May you review this ? |
EzraBrooks
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just one comment otherwise LGTM.
| bool is_integer = std::fabs(val - std::round(val)) < 1e-9; | ||
|
|
||
| // Format value as string | ||
| std::ostringstream oss; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry, it's been a while since I've looked at the moveit2 codebase; do we have fmt available here? I think we should prefer modern string formatting techniques over ostringstream if so.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
oh, this is a fix I have introduced it in #3604.
it is not related to this PR!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
so I should replace this with fmt (modern formatting library)?
should I do it here or in the PR #3604 because I did a mistake by include this fix here.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not sure "free" is the right title. Suggesting some other names:
- variable blend -->
variableBlendFromWaypoints() - motion sequence -->
sequenceFromWaypoints(). This is my favorite.
A free space planner typically means something like A* that is free to take any route to the goal.
AndyZe
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Your triangle example seems to violate this? Did something change:
The planner cannot generate trajectories that contain three or more consecutive colinear waypoints (e.g., straight lines)
the triangle example uses only triangle's vertices. what I meant there by "straight lines" is pure straight line. |
Right, FREE is not appropriate. |
Description
This pull request adds a new Pilz Industrial Planner command:
FREE, which enables planning Cartesian free-space trajectories using waypoints.Added Classes
The workflow of these classes follows the same structure as the existing
CIRCandLINcommands.TrajectoryGeneratorFreeMain class responsible for receiving the
MotionPlanRequestand setting up the free-space path.PathFreeGeneratorHandles the generation of free paths using
KDL::Path_RoundedComposite.This class provides:
freeFromWaypoints()– Adds and validates waypoints.computeBlendRadius()– Computes the maximum feasible rounding radius, scaled by thesmoothnessfactor.checkConsecutiveColinearWaypoints()– Detects and throws an error if three consecutive colinear points are found (handled insetFreePath()).Limitations
This is a limitation of
KDL::Path_RoundedComposite.When such a case is detected, an error is thrown and the plan is rejected.
Usage Example
An example of how to use the
FREEcommand withMotionSequenceItem:Tests
triangles with different smoothness:
points generated from external parametric curve:
Checklist