Skip to content
This repository has been archived by the owner on May 3, 2021. It is now read-only.

PSMove Magnetometer Calibration

HipsterSloth edited this page Mar 29, 2017 · 7 revisions

Magnetometer Calibration

In order to reliably track the orientation of the controller, we need to calibrate the magnetometer (a compass) on the PS Move and record the direction of your local magnetic field. This needs to be done every time you reorient the forward direction of your VR tracking space (which is usually a one-time setup per controller).

  1. Launch the PSMoveConfigTool and then open the "Controller Settings" > "Calibrate Magnetometer" dialog

  1. Spin the controller around until the calibration number is 250+

  1. Press the move button to proceed to the next step. You should then see this:

  1. Set the controller down vertically on a flat surface facing the forward direction of your VR tracking volume (typically towards your monitor). This will be the reference pose for the controller in your local magnetic field. Note that the PS Eye isn't actually used in this step of the calibration process.

  1. Once the controller is stable, a timer (approximately one second long) will count down and then sample the magnetometer. If the controller gets bumped, the timer will restart.
  2. Once the sampling is done you can test the orientation calibration.

  1. The calibration data will be saved into the controller settings file located at C:\Users\<username>\AppData\Roaming\PSMoveService\xx_xx_xx_xx_xx_xx.json where xx_xx_xx_xx_xx_xx is the MAC address of the controller displayed in the controller settings panel.

A typical set of magnetometer calibration values looks something like this (though values vary per controller and your local magnetic field).

        "Magnetometer": {
            "Center": {
                "X": "56.5",
                "Y": "-56",
                "Z": "-109"
            },
            "BasisX": {
                "X": "1",
                "Y": "0",
                "Z": "0"
            },
            "BasisY": {
                "X": "0",
                "Y": "1",
                "Z": "0"
            },
            "BasisZ": {
                "X": "0",
                "Y": "0",
                "Z": "1"
            },
            "Extents": {
                "X": "167.5",
                "Y": "169",
                "Z": "161"
            },
            "Identity": {
                "X": "0.267718643",
                "Y": "0.933811128",
                "Z": "-0.237325698"
            },
            "Error": "13.150588"
        }

Implementation Details

If you are curious about how the orientation of the controller is computed, you can find details about that on the Sensor-Fusion wiki page.

Proceed to the next step

Color-Filter-Calibration