View Full Version : Robotic arm movement

02-23-2009, 11:03 AM
I'm trying to animate a robotic arm with seven joints, each joint has rotation on a single axis. My current technique is placing each segment of the arm on a separate layer in a hierarchy and activating IK Boost on the chain.

This has always given me desirable results with one small exception; I'd like to be able to move the end effector along a single plane and restrict its orientation to that same plane. The real arm (ssrms (http://en.wikipedia.org/wiki/SSRMS)) moves in this manner, but I've never been able to effectively mimic this behavior.

The following previews may better illustrate what I'm attempting. This clip (http://brandencoker.com/arm_ikb_motion.mov) shows the arm bending at the elbow (using IKB) and drawing the end effector in towards the base. As it moves towards the base, I'd like the end effector to retain its orientation to the x,z plane. As you can see, it doesn't.

In this clip (http://brandencoker.com/arm_ik_motion.mov), I've animated the arm using the standard IK system and I've specified a goal null, with the end effector matching its goal orientation. This is precisely what I'm looking to achieve, but there is a problem; the end effector is rotating on all three axes in order to match the goal orientation, even though two of the axes are locked.

These images show a close up of the resting arm and the result of the move while matching orientation of the goal. Is there a way to move the end effector, restrict the orientation on a desired plane, and avoid the separation shown here?



It's a tall order, but I know there are plenty of folks here smarter than I am, so surely someone has a solution.

02-23-2009, 11:38 AM
Upload the object and what you got so far and you'll get far more focused replies. It is much more fun to solve a puzzle if you are given all the pieces rather than have to fabricate them yourself. (strip away all the unnecessary/unique bits and bobs if you are sensitive to sharing content)

02-23-2009, 12:09 PM
Upload the object and what you got so far and you'll get far more focused replies. It is much more fun to solve a puzzle if you are given all the pieces rather than have to fabricate them yourself. (strip away all the unnecessary/unique bits and bobs if you are sensitive to sharing content)

By all means, Dan. You can grab the scene files and model here (http://brandencoker.com/ssrms_ik.zip). There is a scene setup using IKB as well as one using the standard IK system. FWIW: I've also tried combining the two systems, but I've never managed to solve this.

02-24-2009, 01:09 AM
Back at you, all rigged-up and ready to bend.

Select the "Arm" goal (box on the left) and either move it or rotate it or just play the animation (I placed keyframes at 60 and 120).

I've locked down most of the bones, but you may want to loosen them up as you see fit. I wasn't sure the exact mechanics of the arm, but there should be enough bones there.

You will probably have to adjust 1) bone weight maps (I think I got them right) when you start rotating more of the bones, abd 2) heading, bank, and pitch limits on the bones to really lock the rig down.

I hope this helps.


02-24-2009, 09:17 AM
Daniel, thanks for your help. The rig you've created is certainly more capable than mine, but I still don't think it gives me the ability to move the end effector (or base in your rig) while constraining it to a single plane.

There are times in my animation when it will move freely in space, but other points in the animation require that the end effector (and the object in its grasp) to move perpendicular to single plane.

The motion in the attached scene is exactly what I'm shooting for. Now granted, in this case it was very easy to achieve by simply moving the arm and adjusting the end effector at the end of each arm move. However, when creating animations with this arm, it is often set at an arbitrary axis, and every segment of the arm is moving in many of the sequences. It would be a great advantage to be able to move the end effector and maintain alignment on a plane while the IK system handles the rest.

02-24-2009, 09:32 AM
Attached is an update that just changes what you had originally with no bones added.

I changed the pivots slightly in modeler, but more importantly I simply selected SSRM_BaseJoine2, pressed 'm' for Motion Options, then selected "Unaffected by IK of Descendants."

Then when you scrub through your scene you don't get the weird torque on SSRMS_BaseJoint2.

I didn't download your last scene but I will when I get a chance.


02-24-2009, 09:35 AM
Okay, I get it. The end effector needs to slide along a plane no matter what orientation of the arm. That is, the arm can be twisted 45 degrees, right?


P.S. I'm off on a business trip until Saturday, so I'll be going silent for the rest of the week, but I'm now interested in how this can be solved in a simple manner.

02-24-2009, 10:24 AM
Actually each joint on the real arm has 540 of rotation. That's all the more reason it would be nice to constrain the end effector at times.

In the attached video, you'll see an example of exactly why you may want to move the arm like this. The first four moves of the arm were relatively easy to pull off using a simple IKB rig; However, that fourth move took a lot of tweaking for it to appear as though the Columbus module is moving along the Y axis (relative to the ISS). I ended up having to place lots of keyframes between moves four and five just to keep the alignment of the module straight. Movement along a single plane would make much faster work of animations like this.

Making the end of the IK chain a handle in IKB almost does the trick, but although it restricts the movement along a single plane/axis, it doesn't maintain the object's orientation and lots of flopping ensues.

03-04-2009, 09:28 AM
So we're all in agreement that this just can't be done easily? Is my current method of moving and tweaking, repeat n, the only way?

03-05-2009, 10:03 AM
Yes. It's quite hard to setup in an intuitive way. What I did conclude was that you can't solve this with a single ik chain as then there will be multiple possible solutions for ever goal position. The arm is just too flexible. (Which perhaps makes it a better candidate for IKB rather than Fulltime IK). You need to control this thing with atleast two controls. One defining the overall position and the other the orientation of last capsule. As you suspected. I tried to do this with a single null (using position and rotation), but no good solution so far.

If I had the time I'd delve into this further, but unfortunately I don't.