private RandomRestartInverseKinematicsCalculator createCalculator(GeometricJacobian jacobian, int maxIterations)
{
double lambdaLeastSquares = 0.0009;
double tolerance = 0.001;
double maxStepSize = 0.2;
double minRandomSearchScalar = 0.02;
double maxRandomSearchScalar = 0.8;
int maxRestarts = 20;
double restartTolerance = 0.001;
NumericalInverseKinematicsCalculator numericalInverseKinematicsCalculator = new NumericalInverseKinematicsCalculator(jacobian, lambdaLeastSquares, tolerance, maxIterations, maxStepSize, minRandomSearchScalar, maxRandomSearchScalar);
numericalInverseKinematicsCalculator.setLimitJointAngles(false);
RandomRestartInverseKinematicsCalculator randomRestartInverseKinematicsCalculator = new RandomRestartInverseKinematicsCalculator(maxRestarts, restartTolerance, jacobian, numericalInverseKinematicsCalculator);
return randomRestartInverseKinematicsCalculator;
}