12 namespace mrpt {
namespace srba {
15 template <
class KF2KF_POSE_TYPE,
class LM_TYPE,
class OBS_TYPE,
class RBA_OPTIONS>
19 const bool run_local_optimization )
21 m_profiler.enter(
"define_new_keyframe");
23 out_new_kf_info.
clear();
32 m_profiler.enter(
"define_new_keyframe.determine_edges");
35 std::vector<TNewEdgeInfo> new_k2k_edge_ids;
36 determine_kf2kf_edges_to_create(new_kf_id,obs, new_k2k_edge_ids);
38 m_profiler.leave(
"define_new_keyframe.determine_edges");
43 m_profiler.enter(
"define_new_keyframe.add_observations");
50 this->add_observation( new_kf_id, it_obs->obs, fixed_rel_pos, unk_rel_pos_initval );
53 m_profiler.leave(
"define_new_keyframe.add_observations");
57 if (run_local_optimization)
60 if (parameters.srba.optimize_new_edges_alone)
63 if (!new_k2k_edge_ids.empty())
65 m_profiler.enter(
"define_new_keyframe.opt_new_edges");
68 const bool old_kernel = parameters.srba.use_robust_kernel;
69 parameters.srba.use_robust_kernel= parameters.srba.use_robust_kernel_stage1;
71 std::vector<size_t> k2f_edges_to_opt;
72 std::vector<size_t> k2k_edges_to_opt(1);
74 for (
size_t i=0;i<new_k2k_edge_ids.size();i++)
76 if (new_k2k_edge_ids[i].has_aprox_init_val)
78 k2k_edges_to_opt[0] = new_k2k_edge_ids[i].id ;
88 parameters.srba.use_robust_kernel = old_kernel;
90 m_profiler.leave(
"define_new_keyframe.opt_new_edges");
94 m_profiler.enter(
"define_new_keyframe.optimize");
98 this->optimize_local_area(
100 parameters.srba.max_optimize_depth,
105 m_profiler.leave(
"define_new_keyframe.optimize");
111 out_new_kf_info.
kf_id = new_kf_id;
114 m_profiler.leave(
"define_new_keyframe");
TKeyFrameID kf_id
The ID of the newly created KF.
TOptimizeExtraOutputInfo optimize_results_stg1
Results from the least-squares optimization.
const Scalar * const_iterator
std::deque< new_kf_observation_t > new_kf_observations_t
A set of all the observations made from a new KF, as provided by the user.
void define_new_keyframe(const typename traits_t::new_kf_observations_t &obs, TNewKeyFrameInfo &out_new_kf_info, const bool run_local_optimization=true)
The most common entry point for SRBA: append a new keyframe (KF) to the map, automatically creates th...
Parameters for optimize_local_area()
TOptimizeExtraOutputInfo optimize_results
Results from the least-squares optimization.
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
#define VERBOSE_LEVEL(_LEVEL)
std::vector< TNewEdgeInfo > created_edge_ids
The newly created edges (minimum: 1 edge)
A partial specialization of CArrayNumeric for double numbers.
Information returned by RbaEngine::define_new_keyframe()
uint64_t TKeyFrameID
Numeric IDs for key-frames (KFs)