# Aligning datasets with drift

I have a dataset that contains position information from tracking a robot in the environment. The position data comes both from a very accurate optical tracking system (Vicon or similar) and an IMU. I need to compare both position data (either integrating the IMU or differentiating the optical tracking data).

The main problem is that both systems have different reference frames, so in order to compare I first need to align both reference frames. I have found several solutions; the general problem of aligning two datasets seems to be called "the absolute orientation problem".

My concern is that if I use any of these methods I will get the rotation and translation that aligns both datasets minimizing the error over the whole dataset, which means that it will also compensate up to some extent for the IMU's drift. But I am especially interested in getting a feeling of how much the IMU drifts, so that solution does not seem to be applicable.

Anyone has any pointer on how to solve the absolute orientation problem when you do not want to correct for the drift?

Thanks

• I'm not sure I understand the problem. Can you not just calculate the rotation and translation from one origin to the other, then apply that transform to all the points?
– Chuck
Commented Oct 14, 2015 at 1:50
• Yes, you cn use for example Horn's method ; the problem is that if one of the datasets has drift, you will calculate the transformation that minimizes the error through the whole dataset, meaning that the transformation will try to compensate for the drift Commented Oct 14, 2015 at 21:25

You gave two methods of comparison - "either integrating the IMU or differentiating the optical tracking data". I'm talking about one basic transform to convert from the vision frame to the global frame and vice-versa.

One transform, that you calculate in advance, that relates one origin to another origin. You seem to be talking about methods of best-fit to get good correspondence, but I'm saying to use one fixed, somewhat generic transform.

All you need to do is shift from one frame to another. This will preserve drift.

:EDIT:

I may have misunderstood the question, or your particular scenario. I thought that you could just go out and measure the location and orientation of the camera, measure the location and orientation of the robot, and make your own transform.

In the event that you can't or don't want to (too time consuming, lots of trials, etc.), then you could "cheat" by exploiting the fact that drift is a slow event, where a very small error is added over a very large number of samples.

What you might be able to try is to use the method you already found and apply that to only the first few samples of your data set.

If your robot is in motion from the start of the set, then the first sample should be enough to fix a position and the second sample should fix a heading/rotation. Use the resulting transform you get from only these two samples and apply that transform to all the others. Noise may be an issue, but that seems to be the point of what you're trying to do.

If you think it's too noisy or there's too much error, then you could try the algorithm with the first 3 samples, or first 4, or 5, etc. As you've noted, the more samples you include the more this will account for drift, but if you can't physically measure the transform you don't really have any other option.

• The whole point is that the transformation that related one origin to another origin is unknown. This transformation (translation and orientation) is what I am trying to find. Commented Oct 15, 2015 at 14:08
• @rhymeface - see the updated answer.
– Chuck
Commented Oct 15, 2015 at 14:36

Use a method to solve the absolute orientation problem so that you have a result for the IMU data that does compensate for drift. Separately, use a dead reckoning method (i.e., integration) to compute the result without compensating for drift. Then you can subtract the first result from the second result and the difference should be the drift you are looking for.

• Could you elaborate on this? I can use the angular rate and/or acceleration, integrate to get position, then use Horn's method for absolute orientation to get the transformation in respect to the position data from the optical sensor. That transformation will be compensating for drift. And then? Commented Oct 15, 2015 at 7:23
• As Chuck is suggesting, you probably need to expand your question with more information. How is your initial pose defined? If you have two sets of data as you described and no initial pose defined for each of them then this problem is impossible to solve. Commented Oct 15, 2015 at 15:22
• I am assuming that your two data-sets are at least aligned in terms of samples (so the first sample for each of them is the initial condition -- and should be the same pose). They may be different poses when you examine the values of the data but they represent the same pose of the robot in the global frame. So just choose one of them as your reference frame and transform all of the data in the other set to that frame. Now you have both sets of data in the same reference frame and the paths will originate from the same position and orientation. Commented Oct 15, 2015 at 15:22