eigen3ceres-solver

Conduct AngleAxisToRotationMatirx on part of a double arrray in Ceres?


Nowadays I'm working with Ceres and Eigen. And I have a 6x3 = 18-d double array, let's call it xs, which is defined as:

double xs[6*3];

Basically xs contains the 6 rotations expressed in angle-axis format. And I need to turn each rotation of all 6 into rotation matrix format, then matrix multiplication will be conducted.

struct F1 {
    template <typename T> bool operator()(const T* const xs,
                                    T* residual) const {
    Eigen::Map<const Eigen::Matrix<T,3,1> > m0(xs, 3);

    T m[9], res[3];
    ceres::AngleAxisToRotationMatrix(m0, m);


    residual[0] = res[0];
    residual[1] = res[1];
    residual[2] = res[2];
}

Here in the example code I extract first 3 elements of xs via Eigen::Map, then I applied AngleAxisToRotationMatrix on it. But I keep receiving such errors:

error: no matching function for call to ‘AngleAxisToRotationMatrix(Eigen::Map<const Eigen::Matrix<ceres::Jet<double, 18>, 3, 1, 0, 3, 1>, 0, Eigen::Stride<0, 0> >&, ceres::Jet<double, 1> [9])’

Can somebody lend me a hand here? I'm pretty new to Ceres and Eigen, it really drove me almost to crazy.

Thanks!


Solution

  • ceres::AngleAxisToRotationMatrix expects raw pointers:

    AngleAxisToRotationMatrix(xs, m);