# Inverse kinematics for an unusual system

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:

(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:

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.

• 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.
– JRTG
Nov 16, 2023 at 12:57
• @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 Nov 16, 2023 at 19:41
• @JRTG Sketch added Nov 16, 2023 at 21:04

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).