Miro v2 FBT: Calibration Guide

Dial in your tracking.

Four calibrations that keep Miro trackers locked in, from the everyday quick fix to set-and-forget temperature learning. Each is a couple of console commands, most can reach every tracker at once through the receiver, and none takes more than a few minutes of hands-on time.

01. Before You Start

What you need

All four calibrations are driven by console commands, and the primary way to issue them is through the receiver: with the dongle in your PC and the trackers switched on, send all <command> pushes a command to every tracker over the air, and send <id> <command> targets one. Only the interactive parts (spinning a tracker for sens auto, reading tcal status) need a tracker plugged in over USB. The quick calibration, first below, is the everyday one and often all you need; the rest are for squeezing out the last of the drift.

Console access

The easiest route is SlimeNRF Serial Control, our free desktop app for Windows, Linux, and macOS. It auto-detects whether you have plugged in a tracker or the receiver, surfaces every console command as a button (one-click calibration and the receiver relay included), and can flash firmware too. Every command on this page can be clicked there instead of typed.

Prefer a plain terminal? Any serial terminal works: nRF Connect's Serial Terminal module, PuTTY on Windows, or screen on Linux/Mac. Once connected, type help to list every command your firmware version supports.

Good habits

  • Calibrate on a solid, vibration-free surface; a wobbly desk ruins readings.
  • For best results, calibrate after 15 to 20 minutes of wear, once the trackers are warmed up.
  • For send to reach a tracker it must be switched on and connected to the receiver; run list to see ids. Calibration data is stored on each tracker itself.
  • Nothing here is destructive. A failed run saves nothing, and every calibration can be reset.
The receiver relay

Connect the console to the receiver and you can drive the whole set without touching a cable. list shows every paired tracker with the id to use; send relays a command to one tracker or all of them:

list
[each paired tracker, with its id]
send all tcal auto on
send 0 6-side
Order matters (a little)

Run them in the order on this page: the quick calibration first (seconds), then sensitivity and the 18-sided calibration (a few minutes each), then leave T-Cal learning in the background over normal use.

02. Quick Calibration

The quick drift fix (calibrate)

If your avatar slowly twists while you stand still, this is the fix. The quick calibration measures each tracker at rest and cancels that drift out. It takes seconds, and it is worth running before any of the deeper procedures below.

Set the trackers down

Place every tracker you want to calibrate on a solid surface and leave them untouched. They do not need to be perfectly level, only perfectly still. Best done after 15 to 20 minutes of wear, when the trackers are warmed up.

Media: trackers resting on the desk
Any position works; stillness is what matters.

Run it on the whole set

One relay command calibrates every connected tracker at once:

send all calibrate

For a single tracker, double-press its button instead (no console needed), use send <id> calibrate, or run calibrate over USB. Every route runs the same calibration.

Media: send all calibrate
One command, every connected tracker.

Hold off for a few seconds

Each tracker takes its reading and saves it; it only takes a few seconds. Keep the surface undisturbed until then, and if a tracker gets nudged partway through, just run it again.

Media: calibration completing
A few seconds of rest and the fix is saved.
When to run it

Whenever drift becomes noticeable: at the start of a session, after a firmware update, or after moving between very different room temperatures (at least until T-Cal is up and running, which then handles that for you). reset zro clears the saved calibration if you ever want a clean slate.

03. Sensitivity Calibration

Fix your turns (sens auto)

If you spin in a full circle and your avatar ends up facing slightly the wrong way, this is the fix. A tracker can measure its turns slightly long or short, and the error builds with every rotation. Sensitivity calibration has you spin it an exact number of turns so it can measure and correct itself. It is hands-on (you do the spinning), so it runs with the tracker plugged in over USB.

Start the calibration

With the tracker connected to your serial terminal, run the command for the axis you want to calibrate. The example below calibrates the Y axis using the default of 2 full revolutions:

sens auto y
Gyro sensitivity auto-calibration started on Y axis (2 rev).
  1. Hold the tracker still until the LED flashes.
  2. While flashing, spin it 2 full turns about the Y axis, then stop.

You can ask for more turns, for example sens auto y 4; more turns gives a more accurate result.

Media: running sens auto y
The command and its prompt in the serial terminal.

Hold still

Place the tracker down and keep it completely still. The tracker first takes a reading at rest; the LED starting to flash is your signal that this part is done and it is ready for the spin.

Media: tracker at rest, waiting for the LED
Resting until the LED signals the spin window.

Spin the stated number of full turns, then stop

While the LED is flashing, rotate the tracker the exact number of full turns about the chosen axis, finishing exactly the way it started, then hold it still. Smooth and steady is better than fast; what matters is that the turns are complete and flat, with no tilting partway.

Media: spinning two full turns about the Y axis
Full flat turns, ending exactly where you started.
// Tip: mark the starting point (a sticky note under one edge works) so "back to the start" is exact, not eyeballed.

Check the result

The tracker checks the run before saving anything. If something was off (it moved at the start, the spin wobbled, or the turns were not complete) it rejects the run, saves nothing, and tells you why; just run it again. On success the new sensitivity is saved automatically. You can review it any time with info, and repeat the process for the other axes with sens auto x and sens auto z.

Media: successful calibration output
A validated run saves automatically.
Manual values & reset

Because the relay cannot spin a tracker for you, sens auto never relays; it is the one calibration that always happens with a tracker in hand over USB. The simple forms do relay: send all sens reset clears sensitivity calibration on every tracker at once, and send all sens x,y,z sets exact values if you ever need to.

04. 18-Sided Calibration

Teach it which way is down (6-side)

This one teaches each tracker exactly which way is down, which makes leaning and crouching track more accurately and helps slow drift. The command is named 6-side for historical reasons, but on Miro trackers it collects up to 18 resting positions. Any position counts as long as it is clearly different from the ones before, so there is no sequence to memorize.

Start the calibration

Through the receiver, start it on one tracker (get ids from list) or the whole set at once. With no cable attached, every side of the case is free to rest on:

send 0 6-side
send all 6-side
Starting Multi-Position Calibration (Target: 18 poses)
Please rotate device to random orientations and hold still.

Over USB instead, the command is just 6-side, and you can unplug the cable right after issuing it; the calibration runs on the tracker itself.

Media: starting 6-side via send all
Started over the air, so no cable blocks a side.

Place, hold, repeat

Set the tracker down in any position and hold it perfectly still. The LED goes solid while it captures, gives a short blink when the position is saved, then settles into a slow blink while it waits for the next one; move it to a clearly different position and repeat. The six flat faces, then corners and tilted leans against an object, all count. The tracker does not need to be level, only motionless.

Media: stepping through the 18 positions
Faces, edges, and propped-up tilts all count.
// If the LED gives a brief flash instead of capturing, that position is too close to one it already has. Move it further and try again. Any movement during a capture simply restarts that position.

Finish (or stop early)

After the 18th position the tracker works out its correction, saves it, and gives a completion blink. If you stop giving it new positions, it times out after 30 seconds; as long as it got at least 6, it saves a partial result from what it has. Fewer than 6 and nothing is saved. If you started several trackers with send all, work round-robin so each gets a fresh position inside its own 30 second window: comfortable with two or three at once, a juggle with a full set, so batch accordingly. The full 18 gives the best result, so it is worth seeing it through.

Media: completion blink / final output
Eighteen positions in and the result is saved.
One and done

This calibration only needs doing once; the result lives on the tracker. reset acc clears it if you ever want to redo it from scratch.

05. Temperature Calibration

Warm-up drift, solved (tcal)

Trackers drift more in the first minutes of a session, while they warm from room temperature to body temperature. T-Cal fixes that: each tracker learns how it behaves at different temperatures and corrects for it automatically, even right after switching on. Unlike the others, this is not a one-off procedure; the trackers learn quietly whenever they sit still, and you just leave it on.

Turn it on for the whole set

Two switches: tcal auto on tells the trackers to start learning, and tcal on turns the correction on. This is the relay at its best; two commands through the receiver and the whole set is learning:

send all tcal auto on
send all tcal on
Media: enabling T-Cal via send all
Two relay commands arm the whole set.

Let it learn warm and cool

A tracker learns whenever it sits still, noting the temperature each time, and the more temperatures it has seen, the better it corrects. Cool (just switched on at room temperature) through warm (after a long session on the body) is the range that matters, and letting a tracker rest for a minute at power-on, and again right after sessions, covers it naturally over a few days of normal use; no fridges or hairdryers required.

Media: tracker resting while points collect
Every rest teaches it a little more.
// The tracker can be moved between rests; it just will not learn while moving, or outside its 10 to 45 °C working range.

Check the quality

Checking progress is the one part that needs a cable: plug a tracker in over USB and run tcal status. It shows how much it has learned, the temperatures covered, and a plain verdict:

tcal status
Temperature Calibration Status (MLS):
  - Points collected: 23 / 70
  - Calibrated temp range: 19.40C to 37.85C
  - Calibration quality: GOOD - Suitable for boot calibration (MLS)

Once it says GOOD, you are done; the tracker keeps improving on its own from there.

Media: tcal status output
Point count, covered range, and the verdict.
Housekeeping commands

tcal dump lists every saved reading; tcal remove <index> deletes a single bad one; tcal test <temp> previews the correction at a given temperature; and tcal clear (or reset tcal) wipes everything to start over. tcal off pauses the correction without deleting anything. The on, off, auto, and clear switches all relay (send all tcal clear wipes the whole set), while the checking commands (status, dump, test, remove) are USB only.

06. Reference

Quick reference

The calibration commands from this page in one place. Run help in the console for the complete list on your firmware version.

calibrate
The quick drift calibration; same as double-pressing the button. Tracker still on a solid surface.
reset zro
Clear the saved quick calibration.
sens auto <x|y|z> [rev]
Calibrate turning accuracy on one axis by spinning full turns (default 2).
sens <x>,<y>,<z>
Set sensitivity values manually (degrees of error over the configured turns).
sens reset
Clear sensitivity calibration.
6-side
The 18-position calibration: up to 18 resting positions, partial save from 6.
reset acc
Clear the 18-position calibration.
tcal on | off
Enable or disable temperature compensation.
tcal auto on | off
Enable or disable automatic collection of temperature calibration points.
tcal boot on | off
Enable or disable the boot-time calibration that uses the map at power-on.
tcal status
Show learning progress, temperatures covered, and the quality verdict.
tcal dump / remove / test / clear
Inspect saved readings, delete one, preview the correction at a temperature, or wipe everything.
info
Show tracker information, including current calibration values.

Receiver relay

list
On the receiver: show every paired tracker and the id to use with send.
send <id|all> <command>
Relay a command to one tracker, or to every connected tracker at once.
Relays
calibrate, 6-side, sens values and sens reset, the tcal on / off / auto / boot / clear switches, reboot, shutdown.
USB only
sens auto (you spin the tracker in hand) and the tcal inspection commands: status, dump, test, remove.

LED patterns during calibration

Flashing (sens auto)
Rest measurement done; spin the tracker now.
Long blink (18-sided)
Waiting for you to hold the tracker still in a new position.
Solid on (18-sided)
Capturing this position; keep the tracker perfectly still.
Short blink (18-sided)
Position saved; move to the next one.
Brief flash (18-sided)
Same position as before; move it further, then hold still.

Stuck on a step?

Calibration not behaving?

Ask in the Miro Discord for direct help, or the wider SlimeVR Discord for general tracking questions. Failed calibrations never save, so you can always just try again.

Command behaviour documented from the Miro tracker firmware. Run the help command in the console for your version's full command list.