/// <summary> /// Proportional EMG reference generator that converts an EMG signal into a joint angle or velocity reference. /// Single site: joint angle reference. /// Dual site: joint velocity reference. /// Sets all integrator gains to the default: 1.0. /// </summary> /// <param name="xBar">The initial condition for the references.</param> public EMGInterfaceReferenceGenerator(float[] xBar, EMGInterfaceType interfaceType) { channelSize = xBar.Length; this.xBar = xBar; SetDefaultGains(); generatorType = ReferenceGeneratorType.EMGInterface; this.interfaceType = interfaceType; // initialize filters for (int i = 0; i < channelSize; i++) { lowPassFilters.Add(new FOLPDFilter(2 * Mathf.PI * 3.0f, 1.0f, Time.fixedDeltaTime)); movingAverageFilters.Add(new MovingAverageFilter(15)); } }
/// <summary> /// Proportional EMG reference generator that converts an EMG signal into a joint angle or velocity reference. /// Single site: joint angle reference. /// Dual site: joint velocity reference. /// </summary> /// <param name="xBar">The initial condition for the references.</param> /// <param name="gains">The desired integrator gain for each reference.</param> public EMGInterfaceReferenceGenerator(float[] xBar, List <float> gains, EMGInterfaceType interfaceType) { if (xBar.Length != gains.Count) { throw new System.ArgumentOutOfRangeException("The length of the parameters does not match."); } channelSize = xBar.Length; this.xBar = xBar; this.Gains = gains; generatorType = ReferenceGeneratorType.EMGInterface; this.interfaceType = interfaceType; // initialize filters for (int i = 0; i < channelSize; i++) { lowPassFilters.Add(new FOLPDFilter(2 * Mathf.PI * 3.0f, 1.0f, Time.fixedDeltaTime)); movingAverageFilters.Add(new MovingAverageFilter(15)); } }