Ive done a bit of homework, so I thought I might give it away.
Whats a motorized ragdoll? Its a physics calculation which takes a stickman topology as an input, and gives you a stickman topology as an output, give some power to its motors, gravity and hinge constrainments, it can seem daunting at first, but its only a small amount of code. It makes AAA game animation (for action roleplaying games.) and it also if synched to real physics (which is another subject) can control a robot in 3d space. This is robot science, as apposed to rocket science, both pretty daunting tasks.
I found the main difficulty for me was, when to decide when to use translational vectors, or rotational angles, so I actually up ended up doing a bit of both, also how you want to "restrict the possibilities of the system" without killing the conceptual truth, can be worth thinking about as well.
This isn't tested yet, but ive had ragdolls going before so its not completely unwise a speculation, but ive got to actually code the damn thing.
Ive broken the task up into 3 easy steps.
A) COMPUTE RIGID COLLISION RESOLVEMENT. compute the robot rigidly first, get the collision and resolve it.
B) PERFORM ALL HINGE ROTATIONS. (I like to split mine up into so many spins at different orientations and actually have a separate stick for each spinner, and this is the only freedom the stick man has.)
C) REEXTRACT THE WHOLE TRANSFORMATION COMPONENT. then using the new positions and the old positions, extract the rigid whole transformation+rotation velocities - and you have to check joint positions to remove it from the hinge velocities.
- add gravity to the whole velocity component. points actually don't have individual velocities in this, but the hinges have rotational velocities.
In this, the gravity DOESNT affect the hinge positions, this is still valid, because the robots joints count as being infinite resistant to it, it means they always hold their position, if a robot was strong enough in an ideal way, its actually true that this is still possible.
Its not the only way to do it but this method may still be valid for synching to reality, but I have to see.