Reputation: 139
I've been looking into some papers on inverse kinematics planning with collision avoidance for a robotic arm. I found this paper called, "Global Inverse Kinematics via Mixed-Integer Convex Optimization", which I believe a few of Drake's developer's names are on.
On this paper, it says that the code is already part of drake. However, when I found it, the code was placed in attic. (https://github.com/RobotLocomotion/drake/blob/master/attic/multibody/global_inverse_kinematics.h)
In the current kuka arm example under move_iiwa_ee, the IK code called ConstraintRelaxingIk is used instead.
I would like to know why the "Global Inverse Kinematics via Mixed-Integer Convex Optimization" IK code was put to the side and if there were any problems with it.
Also, I'm not sure if the current ConstraintRelaxingIk does collision avoidance. Could someone clarify this?
(And if it does, are there any extra steps to take other than inserting an obstacle model?)
Thank you
Upvotes: 4
Views: 685
Reputation: 2766
Thanks for your interest in our work.
The global inverse kinematics code is in attic
folder because it uses RigidBodyTree
, which will be deprecated soon. I haven't got time to rewrite the code to use the new MultibodyTree yet. For the moment, if you would like to try the approach in the global IK paper, could you use the code in the . (Update The code is already moved out of attic
folder? I will try to move the code out of attic
folder to use MultibodyTree
attic
folder. Now it is in inverse_kinematics
folder)
ConstraintRelaxingIk doesn't handle collision avoidance. On the other hand, you can use InverseKinematics class. It formulates IK as a nonlinear optimization problem, and calls the nonlinear solver to find the solution. Specifically for collision avoidance, you could use AddMinimumDistanceConstraint to impose a minimal distance constraint between all pairs of geometries. Alternatively, you could call AddDistanceConstraint if you want to impose a distance constraint between a specific pair of geometries. I would actually recommend trying InverseKinematics
class first before you try the global IK approach, since InverseKinematics
uses MultibodyPlant
, and usually runs faster than the global approach.
BTW, the formulation used in InverseKinematics
class is described in section II.B and II.C of this paper
Upvotes: 5