12 namespace mrpt {
namespace srba {
15 template <
class KF2KF_POSE_TYPE,
class LM_TYPE,
class OBS_TYPE,
class RBA_OPTIONS>
18 const std::vector<TObsUsed> & observations
21 const size_t nObs = observations.size();
22 if (residuals.size()!=nObs) residuals.resize(nObs);
24 double total_sqr_err = 0;
26 for (
size_t i=0;i<nObs;i++)
29 const TKeyFrameID obs_frame_id = observations[i].k2f->obs.kf_id;
34 const TKeyFrameID base_id = feat_rel_pos->id_frame_base;
36 pose_t const * base_pose_wrt_observer=NULL;
39 if (base_id==obs_frame_id)
41 base_pose_wrt_observer = &aux_null_pose;
47 ASSERT_( itPoseMap_for_base_id != rba_state.spanning_tree.num.end() )
50 ASSERT_( itRelPose != itPoseMap_for_base_id->second.end() )
52 base_pose_wrt_observer = &itRelPose->second.pose;
57 RBA_OPTIONS::sensor_pose_on_robot_t::pose_robot2sensor( *base_pose_wrt_observer, base_pose_wrt_sensor, this->parameters.sensor_pose );
59 const array_obs_t & real_obs = observations[i].k2f->obs.obs_arr;
63 sensor_model_t::observe_error(delta,real_obs, base_pose_wrt_sensor,feat_rel_pos->pos, this->parameters.sensor);
65 const double sum_2 = delta.squaredNorm();
66 if (this->parameters.srba.use_robust_kernel)
68 const double nrm = std::max(1e-11,std::sqrt(sum_2));
69 const double w = std::sqrt(huber_kernel(nrm,parameters.srba.kernel_param))/nrm;
71 total_sqr_err += (w*w)*sum_2;
76 total_sqr_err += sum_2;
Typedefs for determining whether the result of combining a KF pose (+) a sensor pose leads to a SE(2)...
observation_traits_t::vector_residuals_t vector_residuals_t
vec_t::const_iterator const_iterator
double reprojection_residuals(vector_residuals_t &residuals, const std::vector< TObsUsed > &observations) const
reprojection_residuals
const Scalar * const_iterator
KF2KF_POSE_TYPE::pose_t pose_t
The type of relative poses (e.g. mrpt::poses::CPose3D)
landmark_traits_t::TRelativeLandmarkPos TRelativeLandmarkPos
One landmark position (relative to its base KF)
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
#define ASSERTDEB_(f)
Defines an assertion mechanism - only when compiled in debug.
A partial specialization of CArrayNumeric for double numbers.
uint64_t TKeyFrameID
Numeric IDs for key-frames (KFs)