fixes #69 error in angularDisplacement calculation

This commit is contained in:
Lars Berning 2022-03-08 20:09:42 +01:00
parent 697d2cd53c
commit 8dc8146abf
No known key found for this signature in database
GPG Key ID: 028E73C9E1D8A0B3
2 changed files with 14 additions and 14 deletions

View File

@ -80,7 +80,7 @@ function createRowingEngine (rowerSettings) {
cyclePhase = 'Recovery'
} else {
// We seem to have lost power to the flywheel, but it is too early according to the settings. We stay in the Drive Phase
log.debug(`Time: ${totalTime.toFixed(4)} sec, impuls ${totalNumberOfImpulses}: flank suggests no power (${flankDetector.accelerationAtBeginOfFlank().toFixed(1)} rad/s2), but waiting for for recoveryPhaseLength (${recoveryPhaseLength.toFixed(4)} sec) to exceed minimumRecoveryTime (${rowerSettings.minimumRecoveryTime} sec)`)
log.debug(`Time: ${totalTime.toFixed(4)} sec, impulse ${totalNumberOfImpulses}: flank suggests no power (${flankDetector.accelerationAtBeginOfFlank().toFixed(1)} rad/s2), but waiting for for recoveryPhaseLength (${recoveryPhaseLength.toFixed(4)} sec) to exceed minimumRecoveryTime (${rowerSettings.minimumRecoveryTime} sec)`)
updateDrivePhase(currentDt)
}
} else {
@ -99,7 +99,7 @@ function createRowingEngine (rowerSettings) {
cyclePhase = 'Drive'
} else {
// We see a force, but the "Recovery" phase has been too short, we stay in the "Recovery" phase
log.debug(`Time: ${totalTime.toFixed(4)} sec, impuls ${totalNumberOfImpulses}: flank suggests power (${flankDetector.accelerationAtBeginOfFlank().toFixed(1)} rad/s2), but waiting for recoveryPhaseLength (${recoveryPhaseLength.toFixed(4)} sec) to exceed minimumRecoveryTime (${rowerSettings.minimumRecoveryTime} sec)`)
log.debug(`Time: ${totalTime.toFixed(4)} sec, impulse ${totalNumberOfImpulses}: flank suggests power (${flankDetector.accelerationAtBeginOfFlank().toFixed(1)} rad/s2), but waiting for recoveryPhaseLength (${recoveryPhaseLength.toFixed(4)} sec) to exceed minimumRecoveryTime (${rowerSettings.minimumRecoveryTime} sec)`)
updateRecoveryPhase(currentDt)
}
} else {
@ -118,7 +118,7 @@ function createRowingEngine (rowerSettings) {
} else {
log.debug(`CycleLength isn't plausible: recoveryPhaseLength ${recoveryPhaseLength.toFixed(4)} sec, drivePhaseLength = ${drivePhaseLength.toFixed(4)} s, maximumImpulseTimeBeforePause ${rowerSettings.maximumImpulseTimeBeforePause} s`)
}
recoveryPhaseAngularDisplacement = (totalNumberOfImpulses - recoveryPhaseStartAngularDisplacement) * angularDisplacementPerImpulse
recoveryPhaseAngularDisplacement = ((totalNumberOfImpulses - flankDetector.noImpulsesToBeginFlank()) - recoveryPhaseStartAngularDisplacement) * angularDisplacementPerImpulse
// Calculation of the drag-factor
if (flankDetector.impulseLengthAtBeginFlank() > 0) {
@ -135,7 +135,7 @@ function createRowingEngine (rowerSettings) {
} else {
// The calculated drag factor is outside the plausible range
log.info(`Calculated drag factor: ${(currentDragFactor * 1000000).toFixed(2)}, which is too far off the currently used dragfactor of ${movingDragAverage.getAverage() * 1000000}`)
log.debug(`Time: ${totalTime.toFixed(4)} sec, impuls ${totalNumberOfImpulses}: recoveryStartAngularVelocity = ${recoveryStartAngularVelocity.toFixed(2)} rad/sec, recoveryEndAngularVelocity = ${recoveryEndAngularVelocity.toFixed(2)} rad/sec, recoveryPhaseLength = ${recoveryPhaseLength.toFixed(4)} sec`)
log.debug(`Time: ${totalTime.toFixed(4)} sec, impulse ${totalNumberOfImpulses}: recoveryStartAngularVelocity = ${recoveryStartAngularVelocity.toFixed(2)} rad/sec, recoveryEndAngularVelocity = ${recoveryEndAngularVelocity.toFixed(2)} rad/sec, recoveryPhaseLength = ${recoveryPhaseLength.toFixed(4)} sec`)
if (currentDragFactor < (movingDragAverage.getAverage() * dragFactorMaxDownwardChange)) {
// The current calculated dragfactor makes an abrupt downward change, let's follow the direction, but limit it to the maximum allowed change
movingDragAverage.pushValue(movingDragAverage.getAverage() * dragFactorMaxDownwardChange)
@ -150,10 +150,10 @@ function createRowingEngine (rowerSettings) {
log.info(`*** Calculated drag factor: ${(currentDragFactor * 1000000).toFixed(2)}`)
}
} else {
log.error(`Time: ${totalTime.toFixed(4)} sec, impuls ${totalNumberOfImpulses}: division by 0 prevented, recoveryPhaseLength = ${recoveryPhaseLength} sec, recoveryStartAngularVelocity = ${recoveryStartAngularVelocity} rad/sec, recoveryEndAngularVelocity = ${recoveryEndAngularVelocity} rad/sec`)
log.error(`Time: ${totalTime.toFixed(4)} sec, impulse ${totalNumberOfImpulses}: division by 0 prevented, recoveryPhaseLength = ${recoveryPhaseLength} sec, recoveryStartAngularVelocity = ${recoveryStartAngularVelocity} rad/sec, recoveryEndAngularVelocity = ${recoveryEndAngularVelocity} rad/sec`)
}
} else {
log.error(`Time: ${totalTime.toFixed(4)} sec, impuls ${totalNumberOfImpulses}: division by 0 prevented, impulseLengthAtBeginFlank = ${flankDetector.impulseLengthAtBeginFlank()} sec`)
log.error(`Time: ${totalTime.toFixed(4)} sec, impulse ${totalNumberOfImpulses}: division by 0 prevented, impulseLengthAtBeginFlank = ${flankDetector.impulseLengthAtBeginFlank()} sec`)
}
// Calculate the key metrics
@ -164,7 +164,7 @@ function createRowingEngine (rowerSettings) {
averagedCyclePower = calculateCyclePower()
// Next, we start the "Drive" Phase
log.debug(`*** DRIVE phase started at time: ${totalTime.toFixed(4)} sec, impuls number ${totalNumberOfImpulses}`)
log.debug(`*** DRIVE phase started at time: ${totalTime.toFixed(4)} sec, impulse number ${totalNumberOfImpulses}`)
strokeNumber++
drivePhaseStartTime = totalTime - flankDetector.timeToBeginOfFlank()
drivePhaseStartAngularDisplacement = totalNumberOfImpulses - flankDetector.noImpulsesToBeginFlank()
@ -277,7 +277,7 @@ function createRowingEngine (rowerSettings) {
// There is no division by zero and the data data is plausible
cyclePower = dragFactor * Math.pow((recoveryPhaseAngularDisplacement + drivePhaseAngularDisplacement) / cycleLength, 3.0)
} else {
log.error(`Time: ${totalTime.toFixed(4)} sec, impuls ${totalNumberOfImpulses}: cycle length was not plausible, CycleLength = ${cycleLength} sec`)
log.error(`Time: ${totalTime.toFixed(4)} sec, impulse ${totalNumberOfImpulses}: cycle length was not plausible, CycleLength = ${cycleLength} sec`)
}
return cyclePower
}

View File

@ -95,15 +95,15 @@ export default {
WRX700: {
numOfImpulsesPerRevolution: 2,
naturalDeceleration: -5.0,
flywheelInertia: 0.45,
dragFactor: 22000
flywheelInertia: 0.72,
dragFactor: 32000
},
// DKN R-320 Air Rower
DKNR320: {
numOfImpulsesPerRevolution: 1,
flywheelInertia: 0.41,
dragFactor: 4000
flywheelInertia: 0.94,
dragFactor: 8522
},
// NordicTrack RX800 Air Rower
@ -151,8 +151,8 @@ export default {
naturalDeceleration: -8.6, // perfect runs IIIXI
minimumDriveTime: 0.28,
minimumRecoveryTime: 0.90,
flywheelInertia: 0.131,
dragFactor: 310
flywheelInertia: 0.189,
dragFactor: 460
//
/* Damper setting 4