26 bool operator()(
const T*
const q,
const T*
const t, T* residuals)
const {
27 using Vec3 = Eigen::Matrix<T, 3, 1>;
28 using Mat3 = Eigen::Matrix<T, 3, 3>;
33 const Mat3 rot_s = rot_a * rot_x * rot_b.transpose() * rot_x.transpose();
34 Eigen::AngleAxis<T> axisangle(rot_s);
37 const Vec3 tra_x(t[0], t[1], t[2]);
38 const Vec3 tra_a =
tra_a_.cast<T>();
39 const Vec3 tra_b =
tra_b_.cast<T>();
40 const Vec3 tra_e = (rot_a - Mat3::Identity()) * tra_x - (rot_x * tra_b - tra_a);
42 residuals[0] = axisangle.angle() * axisangle.axis()(0);
43 residuals[1] = axisangle.angle() * axisangle.axis()(1);
44 residuals[2] = axisangle.angle() * axisangle.axis()(2);
45 residuals[3] = tra_e(0);
46 residuals[4] = tra_e(1);
47 residuals[5] = tra_e(2);