openrowingmonitor/docs/README_coach.md

650 lines
28 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Extending open rowing monitor (mostly javascript)
We can use python functions via node.json to use [RowingData](https://pypi.org/project/rowingdata/)
[See below](## RowingData)
* [child_process.spawn() function](https://nodejs.org/api/child_process.html#child_processspawncommand-args-options)
* [child_process.spawnSync](https://nodejs.org/api/child_process.html#child_processspawnsynccommand-args-options)
[How to run a python script from node.js](https://www.halo-lab.com/blog/how-to-run-a-python-script-from-node-js)
or we can use [node-calls-python](https://www.npmjs.com/package/node-calls-python)
to call Python from Node.js directly in-process without spawning processes using
an embedded Python interpreter. [More examples](https://github.com/hmenyus/node-calls-python/tree/main/test)
If the execution time of your Python code is less than creating a new process,
you will see significant performance problems because your Node.js code will
keep creating new processes instead of executing your Python code. Suppose you
have a few NumPy calls in Python,you don't want to create a new process for that
## Libraries
* [Node.js](https://nodejs.org/en) is a JavaScript runtime environment that
lets developers create servers, web apps, command line tools and scripts.
* [Rollup.js](https://rollupjs.org/) is a Node.js module bundler most
often used for client-side JavaScript running in the browser. ECMAScript ES6
ES modules.
* [Babel](https://babeljs.io/) is a JavaScript compiler.
* [Snowpack](https://www.snowpack.dev/) is a frontend build tool.
* [lit](https://lit.dev/) Lit is a simple library for building fast, lightweight
web components. (alternative to reactjs) Lit uses TypeScript.
* [web components](https://developer.mozilla.org/en-US/docs/Web/Web_Components)
are a set of native browser APIs that let you create your own HTML elements.
Those elements can do whatever you want them to. Lit is a library that wraps
around web components, making them easier to work with. Instead of setting
up web components using the native APIs directly, you can use Lit to make
Lit Components.
* [uvu](https://github.com/lukeed/uvu) is a test runner for Node.js
* [axios](https://github.com/axios/axios) Make http requests from node.js,
Supports the Promise API
## Files
### tree -L 3
```ascii
.
├── app
│   ├── ant
│   │   └── AntManager.js
│   ├── ble
│   │   ├── BufferBuilder.js
│   │   ├── BufferBuilder.test.js
│   │   ├── CentralManager.js
│   │   ├── CentralService.js
│   │   ├── ftms
│   │   ├── FtmsPeripheral.js
│   │   ├── PeripheralManager.js
│   │   ├── pm5
│   │   └── Pm5Peripheral.js
│   ├── client
│   │   ├── components
│   │   ├── icon.png
│   │   ├── index.html
│   │   ├── index.js
│   │   ├── lib
│   │   ├── manifest.json
│   │   └── store
│   ├── engine
│   │   ├── averager
│   │   ├── MovingFlankDetector.js
│   │   ├── RowingEngine.js
│   │   ├── RowingEngine.test.js
│   │   ├── RowingStatistics.js
│   │   ├── Timer.js
│   │   ├── WorkoutRecorder.js
│   │   └── WorkoutUploader.js
│   ├── gpio
│   │   └── GpioTimerService.js
│   ├── server.js
│   ├── tools
│   │   ├── AuthorizedStravaConnection.js
│   │   ├── ConfigManager.js
│   │   ├── Helper.js
│   │   ├── RowingRecorder.js
│   │   └── StravaAPI.js
│   └── WebServer.js
├── babel.config.json
├── bin
│   ├── openrowingmonitor.sh
│   └── updateopenrowingmonitor.sh
├── config
│   ├── default.config.js
│   └── rowerProfiles.js
├── docs
│   ├── assets
│   │   └── css
│   ├── attribution.md
│   ├── backlog.md
│   ├── CODE_OF_CONDUCT.md
│   ├── _config.yml
│   ├── CONTRIBUTING.md
│   ├── hardware_setup_WRX700.md
│   ├── img
│   │   ├── favicon.ico
│   │   ├── icon.png
│   │   ├── openrowingmonitor_frontend.png
│   │   ├── openrowingmonitor_icon.png
│   │   ├── physics
│   │   ├── raspberrypi_internal_wiring.jpg
│   │   └── raspberrypi_reedsensor_wiring.jpg
│   ├── installation.md
│   ├── _layouts
│   │   └── default.html
│   ├── physics_openrowingmonitor.md
│   ├── README.md
│   ├── rower_settings.md
│   └── Rowing_Settings_Analysis_Small.xlsx
├── install
│   ├── config.js
│   ├── install.sh
│   ├── openrowingmonitor.service
│   ├── smb.conf
│   ├── webbrowserkiosk.service
│   └── webbrowserkiosk.sh
├── jsconfig.json
├── LICENSE
├── package.json
├── package-lock.json
├── recordings
│   ├── DKNR320.csv
│   ├── RX800.csv
│   ├── WRX700_1magnet.csv
│   ├── WRX700_2magnets.csv
│   └── WRX700_2magnets_session.csv
├── rollup.config.js
└── snowpack.config.js
```
### Engine
* WorkoutRecorder.js
This Module captures the metrics of a rowing session and persists them.
* recordStroke,
recordRotationImpulse,
handlePause,
activeWorkoutToTcx,
reset
* Todo: split this into multiple modules
* RowingStatistics.js - This Module calculates the training specific metrics.
* sessionState,
durationTotal,
durationTotalFormatted,
strokesTotal,
distanceTotal,
caloriesTotal,
caloriesPerMinute,
caloriesPerHour,
strokeTime,
distance,
power,
split.
splitFormatted,
powerRatio,
instantaneousTorque,
strokesPerMinute,
speed,
strokeState,
heartrate,
heartrateBatteryLevel
* RowingEngine.js
The Rowing Engine models the physics of a real rowing boat.
[Physics of Rowing by Anu Dudhia](http://eodg.atm.ox.ac.uk/user/dudhia/rowing/physics)
* averager
moving, interval and weighted
* MovingFlankDetector.js
A Detector used to test for up-going and down-going flanks
* Timer.js
Stopwatch used to measure multiple time intervals
* WorkoutUploader.js
Handles uploading workout data to different cloud providers
### Client
* server.js - entry point
* app/client/index.js
Main Initialization Component of the Web Component App.
renders a performance-dashboard component, defines a custom element called
web-app using LitElement.
* app/client/components/AppElement.js
Base Component for all other App Components.
* app/client/components/DashboardActions.js
Component that renders the action buttons of the dashboard.
* app/client/components/DashboardMetric.js
Component that renders a metric of the dashboard.
* app/client/components/PerformanceDashboard.js
Component that renders the dashboard.
* app/client/components/BatteryIcon.js
Component that renders a battery indicator.
* app/client/components/AppDialog.js
Component that renders a html dialog.
### tools
* RowingRecorder.js
A utility to record and replay flywheel measurements for
development purposes.
* ConfigManager.js
Merges the different config files and presents the
configuration to the application
* StravaAPI.js
Implements required parts of the [Strava API](https://developers.strava.com/)
* AuthorizedStravaConnection.js
Creates an OAuth authorized connection to
[Strava](https://developers.strava.com/) Running, Cycling & Hiking App
* Helper.js
Helper functions
```html
https://stackblitz.com/edit/lit-element
https://stackblitz.com/edit/web-components-example-lit
https://stackblitz.com/edit/lit-element-rxjs-playground
https://stackblitz.com/edit/select-litelements
https://stackblitz.com/edit/lit-element-portal
https://stackblitz.com/edit/lit-element-chartjs-dtrcwz?file=index.js
https://www.chartjs.org/docs/latest/samples/bar/vertical.html
https://www.chartjs.org/docs/latest/samples/line/line.html
```
## TODO
## Pages
[ORM github](https://github.com/laberning/openrowingmonitor)
[ORM docs](https://laberning.github.io/openrowingmonitor)
## What you get
* Stroke detection
* Power (watts)
* Split time (/500m)
* Strokes per Minute
* Calories used (kcal)
* Training Duration
* Heart Rate (supports BLE and ANT+ heart rate monitors, ANT+ requires an ANT+
USB stick USB id 0x1008 or 0x1009)
* web sockets front end
* BLE (FTMS indoor bike, FMTS rower, concept2 PM)
Export session in [TCX](https://en.wikipedia.org/wiki/Training_Center_XML), csv for [RowingData](https://pypi.org/project/rowingdata/),
and csv raw data.
## [RowingData](https://pypi.org/project/rowingdata/)
[readthedocs](https://rowingdata.readthedocs.io/en/latest/)
[github](https://github.com/sanderroosendaal/rowingdata)
Make the data accessible in python and create useful plots.
* Upload fitness data captured in TCX format to the Concept2 logbook
* Get erg data captured with apps that have no “upload to Concept2”
functionality and upload them to the Concept2 logbook
* Get erg data captured with apps that have no TCX export functionality and
convert hem to TCX
* Make the data accessible in python and create useful plots.
* Color HR band charts or Pie Charts
* Plot drive length, drive time, and other erg related parameters as a function
of time or distance (implemented)
* Create histograms (Do-it-yourself).
* And much more (do-it-yourself). Youve got the entire Python matplotlib at
your disposal.
The project is based on:
* [python plotting code](https://quantifiedrowing.com/category/software-tools/) by Greg Smith
and inspired by:
* the [RowPro Dan Burpee spreadsheet](http://www.sub7irc.com/RP_Split_Template.zip)
* the [Burpee forum post](https://freespiritsrowing.com/forum/viewtopic.php?t=3248)
The [roadmap](./backlog.md) indentifies:
* add possibility to define training timers
* add possibility to define workouts (i.e. training intervals with goals)
which we aim to add using the concept2 training plans and davids spreadsheet
formula to provide a training program for a given goal date which varies the
program in relation to improvements over time.
## training
The [roadmap](https://laberning.github.io/openrowingmonitor/backlog.html) indentifies:
* add possibility to define workouts (i.e. training intervals with goals)
which we aim to add using the concept2 training plans and davids spreadsheet
formula to provide a training program for a given goal date which varies the
program in relation to improvements over time.
### Feedback from the Coach
#### CMA for the Coach
* Provide warning over excess heart rate while exercising:
Heart rate should remain below upper limit of "expected zone".
Advise that heart rate above upper limit by >1 bpm means user must reduce
effort.
* Instruction on when to take rest days.
* Recording of heart rate after work-outs too, to identify pending illness.
* Coach warns of over training when performance declines steadily over, say 4 or
more, days.
* When over training is indicated, Coach suggests: skip a day or two; eat more;
Coach also warns of over training when, after a skip, performance has not
returned to before.
* Coach suggests work rates based on recent past performance.
* Perhaps present this as a choice for the user, perhaps between:
(Coach's default, perhaps based on yesterday's performance), and (user choice).
(yesterday's performance) and (the day before's performance).
(low|easier|"get the job done") versus (high|harder|"make a mark").
* Marking of results of rows rows taken in contravention of instructions.
* Display of recorded rows highlighting contraventions, say in red.
* Have an optional way to, temporarily, display results without the red.
## What we need
* resting heart rate (ask)
* max heart rate (stepped challenge)
* heart rate after given workload (watt/duration challenge)
* heart rate after work-outs too, to identify pending illness
* Interpolate heart rate to predict competition performance.
* Have Eddie's racing warm-up (as attached to the rower atm)
### Candidate rowing programmes
* For athlete levels 1 (not exercised for 3 years) to 5 (hero).
* Have table of suggested rowing effort and duration.
## Sensor Methods
### IMU
motion analysis, most require athletes to wear sensors to acquire their posture
data; however, this method easily introduces noise due to friction during motions
[Automated Rower Assignment to Rowing Events: A Machine Learning Approach](https://commons.nmu.edu/cgi/viewcontent.cgi?article=2810&context=isbs)
[Analysis of indoor rowing motion using wearable inertial sensors](https://dl.acm.org/doi/pdf/10.4108/eai.28-9-2015.2261465)
#### [Biorowtel](https://biorow.com/index.php?route=product/product&path=61_108&product_id=54)
£8,325.00
* [2D Oar Angle sensor](https://biorow.com/products/biorow_sensors/2d_oar_angle) £420
* Catch and finish angles, and total stroke length ([RBN 2003/04](https://www.biorow.com/RBN_en_2003_files/2003RowBiomNews04.pdf) [RBN2003/05](https://www.biorow.com/RBN_en_2003_files/2003RowBiomNews05.pdf), [RBN 2017/04](https://biorow.com/index.php?route=information/news/news&news_id=17)).
* Handle velocity is derived using the horizontal oar angle and actual inboard ([RBN 2002/07](https://www.biorow.com/RBN_en_2002_files/2002RowBiomNews07.pdf))
* Work per Stroke ([RBN 2014/07](https://www.biorow.com/RBN_en_2014_files/2014RowBiomNews07.pdf)) rowing power measurements ([RBN 2014/03](https://www.biorow.com/RBN_en_2014_files/2014RowBiomNews03.pdf), [RBN 2018/09](https://biorow.com/index.php?route=information/news/news&news_id=34))
* Depth of the blade in the water ([RBN 2015/08](https://www.biorow.com/RBN_en_2015_files/2015RowBiomNews08.pdf))
* Effective angles ([RBN 2009/10](https://www.biorow.com/RBN_en_2009_files/2009RowBiomNews10.pdf))
* effective blade work ([RBN 2018/06](https://biorow.com/index.php?route=information/news/news&news_id=31) [RBN 2018/07](https://biorow.com/index.php?route=information/news/news&news_id=32) [RBN 2018/08](https://biorow.com/index.php?route=information/news/news&news_id=33)).
* [Oar bend (force) sensor (loadcell)](https://biorow.com/products/biorow_sensors/oar_bend_sensor) £320
* [Position-sensor](https://biorow.com/products/biorow_sensors/position_sensor) £380
* [Foot-stretcher force sensor](https://biorow.com/products/biorow_sensors/stretcher_force2) £1,200
[RBN info](http://www.biorow.com/RBN_en_2015_files/2015RowBiomNews02.pdf)
Biomechanics of Rowing: 2.5.3 Stretcher Force
* [3D Pin Force sensor (Instrumented C-bracket)](https://biorow.com/products/biorow_sensors/c_bracket) £1,500
#### DIY IMU
##### ORM on a raspberry pi
##### Holyiot nRF52840 USB Dongle
##### DIY nRF52840 implementing [Reefwing-AHRS](https://github.com/Reefwing-Software/Reefwing-AHRS) to provide reliable roll, pitch and yaw angles.
* [LSM9DS1](https://www.st.com/en/mems-and-sensors/lsm9ds1.html) 9-axis IMU [Reefwing-LSM9DS1](https://github.com/Reefwing-Software/Reefwing-LSM9DS1)
* [MPU6050](https://invensense.tdk.com/products/motion-tracking/6-axis/mpu-6050/) 6-axis IMU [Reefwing-MPU6050](https://github.com/Reefwing-Software/Reefwing-MPU6050)
* [MPU6500](https://invensense.tdk.com/products/motion-tracking/6-axis/mpu-6500/) 6-axis IMU [Reefwing-MPU6x00](https://github.com/Reefwing-Software/MPU6x00)
##### Beacon for handle, seat and trunk
| NRF chip | RAM | ROM | Notes |
|----------|----------|------------|-------------------------------------------------|
| 52810 | 24k | 192k | BARELY enough RAM for "broadcast only" function |
| 52820 | 32k | 256k | Untested, should work just as the 832 does |
| 52832 | 64/32 KB | 512/256 KB | Enough RAM for additional sensors |
| 52840 | 256 KB | 1 MB | Untested; probably overkill for this application|
See: [bthome-presence hardware](https://github.com/kquinsland/bthome-presence/blob/main/hardware/readme.md)
* 3x [holyiot 21014]() nRF52810 + lis2dh12 + RGB LED + button
* [holyiot 21014 zephyr project](https://github.com/danielstuart14/wlen_project/tree/master/beacon/boards/arm/holyiot_21014)
* [bthome-presence](https://github.com/kquinsland/bthome-presence/)
firmware for presence detection that "just works" with Home Assistant.
The firmware targets the cheap nrf52 based BT LE tags that are available on
Ali Express.
*
##### 3-axis load cell for foot spreader
##### load-cell for the seat
### Video
2D pose analysis using [OpenPose](https://github.com/CMU-Perceptual-Computing-Lab/openpose)
system to capture the skeletal joints of individuals, even in complex postures,
using a simple camera.
* [OpenPose](https://github.com/CMU-Perceptual-Computing-Lab/openpose)
Real-time multi-person keypoint detection library for body, face, hands, and
foot estimation, with [python api](https://cmu-perceptual-computing-lab.github.io/openpose/web/html/doc/md_doc_03_python_api.html)
* [OpenPose Video](https://www.youtube.com/watch?v=OgQLDEAjAZ8)
* Automatic Rowing Kinematic Analysis Using OpenPose and Dynamic Time Warping]
* [An introduction to Dynamic Time Warping](https://rtavenar.github.io/blog/dtw.html)
* [dtw-python](https://dynamictimewarping.github.io/py-api/html/index.html)
In order to apply the DTW algorithm, we first need to choose a reference or
desired rowing cycle. The paper above chooses to take the rowing cycle from a
known good rower, we want to take the rowing cycle from the Biomechanics of
Rowing book chapter 4: Technique.
[Intelligent Performance Evaluation in Rowing Sport Using a Graph-Matching Network](https://pmc.ncbi.nlm.nih.gov/articles/PMC10532480/)
This study aimed to develop a video-based approach to analyze the performance of
rowing poses of rowing pairs. To enable effective automatic comparison of rowing
poses, the OpenPose system was used to extract robust rowing pose features and
convert them into a graph structure. Subsequently, the GEM and GMN models were
utilized to analyze the similarities in rowing postures between each pair of rowers.
[Inaccurate Action Detection Algorithm for Rowing Machine Exercise Based on
Attention-CNN](https://ieeexplore.ieee.org/iel8/6287639/10380310/10638659.pdf)
Assessing the conformity of a rowers actions using [OpenPose](https://github.com/CMU-Perceptual-Computing-Lab/openpose)
, [1D CNN](https://www.mdpi.com/2076-3417/14/18/8500) and
[CoT](https://www.ibm.com/topics/chain-of-thoughts) to recognize
whether the movement is standard.
[1D Convolutional Neural Network Models for Human Activity Recognition](https://machinelearningmastery.com/cnn-models-for-human-activity-recognition-time-series-classification/)
Classifying sequences of accelerometer data recorded by specialized harnesses or
smart phones into known well-defined movements.
### [Rowsandall](https://analytics.rowsandall.com/) Rowsandall Rowing Data Analytics
For our Basic user, the website is Free. Within this package you get
* User defined heart rate and power zones
* Synchronization with Strava, SportTracks, Concept2 logbook, RunKeeper.
* Download CSV and TCX files.
* Session summary, Session Summary Chart and Pie Charts
* Flexible charting of time, distance, stroke rate, power, heart rate
* Interval editor
* Ranking piece pace predictor
With the Pro user: 15 € per year
* All basic features
* Flexible charting of drive length, force, work per stroke, and Empower Oarlock data
* Workout power histogram
* Compare workouts
* Data fusion (from different sources)
* Calculate correlations and other statistical analysis
* Weather information
* Stroke power histogram
#### blog articles
* [Rowsandall Manual](https://analytics.rowsandall.com/2022/04/12/training-planning-updated-manual-for-rowsandall-com/)
* [In-Stroke Metric Analysis Comparison](https://analytics.rowsandall.com/2022/10/29/in-stroke-metric-analysis-comparison/)
* [Force Curves and In-Stroke Analysis](https://analytics.rowsandall.com/2024/06/20/how-to-work-with-force-curves-and-in-stroke-analysis/)
* [Quantifying Training Intensity Distribution](https://analytics.rowsandall.com/2021/06/10/quantifying-training-intensity-distribution-new-tool/)
[RowingData](https://pypi.org/project/rowingdata/)
## Other projects
### [Rider ride data from TCX plotted](https://www.kaggle.com/code/runesh/rider-ride-data-from-tcx-file-plotted-on-a-graph) python notebook
### [dynrow](https://github.com/monsdar/dynrow)
Displays thorough statistics about your current workout. In addition to that
there should be a variety of bots available. Here are a few ideas:
* *Constant pace:* This is useful if you want to row in a certain tempo
* *Boomerang:* They're rowing at a constant pace, but if they get behind you
they will row faster. If they get too far in front, they'll decelerate to
let you keep up with them. They're almost like the constant pace boats, but
they'll always be around. This leads to having opponents around even at the
longest training sessions
* *Heartrate:* You set up your desired target heart rate and the bot will row
faster/slower according to your current heart rate
* *Ghostrider:* This bot replays a previously rowing session of yourself
* *Intervals:* Usually this bot runs on a constant pace, but it'll push the
tempo from time to time.
### Elevate
* [Elevate github](https://github.com/thomaschampagne/elevate)
* [Elevate docs](https://thomaschampagne.github.io/elevate-docs/)
* [More fun with Elevate](https://quantifiedrowing.com/2017/03/09/more-fun-with-stravastix/)
* [training impulse (TRIMP)](http://www.trainingimpulse.com/banisters-trimp-0)
* [TRIMP example in Elevate A Strava plugin deprecated](https://rowingmusings.wordpress.com/2017/02/04/stravistix-a-strava-plugin-which-can-help-with-rowing/) now a windows or mac app.
* Typescript as programming language.
* Angular as frontend (build with @angular/cli).
* Angular Material for material designed components.
* Metrics Graphics, Plotly & D3 for charting.
* LokiJS as in-memory NoSQL database persisted in IndexedDB.
* Jest as Javascript test runner (instead of "stock" karma one).
### Fitness Dashboard/[Fitness ECG](https://www.fitnesshrv.com/)
#### Fitness Dashboard
Fitness_Dashboard captures Ant+ and BLE data from power meters, heart rate
monitors, fitness trainers and various other [devices](https://www.fitnesshrv.com/2024/01/11/devices.html).
The data is displayed in two ways. First is a set of graphs showing various
statistics. Second a large display of the current values for the statistics
from each device being monitored. The intent is to provide the equivalent of
a cycling computer with a much larger and easier to read interface suitable
for using when training indoors.
Currently supported:
* Ant+ Device Profiles
* Heart Rate
* Bicycle Power
* Fitness Equipment (FE-C)
* Muscle Oxygen
* Bicycle Speed and Cadence
#### Fitness_ECG
Captures heart rate and ECG data from a Polar H10 heart rate monitor (proprietary
BLE service). This is displayed as an ECG trace and heart rate graph over time.
### Android
### [Quiske RowP App](https://www.rowingperformance.com/tutorial)
The Quiske pod also allows for dynamic rowing on machines such as a Concept2 on slides.
* [Quiske Manual](https://www.rowingperformance.com/blog/the-virtual-coach-evolved)
* [Quiske knows dynamic too](https://www.rowingperformance.com/blog/quiske-coach-knows-dynamic-too)
* [Making Sense of the Data](https://www.rowingperformance.com/blog/making-sense-of-the-data)
* [Technique](https://www.rowingperformance.com/blog/three-steps-to-good-rowing-technique)
Chapter 4 Technique
* [Drag](https://www.rowingperformance.com/blog/drag-factor)
Chapter 5.2.3 Handle Drag Factor HDF
* [Rowing Style](https://www.rowingperformance.com/blog/got-style)
Chapter 4.1.5 Rowing Styles
* [More Style](https://www.rowingperformance.com/blog/drill-into-style)
* [Stroke timing](https://www.rowingperformance.com/blog/stroke-timing)
Chapter 4.1.6 Transition point during the drive
* [Rhythm](https://www.rowingperformance.com/blog/what-s-your-rhythm)
* [Swing](https://www.rowingperformance.com/blog/how-s-your-swing)
* [Android 13 app](https://play.google.com/store/apps/details?id=com.quiske.rowingperformance&hl=en_GB)
* plus 'pod' (presumably an IMU)
* 430,00 € Pod for indoor rowing
* 99,00 € for cloud analytics subscription
* 50,00 € Report on your rowing technique
* 85,00 € Remote coaching
The phone is attached to the handle and the pod to the seat. The correct form
is derived from the difference in speed of the seat and handle in the various
stages of the stroke.
[For example](https://www.coachbergenroth.com/improve-your-rowing-with-the-quiske-pod/),
when I approach the catch, I could see that my handle speed and deceleration
was different from my seat deceleration. This data indicated to me that I was
not establishing my forward body angle early enough on the recovery.
### [EXR](https://play.google.com/store/apps/details?id=com.SaltyLemonEntertainment.EXR)
EXR | Row together Virtually Subscription: € 7,95/month
### [Coxwain](https://github.com/svenmeier/coxswain) [Android](https://play.google.com/store/apps/details?id=svenmeier.coxswain)
waterrower workout tracker,
* [Coxwain2fit](https://github.com/inonoob/Coxswain2Fit) Convert garmin TCX
export file from Coxswain android app (Waterrower) to a garmin FIT file.
## Requests
An "unlocked" PM would be such an amazing training tool.
* Everything that ErgData does, without crashing.
* Also average stroke rating could help a lot, especially on pieces where my
coach gives us punishments for not hitting our goal average stroke rate exactly.
* My only complaint with PM5 is that if you sync your HRM to it, you get your HR
from the end of the split not the average across it. Sort that and I'm all set.
The PM6 Super Plus:
* Improved screen resolution and size
* Larger more detailed power curve
* More data metrics on one screen:
* peak power %,
* watts + split at the same time,
* stroke length,
* average stroke rate data to the tenth of a stroke,
* current split to the tenth of a split
* Accurate average heart rate data - right now the resulting heart rate for a
piece seems closer to the final heart rate measured than the average for the
piece
* Ability to add a split distance by the push of a button (so if you do 1500m,
with 250m splits, you push a button and it adds that distance to your piece)
* Results graph that shows heart rate, stroke rate, split over the course of the
piece
* Front facing speakers
* Netflix + spotify
* LED backlit screen
* Full colour display
* Picture-in-picture or overlay (so you can have erg data plus another feed,
perhaps a TV stream or something nice to watch). A headphone jack/
bluetooth audio connection would be awesome too, with input either from
streams or a radio/TV receiver. It would also give the option of something
I've always wanted for training/coaching rate work - timing pips. Seriously,
like a metronome, but for rowing, would be absolutely incredible for keeping
focus / improving consistency.
* Touch screen, and a good one at that. Buttons are nice but this is 2018.
* WiFi / Mobile Data. Cables are also something which should be optional in all
but the most critical situation. Obviously, for stability sensitive things
like indoor rowing competitions in real-time, the Ethernet connection is
absolutely irreplaceable, but additional connectivity for more general use
would be an excellent feature.
* Use of the data connection to allow me to store my data on a cloud based
profile, great for shared ergs in clubs/gyms, just sign in and save/recall
all your metrics, bonus points if you can access it from other platforms
too for analysis. So much smoother and cleaner than a USB stick, much better
UX too.
* Buttons on the handle that control the PM6 and/or my music via bluetooth,
because sometimes I'm just not feeling a track. Hate myself for adding this
one but it would be cool as hell, plus great to be able to make changes
(e.g. add 1000m to a steady state piece) mid-row without breaking rhythm.
## Books
* Biomechanics of Rowing -- Valery Kleshnev -- Crowood
for people who want to measure numbers in rowing, relate them to technique
and give specific advice to coaches and rowers.
* CHAPTER 4 TECHNIQUE
combine with Automatic_Rowing_Kinematic_Analysis_Using_OpenPose_and_Dynamic_Time_Warping.pdf
* CHAPTER 5 ERGOMETER ROWING
* CHAPTER 7 PERFORMANCE ANALYSIS IN ROWING
* CHAPTER 8.1 EFFECT OF THE EXERCISE DURATION
* Rowing Faster - 2nd Edition -- Volker Nolte -- 2, 2011 -- Human Kinetics