Looks like depending on the location in the room and the hyper local conditions you are getting a standard deviation of somewhere between 0.6 to 3cm - that’s well within expectations. A couple of points here. I think that without a Kalman filter - I wouldn’t be too surprised by the fluctuations that you are seeing.
The data is coming off at a fairly high publish rate and there is no averaging - each position fix is based on a single frame of the camera. So if you have 100 observations in your data set (which only takes a few seconds) then you will get some observations that are “rare” events in that they are 1% / 3 sigma events.
No other data is being used to determine your location other than the fiducials - this is an absolute localization method. So at least in theory the error that you see stationary should be the same as when you go away and come back. You should be able to go away - and come back hours or days later and get the same / similar localization error. Obviously you will find your ground truth measurement will probably be off by a cm or two so the standard deviations will look bigger - but that’s ground truth error not localization error.
If the fluctuations are a worry then implementing a Kalman filter will eliminate them. This will also tighten the standard deviation - as the kalman filter will essentially reject outlier events.
A quick and dirty method would be to just average the data from several successive frames - we opted to not do that as you can always pipe the data in to a kalman filter or average once you have the data, however if we only provide averaged information there is no way to recover un-averaged data from averaged data.
Most users expect the localization accuracy to be around 10cm without optimization and that is what we usually quote.
There is a lot of things that can be done to optimize location accuracy. A partial list would include.
- Adjusting fitting parameters on Aruco detect to trade off compute time with fitting accuracy
- Increasing the size of the fiducials
- Increasing the density of the fiducials
- Adjustments to lighting to improve contrast (in general the more light the better)
- Adjustments to the gain and shutter speed parameters on the camera to increase the contrast of the image
There is one user who is also trying to get higher accuracy for a docking application and is already working down this list in their environment and for their application. I will obviously feedback what comes back in to the stack if it is generally applicable.
- Finally the improvements that we’ve made in the stack are likely to allow a little more fluctuation with a little more robustness of the fiducial field. We think that’s the right trade off, but the old method is just a launch option away.