That seems from Newton 3.xx.
In Newton 4, the modes are defined like this:
- Code: Select all
class ndJointKinematicController: public ndJointBilateralConstraint
{
public:
enum ndControlModes
{
m_linear,
m_full6dof,
m_linearPlusAngularFriction, // for screen-pick mode
};
};
Now, a few observations:
Kinematic joints are very heuristic.They’re designed to convert values from linear and angular space into acceleration space. This means the resulting accelerations scale with the square of the timestep. Things get even worse when the joint is used to map screen coordinates into displacements in global space because of perspective inversion, the joint ends up being extremely stiff.
Limitations in Newton 3.xx.In version 3, joints could not have more than 6 DOF. That meant friction, limits, springs, dampers, and motors—anything operating on a single axis had to be resolved combined on that axis.
The problem is that in many cases, such as kinematic joints, these constraints actually involve different dimensions, they just happen to share a common axis.
For example: if a joint has both a hard limit and friction, once the limit is reached, the solver flips the velocity. However, friction still acts in the same direction, opposing the hard limit. Adding relaxation or spring-damping only makes things worse.
The workaround was to implement a mini constrained system per dimension. But this didn’t always work, because it ignored how other joints interacted.
Improvements in Newton 4.xx.The solver in version 4 can now handle up to 12 DOF.
-Bilateral constraints (springs, frictions, etc.) are solved directly in their own dimensions.
-Limits are solved separately by the preconditioned LCP solver.
-The final acceleration is the sum of the partial results.
This allows combining dry friction and viscous friction on the same axis,
something not possible in 3.xx.
So, to answer your question: Accelerations derived from positions are generally unpredictable.
In 3.xx, the workaround was to use strong dry friction, but that made the joint difficult to tune.
you do not want dry friction, but if the acceleration will be very large, or it is permanent, then the joint will probably explode, simply because from newton laws, if there is a net acceleration then the velocity will keep changing.
Even when the acceleration is zero, the angular velocity will still be non-zero, again, because of conservation of momentum.
The answer:
if you do not want dry friction, you set viscous friction applied through a bilateral constraint that dissipate the joint momentum.
Unfortunately, as I said, that functionality is only available starting in Newton 4.xx.