I'd like to use inverse kinematics for an unusual system. Basically it looks like this: I have a bunch of small objects (let's say A,B,C,D... which can be modeled as points) connected with revolute joints. The distances A-B, B-C etc are fixed. The angles A-B-C, B-C-D are also fixed (in many cases 120 or 109 degrees); essentially each object connects two revolute joints at a fixed angle. The revolute joints are the only things that can move (ie: the B-C joint controls the angle between A-B and C-D).

How can I describe this to inverse kinematics software?

I looked up a few python inverse kinematics packages eg ikpy,robotics-toolbox, tinyik, klampt but I can't figure out how to describe a system like that in any of them. In particular, while revolute joints are typically available, I don't understand how to tell the software about the the fixed angles (eg A-B-C). I don't have any software package in mind, just anything that can handle this will do.

Sketch: enter image description here

(note: A, B etc are not joints; they're rigid attachment points between rods/linear segments; the diamond is a revolute joint)

I found a description of DH parameters of a link, like this:

enter image description here

I think in those terms, for my links $\alpha_{i-1}$ is the fixed angle (eg A-B-C), $\theta_i$ is always zero (successive joints are not twisted out of plane, eg the axes of revolution of the A-B and B-C joints always lie in a plane), and I can set the distances for example for the B link as a = 0, d = distance B-C. Is that right?

It seems the question is really which inverse kinematics package can solve a system described in arbitrary Denavit-Hartenberg coefficients.

  • 1
    $\begingroup$ Can you provide a sketch? It is not clear to me how B-C can be a joint, while A-B-C and B-C-D are fixed angles. $\endgroup$
    – JRTG
    Nov 16, 2023 at 12:57
  • $\begingroup$ @JRTG Sure, I can try to explain: B-C is a revolute joint, it lets A-B and C-D line segments rotate relative to each other. But since it is only a revolute joint, rotating it doesn't change the A-B-C angle or B-C-D angle. I'll try to do a sketch as well $\endgroup$
    – Alex I
    Nov 16, 2023 at 19:41
  • $\begingroup$ @JRTG Sketch added $\endgroup$
    – Alex I
    Nov 16, 2023 at 21:04

1 Answer 1


The first link you provided ikpy says that they support Denavit-Hartenberg angles. I did not check the other links but I think they should be widely supported. Also implementing a transformation in python should be not too hard using numpy / scipy and the corresponding Wikipedia page.

Most of the times it makes sense to describe, at least the beginning of the math for the inverse kinematics before starting with any simulations. So here are a few further words about inverse kinematics in general:

  • As a first step it might be worth to just make a sketch and visualize on paper how the system should move. In general there are multiple modelling approaches and one might be more convenient then another. Visualizing which motions are of interest might help in the further steps.

  • Note that inverse kinematics is a description of how your joints move w.r.t to your end-effector motion. So the inverse kinematics also depend on how and where you define your end-effector and joints to be!

  • After defining you end-effector, try to find a minimal set of variables that describe you joint motions. They can be angles for rotational joints, as well as translations for linear joints.

  • There are a lot of similar mechanical systems for which the inverse kinematics math was already done. Just do a little bit of research and get familiar with the terms used in this field.

  • To solve equations there are a lot of tools available. You can solve your equations numerically, or if you manage also analytically (you could use sympy for solving your equations).

Specific to your case:

  • It would be really helpful to have the variables that you describe on the sketch itself, so that everybody is talking about the same thing.

  • You mention that the robot should move in a plane. A coordinate system (also denoted on the sketch) would help to understand which plane you mean.

  • Where is you end-effector? I.e. at what point to you want to know the relation between itself and the joints?

  • The joint between A-B for example doesn't seem relevant to mee since A and B are just points, nothing would change when turning this joint, right? The same goes for C-D.

  • $\begingroup$ Thank you, that's really helpful tips! "the robot should move in a plane" - sorry, that was probably unclear. I mean the axes of any two consecutive joints lie in a plane because they are collinear with the rods which meet at a point. The whole arm is not in a plane. "joint between A-B for example doesn't seem relevant" - true, in reality it is a longer arm with 4-5 joints "where is you end-effector?" - the first link is fixed in space, the last point is the effector $\endgroup$
    – Alex I
    Nov 17, 2023 at 9:07
  • $\begingroup$ So for your simple model here, if you assume that A is fixed and you would turn the joint between B-C, then point D would go outside (or inside) the paper, correct? $\endgroup$
    – rubimat
    Nov 17, 2023 at 23:31
  • $\begingroup$ Yes, that's right $\endgroup$
    – Alex I
    Nov 19, 2023 at 21:06
  • $\begingroup$ The kinematics could be derived by hand. You can attach a fixed frame starting from point D for example, then find the transform (translation and rotation matrix) from D to another frame attached to the first joint J1, and then find the transform from J1 to J2 and so on. In the end you can just multiply all transformation matrices and have a relation between you fixed frame and the end-effector. From there you could take the derivative (use a symbolic toolbox?) and you have you inverse kinematics. Denavit-H. is just a specific representation. I don't know if it has any benefits in this case. $\endgroup$
    – rubimat
    Nov 21, 2023 at 20:33

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.