-
Notifications
You must be signed in to change notification settings - Fork 596
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
PILZ LIN planner calculates first IK using start state containing wrong joint values for joints outside the current joint model group. #3336
Comments
For context, this is the same problem we saw in moveit1 in moveit/moveit#3519 (comment) . As far as I can tell, that PR has been entirely ported to Humble, so I'm confused why we're seeing it again. |
Hmm, actually, reading through #3519 it looks like the problem is that collisions are being checked at all by I'll try to work out why this collision check is happening in Humble when it isn't in Noetic. |
Having said that, the comments in #3519 don't seem to match what Noetic is doing any more - |
Could PR #1856 have introduced the issue you are facing? Maybe the problem is not present in ROS1 since this change was not backported to MoveIt1. |
I don't think so? As far as I can tell, moveit/moveit#3519 largely ported #1856 and unified the two distributions? Also, the full state is present in both the PlanningSceneMonitor |
Description
Context:
we are planning a PILZ LIN path, where one robot (in one joint model group) moves past another robot (in another joint model group).
The request has a start state where the second robot has moved out of the way of the first, but in the actual scene (and so in the PlanningSceneMonitor) the robot has not yet moved.
When we try to plan this move, collisions are reported between the two robots, even though the second robot should already be out of the way.
Technical details:
In
TrajectoryGenerator::generate
:scene
is the current planning scene, taken from thePlanningSceneMonitor
(second robot has not moved).req.start_state
contains the start state request (second robot has moved).MotionPlanInfo plan_info
is constructed;plan_info.start_joint_position
only contains the joints fromreq.start_state
which are in the current JointModelGroup.extractMotionPlanInfo
is called (in this case, calling theTrajectoryGeneratorLIN
variant).In
TrajectoryGeneratorLIN::extractMotionPlanInfo
:computePoseIK
is called, takinginfo.start_joint_position
as its seed.In
computePoseIK
:RobotState rstate
is constructed fromscene
, with joints updated fromseed
. This leaves a state where the second robot has not moved.This is a problem in Humble, but not in Noetic. I assume a PR in ROS1 hasn't been ported to ROS2, but I can't find any relevant differences in the relevant code.
Proposed solution:
In
TrajectoryGeneratorLIN::extractMotionPlanInfo
, thecomputePoseIK
call should not useinfo.start_joint_position
as its seed, but rather a map containing all joints (including joints not in the current joint model group).If this solution is sensible, I will write it. But if there's a better fix (ideally just porting an existing fix from ROS1) I will do that instead.
ROS Distro
Humble
OS and version
22.04
Source or binary build?
Source
If binary, which release version?
No response
If source, which branch?
Humble
Which RMW are you using?
None
Steps to Reproduce
Expected behavior
The plan should succeed.
Actual behavior
The plan reports a collision and fails.
Backtrace or Console output
No response
The text was updated successfully, but these errors were encountered: