PlusLib  2.9.0
Software library for tracked ultrasound image acquisition, calibration, and processing.
Any OpenIGTLink compatible tracker

Supported hardware devices

  • Any compatible tracker device through OpenIGTLink interface.
  • Any tracker device that are supported by the IGSTK toolkit, using IGSTK's OpenIGTLinkTrackingBroadcaster application.
  • Receiving values of transforms from 3D Slicer application
    • Use these settings: UseReceivedTimestamps ="FALSE" and UseLastTransformsOnReceiveTimeout ="TRUE" (as Slicer only sends transforms when they change)
  • BrainLab surgical navigation system
    • BrainLab OpenIGTLink interface may be purchased as a license option with VectorVision Cranial 2.1.
    • Contact BrainLab for information about licensing and for supported OpenIGTLink options.
    • For tracking data, the BrainLab OpenIGTLink interface uses the TDATA message type, which is supported by PLUS 2.0 as of r2337
    • In the configuration section for OpenIGTLinkTracker Device, set MessageType ="TDATA" and ReconnectOnReceiveTimeout ="FALSE" (to avoid reconnects, as BrainLab asks for manual confirmation on each connect request)
    • See ConfigFiles/BWH directory for example configurations using BrainLab tracking.

Device configuration settings

  • attribute.png
    Type = "OpenIGTLinkTracker"
    required.png
  • attribute.png
    ServerAddress Host name or IP address of the OpenIGTLink server that sends the data to this device.
    required.png
  • attribute.png
    ServerPort Port of the OpenIGTLink server that sends the data to this device.
    required.png
  • attribute.png
    MessageType The device will request this message type from the remote server ( TRANSFORM, POSITION, or TDATA). If the MessageType is not specified then the default message type will be used (specified in the remote server)
    optional.png
    Default = "TRANSFORM"
  • attribute.png
    TrackerInternalCoordinateSystemName Used for TDATA messages to specify what coordinate systems should be the common "To" coordinate system.
    optional.png
    Default = "Reference"
  • attribute.png
    UseLastTransformsOnReceiveTimeout Use the latest known value for a transform if new value for a transform is not received.
    optional.png
    Default = "FALSE"
    • TRUE If there is no new value received for a transform then the last known value is used. It is useful for software that only sends a transform when it is changed, such when sending transforms from 3D Slicer.
    • FALSE If there is no new value received for a transform then it is treated as an error.
  • attribute.png
    ReceiveTimeoutSec Time to allow for the device to receive a message, in seconds.
    optional.png
    Default = "0.5"
  • attribute.png
    SendTimeoutSec Time to allow for the device to send a message, in seconds.
    optional.png
    Default = "0.5"
  • attribute.png
    IgtlMessageCrcCheckEnabled Enable CRC check on the received OpenIGTLink messages ( TRUE or FALSE).
    optional.png
    Default = "FALSE"
  • attribute.png
    UseReceivedTimestamps Use the timestamps that are stored in the OpenIGTLink messages.
    optional.png
    Default = "TRUE"
    • TRUE Timestamp in the OpenIGTLink message header is used as acquisition time for the item. If the remote server is on a different computer then the clocks of the remote server computer and the computer that runs PlusServer must be accurately synchronized (e.g., using NTP).
    • FALSE Time of receiving the message is used as timestamp. Variable network delays may cause jitter in the timestamps.
  • attribute.png
    ReconnectOnReceiveTimeout If this option is enabled and the server becomes unresponsive then the device tries to reconnect repeatedly ( TRUE or FALSE). It is usually desirable, because it makes the connection more robust, however in cases where server reconnection requires user approval (e.g., in BrainLab systems) it may be more convenient to turn this feature off.
    optional.png
    Default = "TRUE"
  • attribute.png
    AcquisitionRate The device checks for new available messages on the remote server at this rate. In case of TRANSFORM or POSITIOn messages, the acquisition rate should be equal or higher than the rate the server sends the data, otherwise the data is queued in the socket and arrives with a long delay.
    optional.png
    Default = "30"
  • attribute.png
    LocalTimeOffsetSec
    optional.png
    Default = "0"

Example configuration file PlusDeviceSet_Server_NDICertus.xml PlusDeviceSet_OpenIGTLinkTracker_TDATA.xml

<PlusConfiguration version="2.1">
<DataCollection StartupDelaySec="1.0" >
<DeviceSet
Name="BrainLabTrackerSim with video from file"
Description="To be used with the BrainLabTrackerSim simulator or with a real BrainLab tracker" />
<Device
Id="TrackerDevice"
Type="OpenIGTLinkTracker"
MessageType="TDATA"
TrackerInternalCoordinateSystemName="Reference"
ToolReferenceFrame="Reference"
ServerAddress="127.0.0.1"
ServerPort="22222"
IgtlMessageCrcCheckEnabled="true"
AcquisitionRate="20"
ReconnectOnReceiveTimeout="false" >
<DataSources>
<DataSource Type="Tool" Id="ReferenceStar" />
<DataSource Type="Tool" Id="Pointer" />
<DataSource Type="Tool" Id="Ultrasound" />
</DataSources>
<OutputChannels>
<OutputChannel Id="TrackerStream">
<DataSource Id="ReferenceStar" />
<DataSource Id="Pointer" />
<DataSource Id="Ultrasound" />
</OutputChannel>
</OutputChannels>
</Device>
<Device
Id="VideoDevice"
Type="SavedDataSource"
SequenceFile="fCal_Test_Calibration_3NWires_fCal2.0.igs.mha"
UseData="IMAGE"
UseOriginalTimestamps="FALSE"
RepeatEnabled="TRUE">
<DataSources>
<DataSource Type="Video" Id="Video" />
</DataSources>
<OutputChannels>
<OutputChannel Id="VideoStream" VideoDataSourceId="Video" />
</OutputChannels>
</Device>
<Device
Id="TrackedVideoDevice"
Type="VirtualMixer" >
<InputChannels>
<InputChannel Id="TrackerStream" />
<InputChannel Id="VideoStream" />
</InputChannels>
<OutputChannels>
<OutputChannel Id="TrackedVideoStream"/>
</OutputChannels>
</Device>
</DataCollection>
<PlusOpenIGTLinkServer
MaxNumberOfIgtlMessagesToSend="1"
MaxTimeSpentWithProcessingMs="10"
ListeningPort="18944"
OutputChannelId="TrackedVideoStream" >
<DefaultClientInfo>
<MessageTypes>
<Message Type="TRANSFORM" />
<Message Type="IMAGE" />
</MessageTypes>
<TransformNames>
<Transform Name="ReferenceStarToTracker" />
<Transform Name="PointerToTracker" />
<Transform Name="UltrasoundToTracker" />
</TransformNames>
<ImageNames>
<Image Name="Image" EmbeddedTransformToFrame="Tracker" />
</ImageNames>
</DefaultClientInfo>
</PlusOpenIGTLinkServer>
<CoordinateDefinitions>
<Transform From="Image" To="Ultrasound"
Matrix="
0.107535 0.00094824 0.0044213 -65.9013
0.0044901 -0.00238041 -0.106347 -3.05698
-0.000844189 0.105271 -0.00244457 -17.1613
0 0 0 1"
Error="0.804961" Date="121012_223643"/>
</CoordinateDefinitions>
</PlusConfiguration>