BTHRM and running dynamics

Posted on
of 2
/ 2
  • I'm considering buying a chest heart rate monitor, like the H10, but there are also fancier options out there, like the garmin hrm pro ( ) that transmits "vertical oscillation, ground contact time, stride length, vertical ratio and more". If I can get the data out of it in the .gpx file through bthrm (or else), then I may consider this option. Ah, I would use the run+ app for that.
    Does it sound feasible ? What would it take to make it work ?

  • For those "smart features" is says "with compatible smart watch".
    I would guess the processing from Accelerator data to semantic features is done in watch, not chest.
    The H10 also has a accelerometer. I know from own experience that this is easy to get (did it with python program on PC, but should be pretty easy from bangle as well).
    Now the question is if and how the analysis can be done for the features you want.
    Stride time might be pretty simple, which could give stride length together with smoothed gps from bangle or phone, etc.

  • I think bthrm won't do this 'out of the box' but if the HRM provides any data (like accelerometer) as a bluetooth characteristic then you could pull that data out if you wrote the code to do it.

  • I'm sorry, I'm pretty ignorant about how it all works, but if I understand correctly what @Mi says : the accelerometer might be the only sensor needed to get all the other data that I'm interested in (ie. ground contact time, and also better cadence and speed measurements (the data from my bjs2 seems quite off, as in attachment: lots of microvariability in speed, extremely low cadence).

    If it is possible to get HRV out of these sensors, then I assume other data types should be possible to extract too.
    I actually don't need the watch to process the data, I just want it to make a .gpx file that contains the needed data. My plan is to process it in Golden Cheetah (FOSS) and hope it's gonna do the magic for me. I suspect the way to go, is to find someone that owns one of these fancy chest heart rate monitor and try to get it to spit its data out.

    1 Attachment

    • speed&cadence.png
  • the accelerometer might be the only sensor needed to get all the other data that I'm interested in

    Correct, but there needs to be software to convert the raw sensor signals to what you want. If that is done in the garmin watch, you cant use it for bangle. And if nobody writes that for H10 your out of luck also, even if all you need is implicit in the raw signal - but you need it explicit.

    To get a desired information its important what sensor, where placed and how processed.
    With the right sensor at the right place processing can be near trivial, otherwise difficult or impossible.
    For HR or HRV measuring electrical signals near the heart (what the chest belt does) gives very accurate and very easy to process signals and is not very sensitive to movement. In contrast Optical measurements at the wirst (PPG) is pretty difficult to interpret and very sensitive to movement. Which is why bthrm is much more reliable in principle, not only because of difference in software sophistication.
    Now to acceleration data. The more direct to the source of movement it is connected, the better the results, the simpler the software can be. I used to have a suunto footpod attached to the shoe. There foot contact is near trivial to detect and very precise, as would cyling frequency and the like have been. Compare in contrast the movement of your wrist, which is decoupled from the foot by a large number of joints, so to measure those things with bangle directly (which has ACC) would be at least very involved, maybe impossible.
    Chest is somewhere in the middle here, but if you are not a beginner and running/cycling smooth I guess your hip does a lot of decoupling.
    What does that mean? Golden Cheetah (great program, used it in the past together with TACX data) will not do the trick alone - except garmin does the calculations in the chest belt, possible but I doubt it, and sends the results in a documented format over BT characteristics, again possible but I doubt it.
    If you can find a documentation about what the garmin sensor does send over bluetooth characteristics or even better a github repository with example code, that would be great. Otherwise you probably need to assume you can't use those features, maybe not even have access to the raw ACC data as we know the H10 provides. You also can try to find a github with open source code to extract what you want from H10 data.
    If you have found one of those I can help to make it work together with bangle or Cheetah.

  • Reflecting a bit on my last post: there is the puck which has ACC. I think it should be pretty easy to replicate something like the suunto foot pod.
    So if you are willing to attach a puck to your running/cycling shoe, that still would need some programming, but of the simple sort.

  • The puck device on the shoe sounds really fun, but I think it's going to be concurrent to my bthrm (in terms of BLE) :/, right ?
    I'm going to hunt for a chest strap hrm with "running dynamics" that I can borrow, and hope it does the calculation onboard (even if it's unlikely).
    Thanks for all the extra explanations.

  • The puck device on the shoe sounds really fun, but I think it's going to be concurrent to my bthrm (in terms of BLE) :/, right ?

    I think it might work (?):

    • Bangle.js 2 now supports two central connections at once!

    Espruino 2v21 released

  • Yeeeah ! If @Gordon confirms it might be an option (to use the puck to analyse the gait), then I'll get a puck.
    But, before that, I'm gonna borrow a chest hrm with so called "running dynamics" and see what kind of data I can get out of it. I might need help with that, or maybe I'll figure it out.

  • Good, keep us up to date about your findings.

    Next idea: Another bangle (eg. if you have a bangle 1 laying around) strapped to the ankle could do the trick also instead of a puck. And there is already SW to record the ACC data for first tests.
    So for a very first test you could just use the bangle you have, strap it to the ankle, record ACC data with recorder ( don`t know what frequency is available and necessary. I guess you want at least 5-10 measurements per step) and visualize the result (if you are not a programmer, excel will do at first).
    I would assume the time of contact is very clearly visible and the acceleration in forward swing has a clear correlation to stride length - which could even be calculated pretty accurately with a biomechanical model (big word for simple thing given that only two 2d joints are really involved at any given time)

  • Yes, you could use Puck.js for this - but again it's probably something you'd have to write all the software for yourself. It's unlikely you'd be able to export all the accelerometer data to some magic app (especially at the Puck doesn't have enough memory to store a large period of high speed accelerometer data).

    Next idea: Another bangle strapped to the ankle could do the trick also instead of a puck

    I feel like that would be the ideal approach - the Bangle is also much better designed to deal with repeated water and vibration than the Puck.

    It feels like if you exported the accelerometer data you should see a pretty clear repeating pattern that you should then be able to write a simple algorithm to work off of (that could run on the

    I can't say it'd work for everyone, but if it works for your running style I imagine it'd keep working reliably.

    I should just add that stride length should actually be pretty obvious to work out from existing data (it's just distance travelled / steps), and could just be added as an update to the Recorder's downloader app in the app loader.

  • That's a shame, but I got lazy. Well, not exactly: it was too challenging for me, too many steps involved, without any clear view on how I would achieve most of these. So I went the lazy way: I bought a second hand Garmin. I won't use the Garmin app, I will just extract the .fit files from the watch and use them in Golden Cheetah, to keep privacy. I'll get all the data I want + quite a few perks (open water swims !). I'll still use the banglejs2 for most of my runs and for everydaylife. There's an after taste of renunciation :(.

  • A little update about all this. I bought a 2nd hand Garmin Fenix5, it's doing plenty of fancy stuff (which gave me app ideas), but not running dynamics. This only comes if using a compatible chest strap with an accelerometer. As a side note, the gps on the Garmin is a tiny bit more precise, but for 8 times the price of the Banglejs2...
    Anyway, I want to go on using the banglejs2 for running.
    I've found a github about the polar h10 which mentions : " H10 features available by the SDK : [...] Accelerometer data with sample rates of 25Hz, 50Hz, 100Hz and 200Hz and range of 2G, 4G and 8G. Axis specific acceleration data in mG.".
    So the H10 doesn't calculate on board, but it seems to broadcast the accelerometer's data (If I understand this right). I've asked the technical support of Garmin about their chest straps, but it's likely gonna be the same.
    So I will probably need guidance for the next steps, and patience, as I have virtually no time for this at the moment. Still, I'm gonna do a few 50 meters runs at different speeds in different terrains with the banglejs2 tightly attached to the laces of my shoe and record with the "Acceleration Logger" app, look at the data and see if I can make something out of it. The "simple algorithm" might be something way too abstract for me. We'll see.

  • Time is also limited here, but I certainly can give you some guidance.
    I did use the H10 SDK in the past. It was very easy to get acceleration, HR, ECG.
    More advanced features I did not get to work in limited time although that should also be doable.
    Eg. start/stop/download the internal memory which can record some 24h HR on its own without smartphone. (Anyone has JS or python code for that? I would be interested)

    I will just extract the .fit files from the watch and use them in Golden Cheetah, to keep privacy

    Did you manage to do that? Get the interesting information out of garmin watch without cloud?
    I gave up on suunto watches because that was not possible anymore at the time.

    but not running dynamics. This only comes if using a compatible chest strap with an accelerometer

    Do you have such a compatible chest strap? Then you can wear garmin in your experiments and produce a fit file as "ground truth" reference for the information you finally want to extract from the bangle sensor. Such reference helps a lot in development.

  • @Mi

    • That's a good suggestion to use the Garmin as a reference. I don't have the "compatible chest strap" yet. I'm going to hunt for a 2nd hand Polar H10, as it seems it's going to provide the needed data, but if someone has other suggestions, I'm all ears.
    • Most Garmin watches can be plugged with a cable (usb-c or else) and then accessed like a mounted drive. I grabbed .fit files from the Fenix5 and also from a forerunner 235, really easy, no cloud needed, no softwares to install.
  • Polar H10, as it seems it's going to provide the needed data, but if someone has other suggestions, I'm all ears.

    I do use the H10 all the time and can really recommend it. Works with bangle and "Bluetooth heart rate monitor" out of the box for HR much more reliable than the optical sensor in bangle.
    As said I got acceleration and also a very good Electrocardiogram (much more detailed heart information) via python and it should not be difficult to get this into bangle since it is broadcast in the same as HR or HRV (there is also an app for HRV) after initialization.

  • I grabbed .fit files from the Fenix5 and also from a forerunner 235, really easy, no cloud needed, no softwares to install.

    Very interesting. Thanks for the information.
    Maybe I try to get one of those second hand also. Will check their capabilities.

  • And one more thought: don't hold yourself back if you not have a chest belt yet.
    There is a good chance the data is so clear with bangle close to foot that no reference is needed anyway.

  • Not gonna try to play with the watch on my foot, a Polar H10 is on its way \o/.

  • I have the Polar H10 ! It has an accelerometer ! It's not being used for running dynamics at all, by any watch !! I've checked Polar websites, Youtube and whatever, and Polar watches don't do running dynamics. I have a Garmin watch that uses Running dynamics, but it won't get the accelerometer data (or not compatible) from the H10, so nothing out of this accelerometer yet. It baffles me that this accelerometer is just sitting there for no purpose. I'm gonna try to do something with it while I have it, but in the future, I will sell the H10 to get a Garmin Run Chest strap.
    Did anyone try a Garmin chest strap with a Banglejs ? I didn't see it in the list of working devices with the bthrm app (even though it should, theoretically, work).

  • Do you have an Android device? Try "Polar Sensor Logger"!.
    As far as I know not an official app, but one written by a polar employee privately.
    Its an easy small app that connects with the H10,

    • can show all incoming sensor data graphically (HR, ECG, Acc)
    • can record that data
    • write the recording to a text file (that you can analyse, probably even with excel)
  • Thanks @Mi. I'll check it.

  • I have the TICKR X 2 which should deliver accelerometer data as well, but as of now I did get nothing out of it with neither Bangle nor NRF Connect app. Might be some hidden/proprietary BLE service.

  • I just tried the nRF Toolbox for bluetooth LE. I was able to get HR, but nothing else.
    On the other hand, I tried @Mi 's suggestion, and I was able to see all data out of it : HR, HRV and Acc (accelerometer). The app crashed several times, but I have recorded files. The ACC and ECG files are in .txt format as can be seen in the attached doc. The sampling rate, resolution and range (see screnshots) mean nothing to me :/. The Acc data look like it's taken every 0.04 seconds.

    3 Attachments

  • 0.04 seconds per sample matches 25 samples per seconds, so that probably would be the "Sampling rate" setting.
    Range might be maximum measurable values, maybe with a tradeoff with regard to precision for the higher values.

  • Post a reply
    • Bold
    • Italics
    • Link
    • Image
    • List
    • Quote
    • code
    • Preview

BTHRM and running dynamics

Posted by Avatar for Fteacher @Fteacher