Skip to content

Zeroing

The Odyssey tracker sits below or beside the bore, and it is never exactly parallel to it. Zeroing measures that difference once, so that a device’s aimpoint lands where its shots do.

What zeroing corrects Side view. The Odyssey tracker sits below the bore and its line of sight is not parallel to it, so before zeroing the aimpoint misses the target. Zeroing records the offset from the tracker to the sight line and the angle that makes that line pass through the target. screen target aimpoint before zeroing sight line, used for the aimpoint after zeroing the tracker's own line of sight offset 6.35 cm up Zeroing finds the angle that puts the sight line through the target, then applies it to every aimpoint from that device.

When a device is zeroed, the hub stores two things for it:

  • an offset: where the sight line starts, relative to the tracker;
  • an angle: the rotation that makes the sight line pass through the target.

From then on, that device’s aimpoint and distance are measured along the sight line. Its pose does not change: it always describes the tracker.

A zero belongs to the device, not to an app. Once saved, it applies to every app and survives restarts.

Most users zero on the Zero page of Odyssey Desktop:

  1. Aim carefully at the target in the center of the screen.
  2. Press Z, or fire with shot detection on.
  3. Press Save zero.

If your app leaves zeroing to Odyssey Desktop, it needs no code for it.

Call Effect
zero(device, translation, target) Zero device against target, using its current tracking. The hub answers with a ZeroResult event.
reset_zero(device) Remove the device’s zero. The hub answers with ZeroResult.
  • target is the point being aimed at, in aimpoint coordinates: (0.5, 0.5) is the center of the screen.

  • translation is where the sight line starts relative to the tracker, in meters, in the tracker’s own sensor axes. These are not the pose’s axes:

    Axis Direction on the device
    +X right
    +Y down
    +Z forward, along the bore

    A bore 6.35 cm above the tracker is therefore (0, -0.0635, 0), which is what Odyssey Desktop always sends. Pass (0, 0, 0) if the offset doesn’t matter for your setup.

The device must be tracking a screen when you call zero; otherwise the ZeroResult is false.

// Zero against the center of the screen, with Odyssey Desktop's offset.
await client.Zero(
device,
new Ohc.uniffi.Vector3f32(0f, -0.0635f, 0f),
new Ohc.uniffi.Vector2f32(0.5f, 0.5f));