# DH parameters solution for forward kinematics

I am stuck at a problem of solving DH parameters for a simple test mechanism. I know that the given mechanism is a structure but just for pure academic purposes assume that it's a real system. I only want to know the correct way to solve a system with DH parameters, when there is only one active joint and more than one passive joints that depend totally on the command of the actuated joint.

-- Joints (All joints are Revolute): J1 (Actuated by some motor) J2 (Passive) J3 (Passive)

-- Links: L1,L2 (Rigid Links) The link 1 and link 2 are not directly connected at joint J2 but there is a small link that connects link L1 with joint J2. It is not visible in top view but it allows the system to work in real life. But please just ignore it for this example!

-- The images are the top view with the z axis for each joint coming out of the paper.

-- Assuming clockwise rotation as positive for this problem.

![Page#1] I realize that the transformations below are wrong and not done by following the DH convention. I should have but instead I followed the standard method. But once I apply DH coordinate axis, I should use the DH method. But this still does not change the real question in the last picture. Thank you ![Page#2]

@Chuck:

Problem: J1 is the only active joint in the system. j2 and J3 are passive joints. I want to find the kinematic equations of the system(basically, I want to find the Joint angle of J3(Pitch) as a function of Joint angle of J1). I have shown the DH coordinate axis in the first picture. I can only measure J1 angle with an encoder but J2 and J3 are passive, so I have to find their relation with J1 to get their value for the transformation matrix. Since the choice of first joints x axis is arbitrary in DH method, I chose x0 axis parallel to link L2 and then found theta2 as a function of theta1. I want to know, is this the correct way to find the passive joints angle as a function of an active joint?

If my solution of joint paramter Theta2 = 180 - Theta1 is not correct, then how would you find the joint parameter Theta2 as a function of Theta1, since you can not measure Theta2(for it is passive), you can only find Theta2 mathematically and its very important to find Theta2 to get the transformation matrix from J3 coordinate system to J1 coordinate system(The goal)...

I expect the system to move like this when the Joint 1 motor is actuated in clockwise direction ![Page#3]

EDIT

Hey chuck, As the following sketch shows, the motor housing is fixed on the box, it rotates with the same angle as the box about joint J4. The blue dot in the previous image is the motor axis of rotation which I called J1 because it links the motor shaft with the link L12.

If the motor shaft is rotated anti-clockwise by an angle Pfi, it makes the whole box move with it but not with the same angle. I have to find the box rotation about joint J4 as a result of this rotation of motor shaft about J1 by Phi..

As you explained, I can solve the 4 bar mechanism but how can this motors angle of rotation be related to the 4 bar mechasim's four angles Theta12,Theta23,Theta34 and Theta41 ?

![Page#4]

After anti clockwise rotation..

![Page#5]

• Welcome to Robotics, Roboticsnerd. As it stands, it's not clear what you're asking. What do you mean when you say you want to "solve the system with DH parameters?" You're either looking for a kinematic solution, which means you have to pick what the joint angles are, or you're looking for a dynamic solution, which means you need a lot more information, such as moments of inertia and masses of the links, etc. Could you please give the problem statement for the problem you are trying to solve? – Chuck Jul 31 '17 at 13:23
• @Chuck, Hello! Thank you for the welcome. I have made an edit at the end of the post, please take a look :)) – Robotics nerd Jul 31 '17 at 19:46
• If it's kinematics, then none of the joints are a function of any of the other joints. The only exception is if you had a kinematic loop, like a four bar mechanism, or a rocker, or a crank. But in your problem statement, you have a kinematic chain and there are no constraints on the "passive" joints, so there's nothing to solve here. – Chuck Jul 31 '17 at 20:00
• If that's the case, how can I find Theta2? I need it for the transformation matrix from Joint3 coordinate system to Joint1 coordinate system?, I added another picture for the desired or expected motion from this linkage.. – Robotics nerd Jul 31 '17 at 20:08
• What system are you modelling? What is the project you are working on? If the joint isn't actuated, then it's either (1) fixed, or it's (2) free to move as part of a dynamic simulation. Either way, you have to know some starting value. You pick a starting value, or you measure a starting value, and that's what the value is. This is what I asked above - are you trying to get a kinematic analysis or a dynamic analysis. If you don't actuate the joint, it stays however you left it until acted on by a non-zero net torque, but again, that's all part of a dynamic simulation. – Chuck Jul 31 '17 at 20:12

Ah ha! From my comment earlier -

If it's kinematics, then none of the joints are a function of any of the other joints. The only exception is if you had a kinematic loop, like a four bar mechanism, or a rocker, or a crank.

What you have is a four bar mechanism, and it has probably been giving you trouble because:

1. It's just a hard problem to begin with, and
2. You haven't been drawing the complete diagram for your analysis.

There are four links (or "bars") and they form a kinematic loop. Two are obvious, one is a little less obvious, and the last one is disguised. Your links are:

1. The link from J1 to J2,
2. The link from J2 to J3,

those you already have and have been giving for the problem statement, BUT you also have:

1. The wall, which acts as a link between J3 and J4, and
2. The box itself, which acts as a link between J4 and J1.

You can see that the links go J1 -> J2 -> J3 -> J4 -> J1, and so they form the loop.

I'm on mobile for the rest of the night, so it'll be tomorrow before I can give a fuller answer (at the earliest), but you should look up the "Freudenstein equation" as a starting point for the solution. Springer has a decent paper on it, but you have to pay for it, of course.

The gist is to label all of your angles, theta 1 through 4, and then to work your way top to bottom using and terms like L1 sin(theta1) + ... + L4 sin(theta4) = 0 and similarly with cosine from left to right. The key concept here is that you're forming a closed LOOP, so you must end where you started when you add together all the vertical (or horizontal) components of each link.

The biggest pain there is to be really consistent with your notation, but that's true of all engineering, isn't it? You may find that the vertical component of a link might involve a cosine term, and vice versa, depending on how you defined the datums (data) and positive conventions, etc.

I'll draw a picture later, but hopefully that's enough to get you started.

## :EDIT:

Okay, some drawings to go with the answer.

First, re-draw the problem with all the links.

Then, be consistent with notation. In my method of solving, I assume +y is up and +x is to the right. Then I use the right hand rule that the angle should be positive in a counter-clockwise direction (right hand rotation about +z axis, which points "up out of the page.")

With the picture above, you can make a couple equations. First, combine all of the vertical components of the linkages:

$$L_{12}\sin{\theta_{12}} + L_{23}\sin{\theta_{23}} + L_{34}\sin{\theta_{34}} + L_{41}\sin{\theta_{41}} = 0 \\$$

Then, do the same for the horizontal components:

$$L_{12}\cos{\theta_{12}} + L_{23}\cos{\theta_{23}} + L_{34}\cos{\theta_{34}} + L_{41}\cos{\theta_{41}} = 0 \\$$

So, two equations and two unknowns - you need at least one more. For that, look at the interior angles. To do that, try to "rephrase" the interior angles in terms of the angles as already defined.

First, use the alternate interior angles:

Then, "clip" the other angles in preparation for using THEIR alternate interior angles:

Now you have a good setup to getting the interior angles:

And now, finally, you get the formulas for the interior angles:

$$\begin{array}{ccc} \theta_{{J_1}_{\mbox{interior}}} & = & \theta_{12} - \left(\theta_{41} - \pi \right) \\ \theta_{{J_2}_{\mbox{interior}}} & = & \left(\theta_{23} - \pi \right) - \theta_{12} \\ \theta_{{J_3}_{\mbox{interior}}} & = & \left(\theta_{23} - \pi \right) - \theta_{34}\\ \theta_{{J_4}_{\mbox{interior}}} & = & \left(\theta_{41} - \pi \right) - \theta_{34}\\ \end{array}$$

The last step now is to recognize that the sum of interior angles, $\theta_{J_1} ... \theta_{J_4}$ is 360 degrees, or $2\pi$:

$$\theta_{J_1} + \theta_{J_2} + \theta_{J_3} + \theta_{J_4} = 2\pi \\$$

This now gives you three equations and four unknowns, which means you can now express any one of the angles $\theta_{J_2} .. \theta_{J_4}$ in terms of the actuated joint $\theta_{J_1}$.

NOTE THAT my expression for $\theta_{J_1}$, or $\theta_{41}$, is not the same as your $\theta_1$ and is not necessarily the same as the DH representation for the joint either. You'll have to re-express the joint angles (again), but hopefully I've outlined the process for you.

Final note - you might not be able to get a "clean" solution to this set of equations because they are nonlinear (thanks, trig -.-). You are likely to need a numeric solver to get the answer for the joint angles.

• Indeed it helps alot. This has narrowed down my search for a possible solution to a 4 bar mechanism. I will start learning the details of the 4 bar mechanism and look at the Freudenstein equation and try to apply it to this case in particualar. Great! A picture would be nice too for more clarification from your side. Could this thread be left open for any future questions regarding this topic? thank you chuck : )) – Robotics nerd Aug 1 '17 at 5:22
• @Roboticsnerd Could this thread be left open for any future questions regarding this topic? No. First, this isn't a thread (this site isn't a forum), it's a question. Second, if you have more questions, just ask new questions! If you think the question is related, just link to this question. You can get a small URL for this question by clicking the "share" button under the question. You can ask as many questions as you want. – Chuck Aug 1 '17 at 13:33
• saved :) , thank you for your insight and time. I will use your solution as a way point and make my own : ) – Robotics nerd Aug 2 '17 at 5:02
• Nice details @Chuck – SteveO Aug 4 '17 at 1:15
• all good chuck, I will try to figure out the motor angle part, thank you so much, hopefully one day I would be in a position to help others like you helped me <3 – Robotics nerd Aug 4 '17 at 18:47