Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Functional improvements Application and Physics Engine, Bugfixes #164

Open
wants to merge 231 commits into
base: v1beta
Choose a base branch
from

Conversation

JaapvanEkris
Copy link
Contributor

@JaapvanEkris JaapvanEkris commented Mar 11, 2024

New functionality:

  • Added support for ANT+ rowing metrics broadcast
  • Allow the user to change the GUI layout and metrics, including displaying the force curve
  • Allow user to turn on or off ANT+ and BLE functionality and dynamically switch between ANT+ and BLE HR monitors from the GUI
  • Added support for creating Garmin Fit-files, including reporting of distance per stroke, workout plan, intervals, splits and pauses. Files work with Garmin, Strava and intervals.icu
  • tcx-files and RowsAndAll files now have support for splits, intervals and pauses as well
  • Added the option for more complex workouts, as a hook for the PM5 and webinterface (these are a ToDo where the PM5 workout interface and GUI is still in development, but they can be set in server.js already)
  • Added PM5 Interval-types, including splits, in the datastructure

Added some bugfixes/robustness/accuracy improvements:

  • Added support for the newest version of Raspberry Pi OS (Bookworm), moved from Node.js v16 (EOL) to Node.js v20 (current) and upgraded packages where possible. Is known to work on Raspberry Pi 3 and 4
  • Drastic improvement of the architecture to make it more robust and more extensible
  • Improved the Session manager to drastically improve session limit measurement, especially with less data intensive machines
  • Improved the accuracy, responsiveness and efficiency of both the Linear and Quadratic the Theil-Sen algorithms. For larger 'flankLength' machines (12+ datapoints), this improved algorithm will also result in 50% reduction in CPU use, while increasing the responsiveness and accuracy of the forcecurve and powercurve. For smaller 'flankLength' machines it will improve less, but still improve.
  • All linear calculations (stroke detection, Drag calculation, recovery slope calculation) now use the Linear Theil-Sen algorithm, making this calculation more robust against outliers and stroke detection errors
  • Added a configuration sanity check which logs obvious errors and (if possible) repairs settings, after several users messed up their config and got completely stuck.
  • The configuration sanity check also provides an automated upgrade path for 0.8.4 users to V1Beta, as all the newly added configuration items between these two versions are automatically detected, logged and repaired.
  • Added restart limits to prevent infinite boot loops of the app crashing and rebooting when there is a config error
  • Fixed the GPIO tick rollover, which led to a minor hickup in data in rows over 30 minutes
  • Made Flywheel.js more robust against faulty GPIO data
  • Fixed an application crash in the RowingData generation when the target directory doesn't exist yet
  • Improved the structure of the peripherals to allow a more robust BLE and ANT use

Fixed a bug in the tick rollover (which seems to happen every 60 minutes of processtime).
Bugfix: Fixed a bug where a new year or month would crash the workoutrecorder due to a missing data directory

Several improvements:
* Added possibility of only creating RowingData file
* Improved HRR data when restarting a workout
A bit more defensive programming as one bad (NaN) measurement of CurrentDt will kill all metrics for the entire session.
To add insult to injury: by a typo in the error logging function, the app would crash if there was a recoverable error
Addittion of the interval type, as a preperation of the more complex workout schedules
Replaced the horrible ested If...then....else with a much more readable case statement to implement the Concept 2 table
Added a lot of sanity checks to the loading of the config.
Improvement of code quality
Fixed Lint errors
Removed sanity checks in RowingStatistics, as the configmanager centralises the parameter check
Removed sanity checks in RowingStatistics, as the configmanager centralises the parameter check
Added the ability to automatically fix forgotten or implausible settings when possible.
Added logic for more complex workouts: RowingStatistics will handle this completely independently
Update to facilitate more complex workouts. RowingStatistics will now manage the intervals completely independently and alert server.js only when the session has ended.
Added Intervals.icu to the list of compatible users of tcx files.
Updates to fix review comments
Added workout management to the role of RowingStatistics
Fixed Line error
Checked that the sanity check would fix all mew variables, allowing a 0.8.4 config file to be used with V1Beta without any crashes or issues.
Added a restart limit to the service definition to prevent an infinite bootloop
Added a restart limit to the service definition to prevent an infinite bootloop
On hindsight, the approach of letting the FSM handle all state transitions explicitly is much clearer
On hindsight, the approach of letting the FSM handle all state transitions explicitly is much clearer
Added a paragraph about handle-based sensors.
Added reason to modify hardware setup in documentation
Added link to software setup
JaapvanEkris and others added 30 commits January 10, 2024 15:45
Fixed a bug reported by pirower. Many thanks for reporting!
…stimator (#27)

* Explanation of the improvement

* Addition of the defaultValue property

* Change to use Lin. TS for Drag calculation

Changing the drag and recovery slope calculation from OLS to Linear Theil-Sen

* Fixed Lint error

* Improvement of the RowErg profile

Adaptation of the Concept2 RowErg profile to the new algorithms

* Adaptation to improved drag calculation algorithm

* Adaptation to improved drag calculation algorithm

* Update Rower.test.js

* Adaptation to improved drag calculation algorithm

* Adaptation to improved drag calculation algorithm

* Adaptation to improved drag calculation algorithm

* Adaptation to improved drag calculation algorithm

* Adaptation to improved drag calculation algorithm

* Adaptation to improved drag calculation algorithm

* Adaptation to improved drag calculation algorithm

* Adaptation to improved drag calculation algorithm

* Adaptation to improved drag calculation algorithm

* Adaptation to improved drag calculation algorithm

* Adaptation to improved drag calculation algorithm

* Adaptation to improved drag calculation algorithm

* Adaptation to improved drag calculation algorithm

* Adaptation to improved drag calculation algorithm

* Adaptation to improved drag calculation algorithm

* Adaptation to improved drag calculation algorithm

* Adaptation to improved drag calculation algorithm

* Adaptation to improved drag calculation algorithm

* Adaptation to improved drag calculation algorithm

* Adaptation to improved drag calculation algorithm

* Adaptation to improved drag calculation algorithm

* Adaptation to improved drag calculation algorithm

* Adaptation to improved drag calculation algorithm

* Adaptation to improved drag calculation algorithm

* Adaptation to improved drag calculation algorithm

* Adaptation to improved drag calculation algorithm

* Adaptation to improved drag calculation algorithm

* Adaptation to improved drag calculation algorithm

* Adaptation to improved drag calculation algorithm

* Adaptation to improved drag calculation algorithm

* Adaptation to improved drag calculation algorithm

* Adaptation to improved drag calculation algorithm

* Adaptation to improved drag calculation algorithm

* Adaptation to improved drag calculation algorithm
* Update install.sh

* Update package.json

* Update package-lock.json

* Update package.json

* Update package-lock.json

* Update package.json

* Update package-lock.json

* Update install.sh

* Update README.md

* Update installation.md

* Update README.md

* Create Release_Notes.md

* Update Release_Notes.md

* Update Release_Notes.md

* Update Release_Notes.md

* Update README.md

* Update backlog.md

* Update Release_Notes.md

* Update Release_Notes.md

* Update Release_Notes.md

* Update Release_Notes.md

* Update Release_Notes.md

* Update rower_settings.md

* Update physics_openrowingmonitor.md

* Fixed Lint errors

* Update installation.md

* Fix Lint errors
Added an error message on the Bookworm install, as the Window manager is totally different.
* Update package.json

* Update package-lock.json
* Update install.sh

* Create .npmrc

* Update install.sh

* Update server.js

* Update config.js

* Update RowingStatistics.js
Added an active depreciation warning to the Pi Zero W installs (see #33)
* Switch to Node.js V20

* Failsafe for updating using the wrong branch

* Update to Node.js v20 and support for RPi OS Bookworm

* Update to Node.js V20

* Update to Node.js V20

* Update install.sh

* Update install.sh

* Update install.sh

* Update install.sh

* Update package.json

* Update package-lock.json
Update to fix an error in both Theil-Sen regressors, as the arrays used were not processed completely. Thanks to @Abasz for reporting.
Change the startup and powerdown behaviour to depend on Angular velocity, as that is constructed using the TS-calculation, reducing the dependency on an individual measurement.

Inserted more explicit memory management by setting values to null before destroying the node, in order to make the Garbage collector's work a bit easier. This fixes a lot of memory leaks.

Performance improvement of the Quadratic TS Series: Implementation of a lazy algorithm to calculate B, C and goodnessOfFit, avoiding the unneccessary calculation of them when not needed/used.

Improved coding style: Instead of making explicit function calls, we now expose the underlying series, allowing use of their functions directly.

Adds different rowers, including the model C (see laberning#157 )
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants