1
$\begingroup$

I am developing the motion control for an industrial robotic arm. I have defined the skeleton and assigned all components to the frame. This is the complete skeleton:

enter image description here

I need the last two axes (the last 2 bones) to maintain their current rotation:

enter image description here

The bone 'Arm 5' should be oriented vertically and perpendicular to the floor.

enter image description here

The bone 'Arm 6' must maintain its orientation, pointing consistently in the same direction.

enter image description here

If I rotate the 'Arm 2' bone, I get exactly what I expected:

enter image description here

If I rotate also the 'Arm 1' bone, I get exactly what I expected:

enter image description here

But if I continue rotating the 'Arm 1' bone, at a certain point, unexpectedly, the 'Arm 5' bone rotates its vertical orientation upward.

enter image description here

I'm not defining an animation yet; I'm simply rotating the axes.

enter image description here

These are the properties of the 'Arm 5' bone in Edit Mode:

enter image description here

enter image description here

Something strange is also happening to the 'Arm 6' bone: when I apply a rotation to the same bone as before, 'Arm 6' at a certain point completes a 360° rotation!!! How crazy!

Where am I going wrong?

enter image description here

$\endgroup$

1 Answer 1

1
$\begingroup$

When you copy rotation, you're reading Euler angles. The problem: Euler angles are aliased-- there's more than one Euler angle for some orientations.

Example: XYZ Euler 180,0,0 is the same as XYZ Euler 0,180,180. I encourage you to test it out, but I pick this particular example because it can be easily visualized even without using Blender.

So when Blender copies YZ rotation from this, does it read 0,0,0 or does it read 0,180,180? It is not reasonably predicatable, and it is not continuous, and those two orientations are very, very different.

That means that copy rotation constraints with limited axes are a bad idea unless using local space, with rotations guaranteed to be in the -90,90 range. (World space in that range would be okay, but who can predict world space angle limits?)

What can you do instead? Odds are good that if you want to copy Y rotation, you want the bone to spin around to face the same direction as another bone, right? You can do that by making a marker bone parented to that other bone, perhaps in its +Z axis, and then using a locked track constraint, lock Y track Z, to point your constrained bone's Z axis at the same marker.

It's less clear exactly what you want when you want to copy YZ rotation. You've written that you want it pointed at the floor. So make an unparented bone, pointed at the floor; copy location from its pseudoparent; and then locked track (again, lock Y) a marker as above.

Copy rotation in limited axes is almost always a bad idea. (There are times that it's okay, but they should be considered "expert" applications.) Use of locked track and damped track constraints to set the orientations of bones is almost always a better idea.

$\endgroup$
1
  • $\begingroup$ I greatly appreciate your response. As a Blender novice, it took me some time to interpret it correctly, but now, thanks to your advice, everything is working perfectly. Awesome! Thank you! $\endgroup$
    – Seraphim's
    Jan 18 at 8:32

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .