Arm_navigation/kinematics for simple arms
Hi everybody,
I'm currently working with the arm_navigation suite in combination with a 7 DOF manipulator. Now, I would like to make it work with a much simpler manipulator, in my case with 2 DOF. However, I found several comments, e.g. on the turtlebot SIG mailing list and in questions like this one, that this is currently problematic/not possible with the normal arm_navigation stack.
I also followed the hint on the turtlebot sig list about the simple_arms stack used for turtlebot manipulation. The magic seems to happen in the simple_arm_server, where the orientation is modified according to the DOF (4-6) of the used arm.
Could somebody please give me some insight, what the main problems are, when using a simple arm?
I assume the/one issue is, that a 6D pose goal can lead to an overdetermined system, when using a <6-DOF manipulator. If this is one of the problems, I think using a different KDL solver could help us.
I took a deeper look inside the code and found out, that the KDL IK plugin used by arm_kinematics_constraint_aware utilizes KDL's chainiksolvervel_pinv solver. But KDL also offers the chainiksolvervel_wdls solver, which allows specifying task and joint space weights. The first can help handling overdetermined system, since it defines how much each error of a task space direction influences the overall error, which the solver tries to minimise. The latter can help handling underdetermined systems, since one can specify how much the error of each joint influences the overall error. Before jumping into coding, I'd like to hear other thoughts on this. Would this change help us? Are there other show stoppers in arm_navigation/kinematics when it comes to simple arms?
Btw, I know that there is also the option to use OpenRave's analytic IK solvers (see this question for more info), but I'd like to go with an optimisation based solver, such as the KDL ones.