During a large scale scan with our Ouster OS-1-128 we noticed an unusual distortion in the data. In order to investigate the problem, we set up a test bench: a construction level was placed on a chair perpendicular to the scanner. In the resulting scan, however, the level appeared bent/distorted.
We process the data using the Ouster C++ SDK 0.13.1, and the same problem is observed in Ouster Studio 2.0.6.
Can you help us understand what could be causing this distortion? Could it be related to data processing specifics or are there any parameters we should check?
Welcome to Ouster and thanks for posting the data to help debug. In the future, you can also sign up for a free account on https://studio.ouster.com/ to upload, view, and share data via Ouster Studio Web or within the Desktop application for added convenience.
As to your observation of range inaccuracy, I agree that the level has more curvature than would be expected - perhaps 40-50mm of range inaccuracy. You can see that the post roughly 3 meters away has no visible error:
A metallic level like this may have specular surface properties that make it reflect light more like retroreflector versus a lambertian target. In addition, metallic levels are not always flat, and they sometimes have extruded features that may act like low grade corner reflectors:
It doesn’t look like your lidar is damaged or miscalibrated given the quality of the other objects in the environment. Some things you can try in order to understand further:
Try a different object that is uniformly flat and matte in surface finish like a piece of lumber.
Move the level up to 5 meters away to see if the accuracy improves with distance. While the lidar is calibrated to account for changes with distance, there is still some small variation in performance especially within several meters. I should note that range accuracy below 1 meter is not documented in the datasheet as it can be highly variable with target properties.
Cover the lidar with matte masking tape to change the material properties and see if the accuracy improves.
If the lidar had only just been turned on and began running, record a longer dataset after the sensor was on for 60 seconds. Here again, Ouster lidars are calibrated to compensate for startup thermal transients, but only to within datasheet levels specs. You can get better uniformity by waiting 60 seconds before recording data.
Finally, there appears to be some strange bright noise source reflecting off of the level causing stray noise points in the far field in the direction of the level. Is it possible you have another lidar operating in the near vicinity? The second return channel appears to contain the true returns in these pixels - if you would like have these returns show up as first returns, I would recommend setting your return_order configuration parameter to NEAREST_TO_FARTHEST as described here: Feature Guides — Ouster Sensor Docs documentation
If you have any more information about the distortion you saw in your large scale scan, or an ability to share that data, we can take a look at that as well. And any more information on your overarching goal may be helpful as well.