2
$\begingroup$

I want to move 3 arms up and down with 2 arms anchored to the wall like in the drawing. I'm not able to get both arms fixed to the wall with use of bones, one bone-end is no problem, all video's I have seen works with one end fixed, please help, thank you.

moving arms

I used Georges his way to make it work, but I still have a little problem if the upperarm is shorter then the lowerarm, both the arm-empties move out of place and the triangle does not tilt. Am I doing it wrong?

Test arm

$\endgroup$
2
$\begingroup$

You can use empties and constraints to solve this, here are the steps:

I'm using different visuals of empties for visual distinction, however you can choose any shape you prefer.

1- Create an empty in the center of the fixed arm (the selected sphere in the image below), this empty will control the movement.

enter image description here

2- Create an empty in the center of the left arm (the selected circle in the image below), parent it to the first empty by selecting it then the first empty (the sphere) in this order (the last selected object is the active object) and hit Ctrl + P, select Object.

enter image description here

3- Select the left arm, add a Copy Location constraint to the left arm, from the Constraint menu, set the Circle empty as a target, this will make the left arm move with the circle empty positioned at it's origin, we need the circle empty's location, but not it's rotation.

enter image description here

4- Move the origins of the upper and lower arms to the edges positioned at the fixed arm, to do this, select the upper arm, press Tab to enter Edit mode, select the edges at that end near the fixed arm, then press Shift + S, choose Cursor to Selected. This will position the 3D Cursor where we'll move the origin, next Tab to go back to Object mode, press Ctrl + Alt + Shift + C, choose Origin to 3D Cursor. Follow the same steps for the lower arm.

enter image description here

5- Create two empties, position them at the other ends of the upper and lower arms (the ends at the left arm, see the image below), these empties will be the axis of rotation of the upper and lower arms at the left arm, parent both empties to the left arm, to do that, see step 2.

enter image description here

6- Select the upper arm, add a Track To constraint, set the top empty as a target (see the image below), repeat the same step for the lower arm, use the bottom empty as a target. This way, each arm will rotate on it's origin (which we set to the fixed arm end in step 4) in order to keep pointing at the empty it's tracking.

enter image description here

And that will be it, in order to do the movement, you only need to rotate the sphere empty on the X axis (in my case it is the X axis, which is the axis the arms will rotate on) , check the image below to see the results, you can assign a limit rotation constraint to the sphere empty, so it won't rotate past a certain limit on the X axis.

enter image description here

Summary: When you rotate the sphere empty, the circle empty will follow it's rotation since it's parented to it. The left arm will copy the circle empty's location due to the Copy Location constraint, but it will not rotate with it, this is why we used a constraint rather than just parenting it to the circle empty. The top and bottom empties will move with the left arm, since they are parented to it. The upper and lower arms will rotate on their origins, and they will keep pointing at the empties they are tracked to, which are the top and bottom empties.

P.S.: Naming the empties and objects will make it much easier to keep track of what you're doing. Giving distinctive shapes to empties will make it easier to control than using the same shape for all empties.

You can use the following link to download the file. Happy blending!

Edit: I managed to refine the process to make it shorter and using less steps, you can skip creating the top and bottom empties, instead add a Copy Rotation constraints to the upper and lower arms, and use the sphere empty as a target (the controller at the center of the fixed arm), this way you only need two empties, one in the center of the fixed arm (the controller), another at the center of the left arm (the circle empty), parent the circle empty to the controller, then add a Copy Location constraint to the left arm with the circle empty as a target, and the Copy Rotation constraint to both upper and lower arms with the sphere empty as a target. This method is shorter and better, because Track To constraint (and even Damped Track constraint) have their limitations when rotating to an angle more than 180 degrees, even when using Quaternion instead of Euler. Here's the edited file:

$\endgroup$
  • $\begingroup$ This is just what I needed. Great help. $\endgroup$ – Joeri May 25 '16 at 17:35
  • $\begingroup$ Glad it helped! $\endgroup$ – Georges May 25 '16 at 17:40
  • $\begingroup$ @Joeri I edited my answer to a shorter version, this will save you many steps. $\endgroup$ – Georges May 25 '16 at 18:18
  • $\begingroup$ Hi Georges, I have tried what you said but a have a problem with the empties getting disengages (when a rotate) from the upper and lowerarm and the triangle will not tilt, I made a screenshot form it (see above) I hope you can help me further, thank you. $\endgroup$ – Joeri May 29 '16 at 14:21
  • $\begingroup$ Can you reupload the new file, my answer was about your original question, so it might need a tweek for the new conditions, and what's the triangle? Is it replacing the left arm? $\endgroup$ – Georges May 29 '16 at 15:50
1
$\begingroup$

You should be able to achieve this with the Track To, Limit Location, and Limit Distance bone constraints. You will need three bones, one for each moving arm. None of them should be parented to each other.

For the free-moving arm (leftmost), you should be able to, add a Limit Location constraint while in Pose Mode. At the bottom of the constraint's panel, make sure Local Space is selected. Allow location to be limited so that it can only move up and down, and a bit of left/right. It should look something like this:

enter image description here

On each of the moving arm bones, add a Track To bone constraint. Select the name of your rig (probably Armature) from the top field and the name of the leftmost bone in the next field. Adjust the To: selection until the bone is pointing correctly. Adjust the Head/Tail: value until each bone is pointing to the correct side of the leftmost bone. Your constraint should look something like this:

enter image description here

On the bottom bone, also add a Limit Distance bone constraint. This will keep the left bone from drifting away from the right two. It might look like this:

enter image description here

Here is a finished .blend file:

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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