High RMS error during pivot calibration

Dear Slicer team,

We succeeded in integrating live Qualisys and VICON data into Slicer using IGT (I will go back to you for this code and integration).

However during the pivot calibration of the stylus using the Qualisys system (we have no issue using VICON data), we obtain a very high RMS error (about 33 in mean, we can go down to 8-9 at the minimum).

It is the first time that we have such data, we used Slicer and pivot with Vicon, Optitrack, NDI and the RMS was always less than 1.

What could explain such value ?

Thanks in advance,

Best regards,

Aurélie Sarcher

What do you see when moving the stylus (or needle or whatever you want to pivot-calibrate) without the calibration? Is the motion smooth, or are there jumps? How does the motion look like during pivot calibration?

Thank you for your quick answer.

The movement is very smooth and we made sure that we tracked with 100% quality the rigidbody on top of the stylus.

We are proof testing the Qualisys code and I wonder if this is not a pb of construction of the coordinate matrix that I sent into 3D Slicer.

For now I do that in my Qualisys code :

rotationMatrix = np.array([
[rotation.matrix[0], rotation.matrix[1], rotation.matrix[2], position.x],
[rotation.matrix[3], rotation.matrix[4], rotation.matrix[5], position.y],
[rotation.matrix[6], rotation.matrix[7], rotation.matrix[8], position.z],
[0, 0, 0, 1]
], dtype=float)

But I think I need to check the data and be sure that QTM does not send data in columns :

R = rotation.matrix
rotationMatrix = np.array([
[R[0], R[3], R[6], position.x],
[R[1], R[4], R[7], position.y],
[R[2], R[5], R[8], position.z],
[0, 0, 0, 1],
])

or even maybe transposed.

I just wanted to be sure that this pb could not come from anything else ?

Best regards,

Aurélie

Interesting, so you are constructing the pose matrix yourself? Do you have a new PLUS device for aquiring the data? Or how do you do the acquisition?

Based on what you write, the positions seem fine, because the motion seems smooth. If you’re not sure how to construct the rotation matrix, maybe assume certain poses with the stylus and verify what the 9 elements in the rotation elements vector are? Knowing that the three columns of the rotation matrix are the three axis vectors allow you to compare the changes after each rotation (horizontal vs vertical for example).

Yes we are constructing the pose matrix since we run our own OpenIGTLink server using Python that streams motion-capture transforms on port 18946.
These transforms come from either Vicon or Qualisys, depending on the setup.

We then use PlusServer, which connects to our OpenIGTLink server as a client.
PlusServer reads the incoming transforms on port 18946, synchronizes them with the ultrasound video stream, and then re-publishes the combined (video + tracking) data to 3D Slicer via OpenIGTLink on port 18944. Interestingly the delay is comparable to direct integration using Optitrack and PlusServer for example.

Since it was pretty straightforward using Vicon I did not really think about Qualisys but yes I need to test everything because something in the constructed matrix seems wrong.

Thanks a lot, I will keep you updated.

1 Like