Golden Cheetah on OS X Mavericks

April 27, 2014

I am a big fan of collecting and tracking the data from all the sensor device gadgets I use in my workout. For indoor cycling, I recently bought an Elite Qubo Power Fluid trainer, so I wanted to get the power curve into the software I am using for tracking cycling, Golden Cheetah.

First Build

Using homebrew we install Qt4. I did not try with Qt5 which is not as widely used anyway as Qt4.

brew install qt4

Then checkout the Golden Cheetah code out of github:

git clone git://

We then create the qmake config files that will generate the GNU Makefile:

cd GoldenCheetah
cp qwt/ qwt/qwtconfig.pri
cp src/ src/gcconfig.pri

We edit src/gcconfig.pri to uncomment the OSX options:

# Uncomment this line if you have SDK 10.7 or higher
# uncomment below if you are running on the 10.9 developer preview
INCLUDEPATH += /Library/Developer/CommandLineTools/SDKs/MacOSX10.9.sdk/usr/include/ 

To enable the USB2 ANT+ dongle support (libusb-compat provides a 0.1 version wrapper interface using the libusb 1.0 implementation):

brew install libusb-compat

And change src/gcconfig.pri to enable USB:

LIBUSB_INSTALL = /usr/local
LIBUSB_LIBS    = -lusb

Note the LIBUSB_LIBS directive to point to libusb.a, which if we installed libusb with Homebrew, it is a symbolic link to the compat version 0.1.4. If we leave the directive empty, which is the default the config make system will pick up libusb-1.0.a, which will be missing symbols during final linking with the GoldenCheetah app.

I tried to make at this point but it failed saying it could not find the .qm files. Looking on the web these seem to be generated translation files. So I did init these translation files, although I am not sure why this is required and not caught by the Makefile. In any case:

lrelease src/

And build:

qmake -recursive

The app once built is found under src/

Quick Note on Other Dependencies

  • SRMIO. Serial communication protocol to the SRM bike power meter. I don’t need it.
  • Liboauth. To post to twitter. I don’t think need it.
  • libkml. Export to Google Earth. I don’t think I need it.
  • QwtPlot3d. Hmm … not sure what this is for, yet.
  • libical. Don’t know, I skip.
  • clucene. Don’t know yet if I need it, so I skip.

Elite Qubo Power Fluid as a Virtual Powertap provides a power curve for this trainer unit. The manufacturer also provides a curve, but I did not find it to be as accurate. I fit the speed-to-power curve using a cubic equation. The resulting equation is:

	f(x) = 4.31746 * x + -2.59259e-002 * x^2 +  9.41799e-003 * x^3

where x is expressed in km/h and f(x) is measured Watts. We add the switch case in RealtimeController.cpp:

case 42:
double V = rtData.getSpeed();
// Power curve fit from powercurvesensor
rtData.setWatts(4.31746 * V - 2.59259e-002 * pow(V, 2) + 9.41799e-003 * pow(V, 3));

We also need to change the UI code in AddDeviceWizard.cpp:

virtualPower->addItem(tr("Power - Elite Supercrono Powermag (8)"));
virtualPower->addItem(tr("Power - Elite Qubo Power Fluid"));

wheelSize->addItem(tr("Road/Cross (700C/622)")); // 2100mm
wheelSize->addItem(tr("Tri/TT (650C)")); // 1960mm

Recompile by invoking make and open the app. Add a new speed and cadence ANT+ sensor device, and voilá, the Qubo Fluid shows up in GoldenCheetah as a virtual powertap.

blog comments powered by Disqus