Fortius ANTUser Manual
Fortius ANTUser Manual
User Manual
Contents
1. Introduction ............................................................................................................. 5
1.1 Summary ......................................................................................................................................... 5
1.2 Thanks ............................................................................................................................................ 5
1.3 The structure of this manual ........................................................................................................... 6
1.4 The story in a picture:...................................................................................................................... 6
1.5 References, abbreviations, and terminology .................................................................................. 7
1.6 Revision History .............................................................................................................................. 8
2. Background information ........................................................................................ 10
2.1 FortiusAnt Sensor- and Monitor devices .......................................................................................10
2.2 Description ....................................................................................................................................13
2.2.1 Resistance .............................................................................................................................13
2.2.2 Power- or Ergo-mode ............................................................................................................13
2.2.3 Resistance mode ...................................................................................................................13
2.3 Tacx trainers .................................................................................................................................14
2.3.1 Tacx Catalogue 2012 .............................................................................................................14
2.3.2 General ..................................................................................................................................14
2.3.3 Tacx proprietary ANT trainers................................................................................................15
2.4 Bluetooth Low-Energy (BLE) ........................................................................................................16
2.4.1 Introduction ............................................................................................................................16
2.4.2 Design (node.js) .....................................................................................................................16
2.4.3 Design (bless) ........................................................................................................................17
2.5 Calculations ...................................................................................................................................18
2.5.1 Power mode ...........................................................................................................................18
2.5.2 Grade mode ...........................................................................................................................18
2.6 Tacx Trainer Power ranges. ..........................................................................................................19
3. Installation instructions ......................................................................................... 20
3.1 Introduction ...................................................................................................................................20
3.2 Requirements ................................................................................................................................20
3.2.1 You, the Tacx Athlete ............................................................................................................20
3.2.2 Access rights and firewall ......................................................................................................20
3.2.3 ANT+ or Bluetooth Low Energy? ...........................................................................................20
3.2.4 Hardware ...............................................................................................................................21
3.3 Windows – QuickStart, using executable version. ........................................................................21
3.4 Download FortiusAnt from github..................................................................................................22
3.5 Install Python .................................................................................................................................22
3.6 Install USB-driver ..........................................................................................................................23
3.6.1 Windows – prepackaged drivers............................................................................................23
3.6.2 Windows – from libusb ...........................................................................................................23
1. Introduction
1.1 Summary
Tacx created trainers and provided software (Tacx Training Software, TTS) to enable users to do
structured training or ride in a virtual world. Trainer and TTS were sold in a package and the interface was
not available to other manufacturers.
Based upon these initial products, open standards were defined. ANT+ defines how CTP’s (Cycling
Training Programs) and FE-C’s (Controllable Fitness Equipment) communicate with each other. This
open standard enables that software (CTP) and hardware (FE-C) can be created by different
manufacturers.
Known CTP’s are Zwift, Trainer Road, Rouvy, Sufferfest, Golden Cheetah, Road Grand Tour, BigRingVR,
TTS and many others. Programs have their own specialty domain: Zwift provides the possibility to train
together in a virtual world, Trainer Road has structured training programs and Rouvy allows to ride in
augmented reality – and of course each product also provides functionality in the competitive arena.
Trainers are provided by hardware manufacturers, like Tacx, Wahoo, Elite and others. The open ANT+
standard allows the CTP’s to communicate with FE-C’s.
BUT: old Tacx trainers (without inbuilt ANT+ or Bluetooth) have been left behind – the proprietary Tacx-
interface is not supported by the modern CTP’s and we understand that the current version of TTS does
not support the old trainers anymore.
This is where FortiusAnt comes in: FortiusAnt enables users of old Tacx Trainers (like Fortius,
Magic, Flow, Vortex (earlier non-Smart version), Bushido, Genius and others) to use the latest
Cycling Training Programs, [CTP] (like Zwift, Trainer Road, Rouvy, Sufferfest, Golden Cheetah,
Road Grand Tour, BigRingVR, TTS and many others as mentioned above). Important: only one
computer (laptop, desktop or Raspberry Pi) is required to run FortiusAnt and a [CTP].
1.2 Thanks
FortiusAnt is based upon the methods and architecture from [Antifier] and uses the interface description
from [TotalReverse] and without their work, FortiusAnt would not have existed. The same is true for
Golden Cheetah for i-Magic's resistance formulas.
Thanks to @darkpotpot and @iepuzaur for testing the i-Vortex, @yegorvin for testing the iMagic power
curve, @ElDonad for cracking the CYCPLUS dongle issue and @mattipee for enthusiasm on
programming, correctness and testing as well as valuable github- and vsc-lessons. Thanks to
@switchabl, @cyclingflow, @bikebeppe64, @mikeherriman, @mk2mark and @jurgen-iflow for
developing and testing the Flow/Magic trainer on T1932, @cyclingflow for parameterizing the runoff
procedure and @MarcoVeeneman for the Bluetooth support and steering. 2021 starts with the release of
Bushido and Genius support, thanks to the efforts of @switchabl, who also added Blacktrack steering.
And in 2021 @martin-vi, @wtal710174, @decodais and @Meanhat joined in making the Raspberry Pi
accessible for all. And of course many
thanks to all who have reacted and added
to FortiusAnt improvements.
If you use FortiusAnt, let me know and add
yourself to the map!
FortiusAnt has matured in the 2020's
corona virus era and continues to expand
in 2021 with ANT+ and Bluetooth support.
2022 continuous with bless and steering
support. It shows where github code-
sharing and joint effort can bring us; a new
and inspiring experience for myself.
If you use FortiusAnt, let me know and you add stars on the map! See github issue #14.
2. Background information
2.2 Description
A [CTP] (Cycling Training Program) send commands to the [FE-C] (Controllable Fitness Equipment)
through [ANT+] (or [BLE]). There are two modes: Power- or ERG-mode and Resistance- or Slope-mode.
2.2.1 Resistance
It is important to understand that an [FE-C] only understands 'resistance' which is the torque required to
turn the brake/motor-brake. From physics we know that power (Watt) is proportional to torque (Nm) *
rotationalspeed (rpm). For a given resistance, the power required is linear with the speed (=cadence),
provided you do not change gears. Also, for a given resistance and cadence, the power required is linear
with the gear-ratio.
PS. This is especially valid for the older trainers; Tacx i-Vortex (T1960/T1961) can be set natively to a
defined Power. (Note that there are also Vortex Smart Trainers, such as T2180).
Ergo trainers Use a brake that can be adjusted from a head unit.
Bushido Electro brake without motor for descents; wireless -t Bushido
i-Vortex Electro brake with 8 electromagnets; wireless -t Vortex
Vortex Electro brake with 8 electromagnets USB
Flow Electro brake with 6 electromagnets USB
Magic Electro brake with 6 electromagnets (legacy head unit) USB
Virtual reality trainers Genius MP Motor brake (driven for descents); wireless -t Genius
MP=Multiplayer
Fortius MP Motor brake (driven for descents) USB
Flow MP Electro brake with 6 electromagnets USB
Ergo trainers were standalone trainers and MultiPlayer trainers were sold with a software package to be
installed on a PC (ANT-dongle where required). Ergo could be upgraded to MultiPlayer. Hardware-wise
there is no difference.
2.3.2 General
We already saw in the previous section that Tacx has created a large variety of trainers with commercial
names like Magic, Flow, Fortius, Vortex, Bushido, Genius, with or without i-. Technically, you will find
three numbers: one for the configuration, one for the head unit, one for the brake and then for other
optional equipment parts (such as the steering unit). For more information see [TotalReverse], “Tacx
product number overview” where the T-numbers describe the part they represent.
FortiusAnt is developed for the configuration I own: a T1930 Tacx Fortius Multiplayer bundle with T1941
brake, T1932 PC-head unit and T1905 steering unit. Then FortiusAnt is extended with support for the
other models. This explains the name of the product.
FortiusAnt converts the USB-interface to an ANT+ or BLE interface. In this USB-mode, FortiusAnt only
“knows” the head unit, not what “commercial name” is used. The head unit comes in two flavors: T1902
head unit (the so-called USB legacy interface) and all other USB head units. FortiusAnt also knows the
type of brake used: magnetic or motor and adjusts automatically to the required characteristics.
Bundle Brake Head unit Remarks
T1930 Tacx Fortius T1941 Motor T1932 USB interface tested, see 6.2
T1900 Tacx i-Magic T1901 Magnetic T1902 Legacy USB interface tested, see 6.3
T2250 Tacx Flow T1901 Magnetic T1932 Magnetic Brake interface tested, see
6.4. Issues: #102 #128 #143 #153
When directed to do so (using the -t flag), FortiusAnt does not look for a USB-trainer, but tries to pair with
a proprietary ANT+ Tacx trainer. FortiusAnt then communicates with the brake and optionally with the
head unit. Compatibility between Tacx trainers and head units can be found in the product overview
referenced above.
FortiusAnt supports the following trainers, connecting to the USB head unit:
• Head unit T1902: Old "solid green" iMagic head unit (with or without firmware)
This head unit uses a so-called legacy-USB protocol, the others the New-USB-protocol.
• Head unit T1904: New "white, green" iMagic head unit (firmware inside)
• Head unit T1932: New "white, blue" Fortius head unit (firmware inside)
• Head unit T1942: Old "solid blue" Fortius (firmware inside)
• Head unit 0xe6be: Old "solid blue" Fortius (without firmware)
This head unit requires software to be loaded when FortiusAnt is started.
See also section 5.8 “Tacx head unit with firmware to be loaded”.
FortiusAnt supports the following trainers (-t flag), connecting to an ANT+ brake:
• -t Vortex: T1961 brake and T2172 head unit are supported (see issue #46) (not to be confused
with the T2180 Vortex Smart Trainer)
• -t Bushido: Head unit T1982 is required (see issue #117)
• -t Genius: Head unit T2020 is optional (see issue #101)
2.4.1 Introduction
ANT+ is designed as low-energy protocol so that sensors can communicate with a sports-watch.
“Bluetooth Low Energy” [BLE] can simply be seen as an alternative protocol. Many smartphones support
BLE but not ANT and ANT-dongles are often hard to find and tend to be more expensive than BLE-
dongles. Sensors (power-meters and FE-C’s) tend to support both protocols and therefore there are
many reasons to use Bluetooth Low Energy.
Initially, there was no direct connection available between FortiusAnt and an installed BLEdongle; and a
Node.js server is required to make the connection. This is activated with “-b”.
In 2022 the bless library came available, and node.js is no longer needed. This is activated with “-bb”.
FortiusANT was originally designed to provide an ANT+ interface to a Tacx Fortius. This requires the user
to use ANT+ dongles in order to connect to applications such as Zwift, Trainer Road, Rouvy, Sufferfest,
Golden Cheetah, Road Grand Tour, BigRingVR, TTS and many others.
At the request of several users of FortiusANT support for BLE (Bluetooth Low Energy) has been added.
When using the BLE interface the ANT+ dongle is not required anymore so long as you have supported
BLE hardware.
If you have a tacx-proprietary ANT trainer (Bushido, Genius, Vortex), want to pair with an ANT+ heartrate
monitor or transmit power data to a Garmin Edge (power- or speed/cadence sensor) then the ANT-dongle
is still required.
Communication between FortiusANT and the BLE server happens internally via a local http server where
FortiusANT acts as the client and the BLE server as the server.
2.5 Calculations
Where the Tacx trainers were used for Ergo-training, this was not a problem. The requested power was
adjusted on the head unit, the speed realized with the bike and the two factors (speed and power) were
not related.
In Virtual Reality (e.g., using Zwift or Rouvy), there is an issue however:
• If you ride uphill 10% at 10km/hr, 250Watt is required. (see graph on previous page)
• But Tacx Fortius cannot realize a required power of 250Watt at that wheel-speed!
Tacx Fortius will not run smooth and does not provide an optimal experience. As rider you have no
options here:
• If you change gears to a lighter ratio, the speed will go down and the issue will get worse.
• If you ride faster to increase wheel-speed, perhaps the Tacx Fortius will get into a more workable
range – but also the required power goes up (you need 380 Watts at 15km/hr)
Conclusion: With a calculated relation between Grade and Wheel-speed, at 10 km/hr and max
100 Watts, Tacx Fortius can do a slope of max 4%.
FortiusAnt provides the following solutions for this issue:
• Use the -G50 option; when a CTP requires 10%, a slope of 5% is used for the required power
calculation. This is a static setting, however. (see 4.2 “Command line”)
• Use the digital gearbox: use the head unit to “change gears” (changing ratio); where the default is
50*19 and you change to 34*19, a slope of 10% is reduced to 7%. (see 4.1.6 “Buttons on the
Tacx head unit”).
The different brakes have different characteristics, the story remains the same: try to ride at a high wheel-
speed and reduce required power using the “digital gearbox”. Fortius will adjust the displayed speed
accordingly.
Note that CTP’s in GradeMode, usually calculate the speed from the Grade/Power, using an inversed
calculation as used in the previous section. Their speed will differ from the displayed speed in FortiusAnt.
3. Installation instructions
3.1 Introduction
FortiusAnt is written in [Python] and can be run on any computer for which a Python runtime environment
exists. For Windows, FortiusAnt is also available as an executable, containing the Python runtime
environment. Windows users can therefore decide which version to use. Implementation on a Raspberry
Pi is shown separately in 3.12.
FortiusAnt communicates with the Tacx Trainer through a USB-interface, which needs some special care.
And in the other direction, FortiusAnt communicates with a [CTP] using an ANTdongle or BLE.
3.2 Requirements
3.2.4 Hardware
Before installing, decide what hardware you want to use:
Tacx trainer Hardware Connections Software Description
USB 1a - Tacx Trainer FortiusAnt communicates
FortiusAnt
1 One computer 1) USB 1b - ANT dongle 1 with Tacx Trainer (USB 1a) and
USB 1c - ANT dongle 2 [CTP] with [CTP] (USB 1b ↔ USB 1c)
3. Install the USB drivers (only if your Execute libusb-win32_T19xx.exe as Administrator, click
Tacx trainer has a USB-head unit) "Next" and then "Finish".
4. Insert the ANT-dongle in a USB- Install the drivers as requested by the ANT dongle
port
5. If you want to use Bluetooth LE Follow the procedure as described in section 3.8.
6. Start FortiusAnt Double-click FortiusAnt.exe
FortiusAnt is now ready for use; proceed with section 3.9 “Start FortiusAnt”.
More detailed installation instructions are in the next sections. But you can choose to skip them.
Now the USB-trainer is installed as "VR-Interface" (you could have chosen for "Fortius Virtual Trainer").
Technically, it is the same as option 1, but especially if you have two ANT sticks and one Tacx Trainer a
named device is clearer. The names will only show up in Device Manager and ExplorANT and have little
significance for the end-user.
3.6.3 MacOS
Hints:
• libusb can be installed using brew install libusb.
• Get brew if you don't have it already: https://brew.sh/.
sudo apt install make gcc libgtk-3-dev libgstreamer-gl1.0-0 freeglut3 freeglut3-dev python3-
gst-1.0 libglib2.0-dev ubuntu-restricted-extras libgstreamer-plugins-base1.0-dev ubuntu-dev-
tools
• Insert the Bluetooth dongle and replace the driver for your Bluetooth dongle using Zadig.
Note that you cannot use the Bluetooth dongle for Windows itself when you perform this step.
Using the exact same steps as mentioned below you can restore the old driver if you want.
1. Start Zadig
2. Select options, list all devices
3. Select the Bluetooth dongle; double-check that the correct driver is chosen.
Note: It may be difficult to know which device is the correct BLE dongle in case your
machine also has BLE on-board. Disable the on-board BLE device before inserting the
BLE dongle so Zadig will see only one.
4. Remember the current driver, in case you want to restore the driver later on.
5. Check that WinUSB driver is set as target driver, this should be the default. (Choose the
old driver when reverting)
6. press Replace Driver.
7. NOTE: the procedure above may/must be redone when the BLE-dongle is moved to
another port! So if no connection can be made, check that the device-driver is replaced.
• Install dependencies
1. Start the Windows command prompt and type: cmd <enter>
2. Go to the FortiusANT folder and type: cd <the FortiusANT folder>\node <enter>
3. Install node.js and type: npm install <enter>
Just for the fun of knowing where you all are training,
put yourself on the FortiusANT map by making yourself known
by leaving a message with name/location/trainer on
https://github.com/WouterJD/FortiusANT/issues/14
When the GUI is shown you know that FortiusAnt is installed correctly.
• Led Tacx + ANT + BLE + Cadence blink together when FortiusAnt is waiting for a pedal-kick
to start calibrating.
• Led Tacx + ANT + BLE blink together when FortiusAnt is calibrating.
3.12 Raspberry Pi
Many of us are familiar with Windows and Apple devices and the installation instructions are described in
the previous sections. www.raspberrypi.org explains that:
The Raspberry Pi is a low cost, credit-card sized computer that
plugs into a computer monitor or TV and uses a standard
keyboard and mouse. It is a capable little device that enables
people of all ages to explore computing and to learn how to
program in languages like Python. It’s capable of doing
everything you’d expect a desktop computer to do, from
browsing the internet and playing high-definition video, to
making spreadsheets, word-processing, and playing games.
What’s more … it can run FortiusAnt!
Instead of adding (two) ANT-dongles to run a CTP on a computer (which ties that computer to running
FortiusAnt), a Raspberry Pi can be used instead with one ANT dongle or built-in Bluetooth and then the
CTP can be run from a smartphone or tablet. If required, the smartphone can then be connected to or
cast to a TV or Monitor.
This section explains how to order and install a Raspberry.
This section is made possible by @martin-vi and @wtal710174 for the detailed installation instructions
and @switchabl for the valuable suggestions, @decodais for programming the LEDs and the feedback
from @MeanHat.
Notes:
- FortiusAnt also runs on Raspberry Pi 0 W (@Meanhat) and Raspberry Pi3 (@Decodais)!
- It may be convenient to buy a so-called starters-kit, especially because it helps you during the
ordering process.
- PI4 is today’s standard and can be bought for the same price as PI3.
- When running FortiusAnt only, 1Gb memory is (more than) enough. I have bought 4Gb for two
reasons: it enables future usage (for other purposes) and less memory was not available. Task
manager reports a memory usage of 200Mb
- 8Gb disk (SD card) is enough, take the fastest available you can afford. I have taken 32Gb to enable
future use as well.
- You can order the disk with or without operating system, it may be comfortable to order with
Raspbian already installed. (see also next section).
- The 3A power supply is also to be prepared for future expansion.
- On Pi4 Cooling is recommended. If you do mind the noise add a circuit to switch on/off and enable
switched fan in settings.
- I use a micro-HMDI to VGA cable because I had such a monitor available; the Raspberry Pi has
micro-HDMI connectors so select a cable that is suitable for you.
Terminal
Some system-settings must be changed. Select
“Raspberry Pi Configuration” as shown aside:
• Led Tacx + Shutdown light faintly during Raspberry startup, until FortiusAnt is started.
This is the default behavior of the used ports (pull up). The other LEDs are off (default pull down).
Usage of the BUTTON
As you have seen earlier, a Raspberry Pi does not have a power-button. Before pulling the plug, you
have to shutdown the system. The question is how to do that if no monitor is attached.
While FortiusAnt is running, press the button. The Shutdown Led will blink 5 times and then all LEDs will
blink one by one. If you keep the button pressed, then FortiusAnt will light all LEDs, close down normally
and shutdown the Raspberry.
Because all the LEDs go off you can see that the procedure is completed and you can disconnect the
power.
Whenever the power is disconnected you can (re)start the Raspberry Pi with the same button.
Raspberry Pi 4
Starting off with a
standard Raspberry Pi 4
casing …
Some marking on the
removable front
and soldering the leds
4. Operating instructions
4.1.1 Settings
From version 5.1 onwards settings can also be modified interactively by clicking
the “settings” button above “Locate HW”. This button is enabled when FortiusAnt
is not active.
See section 4.3 “Modify settings” for more info.
4.1.2 Locate HW
Checks for the presence of USB-trainer and ANT-dongle or Bluetooth. If successful, results are displayed,
and the button is disabled. For more info read section 4.4 ”Locate HW”. Note that, when successful,
FortiusAnt is not yet discoverable by a [CTP]; see section 4.1.4 Start.
4.1.4 Start
FortiusAnt starts to calibrate the trainer (if supported by the trainer and -n is not specified). Calibration
means that the brake rotates the wheel at 20 km/hr and returns the resistance found. As soon as the
resistance is constant, the calibration stops. The calibration time is at least 30 seconds (warming up the
tire) and stops when the resistance value is constant.
Note that the calibration starts when you turn the pedal as if starting to cycle, which is the only physical
action to take. Note that, starting the motor automatically would be a risk for physical injury, therefore the
confirmation with a pedal-kick is required.
When calibration is started, do not pedal, the process completes automatically.
After calibration, the Fortius is ready for training and will listen to the [FE] (Tacx USB-trainer) and [CTP]
and exchange info between them. Also, information is received from [HRM] and [CTRL] and information
is broadcast as [PWR] and [SCS].
4.1.5 Stop
Pressing this button stops any running process (runoff, calibration or operational mode).
• Note that Manual power and manual grade mode are intended for test-purposes, while homeTrainer
mode is intended to be used for exercising.
• In resistance and ERG mode, Up/Down and Cancel modify the resistance
of the Fortius using the virtual gear; Up/Down controls the cassette and
Cancel the front gear. OK * resets the resistance to the initial value of
100%. The standard transmission = double 50-34 x 11 speed 11-34. The
virtual gear is displayed to represent the reduction.
* Tacx has a variety of trainers with different head units and not all head-units
have an OKbutton.
Advanced arguments:
-A Pedal Stroke Analysis.
-B value ANT DeviceNumber range Base, making multiple FortiusAnt sessions unique, which is
useful if you have multiple FortiusAnt sessions simultaneously in the same room.
-D value Select one specific antDongle (perhaps with a non-standard deviceID). The following
types are known: 4104 = Suunto, 4105 = Garmin, 4100 = Older. -1 means: no ANT.
-H value Pair this Heart Rate Monitor (0: any, -1: none). Tacx HRM is used if not specified.
FortiusAnt -a -g will use Tacx heartrate monitor (analog HRM paired to Tacx)
ánd transmit the heartrate as ANT+HRM device
FortiusAnt -a -g -H-1 no HRM is used at all
FortiusAnt -a -g -H0 FortiusAnt will pair with first ANT+ HRM found
FortiusAnt -a -g -H1234 FortiusAnt will pair with ANT+ HRM with ID=1234
-m Run manual power (ignore target from ANT+ Dongle).
-M Run manual grade (ignore target from ANT+ Dongle).
When -m or -M is specified, a .tcx file will be created for every exercise.
-n No calibration (do not calibrate before start).
-P Power mode has preference over Resistance mode (for 30 seconds).
Run Zwift or Rouvy to ride a route, the target is transmitted as a grade and you see
where you ride. In parallel, run Trainer Road (TR) to do a structured training and the
target is transmitted as power. FortiusAnt “listens” to TR and transmits power and
cadence to both. Now you can do a structured TR-training in the virtual world of Zwift or
Rouvy.
-R value The runoff procedure can be customized: maxSpeed/dip/minSpeed/targetTime/power.
Refer to 4.1.3 ”Runoff test”.
-S value If a tacx steering unit is used, specify “-S wired” since the steering angle is communicated
though the wired USB-interface.
If a blacktrack steering unit is used, specify “-S Blacktrack” since that device
communicates through the ANT-protocol.
-T value Transmission, default value = 34-50*x34-30-27-25-23-21-19*-17-15-13-11
-x Export TCX file to upload into Strava, Sporttracks, Training peaks.
-x is implicit in manual (grade) mode.
Developer arguments:
-d value Create logfile with debugging data (see section 4.7 “Debugging FortiusAnt”).
Value is a binary flag list that defines what to write to the logfile where 0=nothing and
65535=everything. The values below can be added together, 0 = No logfile, 1 =
Application, 2 = Function, etcetera. The numeric values are listed below for reference;
most likely the numeric option will no longer be used.
All settings are described in the previous section but please note the following:
• All settings can be saved in a JSON-file, which is stored in “the current directory”.
• “The current directory” is the directory that is active when the .py or .exe file is started.
• Settings marked with *) will cause a restart of FortiusAnt after clicking the OK button. The restart
will be done automatically.
• The restart can be suppressed by de-selecting the appropriate checkbox above the OK-button,
but then only the options that are not marked with *) are in effect. The marked options will be in
effect during the following session if saved to the JSON file.
The precedence of settings is: (1) JSON file; (2) command line; (3) default values.
The reason for the latter is that, if you change the settings, save in the JSON-file and execute the same
command, the settings in the JSON-file are used.
Recommendations:
• if you use a JSON-file do not use command-line options.
• If you want to use a command-line then, note that the JSON-file takes precedence.
Because of the variety of systems used (Windows, Linux, Raspberry, …) no special rules are (yet)
defined for system-standard locations of a JSON-file.
4.4 Locate HW
When the “Locate HW” button is pressed the following happens:
Find ANT+ dongle
A check is done whether an ANT+ device with DeviceID 4100, 4104 or 4105 is found. If found, an attempt
is made to use the dongle; if in use another dongle will be searched for.
FortiusAnt always needs an ANT-dongle, unless -m or -M is specified in that case you can set power or
slope with the trainer’s head unit buttons.
The following messages can be displayed:”
No (free) ANT-dongle found
Using <manufacturer> dongle
or messages indicating what interface-error occurred.
Find Tacx Trainer
Then a check is done whether a Tacx device is used with one of the DeviceID’s as listed in section 2.3
“Tacx trainers”.
The following messages can be displayed:”
No Tacx trainer found
Connected to Tacx Trainer T<DeviceID>
or messages indicating what interface-error occurred.
Note that, when the -s command-line parameter is specified, the following message is displayed:
Simulated Tacx Trainer to test ANT-interface
Note that, when the -t i-Vortex command-line parameter is specified, the following messages are
displayed:
Pair with Tacx i-Vortex and Head unit (pairing can take a minute)
Tacx i-Vortex paired: %s, Head unit: %s
Heartrate monitor
Old Tacx trainers paired with a heartrate monitor (HRM) and passed the heartrate through the USB-
interface to [TTS]. Even though this option is supported on the [FE-C] ANT+ interface, it is not used by
[CTP] since this software pairs with a HRM itself.
The FortiusAnt display shows the heartrate and therefore the following options exist:
• No command-line option: use the heartrate from the Tacx trainer
• -H0: pair with an ANT+ HRM, use the first HRM that is found
• -Hnnnnn: pair with the ANT+ HRM with DeviceID=nnnnn
• -H-1: no HRM.
The following messages can be displayed:”
Heartrate expected from Tacx Trainer
Heartrate expected from ANT+ HRM
Heart Rate Monitor paired: <DeviceID>
This display means that, the [CTP] requires 345Watts, which results in a resistance of 2345.
The athlete currently cycles at 89 revs/minute, resulting in 123Watts at a wheel speed of 34.5 km/hr.
The cycling athlete can modify the requested grade ( power and resistance) using the virtual gearbox;
up/down changes the rear gear and the cancel button changes the front gear.
(Note that all figures in this graphic are fictitious and do not represent actual training).
The elements on the screen are explained in detail in section 3.9 “Start FortiusAnt”.
In addition to the standard display, under the power gauge (11) the actual power (99W), the requested
power (100W) and the resistance set in the trainer (2345) are displayed.
This display means that, the [CTP] requires a slope of 8% which (using speed and user/bike weight)
results in a requested power of 345Watt and a resistance of 2345.
The athlete currently cycles at 89 revs/minute, resulting in 123Watts with a wheel speed of 34.5 km/hr.
The cycling athlete can modify the requested grade ( power and resistance) using the virtual gearbox;
up/down change the rear gear and the cancel button changes the front gear.
(Note that all figures in this graphic are fictitious and do not represent actual training).
The elements on the screen are explained in detail in section 3.9 “Start FortiusAnt”.
In addition to the standard display, under the power gauge (11) the actual power (257W), the requested
grade (0%) and resulting required power (274W) and the resistance set in the trainer (2345) are
displayed.
Here you also see the “digital gearbox”. In addition to the gears on you bicycle imagine you have a
second drive train with a 15x15 ratio. So, the displayed situation is neutral. When you press Up/down the
ratio is changed with ±10%, increasing or decreasing the required resistance on the bike. The digital
gearbox shows the number of teeth on your digital cassette.
If your [CTP] requires you to ride uphill with a slope of +10% and you have a high wheel-speed (because
that is how the Fortius works well: see section 5.1 “Low cadence on Fortius”) you would need a high
power. If that required power is higher than you can produce, you can reduce the required power using
the down-button without reducing speed. If you are using Zwift you will see that the difference in the
speed shown in Zwift (based upon power) and the speed displayed by FortiusAnt will increase.
The digital gearbox is not active in power-mode because if 100W is required you have to produce 100W.
At a high wheel speed, the resistance is already calculated accordingly.
Thanks to Erik OT for the magnificent suggestion!
using changes between 17 and 21 teeth on the rear cassette. This is adjusted using the '-T34-50x30-27-
25-23-21-20-19-18-17-15-13' option.
Details of the shortcut (call the downloaded .exe whatever you want):
…\FortiusANT.exe -n -g -a -H10030 -p135 -T34-50x30-27-25-23-21-20-19-18-17-15-13
This now means that I can finely adjust the power difference to stay within a few watts of the Golden
Cheetah (GC) profile throughout the ride. While this is not a show stopper for folk using GC it does mean
you don't get the GC interface colouring your power output because you are higher/lower than the
specified rate.
Absolutely fantastic job and it's a huge help in me maintaining my fitness for a return to Brazilian Jiu Jitsu
in the coming months. And it has given the Fortius a huge new lease of life :-)
Dankjewel.
Paul C
When TrainerRoad demands 200Wattt it may instruct you (through the displayed texts) to ride at a high or
a low cadence, depending what purpose is intended. It is not correct to say that the speed is not relevant:
it may be that either you or your friend did not do the intended training (high power or high force).
• To re-do calibration, turn the brake off and on again, then restart FortiusAnt
• For consistent results, warm up for ~5 minutes before starting FortiusAnt is recommended
• Calibration (and warm-up) can be skipped by adding the '-n' command-line option
• The brake remembers the last calibration value
• This should be fine if the last calibration is recent and nothing was changed/tyre pressure is the
same
• FortiusAnt will show 'UNCALIBRATED' to remind you when the calibration is not fresh
Known issues:
• Cadence estimation by the brake is not always reliable and often seems to read 3-5rpm high
• In ERG mode the wheel sometimes takes a while to stop spinning after you stop pedaling
• Downhill simulation slows down after a few seconds if you stop pedaling completely (built-in
safety limitation)
• The Genius remote control (T2022) is not supported (yet)
• Virtual shifting is currently not implemented for the Genius
So … if you use a USB-hub AND you have connectivity issues, try to get the best position possible!
6.1 General
As explained [CTP]’s require Power or Grade data and either requirement is translated into a required
resistance as explained in the previous section. The calculations were validated during
development/testing but it may be useful to check for your own trainer whether the calculations are
correct.
“The Power Curve” is the relation between requested Power and the resistance set on the trainer.
The formula basically is: Resistance = c * Power / Speed; the resistance of the brake goes up with
increasing power and reduces with increasing speed (of the bicycle wheel).
Overall conclusion from the tests is that the algorithm does what it should do, which is confirmed by users
who are happy with how their trainer works. Individual situations are reported however (e.g. issue 102)
that the power curve is not satisfactory. This section can be used to validate settings for your own trainer.
Test Results (Target Power in column header, resultant power in the table)
50W 100W 150W 200W 250W 300W
10 km/hr 46 97 145 194 245 285
20 km/hr 50 100 145 197 245 290
30 km/hr 63 102 154 196 245 295
40 km/hr 105 120 160 210 260 305
50 km/hr 123 130 165 210 250 310
With the assumptions:
• Attempts to improve the algorithm may be useless, since it would not be more exact than the
Tacx Fortius (was designed for).
• Changing the algorithm still requires an empirical result since the technical specs from Tacx are
not available to validate
The conclusions are:
• 50Watts at 50km/hr gives odd readings but that is not too strange.
• Overall measured power corresponds with Target Power.
• Multiple measurements give different results within 5%
Tests were undertaken at different times and hence have different brake and tire temperatures.
The power curve of the iMagic is as shown below, where the range R=50...200 seems quite linear.
With the Powermeter-measured and Formula-calculated values in one graph the result is as shown as
close enough to be used (or at least tested):
Conclusion:
The formula based upon @yegorvin’s measurements can be used by the 6 known Tacx i-Magic T1902
users at this moment.
the electric current in the coils, the head unit firmware, and so on. We assume they are fixed and more or less the same
for all brakes.
This formula has been established by @switchabl and @cyclingflow based upon tests performed by
@bikebeppe64, @jurgen-iflow, @mikeherriman and @mk2mark.
Since the Rolling Resistance of the bike depends on external factors (type of bicycle, tire, etc) the Rolling
Resistance can be customized with -c CalibrateRR. A figure from 12…18 is probably a reasonable value.
As you know, the environment can operate in PowerMode or GradeMode.
PowerMode
In PowerMode, the requested power is calculated using the formula above. If a required power is known,
the resistance is established by searching the appropriate value in the table above. Funny (at least
because we do not know why) is that the ResistanceSend is sent to the trainer and then the
ResistanceLevel is set.
In the table above, you can see that, when the 2550 is sent to the trainer, the resistance is set to 2338
and the power required is 77, 187, 309, 436, 567 Watt at respectively 10…50 km/hr.
According this table, the trainer can require a resistance of 57W … 926Watt.
GradeMode
In GradeMode, FortiusAnt first calculates the power that is required to ride the requested grade at the
actual speed:
And using the resulting power, the related resistance is calculated (see previous section):
Here you can see that, given the nature that negative required power is not possible and that the
maximum power is quickly reached, you will get a real feel only between -1% and 5%.
To realize a “real feel” the requested slope can be reduced. By specifying -G50 (Grade = Grade * 50%)
the requested grade is reduced to the half and the resistance table becomes:
In the examples above, the white area represents the “dynamic area”: at a requested slope of 2% the
resistance varies for a speed of 5…50km/hr; at 50km/hr the resistance varies from -10%...+11%.
It is also possible to define an extra reduction for downhill: -G25/50; the grade is then additionally reduced
by an extra 50% for grades < zero.
The default is -G100/100 because Zwift has already a standard reduction (similar to -G50, which may be
modified in the Zwift settings) and Rouvy has not. It seems that -G50 is a good start when training with
Rouvy.
Tests
When -c 16 (Rolling
Resistance) is
specified, the curve
quite nicely fits the
measured figures
from @jurgen-iflow:
@switchmcblade I've been following the thread with interest and as it seemed like you were nearing the end I downloaded
this branch 3.9e version to try it out with Zwift.
I don't have a power meter to be sure if it is accurate, but TBH that doesn't bother me as much as being
repeatable so I can at least directly compare myself from ride to ride. Previously even a few % change
up and down I was having to fiddle with the virtual gearbox to try and get the resistance in an area that I
can actually put power down. So I could never be sure from ride to ride if I'd gone up or down the same
amount on the virtual gearbox at the same point in the ride.
The new version is so much better, at no point did I feel the need to touch the virtual gearbox. The
resistance changes felt natural and I could happily feel like I could manage the resistance changes using
the bike gears alone. I'm definitely happy with the experience of installing and riding without worrying
about flags or anything else.
Thank you so much to everyone who worked in any way for this improvement, you've transformed my
old Flow back into a useful trainer from an ornament in the garage.
And when -c 13
(Rolling Resistance)
is specified, the
curve quite nicely
fits the measured
figures from
@mk2mark:
@mk2mark Just to add to the general mood of positivity, and following my successful Zwift Slope mode ride
yesterday:-
Today I created a custom workout (ERG mode) testing increasing power levels from 80-450W.
Zwift was driven entirely from FortiusAnt with "-c11.6" set as recommended - power, cadence, speed etc.
I connected bike sensors to Garmin only.
Firstly, the Power output followed the target really well - significantly better than it used to with TTS4 -
GREAT RESULT.
The power as measured by Garmin was also close - really good up to about 270W then it started to
flatline until I realized that since 200W I had been using a constant gear & cadence and had reached the
limit of the brake at that speed. I was surprised at how quickly I hit this limitation of the hardware, so
worth keeping in mind that the T1901 brake needs high wheel speed to get the higher power outputs.
Once I upped the wheel speed the power then tracked ok - started to underread from 410W as opposed
to over yesterday so I may need to tweak the -c flag a bit. However, in my practical 'working' range of
150-350W it was really good.
I am a very happy user. Thanks so much everyone for what you have achieved.
Conclusion: The purpose of FortiusAnt is to enable “old” Tacx trainers to be used with CTPs like Zwift
and Rouvy providing a more or less realistic experience. And for that purpose, +/- 10% is
considered acceptable. For more details; check
https://github.com/WouterJD/FortiusAnt/issues/153
6.5 Steering
When a steering unit is used, the unit will communicate the left/right angle to FortiusAnt.
The following messages can appear:
• Steering is calibrating...
The initial message. The steering module will wait for sufficient stable data to start transmitting a
steering angle. The steering unit must be in the neutral middle position now.
• Zeroed steering angle. Steer full left and right once to calibrate limits.
The middle position is detected and therewith the steering calibrated. Now steer to the far left and
the far right, keeping the steering unit in the far end for some seconds. When done, the following
two messages will appear and steering is fully initialized.
• Left steering limit updated.
• Right steering limit updated.
As soon as the middle position is calibrated, steering is operational. Steering to the far left/right will
update the end-points, it’s best to do that in the beginning.
The steering module assumes the far left/right are 45 degrees to either side.