12 namespace mrpt {
namespace srba {
23 template <
class KF2KF_POSE_TYPE,
class LM_TYPE,
class OBS_TYPE,
class RBA_OPTIONS>
25 Eigen::VectorXd & minus_grad,
26 const std::vector<typename TSparseBlocksJacobians_dh_dAp::col_t*> & sparse_jacobs_Ap,
27 const std::vector<typename TSparseBlocksJacobians_dh_df::col_t*> & sparse_jacobs_f,
29 const std::map<size_t,size_t> &obs_global_idx2residual_idx
33 const size_t POSE_DIMS = KF2KF_POSE_TYPE::REL_POSE_DIMS;
34 const size_t LM_DIMS = LM_TYPE::LM_DIMS;
36 const size_t nUnknowns_k2k = sparse_jacobs_Ap.size();
37 const size_t nUnknowns_k2f = sparse_jacobs_f.size();
39 const size_t idx_start_f = POSE_DIMS*nUnknowns_k2k;
40 const size_t nUnknowns_scalars = POSE_DIMS*nUnknowns_k2k + LM_DIMS*nUnknowns_k2f;
42 if (static_cast<size_t>(minus_grad.size())!=nUnknowns_scalars)
43 minus_grad.resize(nUnknowns_scalars);
48 for (
size_t i=0;i<nUnknowns_k2k;i++)
50 const typename TSparseBlocksJacobians_dh_dAp::col_t & col_i = *sparse_jacobs_Ap[i];
58 const size_t obs_idx = itJ->first;
60 ASSERT_(it_obs!=obs_global_idx2residual_idx.end())
61 const size_t resid_idx = it_obs->second;
64 RBA_OPTIONS::obs_noise_matrix_t::template accum_Jtr(accum_g_i, itJ->second.num, residuals[ resid_idx ], obs_idx, this->parameters.obs_noise );
67 RBA_OPTIONS::obs_noise_matrix_t::template scale_Jtr(accum_g_i, this->parameters.obs_noise );
69 minus_grad.block<POSE_DIMS,1>(i*POSE_DIMS,0) = accum_g_i;
72 for (
size_t i=0;i<nUnknowns_k2f;i++)
74 const typename TSparseBlocksJacobians_dh_df::col_t & col_i = *sparse_jacobs_f[i];
82 const size_t obs_idx = itJ->first;
84 ASSERT_(it_obs!=obs_global_idx2residual_idx.end())
85 const size_t resid_idx = it_obs->second;
88 RBA_OPTIONS::obs_noise_matrix_t::template accum_Jtr(accum_g_i, itJ->second.num, residuals[ resid_idx ], obs_idx, this->parameters.obs_noise );
91 RBA_OPTIONS::obs_noise_matrix_t::template scale_Jtr(accum_g_i, this->parameters.obs_noise );
93 minus_grad.block<LM_DIMS,1>(idx_start_f+i*LM_DIMS,0) = accum_g_i;
observation_traits_t::vector_residuals_t vector_residuals_t
const Scalar * const_iterator
This base provides a set of functions for maths stuff.
void compute_minus_gradient(Eigen::VectorXd &minus_grad, const std::vector< typename TSparseBlocksJacobians_dh_dAp::col_t * > &sparse_jacobs_Ap, const std::vector< typename TSparseBlocksJacobians_dh_df::col_t * > &sparse_jacobs_f, const vector_residuals_t &residuals, const std::map< size_t, size_t > &obs_global_idx2residual_idx) const
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
A partial specialization of CArrayNumeric for double numbers.