Skip to content

Coordinate System

jdavidberger edited this page Aug 16, 2020 · 1 revision
  1. We are using the right-hand rule.

  2. All "poses" should be handled as a SurvivePose, which is effectively a FLT[7], with xyz, wxyz. The first is a positional offset, and the second is the rotation. These poses are effectively transforms from the object local space to the global coordinate space.

  3. Though this is not universal, consider using SurvivePose* for all situations where a true pose used instead of passing around a FLT* or FLT[7].

  4. All posers should; given a lighthouse:

  • at 0, 0, 0
  • laying on its back
  • pointed upward
  • receiving a "up" vector from the accelerometer of (0,0,-127)

Given an HMD:

  • pointed FACE DOWN at the lighthouse

  • 1M above the lighthouse

    Will produce a pose of [[0, 0, -1] [0, 1, 0, 0] ]. NOTE: The quaternion is inverted, so rotation axis is arbitrary, point is w is 0. This is the pose of the OBJECT in WORLD space. For our example, the lighthouse is at 0,0,0 in world space. In practicality, the lighthouse will be at some other place in the scene.

    The idea is you should be able to take a coordinate local to the HMD and then use ApplyPoseToPoint to transform that point into world space, by applying the output of the poser.

  1. Defining the value of pose in BaseStationData: This pose will convert something in lighthouse-local space into a position in world space. When calibrating, if you have an object you want to define as 0,0,0... You will need to take its pose and invert it.

  2. Posers will take into account the pose of various lighthouses, if NOT in calibration and return poses of objects in world space assuming the lighthouses are set up.

  3. Objects internally are tracked in IMU space. They are then transformed into 'Head' space, as defined in their config.

General information for LH pose:

LHPose

TrackerCF

HMDCF

Clone this wiki locally