6#include <ceres/ceres.h>
8#include "../detail/observationutils.h"
16 const Eigen::Matrix<T, 3, 3>& c_rot_r,
const Eigen::Matrix<T, 3, 1>& c_tra_r,
17 const Eigen::Matrix<T, 3, 3>& r_rot_t,
const Eigen::Matrix<T, 3, 1>& r_tra_t) {
18 auto [c_rot_t, c_tra_t] =
product(c_rot_r, c_tra_r, r_rot_t, r_tra_t);
19 return {c_rot_t, c_tra_t};
22template <camera_model CameraT>
29 bool operator()(
const T* c_qua_r,
const T* c_tra_r,
const T* r_qua_t,
const T* r_tra_t,
30 const T* intrinsics, T* residuals)
const {
31 const auto [c_rot_t, c_tra_t] =
37 for (
const auto& observation :
view) {
38 auto point = Eigen::Matrix<T, 3, 1>(T(observation.object_xy.x()),
39 T(observation.object_xy.y()), T(0));
40 point = c_rot_t * point + c_tra_t;
41 Eigen::Matrix<T, 2, 1> projected_uv =
cam.project(point);
42 residuals[idx++] = projected_uv.x() - T(observation.image_uv.x());
43 residuals[idx++] = projected_uv.y() - T(observation.image_uv.y());
50 throw std::invalid_argument(
"No observations provided");
57 intr_size>(functor,
static_cast<int>(
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)
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
Type traits template for camera model implementations.
static auto * create(const PlanarView &view)
ExtrinsicResidual(PlanarView view_)
bool operator()(const T *c_qua_r, const T *c_tra_r, const T *r_qua_t, const T *r_tra_t, const T *intrinsics, T *residuals) const