/// <summary>
        /// Input manager that includes a single VIVE Tracker as sensor and a linear kinematic synergy as reference generator.
        /// </summary>
        /// <param name="sensorManager">The VIVE Tracker object to be used as sensor.</param>
        /// <param name="xBar">The initial condition for the references.</param>
        /// <param name="xMin">The lower limits for the references.</param>
        /// <param name="xMax">The upper limits for the references.</param>
        public KinematicVIVEInputManager(VIVETrackerManager sensorManager, float[] xBar, float[] xMin, float[] xMax, float[] theta, float[] thetaMin, float[] thetaMax)
        {
            if (sensorManager == null)
            {
                throw new System.ArgumentNullException("The provided sensor manager is empty.");
            }

            this.sensorManager = sensorManager;
            // Create a custom KSRG
            referenceGenerator = new LinearKinematicSynergy(xBar, xMin, xMax, theta, thetaMin, thetaMax);
        }
        /// <summary>
        /// Input manager that includes a single VIVE Tracker as sensor and a linear kinematic synergy as reference generator.
        /// </summary>
        /// <param name="sensorManager">The VIVE Tracker object to be used as sensor.</param>
        public KinematicVIVEInputManager(VIVETrackerManager sensorManager)
        {
            if (sensorManager == null)
            {
                throw new System.ArgumentNullException("The provided sensor manager is empty.");
            }

            this.sensorManager = sensorManager;
            // Create a single DOF KSRG
            float[] xBar     = { 0.0f };
            float[] xMin     = { -5.0f };
            float[] xMax     = { 145.0f };
            float[] theta    = { 1.0f };
            float[] thetaMin = { 0.8f };
            float[] thetaMax = { 2.4f };
            referenceGenerator = new LinearKinematicSynergy(xBar, xMin, xMax, theta, thetaMin, thetaMax);
        }