- Use a numerical solver, such as inverseKinematics or generalizedInverseKinematics. These are general-use solvers that also accept a rigid body tree robot model and do not have any limitations on the kinematics, such as DoF or joint-type.
- If you need an analytical solution, derive your own. See the Inverse Kinematics disovery page for suggestions on getting started with Symbolic Toolbox in MATLAB.
- If you have a lot of control over your robot, you may be able to modify its parameters (in the URDF or rigidbodytree object) so that it works for analytical IK. For example, if the aim of using an analytical inverse kinematics solver is for performance reasons, you could use a modified rigidbodytree to generate an analytical solution that provides close configurations, and then use those as an initial guess to a numerical solver that relies on the actual rigidbodytree model and can produce exact configurations.
No valid kinematic groups were found
22 views (last 30 days)
I am trying to generate an inverse kinematics solver using the analyticalInverseKinematicsFunction. I have a robot model in a urdf that I have read in, but when I run the analyticalInverseKinematicsFunction it says that no valid kinematic groups were found. my robot is read in in the same format as the example robots. I have used this same urdf to solve kinematics problems in ros so I don't think the problem is with it.
Is there a way to debug and find out why there are no valid kinematic groups?
Hannes Daepp on 11 Apr 2022
The analyticalInverseKinematics object finds closed-form solutions for a subset of six-degree-of-freedom (DoF) revolute robots with a wrist. The most relevant way to see if your robot fits in this category is to look at the KinematicGroupType output. This is displayed when the robot is first analyzed in the object display, and as part of the showdetails output.
The output of the KinematicGroupType indicates the joint configuration of the tree defined by the associated kinematic group (a chain of bodies in the robot defined by the first and last body in the serial chain), with their types written as R (revolute), P (prismatic), or S (part of a spherical wrist, as defined by 3 consecutive revolute joints with intersecting axes). In order for the solver to find a solution, at least one of the kinematic groups must be of the form XXXSSS, where X is either R (revolute) or S (i.e. there are multiple intersecting revolutes). You can use the showdetails output to find all the qualifying kinematic groups in a rigid body tree.
For example, the Kinova Jaco J2S7S300 has a wrist, but the default kinematic group selects the base and last body, resulting in a 7-DoF robot, for which analytical IK cannot be found. However, using showdetails, you can see that there are kinematic groups that produce qualifying kinematic configurations.
robot = loadrobot('kinovaJacoJ2S7S300');
aik = analyticalInverseKinematics(robot)
Not all robots meet the qualifying criteria, and for those, no valid kinematic groups will be found. In those cases, it is recommended that you do one of the following:
If you have a 6-DoF robot with revolute joints and a wrist and are still not seeing a viable kinematic group, or if your robot meets these criteria but the KinematicGroupType is not what you expect, please share your robot model or reach out to technical support.
Gabriele Gualandi on 30 Jan 2021
Edited: Walter Roberson on 5 Jun 2021
For sure, file format .urdf contains information sufficient to the direct kinematics ( http://wiki.ros.org/urdf/Tutorials/Create%20your%20own%20urdf%20file ). But analitical inverse kinematics may not be included in a .urdf.
Analitical inverse kinematics is a function that could not possible to derive programmatically, i.e., it is tipically derived by human. https://www.mathworks.com/help/symbolic/derive-and-apply-inverse-kinematics-to-robot-arm.html
Possibly, your model does not include the analitical inverse kinematics function, so you could:
- try to derive it by yourself
- use the numerical inverse kinematics (e.g., matlab BFGS Gradient Projection)