Hello,
I have been experimenting with the NDI Polaris Lyra and Slicer OpenIGTLink. I have read all the documentation and, after numerous attempts, I think I have some parts working, but I would like to ask for help.
What I want to achieve
I have a phantom skull with an NDI passive marker tool attached to it. I also have a passive stylus tool. My goal is to be able to move the patient’s head (or phantom skull) while maintaining the calibration, so that I do not need to recalibrate every time the head moves. The tracking should remain consistent relative to the stylus tip.
My workflow
The NDI Polaris Lyra is connected to the network, and I use the Plus application to stream both the stylus and reference tool passive markers.
In 3D Slicer, I have the following transforms:
-
ToolToTracker -
StylusToTracker
My first step is to calculate StylusToReference. I use the Transform Processor module to compute a full transform:
-
From:
ToolToTracker -
To:
StylusToTracker -
Output:
StylusToReference
Once I have StylusToReference, I create a Skull_StylusTipToStylus transform and place a needle model under it.
For the fiducial registration workflow, I create the following transforms:
-
ReferenceToInitial -
InitialToRAS
The final hierarchy is shown below:
Registration workflow
The next step is fiducial registration. I create a ReferencePoints point list that I populate using Skull_StylusTipToStylus, and an InitialPoints point list that I place on my skull STL model.
After registration, the tip of the virtual needle is very close to the corresponding point on my real-life printed phantom.
To improve accuracy, I then perform surface registration. I create an InitialSurfacePoints point list, collect approximately 40 points on the phantom surface, and register them to the skull model using the InitialToRAS transform.
After surface registration, the stylus appears even more accurate.
My question
When I move the patient’s head (or phantom skull), the tracking no longer follows correctly. Shouldn’t StylusToReference be continuously updated through ToolToTracker?
Perhaps I am misunderstanding how the transform hierarchy should work. Should I enable automatic fiducial registration instead of using manual registration?
Any guidance on whether my workflow is correct, or what I may be missing, would be greatly appreciated.
Thank you very much in advance.
