I'm working on integrating a robot model consisting of 1 DOF revolute and prismatic joints with moveit and have made a simplified example to make it easier to break down the problems: https://github.com/st3am/KDL-Test (roslaunch kdl_test demol.launch)
I think I'm seeing issues with the KDL kinematics solver. When I have my arm in a configuration of just 2 DOF I can not move the interactive marker. This makes perfect sense to me because the end effector point can not be moved in any direction without increasing the radius from the origin and the chances that I release the marker on the thin spherical shell (.005 thickness defined in the kinematics.yaml) are very low.
The problem occurs when I add the prismatic joint at the end of this arm. The solver can find solutions if I pull the joint out in the axis that is collinear with the axis of the prismatic joint (I manipulate this with the interactive marker on the end effector link), but no solutions are found when I try moving it perpendicular to this radial axis. The sphere of possible solutions is much larger in this case; extending the length between the prismatic joints.
When I add a revolute joint at the end of the prismatic joint and make it the new end effector I can get radial motion perpendicular to the revolute axis because the pose of the end effector does not have to change. By changing the pose and radial position with in steps with the marker I can get the arm to revolve all the way around on a single plane. When I add a second revolute joint perpendicular to the first and make it the new end effector I can move it in either axis, but the first one I move it in subsequently locks the second one. When I try to set a move group goal with all 5 DOF using moveit::planning_interface::MoveGroup.setPositionTarget(), moveit cant find a kinematic solution and times out.
Can anyone tell me if this is a limitation of KDL or if it looks like I'm doing something incorrectly? It seems like in this case the KDL can't find the orientation for a pose either because I'm not giving it what its expecting or because the limited number of DOF's along the prismatic joints somehow cause its root finding algorithms to run into a sort of gimal lock.
Post score: 1