29 : uv_meas(uv_meas_), pix_sigma(pix_sigma_), is_fisheye(is_fisheye_) {
32 sqrtQ = Eigen::Matrix<double, 2, 2>::Identity();
38 mutable_parameter_block_sizes()->push_back(4);
39 mutable_parameter_block_sizes()->push_back(3);
40 mutable_parameter_block_sizes()->push_back(3);
41 mutable_parameter_block_sizes()->push_back(4);
42 mutable_parameter_block_sizes()->push_back(3);
43 mutable_parameter_block_sizes()->push_back(8);
49 Eigen::Vector4d q_GtoIi = Eigen::Map<const Eigen::Vector4d>(parameters[0]);
51 Eigen::Vector3d p_IiinG = Eigen::Map<const Eigen::Vector3d>(parameters[1]);
52 Eigen::Vector3d p_FinG = Eigen::Map<const Eigen::Vector3d>(parameters[2]);
53 Eigen::Vector4d q_ItoC = Eigen::Map<const Eigen::Vector4d>(parameters[3]);
55 Eigen::Vector3d p_IinC = Eigen::Map<const Eigen::Vector3d>(parameters[4]);
58 Eigen::Matrix<double, 8, 1> camera_vals = Eigen::Map<const Eigen::Matrix<double, 8, 1>>(parameters[5]);
61 Eigen::Vector3d p_FinIi = R_GtoIi * (p_FinG - p_IiinG);
62 Eigen::Vector3d p_FinCi = R_ItoC * p_FinIi + p_IinC;
65 Eigen::Vector2d uv_norm;
66 uv_norm << p_FinCi(0) / p_FinCi(2), p_FinCi(1) / p_FinCi(2);
69 Eigen::Matrix<double, 2, 2> sqrtQ_gate =
gate *
sqrtQ;
73 Eigen::Vector2d uv_dist;
74 Eigen::MatrixXd H_dz_dzn, H_dz_dzeta;
81 H_dz_dzn = sqrtQ_gate * H_dz_dzn;
82 H_dz_dzeta = sqrtQ_gate * H_dz_dzeta;
90 H_dz_dzn = sqrtQ_gate * H_dz_dzn;
91 H_dz_dzeta = sqrtQ_gate * H_dz_dzeta;
100 Eigen::Vector2d res = uv_dist -
uv_meas;
101 res = sqrtQ_gate * res;
102 residuals[0] = res(0);
103 residuals[1] = res(1);
109 Eigen::MatrixXd H_dzn_dpfc = Eigen::MatrixXd::Zero(2, 3);
110 H_dzn_dpfc << 1.0 / p_FinCi(2), 0, -p_FinCi(0) / std::pow(p_FinCi(2), 2), 0, 1.0 / p_FinCi(2), -p_FinCi(1) / std::pow(p_FinCi(2), 2);
111 Eigen::MatrixXd H_dz_dpfc = H_dz_dzn * H_dzn_dpfc;
115 Eigen::Map<Eigen::Matrix<double, 2, 4, Eigen::RowMajor>> jacobian(jacobians[0]);
116 jacobian.block(0, 0, 2, 3) = H_dz_dpfc * R_ItoC *
ov_core::skew_x(p_FinIi);
117 jacobian.block(0, 3, 2, 1).setZero();
122 Eigen::Map<Eigen::Matrix<double, 2, 3, Eigen::RowMajor>> jacobian(jacobians[1]);
123 jacobian.block(0, 0, 2, 3) = -H_dz_dpfc * R_ItoC * R_GtoIi;
128 Eigen::Map<Eigen::Matrix<double, 2, 3, Eigen::RowMajor>> jacobian(jacobians[2]);
129 jacobian.block(0, 0, 2, 3) = H_dz_dpfc * R_ItoC * R_GtoIi;
134 Eigen::Map<Eigen::Matrix<double, 2, 4, Eigen::RowMajor>> jacobian(jacobians[3]);
135 jacobian.block(0, 0, 2, 3) = H_dz_dpfc *
ov_core::skew_x(R_ItoC * p_FinIi);
136 jacobian.block(0, 3, 2, 1).setZero();
141 Eigen::Map<Eigen::Matrix<double, 2, 3, Eigen::RowMajor>> jacobian(jacobians[4]);
142 jacobian.block(0, 0, 2, 3) = H_dz_dpfc;
147 Eigen::Map<Eigen::Matrix<double, 2, 8, Eigen::RowMajor>> jacobian(jacobians[5]);
148 jacobian.block(0, 0, 2, 8) = H_dz_dzeta;