microsoft/HoloLens2ForCV

Rig2world transform noisy?

ArmandB opened this issue · 0 comments

I saw #98 and did some testing for myself. tl;dr it says that SensorTicks are much more stable and synchronized than HostTicks.

Does this mean that the Rig2World transforms are inconsistent/incorrect b/c they are based on HostTicks (SoC Ticks), which from what I understand is the timestamp when the image reached the SoC (subject to variable latency) not the time the image was taken?

I went and verified that the SensorTicks for each frame are much more stable and synchronized than the HostTicks. SensorTicks are ~10ns different (when they don't match up exactly) while HostTicks hardly ever match up and can be 1ms+ different.

The rigToWorld transform is based on user's location at some absolute timestamp:

auto timestamp = PerceptionTimestampHelper::FromSystemRelativeTargetTime(HundredsOfNanoseconds(checkAndConvertUnsigned(m_prevTimestamp)));
auto location = m_locator.TryLocateAtTimestamp(timestamp, m_worldCoordSystem);

When the raw data is collected, each sensor also has a slightly different rig2world matrix transform I assume to account for the headset's calculated difference in position between the two timestamps.

This could be why a paper Inside-Out Instrument Tracking for Surgical Navigation in Augmented Reality (https://arbook.icg.tugraz.at/schmalstieg/Schmalstieg_402.pdf) has mentioned that: "While the HoloLens 2 does expose sensor coordinates and mapping functions [65], from which intrinsic and extrinsic camera matrices could be obtained, we found these parameters to be too inaccurate"