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
sendto reach a tracker it must be switched on and connected to the receiver; runlistto 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.
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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
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.
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.
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.