Example #1
0
    public static float getActiveAngle(IKSolverServo.JointEntity jointEntity)
    {
        Vector3          euler            = jointEntity.Joint.localEulerAngles;
        JointActiveAngle jointActiveAngle = jointEntity.activeJointAngle;

        if (jointActiveAngle == JointActiveAngle.X)
        {
            return(euler.x);
        }
        else if (jointActiveAngle == JointActiveAngle.Y)
        {
            return(euler.y);
        }

        return(euler.z);
    }
Example #2
0
    // Convert the current active angle from a joint to a servo angle
    private static int AngleJoint2Servo(IKSolverServo.JointEntity joint)
    {
        float jointAngle = WrapAngle(getActiveAngle(joint));

        float in_min = joint.angleMin;
        float in_max = joint.angleMax;

        float out_min = joint.servoMin;
        float out_max = joint.servoMax;

        // Account for inverted axis
        if (joint.invertedAngles)
        {
            out_min *= -1;
            out_max *= -1;
        }

        return(Mathf.RoundToInt(map(jointAngle, in_min, in_max, out_min, out_max)));
    }