Motor6D Limitations

Attempting to recreate the Canada Arm using inverse kinematics to simulate all modes of movement, etc long story.

Anyway it appears that the minimum radian setting that will move a motor6D is 0.04 rad. Is there any way around this? I need the joint angles to be extremely precise down to about 0.001 rad.

I’d even be open to a cframe method if it would be more efficient.

Fun fact: You don’t have to use the Motor6D rotation; you can do it all using C0 and C1. My guess is that Motor6D rotation is a legacy feature from when your arms used to fly up when you jumped. You only would have needed to rotate them about the shoulder

If I recall correctly, you can set a motor to look in any desired CFrame using

Motor.C0 = Arm.CFrame:Inverse() * DesiredCFrame

I can’t guarantee that works. I’m not at my computer.

Not quite sure what you mean. The issue I have is that based on a DesiredAngle setting, the Motors are not sensitive enough to be used as what I need them to be.

AFAIK Motor6Ds are welds with 2 differences:

  1. Motor6Ds have a DesiredAngle
  2. Motor6Ds can be used to weld unanchored parts to anchored parts

What I’m saying is to not use DesiredAngle at all. Instead, manipulate Motor6D.C0 with the code above.

Many of the physically-simulated constraints will not be able to make the small movements you require. They have built-in optimizations to stop simulating when the change they are going to effect drops below some threshold magnitude. As such, things like AlignOrientation, BodyGyro, BodyPosition, and Motor6D etc. might not do anything if you request some infinitesimal change to them, and they are not guaranteed to reach their exact target end state (just close to within some small tolerance value over which you have no control from Lua). Setting CFrames of the Motor6Ds directly can be the only way to get really small changes.

2 Likes