6#include <ceres/ceres.h>
8#include "../detail/observationutils.h"
17 const Eigen::Matrix<T, 3, 3>& b_rot_t,
const Eigen::Matrix<T, 3, 1>& b_tra_t,
18 const Eigen::Matrix<T, 3, 3>& g_rot_c,
const Eigen::Matrix<T, 3, 1>& g_tra_c,
19 const Eigen::Matrix<T, 3, 3>& b_rot_g,
const Eigen::Matrix<T, 3, 1>& b_tra_g) {
22 auto [c_rot_b, c_tra_b] =
23 product(c_rot_g, c_tra_g, g_rot_b, g_tra_b);
24 auto [c_rot_t, c_tra_t] =
25 product(c_rot_b, c_tra_b, b_rot_t, b_tra_t);
26 return {c_rot_t, c_tra_t};
29template <camera_model CameraT>
37 bool operator()(
const T* b_quat_t,
const T* b_tra_t,
const T* g_quat_c,
const T* g_tra_c,
38 const T* intrinsics, T* residuals)
const {
39 const Eigen::Matrix<T, 3, 3> b_rot_g =
base_se3_gripper.linear().template cast<T>();
40 const Eigen::Matrix<T, 3, 1> b_tra_g =
base_se3_gripper.translation().template cast<T>();
48 for (
const auto& ob :
view) {
49 auto point = Eigen::Matrix<T, 3, 1>(T(ob.object_xy.x()), T(ob.object_xy.y()), T(0));
50 point = c_rot_t * point + c_tra_t;
51 Eigen::Matrix<T, 2, 1> uv =
cam.project(point);
52 residuals[idx++] = uv.x() - T(ob.image_uv.x());
53 residuals[idx++] = uv.y() - T(ob.image_uv.y());
60 throw std::invalid_argument(
"No observations provided");
66 functor,
static_cast<int>(functor->view.size()) * 2);
std::vector< Eigen::Isometry3d > cam
Linear multi-camera extrinsics initialisation (DLT)
static Eigen::Matrix< T, 3, 1 > array_to_translation(const T *const arr)
std::pair< Eigen::Matrix< T, 3, 3 >, Eigen::Matrix< T, 3, 1 > > product(const Eigen::Matrix< T, 3, 3 > &rotation1, const Eigen::Matrix< T, 3, 1 > &translation1, const Eigen::Matrix< T, 3, 3 > &rotation2, const Eigen::Matrix< T, 3, 1 > &translation2)
std::pair< Eigen::Matrix< T, 3, 3 >, Eigen::Matrix< T, 3, 1 > > invert_transform(const Eigen::Matrix< T, 3, 3 > &rotation, const Eigen::Matrix< T, 3, 1 > &translation)
static std::pair< Eigen::Matrix< T, 3, 3 >, Eigen::Matrix< T, 3, 1 > > get_camera_se3_target(const Eigen::Matrix< T, 3, 3 > &b_rot_t, const Eigen::Matrix< T, 3, 1 > &b_tra_t, const Eigen::Matrix< T, 3, 3 > &g_rot_c, const Eigen::Matrix< T, 3, 1 > &g_tra_c, const Eigen::Matrix< T, 3, 3 > &b_rot_g, const Eigen::Matrix< T, 3, 1 > &b_tra_g)
static Eigen::Matrix< T, 3, 3 > quat_array_to_rotmat(const T *const arr)
std::vector< PlanarObservation > PlanarView
static auto * create(const PlanarView &view, const Eigen::Isometry3d &base_se3_gripper)
BundleReprojResidual(PlanarView v, Eigen::Isometry3d b_se3_g)
const Eigen::Isometry3d base_se3_gripper
bool operator()(const T *b_quat_t, const T *b_tra_t, const T *g_quat_c, const T *g_tra_c, const T *intrinsics, T *residuals) const
Type traits template for camera model implementations.