I started this week by analyzing test data from the previous week and quickly discovered a few problems with the test procedure:
The Sick LD-MRS400001 was too low, resulting in the bottom laser hitting the ground or the box used to place the ball;
During ball placement both LMS 151 detected legs as part of the ball arch, increasing it’s radius. Since the laser computes it’s Z coordinate based on the arch radius, this error causes the laser to be higher than it actually is.
Despite these errors, I had a successful calibration without the grid. The test showed that solvePnP was not returning the expected results, it was also highly unstable – small changes in image or world points resulted in completely different geometric transformations. These problems were partially caused by the double distortion correction done to the image points. After fixing that issue, results with solvePnP got closer to reality and more stable, however I still had large errors and couldn’t find their source; So I made a post on OpenCV’s Q&A Forums describing the problem in detail hoping for some help, no luck until now.
Bellow, on the left, you can see the calibration results represented on Rviz – red arrow represents the reference LMS 151, orange represents the second LMS 151, yellow represents the LD-MRS400001 and the camera is represented by the green arrow – on the right, for comparison purposes, a photo of ATLASCAR_1.
Laser positions are correct, however the camera position has an error of about 1 meter along the Z direction.