The libsurvive driver in Monado

Before enabling the libsurvive driver in Monado, libsurvive has to be installed as a library before compiling monado. You can follow the build instructions from the README.md, make sure to install it as well.

To check whether Monado will be built with libsurvive look at the output from CMake and look for:

-- #    DRIVER_SURVIVE:      ON

You can also do a runtime check if Monado was built with libsurvive support, run monado-cli probe and check whether it appears in the list of Built in drivers.

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.

Note that monado does not pass parameters to libsurvive. For example to force calibration with a specific device use the parameter --requiredtrackersforcal with any of the libsurvive tools.

An example to calibrate using a Valve Index HMD, would be 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

Initial calibration of libsurvive will consider the HMD’s location the floor and one of the basestations the forward direction of the space. If calibration was first performed above floor delete the configuration file and begin a new calibration on the floor with the headset facing the base station you would deem ‘forward’.

If poor tracking quality persists please attempt rearranging base stations trial and error. Certain physical placements of lighthouses will produce near universally poor results. Keep at least one mobile in order to prevent a poor calibration until global annealing is implemented.

Libsurvive’s global solver can be frozen in a known good state such that the lighthouses are not allowed to continuously recalibrate during the tracking session with the enviornment variable SURVIVE_GLOBALSCENESOLVER=0.

This will retain a static configuration should the user happen to attempt to manually eliminate or reduce the local minima to a desirable state and halt all further calibration. This can help reduce floating and sliding of the pose in certain pockets of space.

Tracking Quality:

Without a more reliable lighthouse pose calibration, libsurvive is imperfect for users coming from SteamVR. Thankfully, you can import your steamvr calibration using the survive-cli --steamvr-calibration flag.

Here is how: