PDA

View Full Version : Mechanical shoulder w/ IK & 2 pivots


verbal007
04-16-2004, 07:10 PM
As you can see, my shoulder is broken up into two distinct pivot points. Using a form of FK will be relatively simple, but I would like to also allow for IK, however, the way I have the shoulder setup, creates some interesting issues for me.

http://www.systemshutdown.com/foryou/cgtalk/mechShoulderIK.jpg

The upper part of the shoulder will handle the rotateX (twist) and rotateY (forward/backward?) movement. The lower/outter portion of the shoulder will handle the rotateZ (up/down) movement of the shoulder.

How the heck can I get this to work correctly with IK? I think I chose the worse possible setup for IK to handle and I'm beginning to wonder if there's even a logical solution to this problem.

I'm guessing I'll have to figure out some sort of 'hack' solution involving aim constraints. Also thought that maybe, somehow I could creatively use curve/surface contraints. But I feel that all these solutions will be fairly buggy, if they even work.

Am I searching for the holy grail here, or does someone have any ideas? And to think I thought my forearm/wrist rotation was kinda a pain.

- Jeremy

Help me CGTalk, you're my only hope.

JoeSchmo
04-17-2004, 01:57 AM
Not at hard as it seems...

first parent the surfaces to thier respective joints

then use the connection editor or orient constrain the first shoulder ball SURFACE to the
outer shoulder JOINT in the desired Axes.

run an IK from the outer shoulder to the wrist as usual

someone else had a very similar problem

http://www.cgtalk.com/showthread.php?s=&threadid=136495

Joe

verbal007
04-18-2004, 03:34 AM
Woo!!! A reply!!

Replied to JoeSchmo
>> Not at hard as it seems...

Unfortunately, I think it is, unless I’m misunderstanding you.

>>first parent the surfaces to thier respective joints
>>then use the connection editor or orient constrain the first >>shoulder ball SURFACE
>>to the outer shoulder JOINT in the desired Axes.
>>run an IK from the outer shoulder to the wrist as usual

Yeah, I think I tried something similar or identical a few months ago. Of course, you also have to limit the rot Y of the hinge in order to prevent it from popping out of it’s socket (see pic below). For ease of discussion purposes, all joints have been aligned to world coordinates. I should have also moved the body with the arm, but I figured it would keep the GIF size down by leaving it be… but imagine it moving forward with the shoulder. ;)
http://www.systemshutdown.com/foryou/cgtalk/LumaShoulderNoLimit.gif

However, if you do limit the rotate Y on the hinge, IK doesn’t work properly (see pic 2), which is why I’m feeling that this may not even be possible. As the IK tries to best rotate the joints in the arm to get the wrist closest to the IK handle, it does some funky stuff.

http://www.systemshutdown.com/foryou/cgtalk/LumaShoulderLimit.gif

However, I have allowed myself a little leeway, and that is to allow the ball joint to rotate in X AND Y. So I should have full movement if I combine that with the X rotation of the hinge joint. Funny to think that the hinge being offset by only a few inches can cause me so much pain.

If you (or anyone else) could help me with this, I would be VERY greatful, as it would finally solve this 1/2 year long issue and also open up a ton of new possibilities.

JoeSchmo Thanks again for the reply. Seems that people barely ever have a solution/recommendation for any of my issues.

If you CAN get it to work, send me a Maya file so that I can see the solution in action. I'm about to give up on this problem and either face the fact that I can't get this rigged properly with IK, or I'll remodel the shoulder.

- Jeremy

JoeSchmo
04-19-2004, 03:11 AM
looks like your trying to connect 1 joint to another joint

you connect joint to surface

here ya go...(see file)

the only thing that does'nt work too well
is the IK twist ...
but it's a robot

verbal007
04-19-2004, 09:53 PM
Originally posted by JoeSchmo
looks like your trying to connect 1 joint to another joint
you connect joint to surface


Nope, unfortunately I have it setup as you explained, as shown in JPG#1 in my last post, and like you have in your example file.
http://www.systemshutdown.com/foryou/cgtalk/sameSetup.jpg
See how it's popping out here. I wanted it to appear as though the cylinder piece is attached at bother ends, inside the sphere. The forward/backward rotation I wanted to come from the sphere's rotation itself. Again, I just don't think it's logically possible to setup with IK.

THANK YOU for the help though. I appreciate the fact that you took the time to go into Maya and rig it up in an example for me. It did help a ton. I guess it basically just validated that I'm either going to have to remodel the shoulder or just stick with FK. *sigh* boooo

- Jeremy

P.S. Of course... if you like, I will post what I finally settle with.

lowpolymatt
04-20-2004, 08:33 AM
That is a toughy...Im going to have to look at this...

JoeSchmo
04-20-2004, 10:13 AM
Unfortunately any kind of twist is going to cauase the shoulder to pop.

you could run a single chain IK on that one bone that controls
the inner shoulder ball,but you would have to key 2 IK's for
each arm. (but it still might be easier than FK)

Just a thought ...

Joe

verbal007
04-21-2004, 06:22 PM
I actually got it to work!! OoooOOh yeah. I was sitting around the other day and suddenly an idea popped in my head. It wasn't perfected, but the problem was no longer as "impossible" to solve as I originally thought.

The trick is to use AIM constraints. Basically, I had a "base_IK" skeleton which contained an inner shoulder whos direct child was the elbow. Then I put IK from the shoulder to the wrist on this "base_IK" skeleton.

Next, I had my regular "IK" skeleton arm which contained an inner shoulder, an outter shoulder and then the elbow. This regular IK skeleton will be driven by the "base" skeleton.

Using the hypergraph, I tied the rotY and rotX from the base_IK_innerShoulder to the IK_innerShouder. I then aim constrained the IK_outerShoulder to point down to the base_IK_elbow, and used the IK_innerShoulder as the objectUP for the aim constraint... but to be honest, who knows if this was neccessary. Of course, I made sure that all my rotation orders were in a logical setup for this rig.

Hopefully this rambling will help cure some else's headaches. *cough* *cough* (http://www.cgtalk.com/showthread.php?s=&threadid=136495)

http://www.systemshutdown.com/foryou/cgtalk/shoulderHG.gif
http://www.systemshutdown.com/foryou/cgtalk/workingShoulder.jpg

God bless Maya's rigging tools.

- Jeremy

CGTalk Moderation
01-18-2006, 01:00 AM
This thread has been automatically closed as it remained inactive for 12 months. If you wish to continue the discussion, please create a new thread in the appropriate forum.