Как в Сeres Solver работать с кватернионами

Стоит задача определить 3D-кооринаты объекта в пространстве (причём в системе координат самого обекта). Для этого использую библиотеку ceres solver. В качестве параметров модели выстпупают координаты точки объекта в собственной системе координат. Так же извстны кватернион и вектор параллельного переноса, связывающие перевод из СК объекта в мировую СК. Однако я не могу разобраться, как работать с кватернионами внутри ceres solve. Сейчас я решил это проблему переводом кватермиона в матрицу повотора.

   ...
template<typename T>  bool
operator()(const T *const xH, const T *const yH, const T *const zH, T *residuals) const {
    T xw = RW.ptr<double>(0)[0] * xH[0] + RW.ptr<double>(0)[1] * yH[0] + RW.ptr<double>(0)[2] * zH[0] + TW.ptr<double>(0)[0];
    T yw = RW.ptr<double>(1)[0] * xH[0] + RW.ptr<double>(1)[1] * yH[0] + RW.ptr<double>(1)[2] * zH[0] + TW.ptr<double>(1)[0];
    T zw = RW.ptr<double>(2)[0] * xH[0] + RW.ptr<double>(2)[1] * yH[0] + RW.ptr<double>(2)[2] * zH[0] + TW.ptr<double>(2)[0];
# RW - это кватернион, преобразованный в матрицу поворота, TW - вектор параллельного переноса

При этом хотелось работать напрямую с кватернионом, не прибегая к матрице поворота (так как думаю могут вознитьнуть дополнительные погрешности в вычислениямх)


Ответы (0 шт):