Я работаю над калибровкой камеры-лидара и некоторое время не могу решить следующую проблему:
Я использую USB-камеру и 2D-лидар. У меня есть координаты соответствующих точек как в кадре лидара, так и в кадре камеры (допустим, у меня есть 3 точки и их координаты в кадре лидара и координаты тех же трех точек в кадре камеры).
Пример для одна точка:
lidar_pt1(xl, yl)
camera_pt1(xc, yc, zc)
...
известны.
Если я жестко запрограммирую матрицу преобразования, я получу ожидаемый результат. Теперь пытаюсь не хардкодить, а автоматически вычислять по известным значениям координат. У меня есть 3 точки в 2D-координатах в кадре лидара и точные 3 точки в 3D-координатах в кадре камеры. Именно здесь я борюсь с математикой, чтобы как-то рассчитать вращение на основе значения координат, которое у меня есть. Есть ли способ получить это вращение?
camera_pt1 = TransformMat * lidarpt1
TransformMat = ?
Я видел несколько примеров использования SVD (http://nghiaho.com/?page_id=671), но я думаю, что они требуют больших наборов данных, и минимум 3 точки не дадут наилучшего результата.