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

"No data available" when transferring Tracker and Video Data #435

Closed usrobot closed 5 years ago

usrobot commented 5 years ago

Hi PLUS team,

we recently tried to rebuild the project from source to incorporate the latest changes and ran into problems when using a video device (Ultrasound station) and a tracker (Polaris/Atracsys/FakeTracker) simultaneously. It seems that the connection to the devices is successful but then we only get an error message saying that no data is available for transfer via OpenIGTLink. If we only connect to one device, the data transfer works fine. The virtual mixer works when we use the same device twice as input - when we try to combine video and tracker, it fails. I uploaded an example logfile here: https://www.dropbox.com/s/0swnczhdvtphfbh/103018_163648_PlusLog.txt?dl=0

and our config file for reference (with deleted custom US device): https://www.dropbox.com/s/ezhfvjlferf5blw/PlusDeviceSet_Server_USSim_FakeTracker.xml?dl=0

We also tried to re-build our previous version (which used to work) but this now shows the same error.

Is this error reproducible on your end? And do you have any ideas what might be going wrong? We ran out of ideas and would greatly appreciate your help.

Thanks!

adamrankin commented 5 years ago

Does it work with one device when the device is the ultrasound, or the tracker?

usrobot commented 5 years ago

Yes, both devices alone work fine. The problem is the combination as far as we can tell.

adamrankin commented 5 years ago

I admit I'm stumped. It should work. The virtual mixer is a very transparent device that just merges data sources from its input source(s) into a single output channel.

I'm afraid you might have to do some debugging to identify the problem, as it works with other devices.

adamrankin commented 5 years ago

Could I see the code for your US device?

usrobot commented 5 years ago

The code for our US device cannot be shared yet, sorry. We have tried to track down the problem in debug mode and saw that the "TrackedFrameList" remains empty even though both devices are connected and transfer data. Since the VirtualCaptureDevice accesses the TrackedFrameList, it fails because the List has size 0. Any ideas? We are also stumped by this because the same software version used to work and now doesn't.

lassoan commented 5 years ago

If you run Plus in an interactive debugger and place breakpoints then you can see exactly why no frames found that could be sent. vtkPlusOpenIGTLinkServer::SendLatestFramesToClients could be a good place to start.

usrobot commented 5 years ago

After some more debugging we finally found the problem - it was a discrepancy in the timestamps of the two devices. For our US we used a different timing method than the tracker. We were not aware that Plus automatically compares the timestamps and rejects data pairs if they do not correspond. After changing our timing method it all works fine. Many thanks for your help!

adamrankin commented 5 years ago

Excellent!