fixes some code duplications in the engine initialization routine
This commit is contained in:
parent
335083c37d
commit
9471ff758b
|
|
@ -19,39 +19,38 @@ const log = loglevel.getLogger('RowingEngine')
|
||||||
function createRowingEngine (rowerSettings) {
|
function createRowingEngine (rowerSettings) {
|
||||||
let workoutHandler
|
let workoutHandler
|
||||||
const flankDetector = createMovingFlankDetector(rowerSettings)
|
const flankDetector = createMovingFlankDetector(rowerSettings)
|
||||||
let cyclePhase = 'Recovery'
|
|
||||||
let totalTime = 0.0
|
|
||||||
let totalNumberOfImpulses = 0.0
|
|
||||||
let strokeNumber = 0.0
|
|
||||||
const angularDisplacementPerImpulse = (2.0 * Math.PI) / rowerSettings.numOfImpulsesPerRevolution
|
const angularDisplacementPerImpulse = (2.0 * Math.PI) / rowerSettings.numOfImpulsesPerRevolution
|
||||||
let drivePhaseStartTime = 0.0
|
const movingDragAverage = createMovingAverager(rowerSettings.dampingConstantSmoothing, rowerSettings.dragFactor / 1000000)
|
||||||
let drivePhaseStartAngularDisplacement = 0.0
|
|
||||||
let drivePhaseLength = 2.0 * rowerSettings.minimumDriveTime
|
|
||||||
let drivePhaseAngularDisplacement = rowerSettings.numOfImpulsesPerRevolution
|
|
||||||
// let driveStartAngularVelocity = 0
|
|
||||||
// let driveEndAngularVelocity = angularDisplacementPerImpulse / rowerSettings.minimumTimeBetweenImpulses
|
|
||||||
let driveLinearDistance = 0.0
|
|
||||||
// let drivePhaseEnergyProduced = 0.0
|
|
||||||
let recoveryPhaseStartTime = -2 * rowerSettings.minimumRecoveryTime // Make sure that the first CurrentDt will trigger a detected stroke by faking a recovery phase that is long enough
|
|
||||||
let recoveryPhaseStartAngularDisplacement = -1.0 * rowerSettings.numOfImpulsesPerRevolution
|
|
||||||
let recoveryPhaseAngularDisplacement = rowerSettings.numOfImpulsesPerRevolution
|
|
||||||
let recoveryPhaseLength = 2.0 * rowerSettings.minimumRecoveryTime
|
|
||||||
let recoveryStartAngularVelocity = angularDisplacementPerImpulse / rowerSettings.minimumTimeBetweenImpulses
|
|
||||||
let recoveryEndAngularVelocity = angularDisplacementPerImpulse / rowerSettings.maximumTimeBetweenImpulses
|
|
||||||
let recoveryLinearDistance = 0.0
|
|
||||||
let currentDragFactor = rowerSettings.dragFactor / 1000000
|
|
||||||
const movingDragAverage = createMovingAverager(rowerSettings.dampingConstantSmoothing, currentDragFactor)
|
|
||||||
let dragFactor = movingDragAverage.getAverage()
|
|
||||||
const dragFactorMaxUpwardChange = 1 + rowerSettings.dampingConstantMaxChange
|
const dragFactorMaxUpwardChange = 1 + rowerSettings.dampingConstantMaxChange
|
||||||
const dragFactorMaxDownwardChange = 1 - rowerSettings.dampingConstantMaxChange
|
const dragFactorMaxDownwardChange = 1 - rowerSettings.dampingConstantMaxChange
|
||||||
const minimumCycleLength = rowerSettings.minimumDriveTime + rowerSettings.minimumRecoveryTime
|
const minimumCycleLength = rowerSettings.minimumDriveTime + rowerSettings.minimumRecoveryTime
|
||||||
let cycleLength = minimumCycleLength
|
let cyclePhase
|
||||||
let linearCycleVelocity = 0.0
|
let totalTime
|
||||||
let totalLinearDistance = 0.0
|
let totalNumberOfImpulses
|
||||||
let averagedCyclePower = 0.0
|
let strokeNumber
|
||||||
let currentTorque = 0.0
|
let drivePhaseStartTime
|
||||||
let previousAngularVelocity = 0.0
|
let drivePhaseStartAngularDisplacement
|
||||||
let currentAngularVelocity = 0.0
|
let drivePhaseLength
|
||||||
|
let drivePhaseAngularDisplacement
|
||||||
|
let driveLinearDistance
|
||||||
|
let recoveryPhaseStartTime
|
||||||
|
let recoveryPhaseStartAngularDisplacement
|
||||||
|
let recoveryPhaseAngularDisplacement
|
||||||
|
let recoveryPhaseLength
|
||||||
|
let recoveryStartAngularVelocity
|
||||||
|
let recoveryEndAngularVelocity
|
||||||
|
let recoveryLinearDistance
|
||||||
|
let currentDragFactor
|
||||||
|
let dragFactor
|
||||||
|
let cycleLength
|
||||||
|
let linearCycleVelocity
|
||||||
|
let totalLinearDistance
|
||||||
|
let averagedCyclePower
|
||||||
|
let currentTorque
|
||||||
|
let previousAngularVelocity
|
||||||
|
let currentAngularVelocity
|
||||||
|
// we use the reset function to initialize the variables above
|
||||||
|
reset()
|
||||||
|
|
||||||
// called if the sensor detected an impulse, currentDt is an interval in seconds
|
// called if the sensor detected an impulse, currentDt is an interval in seconds
|
||||||
function handleRotationImpulse (currentDt) {
|
function handleRotationImpulse (currentDt) {
|
||||||
|
|
@ -169,13 +168,11 @@ function createRowingEngine (rowerSettings) {
|
||||||
strokeNumber++
|
strokeNumber++
|
||||||
drivePhaseStartTime = totalTime - flankDetector.timeToBeginOfFlank()
|
drivePhaseStartTime = totalTime - flankDetector.timeToBeginOfFlank()
|
||||||
drivePhaseStartAngularDisplacement = totalNumberOfImpulses - flankDetector.noImpulsesToBeginFlank()
|
drivePhaseStartAngularDisplacement = totalNumberOfImpulses - flankDetector.noImpulsesToBeginFlank()
|
||||||
// driveStartAngularVelocity = angularDisplacementPerImpulse / flankDetector.impulseLengthAtBeginFlank()
|
|
||||||
|
|
||||||
// Update the metrics
|
// Update the metrics
|
||||||
if (workoutHandler) {
|
if (workoutHandler) {
|
||||||
workoutHandler.handleRecoveryEnd({
|
workoutHandler.handleRecoveryEnd({
|
||||||
timeSinceStart: totalTime,
|
timeSinceStart: totalTime,
|
||||||
// currDragFactor : currentDragFactor,
|
|
||||||
power: averagedCyclePower,
|
power: averagedCyclePower,
|
||||||
duration: cycleLength,
|
duration: cycleLength,
|
||||||
strokeDistance: driveLinearDistance + recoveryLinearDistance,
|
strokeDistance: driveLinearDistance + recoveryLinearDistance,
|
||||||
|
|
@ -296,6 +293,7 @@ function createRowingEngine (rowerSettings) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function reset () {
|
function reset () {
|
||||||
|
movingDragAverage.reset()
|
||||||
cyclePhase = 'Recovery'
|
cyclePhase = 'Recovery'
|
||||||
totalTime = 0.0
|
totalTime = 0.0
|
||||||
totalNumberOfImpulses = 0.0
|
totalNumberOfImpulses = 0.0
|
||||||
|
|
@ -304,10 +302,7 @@ function createRowingEngine (rowerSettings) {
|
||||||
drivePhaseStartAngularDisplacement = 0.0
|
drivePhaseStartAngularDisplacement = 0.0
|
||||||
drivePhaseLength = 2.0 * rowerSettings.minimumDriveTime
|
drivePhaseLength = 2.0 * rowerSettings.minimumDriveTime
|
||||||
drivePhaseAngularDisplacement = rowerSettings.numOfImpulsesPerRevolution
|
drivePhaseAngularDisplacement = rowerSettings.numOfImpulsesPerRevolution
|
||||||
// driveStartAngularVelocity = 0
|
|
||||||
// driveEndAngularVelocity = angularDisplacementPerImpulse / rowerSettings.minimumTimeBetweenImpulses
|
|
||||||
driveLinearDistance = 0.0
|
driveLinearDistance = 0.0
|
||||||
// drivePhaseEnergyProduced = 0.0
|
|
||||||
recoveryPhaseStartTime = -2 * rowerSettings.minimumRecoveryTime // Make sure that the first CurrentDt will trigger a detected stroke by faking a recovery phase that is long enough
|
recoveryPhaseStartTime = -2 * rowerSettings.minimumRecoveryTime // Make sure that the first CurrentDt will trigger a detected stroke by faking a recovery phase that is long enough
|
||||||
recoveryPhaseStartAngularDisplacement = -1.0 * rowerSettings.numOfImpulsesPerRevolution
|
recoveryPhaseStartAngularDisplacement = -1.0 * rowerSettings.numOfImpulsesPerRevolution
|
||||||
recoveryPhaseAngularDisplacement = rowerSettings.numOfImpulsesPerRevolution
|
recoveryPhaseAngularDisplacement = rowerSettings.numOfImpulsesPerRevolution
|
||||||
|
|
@ -316,7 +311,6 @@ function createRowingEngine (rowerSettings) {
|
||||||
recoveryEndAngularVelocity = angularDisplacementPerImpulse / rowerSettings.maximumTimeBetweenImpulses
|
recoveryEndAngularVelocity = angularDisplacementPerImpulse / rowerSettings.maximumTimeBetweenImpulses
|
||||||
recoveryLinearDistance = 0.0
|
recoveryLinearDistance = 0.0
|
||||||
currentDragFactor = rowerSettings.dragFactor / 1000000
|
currentDragFactor = rowerSettings.dragFactor / 1000000
|
||||||
movingDragAverage.reset()
|
|
||||||
dragFactor = movingDragAverage.getAverage()
|
dragFactor = movingDragAverage.getAverage()
|
||||||
cycleLength = minimumCycleLength
|
cycleLength = minimumCycleLength
|
||||||
linearCycleVelocity = 0.0
|
linearCycleVelocity = 0.0
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue