Hi,
I’m experiencing an issue where fCal unexpectedly closes whenever I attempt to use the Spatial Calibration toolbox. I’m not sure why this is happening, and I haven’t been able to identify any specific error messages leading up to the crash.
Moreover, I have not the opportunity to perform the spatial calibration because it says that “Phantom registration is not available”
Here’s a summary of my setup and the image showing the error:
fCal Version: PlusApp-2.9.0.20240906-Clarius-Win64
Operating System: Windows 11
Here is my XML config file
<PlusConfiguration version="2.1" PlusRevision="Plus-2.9.0.d463ee5d - Win64">
<DataCollection StartupDelaySec="2">
<DeviceSet Name="PlusServer: (Jon) XML file after doing Temporal Calibration" Description="XML file created after temporal calibration between NDI Polaris tracker and Clarius ultrasound device temporal calibration " />
<Device
Id="TrackerDevice"
Type="PolarisTracker"
ToolReferenceFrame="Tracker"
SerialPort="5"
CheckDSR="true"
LocalTimeOffsetSec="0.103834">
<DataSources>
<DataSource Type="Tool" Id="Tool" RomFile="NdiToolDefinitions/8700339.rom" BufferSize="150">
<CustomProperties>
<Manufacturer>
NDI
</Manufacturer>
<NdiIdentity>
01000000
</NdiIdentity>
<PartNumber>
8700339
</PartNumber>
<Revision>
000
</Revision>
<SerialNumber>
34801403
</SerialNumber>
</CustomProperties>
<CustomProperties>
<Manufacturer>
NDI
</Manufacturer>
<NdiIdentity>
01000000
</NdiIdentity>
<PartNumber>
8700339
</PartNumber>
<Revision>
000
</Revision>
<SerialNumber>
34801403
</SerialNumber>
</CustomProperties>
<CustomProperties>
<Manufacturer>
NDI
</Manufacturer>
<NdiIdentity>
01000000
</NdiIdentity>
<PartNumber>
8700339
</PartNumber>
<Revision>
000
</Revision>
<SerialNumber>
34801403
</SerialNumber>
</CustomProperties>
</DataSource>
<DataSource Type="Tool" Id="Stylus" RomFile="NdiToolDefinitions/8700340.rom" BufferSize="150">
<CustomProperties>
<Manufacturer>
NDI
</Manufacturer>
<NdiIdentity>
02000001
</NdiIdentity>
<PartNumber>
8700340
</PartNumber>
<Revision>
000
</Revision>
<SerialNumber>
34802401
</SerialNumber>
</CustomProperties>
<CustomProperties>
<Manufacturer>
NDI
</Manufacturer>
<NdiIdentity>
02000001
</NdiIdentity>
<PartNumber>
8700340
</PartNumber>
<Revision>
000
</Revision>
<SerialNumber>
34802401
</SerialNumber>
</CustomProperties>
<CustomProperties>
<Manufacturer>
NDI
</Manufacturer>
<NdiIdentity>
02000001
</NdiIdentity>
<PartNumber>
8700340
</PartNumber>
<Revision>
000
</Revision>
<SerialNumber>
34802401
</SerialNumber>
</CustomProperties>
</DataSource>
<DataSource Type="Tool" Id="Reference" RomFile="NdiToolDefinitions/8700449.rom" BufferSize="150">
<CustomProperties>
<Manufacturer>
NDI
</Manufacturer>
<NdiIdentity>
01000000
</NdiIdentity>
<PartNumber>
8700449
</PartNumber>
<Revision>
000
</Revision>
<SerialNumber>
3532DC02
</SerialNumber>
</CustomProperties>
<CustomProperties>
<Manufacturer>
NDI
</Manufacturer>
<NdiIdentity>
01000000
</NdiIdentity>
<PartNumber>
8700449
</PartNumber>
<Revision>
000
</Revision>
<SerialNumber>
3532DC02
</SerialNumber>
</CustomProperties>
<CustomProperties>
<Manufacturer>
NDI
</Manufacturer>
<NdiIdentity>
01000000
</NdiIdentity>
<PartNumber>
8700449
</PartNumber>
<Revision>
000
</Revision>
<SerialNumber>
3532DC02
</SerialNumber>
</CustomProperties>
</DataSource>
</DataSources>
<OutputChannels>
<OutputChannel Id="TrackerStream">
<DataSource Id="Tool" />
<DataSource Id="Stylus" />
<DataSource Id="Reference" />
</OutputChannel>
</OutputChannels>
<Parameters />
</Device>
<Device
Id="VideoDevice"
Type="Clarius"
IpAddress="192.168.1.1"
TcpPort="5828"
FrameWidth="640"
FrameHeight="480"
ImuEnabled="TRUE"
ImuOutputFileName="ImuOutput.csv"
WriteImagesToDisk="FALSE">
<DataSources>
<DataSource Type="Video" Id="Video" PortName="B" PortUsImageOrientation="UN" BufferSize="150" />
</DataSources>
<OutputChannels>
<OutputChannel Id="VideoStream" VideoDataSourceId="Video" />
</OutputChannels>
<Parameters />
</Device>
<Device
Id="CaptureDevice_NDIPolaris"
Type="VirtualCapture"
BaseFilename="NDIRecording.igs.nrrd"
EnableFileCompression="TRUE"
RequestedFrameRate="20"
EnableCapturing="FALSE"
AdquisitionRate="20"
EnableCaptureOnStart="FALSE">
<InputChannels>
<InputChannel Id="TrackerStream" />
</InputChannels>
<Parameters />
</Device>
<Device
Id="CaptureDevice_Clarius"
Type="VirtualCapture"
BaseFilename="ClariusRecording.igs.mha"
EnableCapturing="FALSE"
AdquisitionRate="20"
RequestedFrameRate="20"
EnableFileCompression="FALSE"
EnableCaptureOnStart="FALSE">
<InputChannels>
<InputChannel Id="VideoStream" />
</InputChannels>
<Parameters />
</Device>
<Device Id="TrackedVideoDevice" Type="VirtualMixer">
<InputChannels>
<InputChannel Id="TrackerStream" />
<InputChannel Id="VideoStream" />
</InputChannels>
<OutputChannels>
<OutputChannel Id="TrackedVideoStream" />
</OutputChannels>
<Parameters />
</Device>
</DataCollection>
<CoordinateDefinitions>
<Transform From="Image" To="Reference"
Matrix="
0.2 0 0 0
0 0.2 0 0
0 0 0.2 0
0 0 0 1"
Date="2024.10.16 08:58:47" />
<Transform From="Image" To="TransducerOriginPixel"
Matrix="
1 0 0 -410
0 1 0 5
0 0 1 0
0 0 0 1"
Date="2011.12.06 17:57:00" />
<Transform From="StylusTip" To="Stylus"
Matrix="
0.993277 0 -0.115758 -18.3409
-0.000238798 -0.999998 -0.00204904 -0.324654
-0.115758 0.00206291 -0.993275 -157.376
0 0 0 1"
Error="0.296001" Date="102824_165712" />
<Transform From="Phantom" To="Reference"
Matrix="
-0.0128807 -0.998959 -0.0437555 -0.0547717
-0.999908 0.0130579 -0.00376595 -27.2892
0.00433338 0.043703 -0.999035 230.147
0 0 0 1"
Error="1.35234" Date="103024_133300" />
</CoordinateDefinitions>
<Rendering WorldCoordinateFrame="Reference" DisplayedImageOrientation="MF">
<DisplayableObject Type="Model" ObjectCoordinateFrame="TransducerOrigin" Id="ProbeModel" File="Probe_L14-5_38.stl"
ModelToObjectTransform="
-1 0 0 29.7
0 -1 0 1.5
0 0 1 -14
0 0 0 1" />
<DisplayableObject Type="Model" ObjectCoordinateFrame="Reference" Id="Volume" />
<DisplayableObject Type="Model" ObjectCoordinateFrame="StylusTip" Id="StylusModel" File="Stylus_Example.stl" />
<DisplayableObject
Id="PhantomModel"
Type="Model"
ObjectCoordinateFrame="Phantom"
Opacity="0.6"
File="fCal_2.0.stl"
ModelToObjectTransform="
1 0 0 -35
0 1 0 -10
0 0 1 -5
0 0 0 1" />
<DisplayableObject Type="Image" ObjectCoordinateFrame="Image" Id="LiveImage" />
</Rendering>
<PlusOpenIGTLinkServer MaxNumberOfIgtlMessagesToSend="1" MaxTimeSpentWithProcessingMs="50" ListeningPort="18944" SendValidTransformsOnly="true" OutputChannelId="TrackerStream">
<DefaultClientInfo>
<MessageTypes>
<Message Type="TRANSFORM" />
</MessageTypes>
<TransformNames>
<Transform Name="StylusTipToReference" />
<Transform Name="ToolToReference" />
<Transform Name="ToolToTracker" />
<Transform Name="StylusToTracker" />
<Transform Name="ReferenceToTracker" />
</TransformNames>
</DefaultClientInfo>
</PlusOpenIGTLinkServer>
<PlusOpenIGTLinkServer MaxNumberOfIgtlMessagesToSend="1" MaxTimeSpentWithProcessingMs="50" ListeningPort="54474" SendValidTransformsOnly="false" OutputChannelId="VideoStream">
<DefaultClientInfo>
<MessageTypes>
<Message Type="IMAGE" />
<Message Type="TRANSFORM" />
</MessageTypes>
<ImageNames>
<Image Name="Image" EmbeddedTransformToFrame="Reference" />
</ImageNames>
<TransformNames>
<Transform Name="ImageToReference" />
</TransformNames>
</DefaultClientInfo>
</PlusOpenIGTLinkServer>
<PhantomDefinition>
<Description Name="fCAL" Type="Multi-N" Version="2.0" WiringVersion="2.0" Institution="Queen's University PerkLab" />
<Geometry>
<Pattern Type="NWire">
<Wire Name="7:G1_g1" EndPointFront="30.0 0.0 20.0" EndPointBack="30.0 40.0 20.0" />
<Wire Name="8:L1_h1" EndPointFront="55.0 0.0 20.0" EndPointBack="35.0 40.0 20.0" />
<Wire Name="9:M1_m1" EndPointFront="60.0 0.0 20.0" EndPointBack="60.0 40.0 20.0" />
</Pattern>
<Pattern Type="NWire">
<Wire Name="4:G3_g3" EndPointFront="30.0 0.0 10.0" EndPointBack="30.0 40.0 10.0" />
<Wire Name="5:H3_l3" EndPointFront="35.0 0.0 10.0" EndPointBack="55.0 40.0 10.0" />
<Wire Name="6:M3_m3" EndPointFront="60.0 0.0 10.0" EndPointBack="60.0 40.0 10.0" />
</Pattern>
<Pattern Type="NWire">
<Wire Name="1:H5_h5" EndPointFront="35.0 0.0 0.0" EndPointBack="35.0 40.0 0.0" />
<Wire Name="2:L5_i5" EndPointFront="55.0 0.0 0.0" EndPointBack="40.0 40.0 0.0" />
<Wire Name="3:M5_m5" EndPointFront="60.0 0.0 0.0" EndPointBack="60.0 40.0 0.0" />
</Pattern>
<Landmarks>
<Landmark Name="#1" Position="104.3 5.0 20.0" />
<Landmark Name="#2" Position="104.3 45.0 20.0" />
<Landmark Name="#3" Position="104.3 45.0 0.0" />
<Landmark Name="#4" Position="104.3 -5.0 0.0" />
<Landmark Name="#5" Position="-34.3 45.0 15.0" />
<Landmark Name="#6" Position="-34.3 -5.0 20.0" />
<Landmark Name="#7" Position="-34.3 -5.0 0.0" />
<Landmark Name="#8" Position="-34.3 45.0 0.0" />
</Landmarks>
<Planes>
<Plane Name="Superior" BasePoint="5.5 3.0 35.0" EndPoint1="135.0 3.0 35.0" EndPoint2="135.0 55.0 35.0" />
<Plane Name="Inferior" BasePoint="5.5 55.0 0.0" EndPoint1="135.0 55.0 0.0" EndPoint2="135.0 5.5 0.0" />
<Plane Name="Outside Unmarked" BasePoint="140.0 5.0 30.0" EndPoint1="140.0 50.0 30.0" EndPoint2="140.0 50.0 5.0" />
<Plane Name="Inside Unmarked" BasePoint="125.0 40.0 30.0" EndPoint1="125.0 20.0 10.0" EndPoint2="125.0 40.0 10.0" />
<Plane Name="Outside Marked" BasePoint="0.0 40.0 30.0" EndPoint1="0.0 40.0 5.5" EndPoint2="0.0 15.5 5.5" />
<Plane Name="Outside Posterior" BasePoint="130.0 0.0 30.0" EndPoint1="20.0 0.0 30.0" EndPoint2="20.0 0.0 15.0" />
<Plane Name="Inside Posterior" BasePoint="110.0 10.0 30.0" EndPoint1="40.0 10.0 30.0" EndPoint2="30.0 10.0 10.0" />
<Plane Name="Outside Anterior" BasePoint="130.0 60.0 30.0" EndPoint1="20.0 60.0 30.0" EndPoint2="20.0 60.0 5.0" />
</Planes>
<References>
<Reference Name="#1" Position="104.3 5.0 20.0" />
<Reference Name="#2" Position="104.3 45.0 20.0" />
<Reference Name="#3" Position="104.3 45.0 0.0" />
<Reference Name="#4" Position="104.3 -5.0 0.0" />
<Reference Name="#5" Position="-34.3 45.0 15.0" />
<Reference Name="#6" Position="-34.3 -5.0 20.0" />
<Reference Name="#7" Position="-34.3 -5.0 0.0" />
<Reference Name="#8" Position="-34.3 45.0 0.0" />
</References>
</Geometry>
</PhantomDefinition>
<VolumeReconstruction
OutputSpacing="0.5 0.5 0.5"
ClipRectangleOrigin="0 0"
ClipRectangleSize="820 616"
Interpolation="LINEAR"
Optimization="FULL"
CompoundingMode="MEAN"
FillHoles="OFF" />
<fCal
PhantomModelId="PhantomModel"
ReconstructedVolumeId="Volume"
TransducerModelId="ProbeModel"
StylusModelId="StylusModel"
ImageDisplayableObjectId="LiveImage"
NumberOfCalibrationImagesToAcquire="200"
NumberOfValidationImagesToAcquire="100"
NumberOfStylusCalibrationPointsToAcquire="200"
RecordingIntervalMs="100"
MaxTimeSpentWithProcessingMs="70"
ImageCoordinateFrame="Image"
ProbeCoordinateFrame="Probe"
ReferenceCoordinateFrame="Reference"
TransducerOriginCoordinateFrame="TransducerOrigin"
TransducerOriginPixelCoordinateFrame="TransducerOriginPixel"
TemporalCalibrationDurationSec="10"
FixedChannelId="VideoStream"
FixedSourceId="Video"
MovingChannelId="TrackerStream"
MovingSourceId="ProbeToTracker"
DefaultSelectedChannelId="TrackedVideoStream"
FreeHandStartupDelaySec="3" />
<Segmentation
ApproximateSpacingMmPerPixel="0.078"
MorphologicalOpeningCircleRadiusMm="0.27"
MorphologicalOpeningBarSizeMm="2"
MaxLinePairDistanceErrorPercent="10"
AngleToleranceDegrees="10"
MaxAngleDifferenceDegrees="10"
MinThetaDegrees="-70"
MaxThetaDegrees="70"
MaxLineShiftMm="10"
ThresholdImagePercent="10"
CollinearPointsMaxDistanceFromLineMm="0.6"
UseOriginalImageIntensityForDotIntensityScore="FALSE"
NumberOfMaximumFiducialPointCandidates="20"
ClipRectangleOrigin="27 27"
ClipRectangleSize="766 562" />
<vtkTemporalCalibrationAlgo ClipRectangleOrigin="27 27" ClipRectangleSize="766 562" />
<vtkPlusPivotCalibrationAlgo
ObjectMarkerCoordinateFrame="Stylus"
ReferenceCoordinateFrame="Reference"
ObjectPivotPointCoordinateFrame="StylusTip" />
<vtkPlusPhantomLandmarkRegistrationAlgo
PhantomCoordinateFrame="Phantom"
ReferenceCoordinateFrame="Reference"
StylusTipCoordinateFrame="StylusTip"
DetectionTimeSec="1.0"
StylusTipMaximumDisplacementThresholdMm="1.8" />
<vtkPhantomLinearObjectRegistrationAlgo
PhantomCoordinateFrame="Phantom"
ReferenceCoordinateFrame="Reference"
StylusTipCoordinateFrame="StylusTip" />
<vtkPlusProbeCalibrationAlgo
ImageCoordinateFrame="Image"
ProbeCoordinateFrame="Probe"
PhantomCoordinateFrame="Phantom"
ReferenceCoordinateFrame="Reference" />
<fCal>
<ImageCoordinateFrame>
Image
</ImageCoordinateFrame>
<WorldCoordinateFrame>
Reference
</WorldCoordinateFrame>
<PhantomModelId>
PhantomModel
</PhantomModelId>
<ReconstructedVolumeId>
Volume
</ReconstructedVolumeId>
<TransducerModelId>
ProbeModel
</TransducerModelId>
<StylusModelId>
StylusModel
</StylusModelId>
</fCal>
</PlusConfiguration>
(if you prefer in image format)