Main MRPT website > C++ reference
MRPT logo
reprojection_residuals.h
Go to the documentation of this file.
1 /* +---------------------------------------------------------------------------+
2  | Mobile Robot Programming Toolkit (MRPT) |
3  | http://www.mrpt.org/ |
4  | |
5  | Copyright (c) 2005-2015, Individual contributors, see AUTHORS file |
6  | See: http://www.mrpt.org/Authors - All rights reserved. |
7  | Released under BSD License. See details in http://www.mrpt.org/License |
8  +---------------------------------------------------------------------------+ */
9 
10 #pragma once
11 
12 namespace mrpt { namespace srba {
13 
14 /** reprojection_residuals */
15 template <class KF2KF_POSE_TYPE,class LM_TYPE,class OBS_TYPE,class RBA_OPTIONS>
17  vector_residuals_t & residuals, // Out:
18  const std::vector<TObsUsed> & observations // In:
19  ) const
20 {
21  const size_t nObs = observations.size();
22  if (residuals.size()!=nObs) residuals.resize(nObs);
23 
24  double total_sqr_err = 0;
25 
26  for (size_t i=0;i<nObs;i++)
27  {
28  // Actually measured pixel coords: observations[i]->obs.px
29  const TKeyFrameID obs_frame_id = observations[i].k2f->obs.kf_id; // Observed from here.
30  const TRelativeLandmarkPos *feat_rel_pos = observations[i].k2f->feat_rel_pos;
31 
32  ASSERTDEB_(feat_rel_pos!=NULL)
33 
34  const TKeyFrameID base_id = feat_rel_pos->id_frame_base;
35 
36  pose_t const * base_pose_wrt_observer=NULL;
37 
38  // This case can occur with feats with unknown rel.pos:
39  if (base_id==obs_frame_id)
40  {
41  base_pose_wrt_observer = &aux_null_pose;
42  }
43  else
44  {
45  // num[SOURCE] |--> map[TARGET] = CPose3D of TARGET as seen from SOURCE
46  const typename TRelativePosesForEachTarget::const_iterator itPoseMap_for_base_id = rba_state.spanning_tree.num.find(obs_frame_id);
47  ASSERT_( itPoseMap_for_base_id != rba_state.spanning_tree.num.end() )
48 
49  const typename frameid2pose_map_t::const_iterator itRelPose = itPoseMap_for_base_id->second.find(base_id);
50  ASSERT_( itRelPose != itPoseMap_for_base_id->second.end() )
51 
52  base_pose_wrt_observer = &itRelPose->second.pose;
53  }
54 
55  // pose_robot2sensor(): pose wrt sensor = pose_wrt_robot (-) sensor_pose_on_the_robot
57  RBA_OPTIONS::sensor_pose_on_robot_t::pose_robot2sensor( *base_pose_wrt_observer, base_pose_wrt_sensor, this->parameters.sensor_pose );
58 
59  const array_obs_t & real_obs = observations[i].k2f->obs.obs_arr;
60  residual_t &delta = residuals[i];
61 
62  // Generate observation and compare to real obs:
63  sensor_model_t::observe_error(delta,real_obs, base_pose_wrt_sensor,feat_rel_pos->pos, this->parameters.sensor);
64 
65  const double sum_2 = delta.squaredNorm();
66  if (this->parameters.srba.use_robust_kernel)
67  {
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;
70  delta *= w;
71  total_sqr_err += (w*w)*sum_2;
72  }
73  else
74  {
75  // nothing else to do:
76  total_sqr_err += sum_2;
77  }
78  } // end for i
79 
80  return total_sqr_err;
81 }
82 
83 } } // end namespaces
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
Definition: RbaEngine.h:107
vec_t::const_iterator const_iterator
Definition: map_as_vector.h:56
double reprojection_residuals(vector_residuals_t &residuals, const std::vector< TObsUsed > &observations) const
reprojection_residuals
const Scalar * const_iterator
Definition: eigen_plugins.h:24
KF2KF_POSE_TYPE::pose_t pose_t
The type of relative poses (e.g. mrpt::poses::CPose3D)
Definition: RbaEngine.h:87
landmark_traits_t::TRelativeLandmarkPos TRelativeLandmarkPos
One landmark position (relative to its base KF)
Definition: RbaEngine.h:98
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.
#define ASSERT_(f)
A partial specialization of CArrayNumeric for double numbers.
Definition: CArrayNumeric.h:74
uint64_t TKeyFrameID
Numeric IDs for key-frames (KFs)
Definition: srba_types.h:31



Page generated by Doxygen 1.8.9.1 for MRPT 1.3.0 SVN: at Sun Sep 13 03:55:12 UTC 2015