Ask Your Question

Revision history [back]

Using cv::solvePnP on Lighthouse Data

I've got a project going, were I try to get the pose of a 3d-tracker, which utilizes the lighthouse basestations from Valve.

The basestations provide laser-sweeps across the tracking-volume and my tracker records the timings when a laser-plane hits one of its ir-sensors. These timings can then be converted into degrees, based on the fact that the laser-planes rotate at exactly 3600RPM.

Since I know exactly where my sensors are placed on the tracker I should be able to get the pose using the cv::solvePnP function.

But I can't figure out what kind of camera-matrix and distortion coefficients I should use. Since a basestation has neither a lens nor a 2d-image-sensor I can't think of a way to calculate the focal-length needed for the camera-matrix.
First I've tried the imagewidth/2 * cot(fov/2) formula, assuming an "image width" of 120, since this is the "domain" of my readings, which leads to a focal-length of 34.641px. But the results were completely off. I've then tried to calculate a focal length for a given scenario (tracker 1m infront of the basestation) which gave me a focal-length of 56.62px. If I place my tracker about 1 meter in front of a basestation the results are plausible but if I move away from that "sweetspot" the results are again completely off.

But since I have no lens there should be no distortion, or am I wrong about that?

If anyone could give me a hint I would be very grateful.