Robotic arm armature problem

Hi everyone.
I’m building a simple robotic arm and I have trouble with armature. For last few days I have tried everything that I could think of and nothing works as I want :frowning:

First of all, I want to be able to rotate a whole arm around z axis 360 degrees (if it’s possible) when I drag IKArm. Unfortunately, when I do that, at some point complete arm flips around z axis so positive y axis becomes negative.

Second problem is a bit harder to explain but I’ll try. On the tip of my arm is a gripper on a writs that should be rotatable 360 degrees around its local y axis, and 120 degrees around x axis.

Wrist is actually created with two bones, one for x rotation and one for y rotation.
I use bone IKWrits as IK target and a control of a gripper (when I drag that bone, gripper closes it self).

IKWrist is parened on IKArm so when I rotate IKArm around local x axis, wrist follows that rotation. But ther’s a katch, IKArm doesn’t rotate itself when’t translated (when I rotate a whole arm). Only way that I have found to orient IKArm correctly is to add a copy rotation constraint with Baza as target but that creates Dependency Cycle and some other side effects.

Man, I can’t explain any better. Here are some images and .blend file so I hope someone will understand what I’m talking about and want I want to achieve and help me.


Robot.blend (139 KB)

Disconnect Bone.003 from it’s parent in edit mode.
Select bone “IK Wrist” and press N. Lock the rotation attributes for the X and Z axis.
That should fix the wrist problem. I do not understand what you mean by the arm rotation problem.

Thanks for your response but I don’t see how that helps. Result of disconnecting Bone.003 from Bone.002 is nothing but disconnected wrist from rest of the arm. Look at the screen shot.

Well, I have submitted blend file, from top view try to drag IKArm around armature center and you’ll see at some point that a whole armature flips around z axis.


My sincere apologies for bumping but I really need a solution to this problem. Anyone?

hey damir,

I will offer what advice I can regarding doing this. The first thing to understand is that currently in Blender all armature rotations are quaternion. This basically means that making bones spin more than 180 degrees is very difficult (but not impossible) to do. For more about quaternions see this thread. Euler rotations will be available in 2.5 I understand, but in the meantime you can use objects because Blender currently supports Euler rotations on them.

However, if you choose to go with this method, it is still fairly difficult to setup. IPOs are only calculated using global coordinates, so in order to spin an object around its local axis while it is offset, it needs to be parented to another object. For more about that, see this thread.

That is basically how I setup the hand controls in the following example, which is really messy unfortunately because object locations cannot be easily cleared, and the setup mixes bone controls (for the gripper) and object controls (for the wrist and arm IK), which mixes the Pose and Object IPOs - messy. To get the hand back to its home position, there is a duplicate cube called ‘home_position’ which you can copy the values from. Or you could make sure to always key the control objects in their home position so you can easily get them back to it…

I made some changes to the hierarchy as well. Removed some limit constraints on the grippers that were redundant (because they are driven through the transformation constraint, so only the controller will need any kind of limit). There was also a dependency cycle in the original file, which needed fixing (this is visible in the console/terminal). The arm IK can now be pulled away from the chain, but it works just fine I think :yes:

I am not sure what you mean by being able to rotate the arm in Z? Are you referring to global Z or local Z? Because all the arm bones have been locked in local Z, so you wouldn’t be able to do it anyway as it currently is. If you’re talking about global Z, I don’t see a problem because the limit constraints in local X on the arm kick in before you reach any flipping point…

It would be nicer to not use objects at all, but I’m not entirely sure how to deal with the quaternion curves, so I just constrain to objects instead. Anyway, hopefully this example gives you some ideas on how to tackle it.

Good luck!


Robot_rehash.blend (581 KB)

Hi feelgoodcomics. Thanks for your reply. You’ve gave me an idea how I could solve this. Regards!