Conversation
This was more or less undefined behavior before and has been a safety issue on more than one occasion.
Also, this changes the semantics of the property from "show the start state" to "set a custom start state". This is much more intuitive and not too far away from the original meaning. The old meaning provoked safety issues. This property is "only" used by people playing around with planning internals, e.g. the people maintaining the code.. The "average" user does not expect to be able to manipulate the start state of the motion-request te makes from rviz - it doesn't make sense if you want to actually move the robot. Therefore, disable the start-state by default to reduce the initial complexity the average user is confronted with.
This prevents the execution of plans when the start state might not be the current state of the robot. This also prevents the execution of some valid plans if the user explicitly set the (custom) start state to match the current state beforehand, but I believe the benefits are worth it.
| if (v == "<same as start>") | ||
| { | ||
| state = *planning_display_->getQueryStartState(); | ||
| if ( planning_display_->usesCurrentStartState() ) |
There was a problem hiding this comment.
Why is this extension needed? Probably because the start state wasn't (yet) updated to the current state.
Shouldn't be this update dealt with elsewhere, e.g. directly before planning?
|
Hey @rhaschke, I believe you misunderstood the idea behind this request. MoveIt supports the use-case "use the currently monitored state as start state for the request I'm sending you", by leaving the start state of a MotionPlanRequest empty. To forbid execution of trajectories that do not start from the actual start state of the robot, I disabled execution of all trajectories where this mechanism is not used, i.e. "Query Start State" is enabled. I'm not entirely sure we want to go that way, but it resolves all safety issues and afaics it's a reasonable solution. |
|
Hi Michael, I understand that you essentially add the possibility to always plan from the current state by explicitly specifying an empty start state. This behaviour is enabled when QueryStartState is disabled. I still don't like this interface for several reasons:
I think, Dave pointed out the only valid solution: There should be a validity check in MoveGroup server before executing a trajectory: If the current state (just before starting the trajectory) doesn't match the first via point, execution should be rejected. |
|
I agree that we should add a test to the MoveGroup server. Anyone is welcome to add it. On Mon, Jul 11, 2016 at 08:27:21AM -0700, Robert Haschke wrote:
Oh, I got you wrong there. You want that behavior. Up to now I thought of it as undefined (and undesirable). |
|
Interestingly, a combined "plan + execute" enforces the empty start state with a call to clearRequestStartState.Hence, using this button, the current state is enforced automatically. However, #442 remains. |
|
Discussion of this continues in #713 |
In #646 we discussed that the display should not allow execution of arbitrary generated plans for safety reasons.
This request proposes to make it the default use-case to have the interactive start-state marker disabled and disable execution if it is enabled.
While this disallows executing trajectories even if the selected start-state equals the current state, it is the safest way to implement this that came to my mind.
Improvements and comments are welcome!
Fixes #646 .