void apply_increment(Pose &obj, const double increment[SE3Type::num_parameters-1], const Adl&){ Eigen::Matrix3d R = obj.rotationMatrix(); v::apply_rotation(R, Eigen::Vector3d(increment[0], increment[1], increment[2])); obj.data[0] = R(2, 1); obj.data[1] = R(0, 2); obj.data[2] = R(1, 0); for (size_t i=3; i<6; ++i){ obj.data[i] += increment[i]; } }
template<int I> void apply_small_increment(Pose &obj, double d, v::numeric_tag<I>, const Adl&){ if (I < 3){ Eigen::Matrix<double, 3, 3> R = obj.rotationMatrix(); if (I == 0) v::apply_small_rotation_x(R, d); else if (I == 1) v::apply_small_rotation_y(R, d); else if (I == 2) v::apply_small_rotation_z(R, d); obj.data[0] = R(2, 1); obj.data[1] = R(0, 2); obj.data[2] = R(1, 0); } else{ obj.data[I] += d; } }