BallSocketConstraint with twist limits set to 0 doesn't want to transfer rotation at 90 degrees

I’m trying to make a universal joint in Roblox using a BallSocketConstraint. I have both of its twist limits set to 0, so that all rotation in one end will be transferred to the other.

It works at mild angles, as you can see here in the gif. However, as the angles become sharper, the constraint becomes more resistant to rotation:

(Cursor included at the beginning to show that this behavior is not the gif looping.)

I’ve never attempted this before, so I’m not sure how it acted then, but I do believe this is a bug that needs to be fixed…

UJoint.rbxm (7.9 KB)

Yes this is expected, an ideal universal joint will stop to function when the angle approaches 90. You can see this from this formula:
image
Angular velocity transmitted becomes 0 when beta = 0. See Universal joint - Wikipedia

On another topic, consider using 3 parts and 2 hinges, like here:

You will notice less wobble and more stable velocity transmission.

3 Likes

image

Well, visually, that is what I was trying to mimic. I thought a ball socket constraint would also mimic this, but I don’t know? I guess it does, since at 90 degrees, rotating one end won’t transfer any rotation to the other.

Also, do you mean linking 2 universal joints together, so at 90 degrees, each joint is only at 45 degrees and still rotates fine?

Here’s the worst image I’ve ever made:

Here’s my next question though, should a ball socket constraint work in such a way that rotation works freely at 90 degree angles? It’s inconvenient for me if it doesn’t, sure, but like you said, it’s how it should work in physics I suppose. The constraint does have a directionality that defines the axis of “twist”, so you could transfer rotation as if that axis were relative to the attachments… or something like that. Maybe I’m just explaining it wrong…

Here’s a super bad drawing:

the arrows represent the rotation of the parts, that is what I’m aiming for, but this is what happens: