필터 지우기
필터 지우기

No valid kinematic groups were found

조회 수: 14 (최근 30일)
Sean Rice
Sean Rice 2020년 12월 9일
답변: Hannes Daepp 2022년 4월 11일
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?
  댓글 수: 5
Harsh Rana
Harsh Rana 2021년 6월 5일
I am facing the same issue,
I want to do analitical inverse kinematics on my own rigidBodyTree robot model, but it shows "No valid kinematic groups were found."
If you got the solution, please help, thank you
RoboTomo
RoboTomo 2021년 12월 2일
Does analytic inverse kinematic calculation in Matlab only works on the 'abbIrb120' example? When trying to use other robots from the library it doesn't work.

댓글을 달려면 로그인하십시오.

답변 (2개)

Hannes Daepp
Hannes Daepp 2022년 4월 11일
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)
aik =
analyticalInverseKinematics with properties: KinematicGroup: [1×1 struct] RigidBodyTree: [1×1 rigidBodyTree] KinematicGroupType: 'RRRRSSSR' KinematicGroupConfigIdx: [1 2 3 4 5 6 7 10] IsValidGroupForIK: 0
aik.showdetails()
-------------------- Robot: (16 bodies) Index Base Name EE Body Name Type Actions ----- --------- ------------ ---- ------- 1 j2s7s300_link_1 j2s7s300_link_7 RRRSSS Use this kinematic group 2 j2s7s300_link_1 j2s7s300_end_effector RRRSSS Use this kinematic group
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:
  • 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.
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
Gabriele Gualandi 2021년 1월 30일
편집: Walter Roberson 2021년 6월 5일
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)

카테고리

Help CenterFile Exchange에서 Manipulator Modeling에 대해 자세히 알아보기

제품


릴리스

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by