PlusToolkit / PlusLib

Software library for data acquisition, pre-processing, and calibration for navigated image-guided interventions.
http://www.plustoolkit.org
Other
136 stars 103 forks source link

Integration Nexus Vicon into 3D Slicer through PlusServer #1208

Open AurelieSar opened 6 days ago

AurelieSar commented 6 days ago

Dear PlusToolkit team,

As you may already know, we are working on the integration of Nexus Vicon into 3D Slicer through PlusServer, to perform 3D freehand ultrasound with Vicon and Qualisys systems.

Here are the attached files : Configfile_Server.zip

We already succeeded in :

We confirm that, when we launch PlusServer server, we do have a client connection to our NexusServer. We also confirm that 3D Slicer connects to the PlusServer server, by displaying "ON", however we have no transform appearing in "IN".

We suspect that the data sent into PlusServer from the NexusServer are not in the right format.

Could you help us with the format of transform needed by PlusServer ?

Best regards, Aurélie

lassoan commented 6 days ago

You can see the error in the Slicer Python console:

[VTK] Received unknown device type POSITION, device=Tracker

This means that Slicer ignores POSITION messages. You can use TRANSFORM messages instead.

AurelieSar commented 5 days ago

Yes indeed thank you very much, we realized our error a few hours after. We now have something appearing in "IN", however it is not yet detected as a transform, we must have forgotten a parameter in the TRANSFORM MESSAGE setting in python.

lassoan commented 4 days ago

See example for sending transforms here: https://github.com/lassoan/pyigtl/blob/master/examples/example_tracked_image_server.py

aaa34169 commented 4 days ago

thank for this reply. I am Aurelie's colleague I am not sure about the argument "device_name" of the TransformMessage Instance.

if i have the following the plusserver config :

<PlusConfiguration version="2.2">

  <DataCollection StartupDelaySec="1.0" >
    <DeviceSet 
      Name="Fabien - OpenIGTLink tracker connection (Probe, Reference)"
      Description="" 
    />

    <Device
      Id="TrackerDevice"
      Type="OpenIGTLinkTracker"
      MessageType="TRANSFORM"
      ServerAddress="127.0.0.1"
      ServerPort="18944"
      IgtlMessageCrcCheckEnabled="true"
      AcquisitionRate="30"
      LocalTimeOffset="0.0"
      TrackerInternalCoordinateSystemName="Reference"
      ToolReferenceFrame="Reference">
      <DataSources>
        <DataSource Type="Tool" Id="Tracker" />
      </DataSources>
      <OutputChannels>
        <OutputChannel Id="TrackerStream">
          <DataSource Id="Tracker" />
        </OutputChannel>
      </OutputChannels>
    </Device>

  </DataCollection>

  <PlusOpenIGTLinkServer
    MaxNumberOfIgtlMessagesToSend="1"
    MaxTimeSpentWithProcessingMs="50"
    ListeningPort="18946"
    SendValidTransformsOnly="TRUE"
    OutputChannelId="TrackerStream" >
    <DefaultClientInfo>
      <MessageTypes>
        <Message Type="TRANSFORM" />
      </MessageTypes>
      <TransformNames>
        <Transform Name="TrackerToReference" />
      </TransformNames>
    </DefaultClientInfo>
  </PlusOpenIGTLinkServer>

</PlusConfiguration>

I suspect the device_name should point the transform name ( ie TrackerToReference) and not an actual device

am i wrong ?

regards

Fabien

lassoan commented 4 days ago

Plus always uses the "(FromCoordinateSystem)To(To CoordinateSystem)" as device name. Device name is used as node name in Slicer.