Improvement of flywheel velocity and acceleration algorithm
Improvement of the algorithm used for the flywheel speed and acceleration, which makes it less errorprone and more smooth.
This commit is contained in:
parent
e0aabf4431
commit
0e6de1636b
|
|
@ -22,9 +22,10 @@
|
|||
|
||||
import loglevel from 'loglevel'
|
||||
import { createStreamFilter } from './utils/StreamFilter.js'
|
||||
import { createLabelledBinarySearchTree } from './utils/BinarySearchTree.js'
|
||||
import { createOLSLinearSeries } from './utils/OLSLinearSeries.js'
|
||||
import { createTSQuadraticSeries } from './utils/FullTSQuadraticSeries.js'
|
||||
import { createWeighedSeries } from './utils/WeighedSeries.js'
|
||||
|
||||
const log = loglevel.getLogger('RowingEngine')
|
||||
|
||||
function createFlywheel (rowerSettings) {
|
||||
|
|
@ -116,19 +117,20 @@ function createFlywheel (rowerSettings) {
|
|||
}
|
||||
|
||||
// Let's make room for a new set of values for angular velocity and acceleration
|
||||
_angularVelocityMatrix[_angularVelocityMatrix.length] = createLabelledBinarySearchTree()
|
||||
_angularAccelerationMatrix[_angularAccelerationMatrix.length] = createLabelledBinarySearchTree()
|
||||
_angularVelocityMatrix[_angularVelocityMatrix.length] = createWeighedSeries()
|
||||
_angularAccelerationMatrix[_angularAccelerationMatrix.length] = createWeighedSeries()
|
||||
|
||||
let i = 0
|
||||
const goodnessOfFit = _angularDistance.goodnessOfFit()
|
||||
|
||||
while (i < _angularVelocityMatrix.length) {
|
||||
// Please note, the label used in the Binary Search Tree has no meaning, as we will not do any targetted remove actions
|
||||
_angularVelocityMatrix[i].push(i, _angularDistance.firstDerivativeAtPosition(i))
|
||||
_angularAccelerationMatrix[i].push(i, _angularDistance.secondDerivativeAtPosition(i))
|
||||
_angularVelocityMatrix[i].push(_angularDistance.firstDerivativeAtPosition(i), goodnessOfFit)
|
||||
_angularAccelerationMatrix[i].push(_angularDistance.secondDerivativeAtPosition(i), goodnessOfFit)
|
||||
i++
|
||||
}
|
||||
|
||||
_angularVelocityAtBeginFlank = _angularVelocityMatrix[0].median()
|
||||
_angularAccelerationAtBeginFlank = _angularAccelerationMatrix[0].median()
|
||||
_angularVelocityAtBeginFlank = _angularVelocityMatrix[0].weighedAverage()
|
||||
_angularAccelerationAtBeginFlank = _angularAccelerationMatrix[0].weighedAverage()
|
||||
|
||||
// And finally calculate the torque
|
||||
_torqueAtBeginFlank = (rowerSettings.flywheelInertia * _angularAccelerationAtBeginFlank + drag.clean() * Math.pow(_angularVelocityAtBeginFlank, 2))
|
||||
|
|
|
|||
Loading…
Reference in New Issue