private HandleSample GetExecutionSamplerHandlerForExercise(int exID) { return((Sample sample) => { LimbExercise ex = _exercises[exID]; EvaluationResults results = (ex.exerciseConfig.isRealTimeSampling) ? ex.aiManager.EvaluateExerciseStep(sample.sampleDataForExercise[exID].UnwrapFromSensors(), sample.idealDataForExercise[exID].UnwrapFromSensors()) : ex.aiManager.EvaluateExerciseStep(sample.sampleDataForExercise[exID].UnwrapFromSensors()); ex.exerciseConfig.ProvideExerciseResults(results); }); }
/// <summary> /// Used to setup a new limb exercise /// </summary> /// <param name="config">Configuration of the limb that has to perform the exercise</param> public void ExerciseSetup(ExerciseConfiguration config) { LimbExercise exercise = new LimbExercise(); exercise.exerciseConfig = config; ArticolationTollerance[] tollerance = new ArticolationTollerance[config.limbConfiguration.sensors.Length]; for (int i = 0; i < config.limbConfiguration.sensors.Length; i++) { tollerance[i] = config.limbConfiguration.sensors[i].sensorTollerance; } exercise.aiManager.ExerciseTollerance = tollerance; _exercises.Add(exercise); }
/// <summary> /// Use this to start evaluating the recorded exercises /// </summary> public void StartEvaluation() { executionSampleHandlers = new HandleSample[_exercises.Count]; for (int exID = 0; exID < _exercises.Count; exID++) { LimbExercise exercise = _exercises[exID]; exercise.realStepsSampling.Clear(); if (exercise.exerciseConfig.isRealTimeSampling) { exercise.idealStepsSampling.Clear(); } exercise.aiManager.StartExercise(exercise.exerciseConfig.isRealTimeSampling); executionSampleHandlers[exID] = GetExecutionSamplerHandlerForExercise(exID); OnSampleTaken += executionSampleHandlers[exID]; } StartSampling(timingBetweenSamples); }
private void SampleSensors() { Sample sample = new Sample(); sample.sampleDataForExercise = new LimbData[_exercises.Count]; sample.idealDataForExercise = new LimbData[_exercises.Count]; for (int exID = 0; exID < _exercises.Count; exID++) { LimbExercise exercise = _exercises[exID]; sample.sampleDataForExercise[exID] = exercise.exerciseConfig.limbConfiguration.ExtractLimbData(); if (exercise.exerciseConfig.isRealTimeSampling) { sample.idealDataForExercise[exID] = exercise.exerciseConfig.ghostLimbConfiguration.ExtractLimbData(); } } if (OnSampleTaken != null) { OnSampleTaken(sample); } }
/// <summary> /// Start recording exercise steps for the set up exercise (ExerciseSetup method) /// </summary> public void StartSetup() { setupSampleHandlers = new HandleSample[_exercises.Count]; for (int exID = 0; exID < _exercises.Count; exID++) { LimbExercise exercise = _exercises[exID]; if (!exercise.exerciseConfig.isRealTimeSampling) { // need setup setupSampleHandlers[exID] = GetIdealSamplerHandlerForExercise(exID); OnSampleTaken += setupSampleHandlers[exID]; } else { // no need of setup exercise.isTemporary = false; exercise.aiManager.CreateExerciseSession(timingBetweenSamples); // creating a session without tranining set } } StartSampling(timingBetweenSamples); }