0% found this document useful (0 votes)
523 views65 pages

Fortius ANTUser Manual

This document is a user manual for FortiusAnt, software that allows wireless control and monitoring of Tacx trainers over ANT+ or Bluetooth. It includes background on the supported hardware, an overview of installation instructions for Windows, MacOS, Linux and Raspberry Pi, and operating instructions for the main functions. The manual is authored and copyrighted by Wouter Dubbeldam and has undergone multiple revisions.

Uploaded by

Josky
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
523 views65 pages

Fortius ANTUser Manual

This document is a user manual for FortiusAnt, software that allows wireless control and monitoring of Tacx trainers over ANT+ or Bluetooth. It includes background on the supported hardware, an overview of installation instructions for Windows, MacOS, Linux and Raspberry Pi, and operating instructions for the main functions. The manual is authored and copyrighted by Wouter Dubbeldam and has undergone multiple revisions.

Uploaded by

Josky
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 65

FortiusAnt

User Manual

Author and copyright: Wouter Dubbeldam


© 2020, 2021, 2022, 2023
FortiusAnt - 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

v6.7 Published (March 13th, 2023) Page 2 of 65 User Manual


FortiusAnt - User Manual

3.6.3 MacOS ...................................................................................................................................24


3.6.4 Linux – General......................................................................................................................24
3.6.5 Linux Ubuntu 20.04 ................................................................................................................24
3.7 Install ANTdongle ..........................................................................................................................25
3.8 Using Bluetooth Low Energy (BLE) ..............................................................................................25
3.8.1 Supported Hardware ..............................................................................................................25
3.8.2 Installation on macOS (node.js only) .....................................................................................25
3.8.3 Installation on Windows (node.js only) ..................................................................................26
3.8.4 Installation of bless library (bless and Q2-2022 only) ............................................................26
3.8.5 Run FortiusANT with BLE support .........................................................................................26
3.9 Start FortiusAnt .............................................................................................................................27
3.10 Settings in the JSON-file ...........................................................................................................27
3.11 Check FortiusAnt .......................................................................................................................28
3.12 Raspberry Pi ..............................................................................................................................30
3.12.1 Required hardware. ...............................................................................................................30
3.12.2 Installation decisions ..............................................................................................................31
3.12.3 Operating system ...................................................................................................................31
3.12.4 Start and stop the Raspberry. ................................................................................................32
3.12.5 Install software. ......................................................................................................................34
3.12.6 Connect LEDs and a button to the Raspberry Pi...................................................................37
3.12.7 Connect TFT screen to raspberry. .........................................................................................38
3.12.8 Now pair with a CTP ..............................................................................................................39
4. Operating instructions ........................................................................................... 40
4.1 The main functions of FortiusAnt and the head unit. ....................................................................40
4.1.1 Settings ..................................................................................................................................40
4.1.2 Locate HW .............................................................................................................................40
4.1.3 Runoff test..............................................................................................................................40
4.1.4 Start .......................................................................................................................................41
4.1.5 Stop ........................................................................................................................................41
4.1.6 Buttons on the Tacx head unit ...............................................................................................41
4.1.7 ANT+ Remote Control ...........................................................................................................42
4.2 Command line ...............................................................................................................................42
4.3 Modify settings ..............................................................................................................................45
4.4 Locate HW ....................................................................................................................................46
4.5 The FortiusAnt display in power mode..........................................................................................47
4.6 The FortiusAnt display in grade mode ..........................................................................................48
4.7 Debugging FortiusAnt ...................................................................................................................49
5. FAQ and Troubleshooting..................................................................................... 50
5.1 Low cadence on Fortius ................................................................................................................50
5.2 Flat resistance on magnetic brake at low speed (#223) ...............................................................50

v6.7 Published (March 13th, 2023) Page 3 of 65 User Manual


FortiusAnt - User Manual

5.3 Power tuning with Golden Cheetah (#231) ...................................................................................50


5.4 Zwift speed does not match Garmin .............................................................................................51
5.5 Average speed in Trainer Road ....................................................................................................51
5.6 Can TTS4 and FortiusAnt coexist? ...............................................................................................52
5.7 TTS and FortiusANT on Dedicated USB-ports .............................................................................53
5.8 Tacx head unit with firmware to be loaded ...................................................................................53
5.8.1 Unable to load firmware" on 1942 head unit..........................................................................54
5.9 Fortius without cadence sensor ....................................................................................................54
5.10 Two ANTdongles – disturbed communication ...........................................................................54
5.11 Tacx returns insufficient data ....................................................................................................55
5.12 Sudden drop of requested power ..............................................................................................55
5.13 Zwift on Android does not pair with FortiusAnt..........................................................................55
5.14 Detailed notes on Tacx Genius .................................................................................................55
5.15 Detailed notes on Tacx Bushido................................................................................................56
5.16 Bluetooth (BLE) needs lib_programname, bleno, express (#229) ............................................56
5.17 Bluetooth (BLE) Node.js installation does not install tools. .......................................................57
5.18 Odd behavior in cold garage (#248) ..........................................................................................57
5.19 ANT connection drops when USB-hub used.............................................................................57
6. Power curve validation.......................................................................................... 58
6.1 General .........................................................................................................................................58
6.2 Test for Tacx Fortius (T1932) .......................................................................................................58
6.3 Test for i-Magic (T1901-T1902) ....................................................................................................59
6.4 PowerCurve for i-Flow (T1901-T1932) .........................................................................................61
6.5 Steering .........................................................................................................................................65

v6.7 Published (March 13th, 2023) Page 4 of 65 User Manual


FortiusAnt - User Manual

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.

v6.7 Published (March 13th, 2023) Page 5 of 65 User Manual


FortiusAnt - User Manual

1.3 The structure of this manual


After the introduction you are now reading; the manual has the following chapters
• Background information: explaining concepts
• Installation instructions: how to install FortiusAnt
• Operating instructions: how to run FortiusAnt
• FAQ and : to describe anything else
• The section on Power curve validation is moved to the end of the manual
I hope the manual helps in operating FortiusAnt and I’m always happy to hear from you @github!

1.4 The story in a picture:

v6.7 Published (March 13th, 2023) Page 6 of 65 User Manual


FortiusAnt - User Manual

1.5 References, abbreviations, and terminology


Term Explanation See also

[Antifier] The predecessor of FortiusAnt, created by “John”. https://github.com/john-


38787364/antifier
[ANT+] ANT+ is a wireless technology that allows devices to www.thisisant.com
talk to each other. The following documents are most
interesting to study when digging into the Python code:
• D00000652_ANT_Message_Protocol_and_Usage_Rev_5.1.pdf
• D00001198_-_ANT+_Common_Data_Pages_Rev_3.1.pdf
• D000001231_-_ANT+Device_Profile-Fitness_Equipment-
Rev_5.0(6).pdf
• D00000693_-_ANT+Device_Profile-_Heart_Rate_Rev_2.1.pdf
[BLE] Bluetooth Low Energy
There are two implementations, one using the Nodejs
library (-b), the other using the bless library (-bb).
[CTP] Cycling Training Program, such as Zwift, Trainer Road,
Rouvy, Sufferfest, Golden Cheetah, Road Grand Tour,
BigRingVR, TTS and many others
[FE] Fitness Equipment, like legacy Tacx trainers

[FE-C] Controllable Fitness Equipment, the ANT+ name for an


indoor trainer.
A [FE] + [FortiusAnt] becomes an FE-C.
[FortiusAnt] FortiusAnt enables a usb-connected Tacx trainer to https://github.com/Wout
communicate with [CTP]s through ANT. erJD/FortiusAnt
[HRM] ANT+ Heart Rate Monitor profile See [ANT+]

[PWR] ANT+ Power Meter See [ANT+]

[Python] Python is a high-level programming language www.python.com

[Raspberry] Raspberry Pi is a series of small single-board www.raspberrypi.org/downloads


computers
magpi.raspberrypi.org/books

[SCS] ANT+ Speed and Cadence Sensor See [ANT+]

[TotalReverse] Invaluable source of information regarding Tacx USB https://github.com/totalre


interfaces. verse/ttyT1941
[TTS] Tacx Training Software; proprietary [CTP] connecting
to Tacx trainers only.
[VNC] Refer to and www.realvnc.com and www.raspberrypi.org/documentation/remote-
access/vnc/ for information regarding remote access on Raspberry Pi.

v6.7 Published (March 13th, 2023) Page 7 of 65 User Manual


FortiusAnt - User Manual

1.6 Revision History


Date of this revision: March 13th, 2023 Version: v6.7 Published

Version Revision Date Summary of Changes


6.7 March 13th, 2023 - #394 Issues on Debian Bullseye; some minor changes in
documentation
6.6 August 16th, 2022 - #152 Please implemented Zwift steering implemented
6.5 August 10th, 2022 - #366 BLE using bless library, released
6.4 April 14th, 2022 - #366 BLE implemented, using bless library
- Note added on Bushido from issue 319, small updates in
section 5.15.
- Description of Bluetooth/FTMS extended (section 2.4.2).
- Note added in the section for BLE/zadig to redo the driver
definition if the dongle is moved to another USBport.
- #363 -O st7789b added; Waveshare 1.3 LCD with different
pin layout
- #368 Bluetooth requires installation, even when .exe is used
6.2 April 22nd, 2021 - Added: -l -L and -O command-line options.
- -O adds a small display to the raspberry and provides
additional information on the process of FortiusAnt,
including differences between the different trainer types.
- Some small additions to the Raspberry Pi installation.
- Added: 3.2.2 ”Access rights and firewall” and 3.2.3 “ANT+
or Bluetooth Low Energy?”
- Leds are also implemented in the graphical user interface
6.0.e March 17th, 2021 - Raspberry implementation released
6.0.d March 13th, 2021 - Review @Meanhat implemented
- Added: sections 2.3.1 “Tacx Catalogue 2012” and 2.6 “Tacx
Trainer Power ranges”.
6.0.c March 10th, 2021 - Minor modifications, regarding Raspberry Pi.
- Raspberry Pi installation scripts modified, Pi0 support.
- Added 5.7 “TTS and FortiusANT on Dedicated USB-ports”
6.0 March 4th, 2021 - Section 3.12 “Raspberry Pi” added
5.2 February 11th, 2021 - Section 3.3 “Windows – QuickStart, using executable
version.” added to summarize that installing can be easy.
- homeTrainer mode added
5.1 February 3rd, 2021 - Revision of the manual
- User-interface changes effectuated
- Documentation-suggestions from github
- Section 3.9 “Start FortiusAnt” extended with some details on
starting FortiusAnt and the location of logfiles etc.
- Bluetooth added
5.1 January 8th, 2021 - Typo in description of -p command-line parameter.
- Note added to install libusb as Administrator, if so required.
- Gear switching is extended to front/rear
- Power can be adjusted in ERGmode
- Settings can be modified interactively and saved
5.0 January 4th, 2021 - Tacx Bushido and Genius support added
Note that the -t option for i-Vortex is changed into -t Vortex.
Detailed remarks for Bushido and Genius are written in the
appendices 5.14 “Detailed notes on Tacx Genius” and
5.15 “Detailed notes on Tacx Bushido”.
4.1.a December 27th, 2020 - Start-up sequence added to 4.1 “The main functions of
FortiusAnt and the head unit.”

v6.7 Published (March 13th, 2023) Page 8 of 65 User Manual


FortiusAnt - User Manual

Version Revision Date Summary of Changes


4.1 December 22nd, 2020 - Bluetooth Low Energy supported (-b).
- ANT remote control button implemented (-C).
- Main program can only closed from the GUI, so that it
cannot be stopped from the head unit by mistake.
- Minor functional improvements.
3.i December 11th, 2020 - Supported tacx trainertypes described in more detail (see
3.h 2.3)
4.0 - Power calculations implemented for magnetic brakes
- Documentation improvements based upon some issues
- Command line parameter -r (resistance) introduced; to send
TargetPower directly to brake for test-purpose
- Command line parameters -D (antDeviceID)
- -G (ModifyGrade) and -c CalibrateRR introduced.
- -H described with some examples
- -u uphill removed (replaced by -G/0)
3.h November 15th, 2020 Debugging section added
3.g November 5th, 2020 In manual power/grade mode, a tcx file is created.
Sections added:
- 6 Power curve validation
- 5.9 Fortius without cadence sensor
- 5.10 Two ANTdongles – disturbed communication
3.f October 21st, 2020 i-Vortex and -P option added
3.e October 16th, 2020 Command line parameter -u uphill added
Section added: 5.8 Tacx head unit with firmware to be loaded.
Minor textual modifications
3.d October 5th, 2020 Section Requirements added
3.c October 2nd, 2020 Only ONE computer is required to run FortiusAnt and a [CTP],
two computers are drawn in the pictures to explain the concept.
3.b October 1st, 2020 First version published
3.a June, 17th 2020 First version

v6.7 Published (March 13th, 2023) Page 9 of 65 User Manual


FortiusAnt - User Manual

2. Background information

2.1 FortiusAnt Sensor- and Monitor devices


ANT+ Master devices typically include Heartrate monitor, Powermeter, Speed- and Cadence sensor and
[FE-C]’s. “Master” could be replaced by “Sensor”: they measure and transmit the results through ANT+.
These sensors now often communicate using BLE as well as indications suggest that BLE is becoming
the more prevalent communication type. In this section (2.1) ANT+ functionality will typically also apply to
BLE (but see 2.5 for more information).
ANT+ Slave devices receive the transmitted signals and display the results, like a speed/cadence/power
display on a bicycle; they may also send commands to the sensor – for example a [CTP] sends
commands to a [FE-C]. “Slave” could be replaced by “Display”: the display/monitor/control what the
sensor does.
FortiusAnt follows ANT+ terminology also when the terms Master and Slave are replaced in future.
To understand “what we are doing”; the following pictures explain at a high level what happens “under the
hood”.
Important: only one computer (laptop or desktop) is required to run FortiusAnt and a [CTP]. Two
computers are shown to explain the concept. One computer with three USB-connections will do the
job: (1) the USB-cable to the Tacx Trainer, (2) the ANT+ dongle for FortiusAnt and (3) the ANT+
dongle for the [CTP]. And indeed: the two programs on one computer (FortiusAnt and [CTP])
communicate with each other externally and wirelessly, using two ANT+ dongles.
See also section 3.2 “Requirements”.

v6.7 Published (March 13th, 2023) Page 10 of 65 User Manual


FortiusAnt - User Manual

v6.7 Published (March 13th, 2023) Page 11 of 65 User Manual


FortiusAnt - User Manual

v6.7 Published (March 13th, 2023) Page 12 of 65 User Manual


FortiusAnt - User Manual

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).

2.2.2 Power- or Ergo-mode


In Powermode the [CTP] sends the required power to the [FE-C] and regardless gear or cadence, the
requested power is constant. FortiusAnt calculates the resistance = power/speed (with some constants
applied). Note that, if you change gears and/or cadence, the required power will remain equal because
the resistance is adjusted.

2.2.3 Resistance mode


In resistance mode, FortiusAnt receives the required grade from [CTP]. Grade may vary from -20%
(downhill) to +20% (uphill). FortiusAnt calculates the resistance to be sent to the [FE-C].
The power required to ride up a hill is based upon the given grade with a mass of 85 kg (rider + bike) at a
given speed'. Input parameters are grade and mass (from [CTP]) and speed (as measured by [FE-C]).
The result is Power and conversion to resistance is described above.

v6.7 Published (March 13th, 2023) Page 13 of 65 User Manual


FortiusAnt - User Manual

2.3 Tacx trainers

2.3.1 Tacx Catalogue 2012


In the catalogue of Tacx we find the following classes and trainers:
FortiusAnt
Cycle trainers Use magnetic brakes that can be adjusted mechanically and therefore it is not
possible to connect with software.
Booster Magnetic brake with 8 permanent magnets. No
Satori Magnetic brake with 1 powerful Neodymium magnet. No
Sirius Magnetic brake with 6 permanent magnets. No

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

v6.7 Published (March 13th, 2023) Page 14 of 65 User Manual


FortiusAnt - User Manual

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.3.3 Tacx proprietary ANT trainers


The ANT-interface was initially used to connect a heartrate monitor to a watch and from there developed
into a low-energy wireless protocol in the sport-environment. For more info, refer to www.thisisant.com.
When the whole world went wireless, the USB-connection became obsolete. ANT+ enabled trainers to
connect with a variety of computers: Windows, tablet, smartphone, etc. Tacx followed and built trainers
with an ANT+ connection but decided to keep the interface between trainer and software proprietary.
And hence Bushido, Genius and Vortex were created, communicating with an ANT+ protocol, but not
following the standard regarding transmission details and data. (And perhaps, giving some credit to Tacx,
the standard followed the proprietary Tacx-developments).
FortiusAnt can communicate with those trainers. Functionally you can see that instead of a USB-cable,
the ANT-dongle is used. Otherwise there are no functional differences.

v6.7 Published (March 13th, 2023) Page 15 of 65 User Manual


FortiusAnt - User Manual

2.4 Bluetooth Low-Energy (BLE)

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.

2.4.2 Design (node.js)


The BLE support for FortiusANT is implemented in Node.js, unlike FortiusANT itself which is written in
Python. The implementation makes use of the well-established Bluetooth LE library see
abandonware/bleno on https://github.com/abandonware/bleno.
Using this library FortiusANT advertises the following services which can be discovered:
• FTMS (FiTness Machine Service), receiving target power or grade and sending speed/cadence/power
• HRS (Heart Rate Service)

v6.7 Published (March 13th, 2023) Page 16 of 65 User Manual


FortiusAnt - User Manual

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.4.3 Design (bless)


The implementation is functionally compatible with the previous node.js / bleno implementation (with
FTMS and HRM services). For more info on the bless library, refer to: https://github.com/kevincar/bless.

v6.7 Published (March 13th, 2023) Page 17 of 65 User Manual


FortiusAnt - User Manual

2.5 Calculations

2.5.1 Power mode


When the [CTP] is in power-mode, a required number of Watts is sent to [FE-C], in our case FortiusAnt.
The [FE] requires a resistance to be set and hence a function TargetPower2Resistance(Power, Speed) is
used to convert this. The function is different for legacy- and new-USB trainers.
So, if you want to ride with a power of 100Watt and the bicycle wheel runs at 10km/h, the [FE] needs to
receive a different resistance than when the wheel is rotating at 40km/h.
Similarly, the [FE] returns the current actual resistance and a function is used to calculate the
corresponding Actual Power.

2.5.2 Grade mode


In Grade mode, the [CTP] communicates the slope where you are riding: flat = 0%, up hill (e.g. 10%) or
downhill (e.g. -10%).
An additional step is required, using function Grade2Power(Grade, Speed, UserAndBikeWeight). First the
Grade is converted to power and then the same applies as described in the previous paragraph.
The function also depends on RollingResistance, WindResistance, WindSpeed and DraftingFactor.
Constants are used if [CTP] does not explicitly specify these parameters. The default value for
UserAndBikeWeight is 85kg.
The formula results in the power curve shown below. Note that on a flat surface (yellow curve) you need
100Watt to ride at 25km/hr. On a hill of 5% (orange curve) you need 300Watts at 20km/hr. And if you ride
downhill -5% (blue curve) you would ride at around 44 km/hr without any additional power.

v6.7 Published (March 13th, 2023) Page 18 of 65 User Manual


FortiusAnt - User Manual

2.6 Tacx Trainer Power ranges.


In the Tacx documentation, we find that the different trainers have different operational zones:

If we look at the Tacx


Fortius, we can understand
from the power range that:
• At a wheel speed of 10
km/hr, the maximum
power of the brake is
100 Watts.
• The maximum power of
the brake is achieved at
35 km/hr.

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.

v6.7 Published (March 13th, 2023) Page 19 of 65 User Manual


FortiusAnt - User Manual

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.1 You, the Tacx Athlete


Getting the Tacx connected to Zwift, Trainer Road, Rouvy, Sufferfest, Golden Cheetah, Road Grand
Tour, BigRingVR, TTS and many others – [CTP] in short – needs some basic knowledge. You should be
able to:
• Download documentation and software from https://github.com/WouterJD/FortiusAnt/
• Connect Tacx and ANT+/BLE dongles.
• Install drivers on your computer.
• Start an executable
• Understand basic concepts, this manual only explains the FortiusAnt specifics.
If this is complex ask a friend to assist! However, don’t feel too intimidated and read section 3.3 “Windows
– QuickStart, using executable version.” first.

3.2.2 Access rights and firewall


To be able to install, you will usually need administrative rights.
Also mind the firewall blocking access until you grant it; FortiusAnt, NodeJs and your CTP’s will access
devices, the firewall may control.

3.2.3 ANT+ or Bluetooth Low Energy?


The following considerations must be taken into account to choose for ANT or BLE:
• If you use a USB-connected Tacx trainer, you can use ANT or BLE to communicate with the
[CTP] of your choice. First check whether ANT and/or BLE is supported before you buy.
• If you use an ANT-connected Tacx Trainer, you need at least an ANT-dongle. If your [CTP]
supports ANT+ an ANT-dongle may be the obvious choice.
• It seems that the market for trainers is moving from ANT to BLE, but currently usually both are
supported. Some [CTP]s support BLE before ANT, but eventually support both.
• And finally: ANT-dongles are harder to get and more expensive than BLE-dongles.

v6.7 Published (March 13th, 2023) Page 20 of 65 User Manual


FortiusAnt - User Manual

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)

USB 1a - Tacx Trainer FortiusAnt communicates


FortiusAnt
2 Two computers 1) USB 1b - ANT dongle 1 with Tacx Trainer (USB 1a) and
USB connected: USB 2a - ANT dongle 2 [CTP] with [CTP] (USB 1b ↔ USB 2a)
Fortius, Flow,
USB 1a - Tacx Trainer FortiusAnt communicates
Magic… 3
One computer 1)
USB 1b - ANT dongle 1
FortiusAnt
with Tacx Trainer (USB 1a) and
One smartphone 2) ANT interface [CTP] with [CTP] (USB 1b ↔ ANT interface)

One computer 1) 3) 4) USB 1a - Tacx Trainer FortiusAnt communicates


FortiusAnt
4 USB 1b - BLE dongle 1 with Tacx Trainer (USB 1a) and
One smartphone 2) BLE interface [CTP] with [CTP] (USB 1b ↔ BLE interface)

USB 1a - ANT dongle 1 FortiusAnt FortiusAnt communicates


5 One computer 1) [CTP] with Tacx Trainer (USB 1a) and
USB 1b - ANT dongle 2
with [CTP] (USB 1a ↔ USB 1b)

USB 1a - ANT dongle 1 FortiusAnt FortiusAnt communicates


6 Two computers 1) [CTP] with Tacx Trainer (USB 1a) and
ANT+ connected: USB 2a - ANT dongle 2
with [CTP] (USB 1a ↔ USB 2a)
Bushido, Genius or
One computer 1) USB 1a - ANT dongle 1 FortiusAnt FortiusAnt communicates
Vortex 7 [CTP] with Tacx Trainer (USB 1a) and
One smartphone 2) ANT interface
with [CTP] (USB 1a ↔ ANT interface)

USB 1a - ANT dongle 1 FortiusAnt communicates


One computer 1) 3) 4) FortiusAnt
8 USB 1b - BLE dongle 1 with Tacx Trainer (USB 1a) and with
One smartphone 2) BLE interface [CTP] [CTP] (USB 1b ↔ BLE interface)
1
) Computer: May be running Windows, Linux, MacOS or Raspberry.
2
) Smartphone: or tablet.
3
) FortiusAnt cannot receive heartrate from HRM since BLE/HRM is not supported.
4) If the computer is a Raspberry Pi, the BLE-interface is onboard and no dongle is required.

3.3 Windows – QuickStart, using executable version.


This section describes a quick-start option, explaining the basic steps required to set-up a Windows-
environment.
1. On your computer, create the following folders:

2. Download three files:


The manual: https://github.com/WouterJD/FortiusANT/blob/master/doc/FortiusANTUserManual.pdf
USB drivers: https://github.com/switchabl/t19xx_usb/releases/download/v1/libusb-win32_T19xx.exe
Executable: https://github.com/WouterJD/FortiusANT/blob/master/WindowsExecutable/FortiusANT.exe
and move these files into the folders doc, t19xx_usb and WindowsExecutable respectively.

v6.7 Published (March 13th, 2023) Page 21 of 65 User Manual


FortiusAnt - User Manual

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.

3.4 Download FortiusAnt from github


Goto https://github.com/WouterJD/FortiusAnt/
In section <code> click on [Code] and download the code as a zipfile.
Create a folder on your computer called C:\Github\FortiusAnt (windows) or .../Github/FortiusAnt (unix).
From now on, this folder will be referred to <the FortiusAnt folder>.
The downloaded file contains a folder called FortiusAnt-master. Copy the contents into
<the FortiusAnt folder>. <the FortiusAnt folder> now contains sub-folders pythoncode,
WindowsExecutable, etc.

3.5 Install Python


Note: Python is NOT required when you use the Windows executable.
• Goto https://www.python.org/downloads/
• Follow the installation instructions for your system. It’s impossible to handle all operating systems
specific instructions. For Windows it’s easiest NOT to install for “All users”.
• Noted by @msjnaessens: “If you installed Python 3.9, you cannot install numpy. I chose to install
Python version 3.7.9 instead.”
Note that, Python version 3.x.x is required. If you have multiple instances of Python installed, mind the
PATH settings!
If the Python path is NOT specified there, next commands may give the error “command not found”. On
Windows the PATH settings can be checked using Computer, Properties, Advanced, Environment
variables.
After installation, the Python version can be checked with the following commands:
python --version
pip --version
You can check whether the most recent pip is installed with the command:
pip install --upgrade pip
As soon as Python is installed correctly, the modules that are required for FortiusAnt can be installed as
follows:
pip install -r requirements.txt
or, if you do not intend to use the Graphical user interface (e.g. on Raspberry Pi0):
pip install -r requirementsNoGUI.txt
the requirements file is available in <the FortiusAnt folder>/pythoncode.

v6.7 Published (March 13th, 2023) Page 22 of 65 User Manual


FortiusAnt - User Manual

3.6 Install USB-driver

3.6.1 Windows – prepackaged drivers


The installation from libusb is explained in the next paragraph. For FortiusAnt a prepackaged installation
is available:
Goto https://github.com/switchabl/t19xx_usb
And follow the installation steps as explained there:
• Download the all-in-one package from
https://github.com/switchabl/t19xx_usb/releases/download/v1/libusb-win32_T19xx.exe
• Run libusb-win32_T19xx.exe as Administrator.
• Click "Next", then "Finish".

3.6.2 Windows – from libusb


You can skip this step if you have installed the prepackaged drivers from @switchabl as explained in the
previous section.
On the system where FortiusAnt is running, it is recommended that TTS is not installed since the two
programs require different USB-drivers which may conflict. There are studies where both programs are
installed but, for sake of simplicity of this installation instruction, I will describe a FortiusAnt-only
installation. Refer to 5.6 “Can TTS4 and FortiusAnt coexist?” for more information!
You have to (re)install your trainer as a libusb-win32 device.
Download the libusb driver
• Download software from https://sourceforge.net/projects/libusb-win32/
• Read the wiki, sections download and Device Driver Installation
• Download libusb-win32-bin-1.2.6.0.zip from files/libusb-win32-releases/1.2.6.0/
• Unzip the file
• Note: when Windows does not allow to install, installing the libusb driver as Administrator
(rightclick, Run as Administrator when adding) may help.
Uninstall TTS-driver (refer to section 5.6 “Can TTS4 and FortiusAnt coexist?” first)
• Open Device Manager.
• Right click on the device and click "Uninstall". It may be listed as a "Jungo" device (see
http://www.tacxdata.com/files/support/Windows10driverissues.pdf - DO NOT RUN
TacxDriversSetup.exe!)
• Unplug the trainer, wait 5 seconds, and plug it back in again
Install option 1
• Find it again (usually under other devices>VR-interface)
• Right click and select "update driver software"
• Select "Browse my computer for driver software"
• Select "Let me select from a list of device drivers on my computer"
• Select libusb-win32 devices
• Select ANT USB Stick 2, then OK in the warning, then close Your USB-trainer is now installed as
"ANT USB Stick 2" which works, but perhaps is not a very clear name.
Install option 2
• Go to the ..\libusb-win32-bin-1.2.6.0\bin folder
• Start inf-wizard.exe, click next
• Select "VR-Interface" (which is the USB-device you plugged in again), click next
• Specify the name for Manufacturer (Tacx) and Device (VR-Interface), click next
• Store the results in the same folder; this creates a file like VR-Interface.inf
• Complete the installation

v6.7 Published (March 13th, 2023) Page 23 of 65 User Manual


FortiusAnt - User Manual

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/.

3.6.4 Linux – General


Hints:
• Root required
• Refer to AntBridge installation instructions for hints (https://github.com/pepelkod/AntBridge).
• Instructions supplied by FortiusAnt users, since I have no Linux environment to test.

3.6.5 Linux Ubuntu 20.04


As provided by @msjnaessens; thanks.
Fresh install of Ubuntu 20.04; installed in Oracle VM VirtualBox 6.1; 2048 MB ram; 4 cpu cores (i7
8750H); 16 MB video memory; installed on MSI GV62 8RC laptop.
sudo apt install git
git clone https://github.com/WouterJD/FortiusAnt
sudo apt upgrade python3
sudo apt install python3-pip
pip3 install --upgrade pip
sudo apt-get install python3-pygame

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

sudo apt install python3-wxgtk4.0


pip3 install -r ./FortiusAnt/pythoncode/requirements.txt
pip3 install --upgrade wxpython

git clone https://github.com/pepelkod/AntBridge


LOC=/lib/modules/uname -r/kernel/drivers/usb/serial/
sudo mv $LOC/usb-serial-simple.ko ~/Documents
sudo mv $LOC/usbserial.ko ~/Documents
sudo rmmod usb_serial_simple usbserial
sudo apt install libusb-dev
sudo apt install libgoogle-glog-dev
sudo apt install libusb-1.0-0-dev
sudo apt install pkg-config

Open terminal in AntBridge folder


make; make;
sudo make install

git clone https://github.com/Tigge/openant


git clone https://github.com/Tigge/antfs-cli

v6.7 Published (March 13th, 2023) Page 24 of 65 User Manual


FortiusAnt - User Manual

open terminal in openant folder:


sudo python3 setup.py install
open terminal in antfs-cli folder
sudo python3 setup.py install
Now run FortiusAnt:
sudo python3 ./FortiusAnt/pythoncode/FortiusAnt.py
Done!

3.7 Install ANTdongle


ANTdongles are a lot easier to use than the Tacx-USB-interface, since they are plug&play; insert the
dongle in your computer and the required drivers will be installed automatically.
Dongles from manufacturer=CYCPLUS are reported not to work well with FortiusAnt; refer to github
FortiusAnt issues (#61, #45 and #65).
As you are using ANT+ rather than Bluetooth please proceed to section 3.9.

3.8 Using Bluetooth Low Energy (BLE)


Bluetooth is a short-range wireless communication technology standard. FortiusAnt supports two
interfaces; with -b nodes.js is required using the bleno-library and with -bb the bless library is required.
The options will be referred to as “node.js” or “bless”; “bless” is the easier one to install.
The advantage of bless is that no additional installations are required but can only be used on Windows
if a BLE/5 dongle is available. If you use bless, you can proceed to 3.8.5 Run FortiusANT with BLE
support right away.

3.8.1 Supported Hardware


-b using node.js / bleno
Since BLE support in FortiusANT depends on the bleno library, hardware support is also limited to what
bleno supports.
On macOS and Raspberry, on-board Bluetooth is used, no need for an external dongle.
On Windows a Bluetooth dongle is required; there is a limited set of supported hardware; onboard
Bluetooth is (usually) not supported. It is important that your Bluetooth dongle has one of the supported
chipsets. See node-bluetooth-hci-socket on https://github.com/noble/node-bluetooth-hci-socket#windows.
-bb using bless
Since BLE support in FortiusANT depends on the bless library, hardware support is also limited to what
bless supports.
On macOS and Raspberry, on-board Bluetooth is used, no need for an external dongle.
On Windows a Bluetooth BLE-5 dongle is required; onboard Bluetooth is (usually) not supported.

3.8.2 Installation on macOS (node.js only)


• Install Xcode: App Store see https://apps.apple.com/nl/app/xcode/id497799835?l=en&mt=12
• Install NodeJS: brew install node
• Install dependencies: cd <the FortiusANT folder>\node and npm install

v6.7 Published (March 13th, 2023) Page 25 of 65 User Manual


FortiusAnt - User Manual

3.8.3 Installation on Windows (node.js only)


• Install Git for Windows (https://git-scm.com/downloads); only needed if not installed yet.
• Install NodeJS LTS version (https://nodejs.org)
o During installation: check the box which installs the necessary tools for native modules.
o After NodeJS installation completes, a command prompt will appear which will install the
necessary tools (Python, Visual Studio and - Build Tools, Chocolatey and some Windows
upgrades with a total size of approx. 3Gb). This will take a while, grab a drink in the
meantime. Note that, manual installation of the components is complex and therefore not
recommended.
• Install Zadig (https://zadig.akeo.ie)

• 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>

3.8.4 Installation of bless library (bless and Q2-2022 only)


The bless-library is installed automatically because it is mentioned in the requirements.txt file
(see 3.5 Install Python).
From April to June 2022, the development branch from bless had to be installed which can be done with
the following command: (This note is left as a reference - this is not required anymore).
pip install --force-reinstall git+https://github.com/kevincar/bless.git@develop
It may be required again when the master version does not work but the develop version does!

3.8.5 Run FortiusANT with BLE support


To start FortiusAnt with BLE support add the `-b` or `-bb` option.
When [Start] is pressed the BLE interface will be started until [Stop] is pressed. FortiusANT should be
advertising as 'FortiusANT Trainer'. Depending on the library (bleno or bless) and the operating system,
different names may be advertised; sometimes the hostname and sometimes the Bluetooth-ADDRESS is
shown as name. Usually on the smartphone you try to pair with FortiusAnt, you will see one smart trainer
and select that one.
A [CTP] can then connect to FortiusAnt in the usual way, selecting the Bluetooth device.

v6.7 Published (March 13th, 2023) Page 26 of 65 User Manual


FortiusAnt - User Manual

3.9 Start FortiusAnt


Now FortiusAnt is ready for use. To start (or run) FortiusAnt:
• Double-click FortiusAnt.exe from Windows explorer (compiled version)
• Double-click FortiusAnt.py from Windows explorer (Python version)
• Execute the FortiusAnt.exe or FortiusAnt.py command from the command-prompt
• Create a script, command-file, shortcut or menu-entry to do the same
• Use any of the sample-scripts in <the FortiusAnt folder>/StartUp
Note that these are called xxx.bat for usage in the Windows-environment.
When made executable, the same scripts can be used in MacOS or Linux environment (after
making them executable).
Windows, Linux, MacOS all use the same concept of giving a command, but in slightly different ways.
Further explanation is beyond the scope of this manual.
If you start FortiusAnt without additional command-line options, FortiusAnt will use the default (best-
practice) settings.
After starting FortiusAnt using one of the described methods, a “console” is opened and then the
FortiusAnt user-interface is started. The pause command in the sample scripts is present, so you can see
messages in the “console” in case of an abnormal end.
See section 4.2 “Command line” for information on parameters that can be passed on the command-line.
Note that logfiles, training-files and data-files (.log,.GUI.log, .tcx or .json) are created in the ‘current
directory’ where the FortiusAnt is started (not where it is located!).
Therefore, mind the difference between
cd <the FortiusAnt folder>/pythoncode
FortiusAnt.py -a -g
and
<the FortiusAnt folder>/StartUp
../pythoncode/FortiusAnt.py -a -g
In the first example, the files are created/expected in the pythoncode directory, in the second example
those files are created/expected in the StartUp directory.

3.10 Settings in the JSON-file


Instead of using a command-line to start FortiusAnt, settings can also be stored in a JSON-file; a sample
is available in folder “<the FortiusAnt folder>/StartUp Json”.
The settings in FortiusAntSettings.json may be modified with an editor or using FortiusAnt (click the
settings button).

v6.7 Published (March 13th, 2023) Page 27 of 65 User Manual


FortiusAnt - User Manual

3.11 Check FortiusAnt


When FortiusAnt is started without additional command-line parameters, the following text is displayed in
the console:
---------------------------------------------------------------
Hello!
You have started FortiusAnt without command-line parameters.

Therefore, we start with a best practice setting:


FortiusAnt.exe -a -g -H0 -A

If you want to start without the graphical user interface:


FortiusAnt.exe -a

For more info, please refer to the wiki on github.


Success!
---------------------------------------------------------------
FortiusAnt is open source and can be used freely.

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

or visit the sponsoring page https://github.com/sponsors/WouterJD


---------------------------------------------------------------
And then the graphical user interface appears:

When the GUI is shown you know that FortiusAnt is installed correctly.

v6.7 Published (March 13th, 2023) Page 28 of 65 User Manual


FortiusAnt - User Manual

The user interface contains the following elements:


1. The window title displays name and version of the software you run and the actual version as
available on github (excluded from the images in the manual).
2. <Settings> is a button to open a dialogue to modify and/or save the FortiusAnt settings.
3. <Locate HW> is a button and when pressed FortiusAnt will search for a Tacx USB-device and an
ANT-dongle. When found, the result is displayed in (5) and (6), the button is disabled and
<Runoff> and <Start> are enabled.
4. <Runoff> activates the user-driven calibration
5. <Start> activates FortiusAnt to bridge USB data to ANT+ and vice-versa; then <Start> is disabled
and <Stop> enabled.
6. <Stop> stops the FortiusAnt bridge.
7. <Sponsor> opens the sponsoring page on github.
8. <Help> opens the manual on github.
9. Shows what USB-trainer is found
10. Shows what ANT-dongle is found (or Bluetooth if using BLE)
11. Shows what heartrate is used
12. Displays the speed of the bicycle wheel (returned by the Tacx trainer)
13. Displays the cadence of the pedals (returned by the Tacx trainer). Note that the calibration
progress is also shown here during calibration.
14. Displays the power as returned by the Tacx trainer.
Also, the target is displayed as requested by the CTP.
15. Displays the Pedal Stroke Analysis, as calculated by FortiusAnt.
16. Displays heartrate.
17. and
18. show the virtual gearbox.
19. The status LEDs:
• Led Tacx blinks when information is received from the Tacx trainer. Blinking does not mean
that the Tacx is working well; bad connections cannot be detected through the head unit.
• Led Shutdown is used by the shutdown button (raspberry only).
• Led Cadence blinks when the pedal passes the magnet (USB trainers only).
• Led BLE blinks when a Bluetooth message is received from a [CTP].
• Led ANT blinks when an ANT message is received from a [CTP].

• 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.

v6.7 Published (March 13th, 2023) Page 29 of 65 User Manual


FortiusAnt - User Manual

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.

3.12.1 Required hardware.


As quick development system, I use below configuration.
- Raspberry Pi 4 Model B / 4GB.
- 3A USB-C power supply.
- SanDisk Ultra Micro SDHC 32GB 80mb/s.
- Oval Case with fan and Copper Heatsink.
- USB keyboard/mouse and HDMI display; required during initial setup.

v6.7 Published (March 13th, 2023) Page 30 of 65 User Manual


FortiusAnt - User Manual

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.

3.12.2 Installation decisions


The installation description is assuming that the Raspberry Pi is dedicated for the Tacx and FortiusAnt
and will describe a straight-forward FortiusAnt-dedicated installation which is good for the novice and a
reference for others. Therefore:
• I use standard root-user Pi as operational user, although a non-root user would be nicer from
security point of view.
• Raspberry Pi OS (Debian port) is used as OS.
@RoheHero: I still had the STRETCH version on my PI3B and not the BUSTER version.
After reinstalling BUSTER, the installation of FortiusANT also worked without any problems.
• I do not use a virtual environment, to simplify for most users. If multiple applications used on the
same Raspberry Pi, Python’s virtual environment is recommended.
• The button to shutdown is projected on GPIO3 because that is the default power-on pin for
Raspberry itself.
• The installation is working for Raspberry Pi0W, Pi3 and Pi4. Raspberry Pi0W is the cheaper
solution but has another architecture (ARMV6l). Installing wxPython on a Pi0 is complex and
extremely time-consuming task, so a headless configuration is recommended. Note that the
RPi0W and RPI0WH models have inbuilt Bluetooth while the standard RPI0 does not.
• The microSD-card is mounted in the onboard slot; it is also possible to use a USB-3 mounted
microSD-card which is faster and makes switching of systems easier. See:
https://www.raspberrypi.org/documentation/hardware/raspberrypi/usb/README.md

3.12.3 Operating system


If you ordered an empty microSD-card, you must
format and add an operating system to it.
Use another computer to format the microSD-
card.
- Mount the microSD-card in a SD-card slot or
a USB slot, using an adapter (see examples).
- go to www.raspberrypi.org/downloads.
- Install and start Raspberry Pi Imager.
- Select Raspberry Pi OS.
- Select the SD-card (verify to select the
correct one and do not overwrite a system-
disk).
- Write SD-card.
- Remove the SD-card from the computer.

v6.7 Published (March 13th, 2023) Page 31 of 65 User Manual


FortiusAnt - User Manual

3.12.4 Start and stop the Raspberry.


Insert the microSD card into the slot on the RPi, Raspberry Pi Zero 2W
connect keyboard, mouse and monitor and With top-down:
power on by putting the power supply in the Power
USB keyboad/mouse
mains. hdmi connector

A Raspberry Pi does not have a power switch.


The first time Execute some simple installation instructions such
as:
• Define your language and geography
• Define userid and password, I use pi/tacx
• Connect to Wifi (or LAN) when asked.
• Note that if updating the software fails, don’t
worry as we will do it later on.
Your Raspberry Pi is now ready for use.
Normally, starting-up will take half a minute or so,
and then you will see a desktop like other
computers you are probably used to.
In the taskbar at the top you will see three icons
which we will use in the next sections:

The applications menu

The file manager

Terminal
Some system-settings must be changed. Select
“Raspberry Pi Configuration” as shown aside:

The Raspberry Pi has started with the default


user pi and here you can change the password
you defined during the first set-up. Pi is the root-
user (administrator).
raspberrypi
As you see, I keep the default hostname
raspberrypi. Of course, you may use another
name, which is useful when more PI’s are in the
same network.
The next settings are default: Raspberry Pi starts
with the desktop and automatically logs on as
user pi.
Do not change these settings unless you know
how to manage them.

v6.7 Published (March 13th, 2023) Page 32 of 65 User Manual


FortiusAnt - User Manual

If you intend to connect with VNC from your


laptop, you must allow this by enabling the VNC-
interface on tab Interfaces.

If you connect a TFT display (e.g., st7789),


enable the SPI-interface.

Refer to [https://www.realvnc.com/en/] for


more information.

If you ordered a Raspberry Pi with a fan this fan


is probably connected to a 5V/GND on pin 4/6
and running permanently.

You may choose to connect the fan to pin 8/6


which corresponds to GPIO 14. The fan will now
run above 60º and be silent below that
temperature, a transistor circuit is required to
switch the 5V (for the fan) using the 3.3V GPIO
pin.

GPIO = General Purpose IO.

The PIN-layout of the Raspberry Pi4 is displayed


here. Different Raspberry’s may have different
layout but “Component side up; pins to the right”
corresponds to the rightmost image.

Note that the pins are numbered 1, 2...40 and


that the functional numbering GPIO## is
different!
When programming, the GPIO## number is
always used.

Always stop the system before disconnecting


from the power to avoid damage to the (data on
the) SD-card. This is done easily as shown or
alternatively type “poweroff” from the terminal.

v6.7 Published (March 13th, 2023) Page 33 of 65 User Manual


FortiusAnt - User Manual

3.12.5 Install software.


The procedure in the table below will take approximately 15 minutes (on Raspberry Pi 4).
If you want to use an ANT-dongle to
communicate with [CTP] insert that dongle
now.
Start the terminal
Click
Download GIT to be able to install
sudo apt install git
FortiusAnt
Download FortiusANT git clone https://github.com/WouterJD/FortiusANT.git
Warning: type FortiusANT exactly as shown; git is not
case-sensitive but Linux is! FoRtIuSaNt can be cloned, the
same folder-name will be created but scripts will fail.
Note: git clone may fail with an error like “git clone index-
pack died of signal 9”. It seems git clone uses too much
memory and is therefore killed by the host.
There are two known work arounds:
• Increase the swapfile size, e.g. to 1024
• Add -- depth 1 to the git clone command.
Close the terminal exit
These are the only “command line” commands you have to give.
Now open the file manager
Click
The file manager will open in /home/pi
which is the home-directory for user pi.

Of course, the installation-scripts can also


be executed from the command-line.
Note that, on the command-line typing the
whole name is not required type
./1<tab><enter> instead.

Upgrade the system software. Double click 1_UpgradeSystem.sh


You get a pop-up:

Click “Execute in terminal”


Press Enter after the message “System is upgraded, press
Enter to continue”

v6.7 Published (March 13th, 2023) Page 34 of 65 User Manual


FortiusAnt - User Manual

Proceed likewise with the following steps:


Install required packages; execute BLE /
ANT or both. Note that for ANT a suitable 2_InstallPackagesBLE.sh
ANT dongle is required (read issue #61 on 2_InstallPackagesANT.sh (will be created if required)
GitHub first).
Install NodeJs for Bluetooth support
(version 14.15.3). (Note that this is only
3_InstallNodeJs.sh
required if you use the -b parameter which
is BLE using Nodejs)
Some additional installation scripts are
added here, they are not strictly necessary 3_InstallBless_2022Q2_only.sh
but solve problems in modules used by 3_InstallMissingPackages.sh
FortiusAnt. Use as required.
If you want to use the GUI, a modified
wxPython must be installed. Otherwise, you 4_InstallWxPython.sh
may skip this step. Skip for Raspberry Pi 0.
Install FortiusAnt and dependencies 5_GetFortiusAnt_Dependencies.sh
Install the NodeJs parts required for
6_SetupNodeJs_FortiusAnt.sh
FortiusAnt (only if -b is used).
Optional: Configure FortiusAnt to be started
when Raspberry Pi is started (and user 7_RunFortiusAntAtStartup.sh
pi is logged in).
Optional: Make home-directory of user Pi 8_Share_UserPi.sh
accessible through share PiShare.
Select the default values and specify a - If asked for WINS Yes/NO; I always chose YES
password for samba-access. - A password must be specified to access the share.

If using -bb access must be granted 9_GrantAccessToBluetoothForBless.sh


The last step is to grant access to USB to
user pi. To enable this, the system must be
9_GrantAccessToUSB_withReboot.sh
rebooted. Therefore, this is the last step in
the installation procedure.

v6.7 Published (March 13th, 2023) Page 35 of 65 User Manual


FortiusAnt - User Manual

The Raspberry Pi is now restarted and if


everything is well, FortiusAnt is running!
In the raspberry directory, you see the
script FortiusAnt.sh which is started at
poweron/login.
This script contains two lines:
# autostart, bluetooth, gui, led, no ANT
~/FortiusANT/raspberry/FortiusAntMain.sh -
a -b -g -l -D-1
Use other options:
If you want to start-up with other
parameters, you can modify FortiusAnt.sh.
(See section 4.2 “Command line”).
Run headless:
To run headless remove “-g”
Run BLE / bless:
Replace ”-b” by “-bb”
Use ANT-dongle:
If you want to communicate using ANT+
and/or use a Tacx Vortex, Genius or
Bushido.
To use ANT remove “-b” and “-D-1”.
If you want to start-up with other
parameters, you can modify FortiusAnt.sh. Right-click and start editor:
If you want to use the output-display (-O
display option); additional dependencies Execute OutputDisplay_Dependencies.sh
must be installed.

v6.7 Published (March 13th, 2023) Page 36 of 65 User Manual


FortiusAnt - User Manual

3.12.6 Connect LEDs and a button to the Raspberry Pi.


The fun of a Raspberry Pi is that you have an easily accessible GPIO bus (General Purpose IO bus).
FortiusAnt supports connection to five LEDs and a button as follows:
Usage GPIO pin Usage GPIO bus
5 6
Shutdown Cooling fan as
Button (also 8 customized on
powerup) GPIO14
9
Led Tacx 29
Led Shutdown 31
Led Cadence 33
Led BLE 35
Led ANT 37
Ground 39
When -l is specified on the command-line, the LEDs and button are activated. If -l is not specified,
FortiusAnt does not use GPIO-pins.
Using the -L command-line variable, the GPIO-pins can be redefined.
Usage of the LEDs
• Refer to page 29 item 19 “The status LEDs:” for the meaning of the LEDs.

• 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.

v6.7 Published (March 13th, 2023) Page 37 of 65 User Manual


FortiusAnt - User Manual

3.12.7 Connect TFT screen to raspberry.


It’s also possible to use a mini-TFT screen on the raspberry, -O display/180 tells FortiusAnt to use the
ST7789 interface and rotate the image by 180 degrees. Remember to enable the SPI-interface (see page
33) and install the dependencies (see page 36). The display will show the following texts:
After start-up the initial screen is displayed FortiusAnt started
and after pressing the [Locate HW] button, Press [Locate HW]
the screen will be one of the four below. In to continue
case of autostart, FortiusAnt proceeds to the
next screen immediately.
FortiusAnt stopped
For USB-trainers: FortiusAnt started The trainer type is displayed
Tacx Txxxx trainer and then the high-lighted
Where Txxxx is the head-unit
Give pedal kick message shows the state of
connected,
Calibrating... the trainer.
<device> is ANT, BLE or both.
Activate <device>
And “Give pedal kick” and “calibrating” Ready for training USB-trainers:
are only displayed when applicable Trainer stopped When [Start] is pressed,
(depends on trainer and -n flag) <device> stopped calibration is activated (if
FortiusAnt stopped applicable).
For Vortex trainers: FortiusAnt started
Tacx Vortex trainer After calibration, the
<device> is ANT, BLE or both.
Activate <device> ANT+/BLE interface is
Waiting for Vortex activated, and a CTP will see
Ready for training FortiusAnt.
Trainer stopped
<device> stopped The ‘ready for training’
FortiusAnt stopped message will quickly be
For Genius trainers: FortiusAnt started replaced by the info-screen
Tacx Genius trainer below.
<device> is ANT, BLE or both.
Activate <device>
Waiting for Genius ANT+ trainers:
Nudge wheel forward When [Start] is pressed, the
Calibrating... ANT+/BLE interface is
Ready for training activated, and a CTP will see
Trainer stopped FortiusAnt.
<device> stopped
FortiusAnt stopped Then FortiusAnt waits for the
For Bushido trainers: FortiusAnt started trainer to pair and when
Tacx Bushido trainer paired, will get into the
<device> is ANT, BLE or both.
Activate <device> ‘Ready for training’ state.
Waiting for Bushido
Ready for training The Genius will do calibration
Trainer stopped after pairing and then get into
<device> stopped the ‘Ready for training state’.
FortiusAnt stopped
When the ‘ready for training’ state is entered, Speed 0 km/hr
the display will show the actual values Cadence 0 /min
Power 0 Watt
Target 0 Watt
Gears 50 : 19
When the [Stop] button pressed, the …
ANT+/BLE interfaces are disabled and the
‘FortiusAnt stopped’ message is highlighted. FortiusAnt stopped
When the shutdown button is pressed the …
raspberry is stopped and power can be
disconnected Power
can be disconnected

v6.7 Published (March 13th, 2023) Page 38 of 65 User Manual


FortiusAnt - User Manual

Example of Raspberry Pi with LEDs and button

Raspberry Pi 4
Starting off with a
standard Raspberry Pi 4
casing …
Some marking on the
removable front
and soldering the leds

and the Raspberry is


operational.

Raspberry Pi Zero W – with button

The Raspberry Pi Zero is the cheapest option;


one button is enough to shutdown properly 

For more suggestions, refer to


https://github.com/WouterJD/FortiusANT/ wiki/
Raspberry-Pi-Hall-of-Fame
I hope these pictures encourage you
to get creative!
Post your pictures in issue 14 (Put yourself on
the FortiusANT map!) and they will be added to
this page.

3.12.8 Now pair with a CTP


Zwift, Trainer Road, Rouvy, Sufferfest, Golden Cheetah, Road Grand Tour, BigRingVR, TTS and many
others can now pair with the Bluetooth trainer “FortiusANT Trainer” on a device that supports BLE. A
Smartphone (Apple or Android) is probably the most generally available device to use and from there the
screen can be easily streamed to a TV or monitor. Of course, you can also use a PC with a Bluetooth
dongle.
I think that this is the recommended configuration because BLE is native on Raspberry Pi, a Bluetooth
dongle is usually cheaper than an ANT-dongle and because ANT-dongles are hard to get (see issue
#61). Also, it seems that the market of CTP’s is moving from ANT to BLE; usually Bluetooth is preferred
and/or supported before ANT.
To connect a Bushido, Genius or Vortex – of course an ANT-dongle is required to connect with the
trainer; communication with CTP can then be done through ANT or BLE. Note that these ANT-based
trainers are found after that Start is pressed.

v6.7 Published (March 13th, 2023) Page 39 of 65 User Manual


FortiusAnt - User Manual

4. Operating instructions

4.1 The main functions of FortiusAnt and the head unit.


After FortiusAnt is started (see 3.9 “Start FortiusAnt”) you will see the user interface with the buttons
Settings, Locate HW, Runoff, Start and Stop.
The correct start-up sequence is:
• Setup environment (trainer, computer, bicycle, connections) and connect heartrate monitor.
• Start FortiusAnt.
• Press Locate HW to connect to USB-devices (Tacx trainer and/or ANTdongle)
• Execute runoff-procedure (magnetic brake trainers)
• Press Start
o complete Calibration – motor brake trainers and Genius only
o wait until Bushido, Genius or Vortex trainer are paired to FortiusAnt.
• Start [CTP] and pair with FortiusAnt.
• Start Training or Virtual Ride.
On a raspberry, a small display is connected showing the FortiusAnt process; refer to 3.12.7 “Connect
TFT screen to raspberry.” for more info. This section also provides additional information on the process
of FortiusAnt, including differences between the different trainer types.

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.3 Runoff test


To ensure comparable and accurate training sessions, the trainer should provide the same relative
resistance each time
1. Aim for about 7 bar (100psi) in the rear tire when cold
2. Warm up for 2-3 minutes to warm tire
3. Increase speed and exceed 40 km/hr then stop pedaling and let wheel slow down on its own
4. Ideally, the wheel should stop after 7 seconds from 40km/h
If the rundown time is too short, the rolling resistance may be too high and if the rundown is too long, the
rolling resistance may be too low. In that case, adjust the roll using the wheel behind the trainer
motor/brake and retry the rundown test.
Using the -R command-line parameter, the procedure can be customized:
• maxSpeed = the speed that must be reached, default = 40 km/hr (allowed = 20…50)
• dip = the speed under maxSpeed when the runoff timer starts, default = 2 km/hr (range allowed =
0…5)
• minSpeed = when the runoff-timer stops, default = 1 km/hr (range allowed = 0…10)
• targetTime = runoff target time, default = 7.2 seconds (range allowed = 0…10)
• power = the power during the runoff, default 100W (range allowed = 0…500)

v6.7 Published (March 13th, 2023) Page 40 of 65 User Manual


FortiusAnt - User Manual

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).

4.1.6 Buttons on the Tacx head unit


There are four buttons: Cancel, Enter, Up, Down.
• If not in an active mode, Up/Down navigates through the menu,
Enter activates the selected button. You cannot use Cancel
anymore to stop FortiusAnt; the “Stop”-button must be used.

• In runoff or manual mode, Up/Down modifies the required power


by ±10Watt. OK * resets the power to the initial value of 100Watt.
Cancel stops the runoff.

• In manual grade mode, Up/Down modifies the slope by ±1degree.


OK * resets the slope to the initial value of 0 degrees.
• In homeTrainer mode, Up/Down modifies the required power by ±10%. OK * resets the power to the
initial value of 100Watts. The minimum value is 10Watts.

• 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.

v6.7 Published (March 13th, 2023) Page 41 of 65 User Manual


FortiusAnt - User Manual

4.1.7 ANT+ Remote Control


It may be useful to use an ANT+ Remote control instead of the head unit. Not all
Tacx configurations have a head unit; sometimes the head unit does not fit the bike
or the buttons are impractical.
Any standard ANT+ Remote Control can be used to command FortiusAnt acting as
Up / OK / Down as described in the previous paragraph.
No configuration required; you can pair the control with FortiusAnt as described in
the related manual.

4.2 Command line


FortiusAnt is started with a command (see 3.9 “Start FortiusAnt”). In addition to the examples shown
there, parameters can be passed by using the command-line:
usage: FortiusAnt.py [-h] [-a] [-A] [-b] [-bb] [-B 0...65535] [-c 0...100] [-d 0...65535] [-D USB-DeviceID] [-e]
[-g] [-G % / % / %] [-H ANT+DeviceID] [-i] [-l] [-L value] [-m] [-M] [-n] [-p %] [-P] [-r]
[-R see text] [-s] [-S {wired,Blacktrack}] [-T see text]
[-t {Bushido,Genius,Vortex,Magneticbrake,Motorbrake,i-Vortex}] [-x]
Basic arguments:
-h show this help message and exit
-i shows speed in imperial units (mph)
-a Automatically start; “Locate HW” and “Start” if the required devices were found.
-b or -bb Advertise FortiusAnt as “FortiusAnt Trainer” on a Bluetooth Low Energy dongle using the
node.js/bleno or bless library.
-e Run in homeTrainer mode (-e stands for Exercise bike)
-g Run with graphical user interface (GUI).
-t value Specify Tacx Type; if not specified, USB-trainers will be detected automatically. Allowed
values are: Bushido, Genius, Vortex, Magneticbrake, Motorbrake.
Raspberry:
-l When -l is specified the RPi LEDs and button are activated. If -l is not specified,
FortiusAnt does not use the RPi GPIO-pins.
-L value The value specifies the GPIO-pin for Button(3), TacxLed(5), ShutdownLed(6),
CadenceLed(13), BLE-Led(19) and ANT-Led(26), separated by /. The default values are
mentioned between (and). If -O is specified, the button is moved to GPIO-16.
-O value The value specifies what OutputDisplay is to be used. Allowed values are display
(default ST7789 TFT display), st7789, st7789b or console. For displays, also a rotation
can be defined, separated by / (0,90,180,270 degrees).
Power curve adjustment:
-c value Calibrate the rolling resistance for magnetic brake. See section 6.4 “PowerCurve for i-
Flow (T1901-T1932)”. Default is 15. If the power, displayed by FortiusAnt is higher than
your power-meter, specify -c 14 to reduce the RollingResistance by 1 Newton.
-G value Modify the requested grade with a factor/factorDownhill; see section 6.4 “PowerCurve for
i-Flow (T1901-T1932)”. Note that GradeAdjust is not active in manual mode.
FortiusAnt -a -g  the default value: targetGrade = 100% of requested Grade
FortiusAnt -a -g -G50  recommended when using Rouvy: targetGrade = 50%
FortiusAnt -a -g -G50/50  targetGrade = 50% (uphill) and 25% downhill (50% * 50%)
FortiusAnt -a -g -G100/0  targetGrade = uphill only (replaces former -u flag)
FortiusAnt -a -g -G0/0  targetGrade = always flat
-p value Adjust target Power by multiplying by this factor for static calibration.
If the power, displayed by FortiusAnt is always 10% higher than your power-meter,
specify -p90 to reduce resistance by 10%.

v6.7 Published (March 13th, 2023) Page 42 of 65 User Manual


FortiusAnt - User Manual

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.

v6.7 Published (March 13th, 2023) Page 43 of 65 User Manual


FortiusAnt - User Manual

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.

Since version 6.3 the options can be specified as a series of letters:


A = Application (1)
f = Function (2)
a = antDongle (4)
u = usbTrainer (8)
m = multiprocessing (16)
j = jsonFile (32)
b = Bluetooth Low Energy (64)
p = Performance (128)

D = standard python logging, DEBUG


I = standard python logging, INFO
W = standard python logging, WARNING
E = standard python logging, ERROR
C = standard python logging, CRITICAL

all = activate everything


log = activate everything with exception of jsonFile

-r Target Resistance = Target Power (to create power curve)


-s Simulate trainer to test ANT+ or BLE connectivity.
Examples:
FortiusAnt.py FortiusAnt is started without user-interface, -g -a -A -H0 are assumed.
FortiusAnt.py -g -a FortiusAnt is started with user-interface and starts automatically.
FortiusAnt.py -g -m FortiusAnt is started with user-interface. No [CTP] is required, power
can be set using the console. Although intended for interface testing,
you could do a manual ride this way.
FortiusAnt.py -g -M Same as -m but now the slope-grade can be adjusted.
FortiusAnt.py -g -s FortiusAnt is started with user-interface. No [FE] is required, automatic
response to [CTP] is generated. This is intended for interface testing.
FortiusANT.py -a -g -H0 -t Bushido
FortiusANT.py -a -g -H0 -t Genius
FortiusANT.py -a -g -H0 -t Vortex

v6.7 Published (March 13th, 2023) Page 44 of 65 User Manual


FortiusAnt - User Manual

4.3 Modify settings


When pressed, the following dialogue appears. The dialogue contains the settings that are currently
active.

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.

v6.7 Published (March 13th, 2023) Page 45 of 65 User Manual


FortiusAnt - User Manual

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>

v6.7 Published (March 13th, 2023) Page 46 of 65 User Manual


FortiusAnt - User Manual

4.5 The FortiusAnt display in power mode

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.

v6.7 Published (March 13th, 2023) Page 47 of 65 User Manual


FortiusAnt - User Manual

4.6 The FortiusAnt display in grade mode

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!

v6.7 Published (March 13th, 2023) Page 48 of 65 User Manual


FortiusAnt - User Manual

4.7 Debugging FortiusAnt


FortiusAnt has a debugging flag -d specifying what output must be written to the logfile.
(See 4.2 Command line)
If you want all options activated use, -d all.
To log the ANT+ calls: use -d a and if you want ANT+ and the USBtrainer to be logged use -d au.
If -d j is specified, a JSON file will be created with the relevant data from FortiusAnt. This may be helpful
for further analysis.
Although books could be written to explain the content of logfile and JSON file, I leave it to the user’s
creativity to understand the content. If you want to interpret the JSON file,
“FortiusAnt JSON Analysis.xlsx” in the support files section on github may be helpful.
Note that when the GUI is running in a separate thread (e.g. because Pedal Stroke Analysis is active) a
.GUI.log file is also created.

v6.7 Published (March 13th, 2023) Page 49 of 65 User Manual


FortiusAnt - User Manual

5. FAQ and Troubleshooting

5.1 Low cadence on Fortius


One of the limitations of the Fortius is the resistance at low wheel-speed, which implies a low rotational
speed of the brake (combined with a high torque).
If you have a high wheel-speed the Fortius can realize a resistance of up to 1000Watts. This works fine
and is good to train your power output.
Doing an “Uphill training at 20%” requires some thinking however. In real world, you would change gears
and reduce speed to be able to ride uphill. If you do that on a Tacx Fortius, you will quickly touch the “low
wheel-speed limitation”.
On the Tacx Fortius, I always use the highest gear on my bike, and therefore realize the highest possible
wheel-speed. All I do is vary cadence – and don’t use the bikes shifters. When looking at the wheel-
speed, you will ride uphill with an unrealistic speed. But hey, note that modern direct-drive trainers don’t
even have a rear wheel. The message is: ignore the wheel-speed.
In the example of the 20% uphill, even at 50 rpm, probably the required power will be too high to
realize.at that moment use the “virtual gear box” shifting with the head-units up/down buttons to
reduce/increase speed (internally: reduce required resistance).
Summarized: use highest gear on the bike, vary cadence and the virtual gears in FortiusAnt.
Refer to section 2.6 ”Tacx Trainer Power ranges”.

5.2 Flat resistance on magnetic brake at low speed (#223)


If you do a virtual tour on Rouvy and tend to be in a relative high gear it may mean that you simulate a
ride uphill of 10% at a speed of 30 km/hr. This will result in a high resistance and you need a high FTP!
Most likely you will not enjoy the ride, your speed will decrease and you will be training at low cadence
and when you switch to a lower gear and/or ride at a lower speed the brake does not feel good.
See also previous topic.
You can tune FortiusAnt in two ways:
• Use the virtual gear and shift to a lower gearing
• Specify -G50 on the FortiusAnt command-line to reduce the slope.
For more info refer to issue #223.

5.3 Power tuning with Golden Cheetah (#231)


This is not an issue but I wanted to recognize the excellent work you have done and provide a setup that
others may find useful.
I’m running on Windows 10 and the hardware in use is as follows: Tacx Trainer T1932 (Motor Brake Unit
Firmware=0x1007 Serial= 6639 year=2010 type=T1941 Version2=3086 MotorBrake=True) and using the
development version of Golden Cheetah and selecting the FEC trainer presented by FortiusAnt
One of the issues I had was adjusting the power (which you kindly solved in #210). With the new feature
in 5.1 of the virtual gears I now have a working setup where I can fine tune the power reflected by the
brake as it changes during the session (this is something that the brake I have has always done…power
changes through the session, sometimes quite a lot).
Basically, I use the virtual gearing to do the fine adjustment during the session and I leave Golden
Cheetah to adjust the actual power rates for the session.
I start FortiusAnt with the following options (the HRM is really optional -H0 works just as well). The power
difference between the value recorded from the brake and the powertap hub in use is adjusted at a macro
level using '-p135' and I have tightened up the mid-range virtual gearing so that I have fine granularity

v6.7 Published (March 13th, 2023) Page 50 of 65 User Manual


FortiusAnt - User Manual

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

5.4 Zwift speed does not match Garmin


If you ride your bicycle on your trainer the speed that Zwift displays does not match Garmin's speed.
Your Garmin receives the speed from the bicycle and displays the real speed of the wheel on the trainer.
(Probably you realize, with the same effort, you would not achieve that speed in the real world)
Zwift receives the realized power from the trainer and uses its own algorithms to conclude what speed
you are riding: If riding on a flat surface, without headwind, the simple formula would be:
speed=power/resistance. But when you ride uphill and you take air-resistance into account, the formula is
far more complicated.
Interested in the power you need to ride?
• https://www.fiets.nl/2016/05/02/de-natuurkunde-van-het-fietsen/
• https://www.gribble.org/cycling/power_v_speed.html
The gribble formulas are used by FortiusAnt to convert grade to power - see also section 2.5.2 “Grade
mode”.

5.5 Average speed in Trainer Road


Jerome uses TrainerRoad and notices that during a ride his average speed is 20km/hr and his friend is
going at 40 km/hr. How is that possible?
Imagine that TrainerRoad requires you to ride with a Power of 200Watts, the two riders have the same
bike and the same trainer and have selected the same gear-ratio.
If Jerome choses to ride with 50 rpm, his speed will be low, and the trainer will increase the resistance so
that the required power of 200Watts is realized.
If his friend rides at 100 rpm, his speed will be higher than yours and the trainer will decrease the
resistance so that the required power of 200Watts is realized.
Note that power = resistance * speed! Jerome rides at half speed of his friend, but with a higher
resistance and hence both athletes produce the same power at a different speed and different distance.
Note therefore that, on a [FE] speed and distance are irrelevant, time, power and cadence are the
deciding factors.
For you it's a pity that your Strava statistics for the end-of-year applause are adversely affected; but
having read the explanation that would be a lesser issue.
The situation in real world is different: if you go for a ride together time, speed and distance will be the
same and therefore you will come home with the same average power. Difference choice in gears will
change the resistance and cadence with less impact on the Strava results.
Why would you ride at 50rpm or 100rpm?

v6.7 Published (March 13th, 2023) Page 51 of 65 User Manual


FortiusAnt - User Manual

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).

5.6 Can TTS4 and FortiusAnt coexist?


[TTS] is Tacx’ own training software which uses its own USB-driver and/or ANT+ interface. The
installation instruction suggests to de-install (for simplicity), see 3.6 “Install USB-driver”.
The following information is of interest for everybody who would like to work with [TTS] and other [CTP]’s.
iepuzaur: I am running on Windows10 TTS4 and FortiusAnt, at first I also thought I have to uninstall the
Jungo driver TTS uses, but then I noticed you can have both drivers installed and there is no issue
on my system.
Of course, you cannot use them concurrently, if you start TTS4 it will use the Jungo driver, while
when you start FortiusAnt the libusb drive will be selected.
So as long as you do not intent to use them at the same moment, the drivers shall not conflict (at
least this is my case). (Thanks to @iepuzaur, june 2020).
Note however: If your TTS4 software is already installed and registered then that should work. If it isn't, it
won't as the registration servers have been switched off. The only software that works without
registration is Fortius v2.02.
Never uninstall TTS4 if you have a working registered copy as there is no way to reinstall it and re-
register it. (Thanks to Shaun Murray, @aegisdesign, sept 2020).
frenske8: I have been using FortiusAnt for 2 months now in combination with the Tacx Desktop App
(Windows 10). It works fine! The Tacx Desktop App connects via ANT with ANT-ID 57591
(identified as Tacx Neo2T!).
Incidentally, I also own the 4iii Viiiva HRM with ANT to BT bridge, but I expect the bridge to work in
one direction only, so not from BT to ANT. So, using BT via the 4iii HRM is unlikely to provide a
solution, I failed. However, this is not necessary, because FortiusAnt can work directly via ANT with
the Tacx Desktop App.
By the way: I’m using FortiusAnt and Tacx App on two different laptops, because I sometimes want
to use Tacx TTS4 (installed on the same laptop as Tacx Desktop App). I failed to get FortiusAnt
and TTS4 to work on the same laptop.
Note that, TTS4 and Tacx Desktop App are 2 different applications. TTS 4 is outdated software, but
like the Tacx Desktop App. A few years ago, Tacx replaced TTS4 with the Desktop App and they
changed the revenue model: with the Desktop App they introduced the subscription model (monthly
/ annual fee). TTS4 uses real life videos that had to be purchased separately.
FortiusAnt also works with TTS4 (with 2 laptops), but that is not necessary, because TTS 4 also
works via the USB connection of the Fortius trainer (with the Jungo USB driver that is installed by
TTS4). It is tricky to uninstall the jungo driver (to try to run TTS4 and FortiusAnt on 1 laptop),
because Tacx has ended the support of TTS4 and reinstallation of TTS4 is therefore no longer
easily possible (because Tacx servers for authentication are out of operation).
(Thanks to @frenkse8, August 2020)
Github; read issues #99, #168, #180
TTS/ANT+; TTS can successfully pair with FortiusAnt and then the Tacx USB driver is not needed
anymore. Of course, then two ANTdongles are required.

v6.7 Published (March 13th, 2023) Page 52 of 65 User Manual


FortiusAnt - User Manual

5.7 TTS and FortiusANT on Dedicated USB-ports


@Barry01 wrote: https://github.com/WouterJD/FortiusANT/issues/256#issuecomment-792636230
The way that was successful for me, is the following:
• I use TTS4 while the trainer is connected to USB port 1. So, check that the trainer is connected to
the USB port you want to use with TTS.
• Switch the trainer to the USB port you want to use with FortiusANT (I use USB port 3), the device
manager should automatically assign the Jungo driver by default
• Download the libusb driver as described in chapter 3.6.2. of the manual. Do not uninstall the TTS-
driver.
• Install the libusb driver (by executing the 64 bit version in case of Windows 10) and follow install
option 1 in chapter 3.6.2 of the manual so that the driver is now assigned to the trainer.
• -Then, I put my Suunto ANT+ dongle in USB port 1 and I start FortiusAnt with parameters -a -g -
A.
• Calibrate as described in 4.1.4. of the manual.
• After calibration, my heart rate is shown in the GUI and I put my second ANT+ dongle (brand:
Anself) in USB port 2.
• Now I am ready and I start Zwift.
For me this works perfect as Windows remembers which driver to choose for which USB port. So I don't
have to fiddle with the drivers anymore. I just marked the USB ports so it is easy to see where to
put in the trainer for which use case ;)

5.8 Tacx head unit with firmware to be loaded


Some head units (0xe6be, Old "solid blue" Fortius) do not have firmware; the firmware must be loaded.
When FortiusAnt discovers a 0xe6be head unit, the firmware is loaded automatically and (after a wait
time of 5 seconds to let the head unit reboot) a 1942 head unit is expected to be present. The following
messages will be displayed, before/after loading the firmware:
....Stop CPU
....Start CPU
Some users have reported that the head unit is not found after the reboot and state that this can be
resolved with the following settings in the Power Management Options of the libusbK inf wizard:

v6.7 Published (March 13th, 2023) Page 53 of 65 User Manual


FortiusAnt - User Manual

5.8.1 Unable to load firmware" on 1942 head unit


In other cases, the head unit was not found because old TTS-drivers were still available. It seems that the
head unit (without software) is detected by the libusb-driver but not after the reboot (#158)!
@BrRoBo reports through issue #155 see also #101:
I seem to have had the exact same issue as @bradyap, but found a quick solution to my case. Brady's
screenshots of his issue are identical to what I was seeing and we had the same head unit... T1942. The
install is on a clean version of Windows 10 64bit, no prior TTS or other Tacx software installed.
What I think happens is that we do the lib32 USB driver install and successfully see the Fortius unit listed
under libusb-win32 devices along with how-ever-many Ant USB stick 2 are connected. Then when we run
the FortiusAnt.exe application, it seems to be looking for a different device or registration, causes the
Fortius to unload from the list of "libusb-win32 devices" and then there is a new "Tacx Fortius" listed
under "Other devices". This unregistration, re-registration cycle is reproducible over and over by
disconnecting the Fortius USB, then plugging it in to load the lib32 driver and seeing it properly listed;
then using the FortiusAnt "Locate HW" will again cause the Fortius to get re-registered under "Other
devices".
The simple solution at this point is to open the properties for the "Tacx Fortius" listed under "Other
devices", then "Update drivers", select "libusb-win32 devices", then "Tacx", then select whatever name
you used ("VR-Interface", "Fortius Virtual Trainer", etc. FWIW, I used the latter "Fortius Virtual Trainer" as
my device name). Bingo, the Fortius head unit is reloaded into the correct list of "libusb-win32 devices".
Issue fixed for this USB port. If the Fortius USB plug is moved to a different port, this library/device driver
fix must be performed once for each port to correct the issue and then will no longer occur if the Fortius
USB cable is moved to different ports.

5.9 Fortius without cadence sensor


Although it appears that the cadence sensor is for information purpose only the Fortius (and perhaps
other Tacx trainers as well) does not work if no cadence sensor is connected and/or no cadence is
measured. Note that the magnet must be correctly positioned relative to the sensor.
In a downhill ride, the brake will drive your bike (negative power) provided that you keep pedaling. If you
stop pedaling, the motor will stop. Also in normal mode, usually after 4 seconds or so, if the unit detects
no cadence, it will "stop" the motor.
If you do NOT have a cadence sensor, you will experience a high resistance – because the brake is in
stop-mode. Therefore, operation without the standard cadence sensor is not possible.

5.10 Two ANTdongles – disturbed communication


Two laptops are used:
• The left laptop is connected to Tacx Fortius, is running FortiusAnt and has the ANTdongle at the
left side.
• The right laptop is running Zwift and has the ANTdongle at the right side.
Sometimes the connection is lost and FortiusAnt does not display the required grade as transmitted by
Zwift or Zwift appears not to receive power data from FortiusAnt.
After moving the dongles so that these are closer to each other the transmission errors were gone.
Perhaps the presence of two computers between the two dongles disturbs the ANT-transmission; note
that ANT is low-power.
Therefore, in case of transmission errors check whether there may be interference by placing the dongles
closer together with no other electronic devices between them.

v6.7 Published (March 13th, 2023) Page 54 of 65 User Manual


FortiusAnt - User Manual

5.11 Tacx returns insufficient data


This error can be displayed and has different reasons:
• FortiusAnt reads too often from the head unit and therefore the head unit is not ready to provide
the next buffer
• Loose or faulty cabling
• Other hardware errors
The following message is given
Tacx returns insufficient data, len=XX
To resolve, try to run without Pedal Stroke Analysis (PSA)
When pedal stroke analysis is active (-A flag), FortiusAnt reads more often from the head unit and
this MAY cause the error.
Or Tacx returns insufficient data, len=XX
To resolve, check all cabling for loose contacts
FortiusAnt is developed using a 1932 head unit on a Tacx Fortius. In that environment, the message is
given very seldomly and the built-in retry (4 times) appears to work. Some systems, even without Pedal
Stroke Analysis, show the short message error more often which needs further investigation.

5.12 Sudden drop of requested power


If you are experimenting with multiple CTP’s (for example Zwift on one system and Trainer Road on
another) it is possible that multiple CTP’s send commands to FortiusAnt. FortiusAnt listens to both and
changes behavior as requested. If one CTP commands 100Watts and the other sends Grade=-20% the
required power will bounce between the two requests.
This can be intended, for example you ride a structured training in Trainer Road and entertain yourself
with a virtual ride in Zwift. In that case specify -P so that the ERG mode commands from Trainer Road
take precedence over the grade-mode requests in Zwift.

off one of the CTP’s সহ঺঻


Of course, if two CTP’s both send ERGmode requests (100Watts and 200Watts) then you’d better switch
.

5.13 Zwift on Android does not pair with FortiusAnt


Check Zwift whether your Android/ANT hardware is supported; that is not always the case.
Reference: https://forums.zwift.com/t/ant-update/195323/119
Please understand I do not try to maintain a Zwift (or other CTP) hardware compatibility list.

5.14 Detailed notes on Tacx Genius


• Installing t19xx USB drivers is not required
• Turn Genius brake on
• Run FortiusAnt with '-a -g -H0 -t Genius'
• Pairing to the Genius is automatic (may take a minute)
• Calibration is initiated automatically after pairing
• When requested, nudge the wheel forward by hand (or give the pedals a light kick)
• The brake spins up the wheel automatically, DO NOT PEDAL DURING CALIBRATION
• After calibration is complete, a calibration value will be shown
• A value between -15 and 15 is good
• A value lower than -15 indicates that the roller pressure is too low, should increase using knob on
the trainer
• A value lower than +15 indicates that the roller pressure is too high, should decrease using knob
on the trainer

v6.7 Published (March 13th, 2023) Page 55 of 65 User Manual


FortiusAnt - User Manual

• 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

5.15 Detailed notes on Tacx Bushido


• Installing t19xx USB drivers is not required
• Bushido support is developed under issue#117; consider leaving feedback there
• The Bushido head unit (T1982) is (currently) required
• Head unit needs to be turned on and paired to the brake (see Tacx manual)
• Calibration is done on the head unit (see Tacx manual)
• Run FortiusAnt with '-a -g -H0 -t Bushido'
• Press Locate HW and Start
• Pairing to the Bushido will then be done automatically (may take a minute)
• Head unit buttons can be used to control FortiusAnt (keymap is the same as Vortex)
Known issues:
• If power is not transmitted properly, it may help to reset the head unit:
• Settings -> Info -> 10x right arrow (suggested by @tinusvee)
• Virtual shifting is currently not implemented for the Bushido
Additional note as reported in issue 319 by @switchabl: with the Bushido Smart T2780/T2790 you should
NOT need FortiusANT. It can connect to Rouvy directly. If Rouvy does not see it, you need to
install the firmware update using the "Tacx Utility" app (see link above). Bushido support in
FortiusANT is intended for (non-Smart) Bushido T1980. It may or may not work with the T2780
(untested), but there is no good reason to try it.

5.16 Bluetooth (BLE) needs lib_programname, bleno, express (#229)


Reported in issue 229: “I had problems running the latest version did not find it in the documentation.
When I ran FortiusAnt version 5.1 on Windows 10 I thought my firewall was blocking the connection to
node as it could not connect to server.
I ran the server manually and got the error about bleno and express.”
The following commands solved my issue:
python -m pip install lib_programname
npm install bleno
npm install express
After installing the missing packages it worked.

v6.7 Published (March 13th, 2023) Page 56 of 65 User Manual


FortiusAnt - User Manual

5.17 Bluetooth (BLE) Node.js installation does not install tools.


After Installing Node.js, even though the checkbox to “install the necessary tools for native modules” is
selected, no post-installation is done.
No clear reason is found, but after switching off IPv6 on the network controller, installation proceeded.

5.18 Odd behavior in cold garage (#248)


@oldgerian wrote: I suspect the answer lies in your very last point of your ‘freezing cold garage’. I am
training in a freezing cold cabin in the garden and it took me about a week, 2 new connection cables (usb
and motor) 3 or 4 uninstalls and re-installs of FortiusAnt software etc before I realised that the T1932
headset just doesn’t want to work after a night in sub zero temperatures.
I now treat it with the respect it deserves and bring it inside at the end of each workout to warm up, along
with laptops and any other electrical equipment which doesn’t like very cold weather.

5.19 ANT connection drops when USB-hub used


See issue #332 where @KDrB exclaims “U N B E L I E V A B L E !!! My TACX i-magic hardware starts to
work with Fortius ANT on my i7/Win10 machine!!!
What happened? I found on one of electronic forum quite another suggestion about problems with
dongles, maybe stupid, too simple, too obvious... plug in your USB hub into another socket.
I've done it for peace, I didn't expect any changes. BUT IT MADE IT WORK!!!!!!!!!!!!!!!!!!!!!!!”

So … if you use a USB-hub AND you have connectivity issues, try to get the best position possible!

v6.7 Published (March 13th, 2023) Page 57 of 65 User Manual


FortiusAnt - User Manual

6. Power curve validation

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.

6.2 Test for Tacx Fortius (T1932)


The algorithm is tested on a Tacx Fortius with a T1932 head unit, using a bicycle with power-meter.
FortiusAnt is started in manual mode (-m flag) so that power can be selected.
Test protocol.
Select gears for 10, 20, 30, 40, 50 km/hr at reasonable cadence (e.g. 90 rpm).
For each speed perform the following test:
Manually select power 50Watts (up/down button on head unit).
Ride until reading from FortiusAnt and Power Meter is stable.
Write down power from Power Meter (46 in table).
Increase power on head unit 100, 150, 200, 250, 300 Watts and repeat test.

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.

v6.7 Published (March 13th, 2023) Page 58 of 65 User Manual


FortiusAnt - User Manual

6.3 Test for i-Magic (T1901-T1902)


@yegorvin has performed a performance calibration test using his iMagic with T1901 magnetic brake,
T1902 head unit and a power meter. Note that the T1902 head unit is different from (all) other head units
[TotalReverse].
The test is performed as follows:
- FortiusAnt is operated in manual mode (-m flag), modifying the power from 10...250 in 10 Watt steps.
- The power as selected is transferred directly to the iMagic (Resistance = TargetPower) without
intermediate formula. (The Python code is changed for this)
Results of the test are:
Res 10km/hr 20km/hr 30km/hr 40km/hr
10 32 85 140 190
20 32 85 140 190
30 32 85 140 190
40 32 89 140 190
50 32 89 140 210
60 34 93 150
70 35 100 160
80 38 105 170
90 40 112 193
100 42 128 210 310
110 48 139 230
120 50 142 235
130 50 145 245
140 52 152 250
150 58 162 265 ~410
160 60 180 285
170 65 190 310
180 68 198 332
190 70 207 340
200 72 207 365 ~550
210 72 210 370
220 75 210 390
230 75 210 390
240 75 210 390
250 75 210 390

The power curve of the iMagic is as shown below, where the range R=50...200 seems quite linear.

v6.7 Published (March 13th, 2023) Page 59 of 65 User Manual


FortiusAnt - User Manual

Convert Resistance to Power formulae


The assumption is that Power = a * Resistance + b, when using the target resistance of 50W we have
three formulae, one for each speed:
Speed = 10: 32 = 50 a + b
72 = 200 a + b ==> P10 = R * 0.27 + 19
Speed = 20: 89 = 50 a + b
207 = 200 a + b ==> P10 = R * 0.78 + 50
Speed = 30: 140 = 50 a + b
365 = 200 a + b ==> P10 = R * 1.50 + 65
And with this, we could create the function as follows:
Function Resistance2PowerLegacy(Resistance, Speed) As Double
If Speed = 30 Then
Resistance2PowerLegacy = Resistance * 1.50 + 65
ElseIf Speed = 20 Then
Resistance2PowerLegacy = Resistance * 0.78 + 50
ElseIf Speed = 10 Then
Resistance2PowerLegacy = Resistance * 0.27 + 19
End If
End Function
But of course, this would work for three distinct speeds only.
A good formula for the constants 65, 50 and 19 is 2.2 * Speed and validation shows that it's good enough.
But there is no linear solution for 1.50, 0.78 and .27, so let's go for F = ax2 + bx + c (where x=Speed)
0.27 = 100 a + 10 b + c
0.78 = 400 a + 20 b + c
1.50 = 900 a + 30 b + c ==> F = 0.001543 Speed2 + 0.0001848 * Speed + 0.1058
<==> Speed2 / 648 + Speed / 5411 + 0.1058
and the final formula then becomes:
Function Resistance2PowerLegacy(Resistance, Speed) As Double
Resistance2PowerLegacy =
Resistance * (Speed * Speed / 648 + Speed / 5411 + 0.1058) + 2.2 * Speed
End Function
To check:
S = 10, R = 50; P = 50 * (10 * 10 / 648 + 10 / 5411 + 0.1058) + 2.2 * 10 = 35
R = 200; P = 200 * (10 * 10 / 648 + 10 / 5411 + 0.1058) + 2.2 * 10 = 74
S = 20, R = 50; P = 50 * (20 * 20 / 648 + 20 / 5411 + 0.1058) + 2.2 * 20 = 80
R = 200; P = 200 * (20 * 20 / 648 + 20 / 5411 + 0.1058) + 2.2 * 20 = 190
S = 30, R = 50; P = 50 * (30 * 30 / 648 + 30 / 5411 + 0.1058) + 2.2 * 30 = 141
R = 200; P = 200 * (30 * 30 / 648 + 30 / 5411 + 0.1058) + 2.2 * 30 = 366

v6.7 Published (March 13th, 2023) Page 60 of 65 User Manual


FortiusAnt - User Manual

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.

6.4 PowerCurve for i-Flow (T1901-T1932)


At first, FortiusAnt was developed for the Fortius, using the T1932 head unit and the T1941 motor brake.
Then the so-called Legacy USB interface was explored (see previous paragraph) using the T1901
magnetic brake and T1902 head unit.
Tacx also sold combinations of the “new” T1932 head unit and the “old” T1901 brake; so that Magnetic
brake users could use Virtual Reality CTPs. This combination has a special behavior: instead of a
resistance that can be set with a value from 30…226 (magnetic brake) or -5000…+10000 (motor brake)
this configuration supports 14 distinct levels.
Experiments show that the following levels are supported (thanks @bikebeppe64 for the tests and
@antifier for the table).

The power of the magnetic brake is:


Speed * (ScaleFactor * Resistance * Speed / (Speed + CriticalSpeed) + RollingResistance)
Where ScaleFactor = 0.013 N, CriticalSpeed = 4.67 m/s and RollingResistance = 15N
Note that:
• Power = Speed * ScaleFactor * Resistance is: the braking force due to the magnetic brake: this depends on the
resistance setting and the speed. (This is just basic physics; you might even say it is just the definition of power). The
ScalingFactor translates the resistance value from the head unit into units of force (unit N = Newton).
• The factor + Speed * RollingResistance is the rolling resistance of the tire, due to the tire deforming continuously as it
turns: this would be there even if we removed the magnets in the brake and turned it off. It is largely independent of
speed, but can vary a lot with different tire material, size and pressure and the knob setting on the trainer. It is different for
everyone and may be different today than it is tomorrow if you forget to pump up your tire.
• The factor (Speed / (Speed + CriticalSpeed)) the brake cannot deliver the same braking force at all speeds. We assume
that at as you pedal faster, it increases linearly at first and eventually reaches a constant value (this is an approximation).
That is what the factor Speed / (Speed + CriticalSpeed) does. The CriticalSpeed determines where the (gradual) change
from linear force to constant force happens. For speeds significantly higher than the critical speed, the factor becomes =
1, so at high speeds the brake force is just ScalingFactor * Resistance value.
These two parameters depend on the geometry of the eddy current brake, the strength and positioning of the magnets,

v6.7 Published (March 13th, 2023) Page 61 of 65 User Manual


FortiusAnt - User Manual

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:

v6.7 Published (March 13th, 2023) Page 62 of 65 User Manual


FortiusAnt - User Manual

And with -G25:

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.

v6.7 Published (March 13th, 2023) Page 63 of 65 User Manual


FortiusAnt - User Manual

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

v6.7 Published (March 13th, 2023) Page 64 of 65 User Manual


FortiusAnt - User Manual

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.

v6.7 Published (March 13th, 2023) Page 65 of 65 User Manual

You might also like