Merge branch 'main' into arcade
This commit is contained in:
commit
51ebdc30ab
|
|
@ -80,7 +80,7 @@ function createRowingEngine (rowerSettings) {
|
||||||
cyclePhase = 'Recovery'
|
cyclePhase = 'Recovery'
|
||||||
} else {
|
} 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
|
// 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)
|
updateDrivePhase(currentDt)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -99,7 +99,7 @@ function createRowingEngine (rowerSettings) {
|
||||||
cyclePhase = 'Drive'
|
cyclePhase = 'Drive'
|
||||||
} else {
|
} else {
|
||||||
// We see a force, but the "Recovery" phase has been too short, we stay in the "Recovery" phase
|
// 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)
|
updateRecoveryPhase(currentDt)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -118,7 +118,7 @@ function createRowingEngine (rowerSettings) {
|
||||||
} else {
|
} else {
|
||||||
log.debug(`CycleLength isn't plausible: recoveryPhaseLength ${recoveryPhaseLength.toFixed(4)} sec, drivePhaseLength = ${drivePhaseLength.toFixed(4)} s, maximumImpulseTimeBeforePause ${rowerSettings.maximumImpulseTimeBeforePause} s`)
|
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
|
// Calculation of the drag-factor
|
||||||
if (flankDetector.impulseLengthAtBeginFlank() > 0) {
|
if (flankDetector.impulseLengthAtBeginFlank() > 0) {
|
||||||
|
|
@ -135,7 +135,7 @@ function createRowingEngine (rowerSettings) {
|
||||||
} else {
|
} else {
|
||||||
// The calculated drag factor is outside the plausible range
|
// 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.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)) {
|
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
|
// 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)
|
movingDragAverage.pushValue(movingDragAverage.getAverage() * dragFactorMaxDownwardChange)
|
||||||
|
|
@ -150,10 +150,10 @@ function createRowingEngine (rowerSettings) {
|
||||||
log.info(`*** Calculated drag factor: ${(currentDragFactor * 1000000).toFixed(2)}`)
|
log.info(`*** Calculated drag factor: ${(currentDragFactor * 1000000).toFixed(2)}`)
|
||||||
}
|
}
|
||||||
} else {
|
} 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 {
|
} 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
|
// Calculate the key metrics
|
||||||
|
|
@ -164,7 +164,7 @@ function createRowingEngine (rowerSettings) {
|
||||||
averagedCyclePower = calculateCyclePower()
|
averagedCyclePower = calculateCyclePower()
|
||||||
|
|
||||||
// Next, we start the "Drive" Phase
|
// 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++
|
strokeNumber++
|
||||||
drivePhaseStartTime = totalTime - flankDetector.timeToBeginOfFlank()
|
drivePhaseStartTime = totalTime - flankDetector.timeToBeginOfFlank()
|
||||||
drivePhaseStartAngularDisplacement = totalNumberOfImpulses - flankDetector.noImpulsesToBeginFlank()
|
drivePhaseStartAngularDisplacement = totalNumberOfImpulses - flankDetector.noImpulsesToBeginFlank()
|
||||||
|
|
@ -277,7 +277,7 @@ function createRowingEngine (rowerSettings) {
|
||||||
// There is no division by zero and the data data is plausible
|
// There is no division by zero and the data data is plausible
|
||||||
cyclePower = dragFactor * Math.pow((recoveryPhaseAngularDisplacement + drivePhaseAngularDisplacement) / cycleLength, 3.0)
|
cyclePower = dragFactor * Math.pow((recoveryPhaseAngularDisplacement + drivePhaseAngularDisplacement) / cycleLength, 3.0)
|
||||||
} else {
|
} 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
|
return cyclePower
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -95,15 +95,15 @@ export default {
|
||||||
WRX700: {
|
WRX700: {
|
||||||
numOfImpulsesPerRevolution: 2,
|
numOfImpulsesPerRevolution: 2,
|
||||||
naturalDeceleration: -5.0,
|
naturalDeceleration: -5.0,
|
||||||
flywheelInertia: 0.45,
|
flywheelInertia: 0.72,
|
||||||
dragFactor: 22000
|
dragFactor: 32000
|
||||||
},
|
},
|
||||||
|
|
||||||
// DKN R-320 Air Rower
|
// DKN R-320 Air Rower
|
||||||
DKNR320: {
|
DKNR320: {
|
||||||
numOfImpulsesPerRevolution: 1,
|
numOfImpulsesPerRevolution: 1,
|
||||||
flywheelInertia: 0.41,
|
flywheelInertia: 0.94,
|
||||||
dragFactor: 4000
|
dragFactor: 8522
|
||||||
},
|
},
|
||||||
|
|
||||||
// NordicTrack RX800 Air Rower
|
// NordicTrack RX800 Air Rower
|
||||||
|
|
@ -151,8 +151,8 @@ export default {
|
||||||
naturalDeceleration: -8.6, // perfect runs IIIXI
|
naturalDeceleration: -8.6, // perfect runs IIIXI
|
||||||
minimumDriveTime: 0.28,
|
minimumDriveTime: 0.28,
|
||||||
minimumRecoveryTime: 0.90,
|
minimumRecoveryTime: 0.90,
|
||||||
flywheelInertia: 0.131,
|
flywheelInertia: 0.189,
|
||||||
dragFactor: 310
|
dragFactor: 460
|
||||||
//
|
//
|
||||||
|
|
||||||
/* Damper setting 4
|
/* Damper setting 4
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue