在 Ceres 的双阵列的一部分上执行 AngleAxisToRotationMatirx?
Conduct AngleAxisToRotationMatirx on part of a double arrray in Ceres?
现在我正在使用 Ceres 和 Eigen。我有一个 6x3 = 18-d 双数组,我们称它为 xs,定义为:
double xs[6*3];
基本上 xs 包含以角轴格式表示的 6 个旋转。而我需要将所有6的每一次旋转都变成旋转矩阵的形式,然后进行矩阵乘法。
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];
}
在示例代码中,我通过 Eigen::Map 提取了 xs 的前 3 个元素,然后我应用了 AngleAxisToRotationMatrix就可以了。但是我一直收到这样的错误:
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])’
有人可以帮我一下吗?我对 Ceres 和 Eigen 还很陌生,这真的让我快要发疯了。
谢谢!
ceres::AngleAxisToRotationMatrix
需要原始指针:
AngleAxisToRotationMatrix(xs, m);
现在我正在使用 Ceres 和 Eigen。我有一个 6x3 = 18-d 双数组,我们称它为 xs,定义为:
double xs[6*3];
基本上 xs 包含以角轴格式表示的 6 个旋转。而我需要将所有6的每一次旋转都变成旋转矩阵的形式,然后进行矩阵乘法。
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];
}
在示例代码中,我通过 Eigen::Map 提取了 xs 的前 3 个元素,然后我应用了 AngleAxisToRotationMatrix就可以了。但是我一直收到这样的错误:
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])’
有人可以帮我一下吗?我对 Ceres 和 Eigen 还很陌生,这真的让我快要发疯了。
谢谢!
ceres::AngleAxisToRotationMatrix
需要原始指针:
AngleAxisToRotationMatrix(xs, m);