The libsurvive driver in Monado

Before enabling the libsurvive driver in Monado, libsurvive has to be installed as a library before compiling monado. For example with cmake and ninja

git clone https://github.com/cntools/libsurvive.git
cd libsurvive
cmake -DCMAKE_INSTALL_PREFIX=/usr -G Ninja -DCMAKE_BUILD_TYPE=Release -Bbuild
ninja -C build install

When starting any libsurvive or OpenXR application, libsurvive will use cached calibration in $XDG_CONFIG_HOME/libsurvive/config.json, or ~/.config/libsurvive/config.json or run a fresh calibration if this config does not exist yet.

The device the calibration is performed on should not be moved during calibration. Calibration and running with libsurvive may work best when as many device sensors as possible can “see” both basestations at the same time, and when the distance to the basestations is at least 0.5-1 meter.

To force calibration with a specific device, any libsurvive application (but not monado) process command line parameters. To calibrate using a Valve Index HMD, run for example survive-cli --requiredtrackersforcal T20 --allowalltrackersforcal 0.

To remove libsurvive’s calibration data (e.g. to force recalibration or after a significant libsurvive update) delete the configuration file:

rm ~/.config/libsurvive/config.json

When building monado with either meson or cmake, the survive driver has to be explicitly enabled with

#cmake
-DXRT_BUILD_DRIVER_SURVIVE=On

#meson
-Ddrivers=auto,survive