# Computer Graphics? Where?

Some of you may wonder why i have not posted anything significant to computer graphics recently. I wanted to appologize for this. With work, my INS dealings, the holidays coming and my self-publishing venture my free time has been rare recently to work on any significant projects.

One thing i have been tinkering with on and off recently is Inverse Kinematics. I am still far from having something functional yet, but have been making some progress. But so far still have a few unanswered questions:

1) CCD or Jacobians? I undrestand that CCDs can be less stable but seem much more intuitice to implement and cost efficient than Jacobians. Any one has any experience with both who can say that it is truely worth doing Jacobians even for dealing with simple chains?

2) Working in quaternion space. Most text i have read perfer treating IK rotation as a set of Euler (x,y,z) rotations. However, to me it would seem that working in quaternion space would be more cost-efficient and intuitive. I have read that you can do this by simply determining the best axis of rotation for every frame and then simply using this. But how can you efficiently deal with other aspects of IK such as joint constraints in quaternion space without having to convert everything back to Euler space?

1. Mark Mullin says:

Hey Sebby

CCD are less stable in a vacuum, but not much rubber meets the road there – in many cases real world kinematic chains have complex characteristics. For example, in one of our simulations of a medical device (endoscope), the behavior of the flexing tube is that for the first 2/3 of the force applied through the rotator wheel at the end, the tube flexes on a reasonably smooth curve on the last 5th or so, with a minor but important amount of flex falling off dist^2 towards the rotator wheel on the first 4/5. Past a certain threshhold the flex changes dramatically, with the very end of the probe beginning to kink, i.e. all the force goes into a very few joints. Past that there’s a snapping noise and a malpractice suit, but thats another issue 🙂

I tried Jacobians, and just couldn’t get what I wanted, and even Mathematica was starting to get grumpy. CCDs’ and a few well placed pieces of C# code, and life was just grand – so my tendancy over time has been that a CCD approach with a few delagates and even a few events can be just fine.

As far as working in quaternion space, yeah it’s great for anything with a single rotational axis, setting the limits is pretty easy, and it’s just plain wonderful to slerp thru the motion. Think elbow. Set the two limits around the axis, all you need is slerp. On the other hand, nasty joints like wrists (and bum knees) that have variable axes of rotation ? I just get too confused trying to do all the math with quats. I do all the work with quats, but I’ll drop down from quats to eulers and do some fiddling and then go back to quats. At least for me, if I’m dynamically changing the rotational axis, it’s just easier to create a new quat then transform the one I have, but I am purely an applied quat guy, not a pure one. I’d be curious about what some real math guys had to say on this, I would love to stay in quat space and just pull eulers out when I need something for the users 🙂

Regards

Mark