The main class for the mrpt-srba: it defines a Relative Bundle-Adjustment (RBA) problem with (optionally, partially known) landmarks, the methods to update it with new observations and to optimize the relative poses with least squares optimizers.
The unknowns to be solved are:
The set of known data used to run the optimization comprises:
See http://www.mrpt.org/srba and the library guide for a list of possible template arguments, code examples, etc.
| KF2KF_POSE_TYPE | The parameterization of keyframe-to-keyframe relative poses (edges, problem unknowns). |
| LM_TYPE | The parameterization of relative positions of landmarks relative poses (edges). |
| OBS_TYPE | The type of observations. |
| RBA_OPTIONS | A struct with nested typedefs which can be used to tune and customize the behavior of this class. |
Definition at line 60 of file RbaEngine.h.
#include <mrpt/srba/RbaEngine.h>
Classes | |
| struct | ExportGraphSLAM_Params |
| struct | TAllParameters |
| The unique struct which hold all the parameters from the different SRBA modules (sensors, optional features, optimizers,...) More... | |
| struct | TBFSEntryEdges |
| Private aux structure for BFS searches. More... | |
| struct | TNewKeyFrameInfo |
| Information returned by RbaEngine::define_new_keyframe() More... | |
| struct | TNumeric_dh_dAp_params |
| struct | TNumeric_dh_df_params |
| struct | TObsUsed |
| Each of the observations used during the optimization. More... | |
| struct | TOpenGLRepresentationOptions |
| struct | TOptimizeExtraOutputInfo |
| All the information returned by the local area optimizer. More... | |
| struct | TOptimizeLocalAreaParams |
| Parameters for optimize_local_area() More... | |
| struct | TSRBAParameters |
| Different parameters for the SRBA methods. More... | |
| struct | VisitorOptimizeLocalArea |
| Aux visitor struct, used in optimize_local_area() More... | |
Public Member Functions | |
| RbaEngine () | |
| Default constructor. More... | |
| void | enable_time_profiler (bool enable=true) |
| Enable or disables time profiling of all operations (default=enabled), which will be reported upon destruction. More... | |
| const k2k_edges_deque_t & | get_k2k_edges () const |
| const TRelativeLandmarkPosMap & | get_known_feats () const |
| const TRelativeLandmarkPosMap & | get_unknown_feats () const |
| const rba_problem_state_t & | get_rba_state () const |
| rba_problem_state_t & | get_rba_state () |
| mrpt::utils::CTimeLogger & | get_time_profiler () |
| Access to the time profiler. More... | |
| void | setVerbosityLevel (int level) |
| Changes the verbosity level: 0=None (only critical msgs), 1=verbose, 2=so verbose you'll have to say "Stop!". More... | |
| template<class SPARSEBLOCKHESSIAN > | |
| size_t | sparse_hessian_update_numeric (SPARSEBLOCKHESSIAN &H) const |
| Rebuild the Hessian symbolic information from the internal pointers to blocks of Jacobians. More... | |
| void | compute_jacobian_dh_dp (typename TSparseBlocksJacobians_dh_dAp::TEntry &jacob, const k2f_edge_t &observation, const k2k_edges_deque_t &k2k_edges, std::vector< const pose_flag_t * > *out_list_of_required_num_poses) const |
| ==================================================================== j,i lm_id,base_id h h l obs_frame_id dh_dp = ---------------— = ------------------------------— d+1 cur_id p p d stp.next_node More... | |
| void | compute_jacobian_dh_df (typename TSparseBlocksJacobians_dh_df::TEntry &jacob, const k2f_edge_t &observation, std::vector< const pose_flag_t * > *out_list_of_required_num_poses) const |
| ==================================================================== j,i lm_id,base_id h h l obs_frame_id dh_df = ---------------— = ------------------------------— More... | |
| void | gl_aux_draw_node (mrpt::opengl::CSetOfObjects &soo, const std::string &label, const float x, const float y) const |
| 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 |
| double | reprojection_residuals (vector_residuals_t &residuals, const std::vector< TObsUsed > &observations) const |
| reprojection_residuals More... | |
Main API methods | |
| 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 the required edges and optimize the local area around this new KF. More... | |
| void | optimize_local_area (const TKeyFrameID root_id, const unsigned int win_size, TOptimizeExtraOutputInfo &out_info, const TOptimizeLocalAreaParams ¶ms=TOptimizeLocalAreaParams(), const std::vector< size_t > &observation_indices_to_optimize=std::vector< size_t >()) |
| Runs least-squares optimization for all the unknowns within a given topological distance to a given KeyFrame. More... | |
| void | build_opengl_representation (const srba::TKeyFrameID root_keyframe, const TOpenGLRepresentationOptions &options, mrpt::opengl::CSetOfObjectsPtr out_scene, mrpt::opengl::CSetOfObjectsPtr out_root_tree=mrpt::opengl::CSetOfObjectsPtr()) const |
| Build an opengl representation of the current state of this RBA problem One of different representations can be generated: those opengl objects passed as NULL smart pointers will not be generated. More... | |
| bool | save_graph_as_dot (const std::string &targetFileName, const bool all_landmarks=false) const |
| Exports all the keyframes (and optionally all landmarks) as a directed graph in DOT (graphviz) format. More... | |
| double | eval_overall_squared_error () const |
| Evaluates the quality of the overall map/landmark estimations, by computing the sum of the squared error contributions for all observations. More... | |
| template<class POSE_GRAPH > | |
| void | get_global_graphslam_problem (POSE_GRAPH &global_graph, const ExportGraphSLAM_Params ¶ms=ExportGraphSLAM_Params()) const |
| Build a graph-slam problem suitable for recovering the (consistent) global pose (vs. More... | |
Extra API methods (for debugging, etc.) | |
| void | clear () |
| Reset the entire problem to an empty state (automatically called at construction) More... | |
| TKeyFrameID | alloc_keyframe () |
| Users normally won't need to call this directly. More... | |
| size_t | create_kf2kf_edge (const TKeyFrameID new_kf_id, const TPairKeyFrameID &new_edge, const typename traits_t::new_kf_observations_t &obs, const pose_t &init_inv_pose_val=pose_t()) |
| Users normally won't need to call this directly. More... | |
| void | create_complete_spanning_tree (const TKeyFrameID root_id, frameid2pose_map_t &span_tree, const size_t max_depth=std::numeric_limits< size_t >::max(), std::vector< bool > *aux_ws=NULL) const |
| Creates a numeric spanning tree between a given root keyframe and the entire graph, returning it into a user-supplied data structure Note that this method does NOT use the depth-limited spanning trees which are built incrementally with the graph. More... | |
| bool | find_path_bfs (const TKeyFrameID src_kf, const TKeyFrameID trg_kf, std::vector< TKeyFrameID > &found_path) const |
| An unconstrained breadth-first search (BFS) for the shortest path between two keyframes. More... | |
| template<class KF_VISITOR , class FEAT_VISITOR , class K2K_EDGE_VISITOR , class K2F_EDGE_VISITOR > | |
| void | bfs_visitor (const TKeyFrameID root_id, const topo_dist_t max_distance, const bool rely_on_prebuilt_spanning_trees, KF_VISITOR &kf_visitor, FEAT_VISITOR &feat_visitor, K2K_EDGE_VISITOR &k2k_edge_visitor, K2F_EDGE_VISITOR &k2f_edge_visitor) const |
| Visits all k2k & k2f edges following a BFS starting at a given starting node and up to a given maximum depth. More... | |
Static Public Member Functions | |
| template<class HESS_Ap , class HESS_f , class HESS_Apf , class JACOB_COLUMN_dh_dAp , class JACOB_COLUMN_dh_df > | |
| static void | sparse_hessian_build_symbolic (HESS_Ap &HAp, HESS_f &Hf, HESS_Apf &HApf, const std::vector< JACOB_COLUMN_dh_dAp * > &dh_dAp, const std::vector< JACOB_COLUMN_dh_df * > &dh_df) |
| Rebuild the Hessian symbolic information from the given Jacobians. More... | |
| static void | numeric_dh_dAp (const array_pose_t &x, const TNumeric_dh_dAp_params ¶ms, array_obs_t &y) |
| Auxiliary method for numeric Jacobian: numerically evaluates the new observation "y" for a small increment "x" in a relative KF-to-KF pose. More... | |
| static void | numeric_dh_df (const array_landmark_t &x, const TNumeric_dh_df_params ¶ms, array_obs_t &y) |
| Auxiliary method for numeric Jacobian: numerically evaluates the new observation "y" for a small increment "x" in a landmark position. More... | |
| static void | add_edge_ij_to_list_needed_roots (std::set< TKeyFrameID > &lst, const TKeyFrameID i, const TKeyFrameID j) |
| static double | huber_kernel (double delta, const double kernel_param) |
| pseudo-huber cost function More... | |
Public Attributes | |
| const pose_t | aux_null_pose |
| A fixed SE(3) pose at the origin (used when we need a pointer or a reference to a "null transformation"). More... | |
Public data fields | |
| TAllParameters | parameters |
Protected Types | |
| typedef std::multimap< size_t, TKeyFrameID, std::greater< size_t > > | base_sorted_lst_t |
Protected Member Functions | |
(Protected) Sub-algorithms | |
| void | make_ordered_list_base_kfs (const typename traits_t::new_kf_observations_t &obs, base_sorted_lst_t &obs_for_each_base_sorted, std::map< TKeyFrameID, size_t > *out_obs_for_each_base=NULL) const |
| Make a list of base KFs of my new observations, ordered in descending order by # of shared observations: More... | |
| void | determine_kf2kf_edges_to_create (const TKeyFrameID new_kf_id, const typename traits_t::new_kf_observations_t &obs, std::vector< TNewEdgeInfo > &new_k2k_edge_ids) |
| This method will call edge_creation_policy(), which has predefined algorithms but could be re-defined by the user in a derived class. More... | |
| virtual void | edge_creation_policy (const TKeyFrameID new_kf_id, const typename traits_t::new_kf_observations_t &obs, std::vector< TNewEdgeInfo > &new_k2k_edge_ids) |
| Implements the edge-creation policy, by default depending on "parameters.edge_creation_policy" if the user doesn't re-implement this virtual method. More... | |
| void | optimize_edges (const std::vector< size_t > &run_k2k_edges, const std::vector< size_t > &run_feat_ids_in, TOptimizeExtraOutputInfo &out_info, const std::vector< size_t > &observation_indices_to_optimize=std::vector< size_t >()) |
Protected Attributes | |
| int | m_verbose_level |
| 0: None (only critical msgs), 1: verbose, 2:even more verbose, 3: even more More... | |
Private Member Functions | |
| size_t | add_observation (const TKeyFrameID observing_kf_id, const typename observation_traits_t::observation_t &new_obs, const array_landmark_t *fixed_relative_position=NULL, const array_landmark_t *unknown_relative_position_init_val=NULL) |
| Creates a new known/unknown position landmark (upon first LM observation ), and expands Jacobians with new observation. More... | |
| void | prepare_Jacobians_required_tree_roots (std::set< TKeyFrameID > &kfs_num_spantrees_to_update, const std::vector< typename TSparseBlocksJacobians_dh_dAp::col_t * > &lst_JacobCols_dAp, const std::vector< typename TSparseBlocksJacobians_dh_df::col_t * > &lst_JacobCols_df) |
| Prepare the list of all required KF roots whose spanning trees need numeric updates with each optimization iteration. More... | |
| size_t | recompute_all_Jacobians (std::vector< typename TSparseBlocksJacobians_dh_dAp::col_t * > &lst_JacobCols_dAp, std::vector< typename TSparseBlocksJacobians_dh_df::col_t * > &lst_JacobCols_df, std::vector< const pose_flag_t * > *out_list_of_required_num_poses=NULL) |
| Re-evaluate all Jacobians numerically using their symbolic info. More... | |
Private Attributes | |
| rba_problem_state_t | rba_state |
| All the beef is here. More... | |
| std::vector< bool > | m_complete_st_ws |
| Temporary working space used in create_complete_spanning_tree() More... | |
| mrpt::utils::CTimeLogger | m_profiler |
| Profiler for all SRBA operations Enabled by default, can be disabled with enable_time_profiler(false) More... | |
Templatized typedef's | |
| typedef RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS > | rba_engine_t |
| typedef KF2KF_POSE_TYPE | kf2kf_pose_type |
| typedef LM_TYPE | lm_type |
| typedef OBS_TYPE | obs_type |
| typedef RBA_OPTIONS | rba_options_type |
| typedef KF2KF_POSE_TYPE::se_traits_t | se_traits_t |
| The SE(2) or SE(3) traits struct (for Lie algebra log/exp maps, etc.) More... | |
| typedef rba_joint_parameterization_traits_t< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE > | traits_t |
| typedef jacobian_traits< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE > | jacobian_traits_t |
| typedef hessian_traits< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE > | hessian_traits_t |
| typedef kf2kf_pose_traits< KF2KF_POSE_TYPE > | kf2kf_pose_traits_t |
| typedef landmark_traits< LM_TYPE > | landmark_traits_t |
| typedef observation_traits< OBS_TYPE > | observation_traits_t |
| typedef sensor_model< LM_TYPE, OBS_TYPE > | sensor_model_t |
| The sensor model for the specified combination of LM parameterization + observation type. More... | |
| typedef KF2KF_POSE_TYPE::pose_t | pose_t |
| The type of relative poses (e.g. mrpt::poses::CPose3D) More... | |
| typedef TRBA_Problem_state< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS > | rba_problem_state_t |
| typedef rba_problem_state_t::k2f_edge_t | k2f_edge_t |
| typedef rba_problem_state_t::k2k_edge_t | k2k_edge_t |
| typedef rba_problem_state_t::k2k_edges_deque_t | k2k_edges_deque_t |
| A list (deque) of KF-to-KF edges (unknown relative poses). More... | |
| typedef kf2kf_pose_traits_t::pose_flag_t | pose_flag_t |
| typedef kf2kf_pose_traits_t::frameid2pose_map_t | frameid2pose_map_t |
| typedef kf2kf_pose_traits_t::TRelativePosesForEachTarget | TRelativePosesForEachTarget |
| typedef landmark_traits_t::TRelativeLandmarkPosMap | TRelativeLandmarkPosMap |
| An index of feature IDs and their relative locations. More... | |
| typedef landmark_traits_t::TRelativeLandmarkPos | TRelativeLandmarkPos |
| One landmark position (relative to its base KF) More... | |
| typedef traits_t::keyframe_info | keyframe_info |
| typedef traits_t::new_kf_observation_t | new_kf_observation_t |
| typedef traits_t::new_kf_observations_t | new_kf_observations_t |
| typedef kf2kf_pose_traits_t::array_pose_t | array_pose_t |
| typedef landmark_traits_t::array_landmark_t | array_landmark_t |
| typedef observation_traits_t::array_obs_t | array_obs_t |
| typedef observation_traits_t::residual_t | residual_t |
| typedef observation_traits_t::vector_residuals_t | vector_residuals_t |
| typedef jacobian_traits< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE >::TSparseBlocksJacobians_dh_dAp | TSparseBlocksJacobians_dh_dAp |
| typedef jacobian_traits< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE >::TSparseBlocksJacobians_dh_df | TSparseBlocksJacobians_dh_df |
| static const size_t | REL_POSE_DIMS = KF2KF_POSE_TYPE::REL_POSE_DIMS |
| static const size_t | LM_DIMS = LM_TYPE::LM_DIMS |
| static const size_t | OBS_DIMS = OBS_TYPE::OBS_DIMS |
| typedef landmark_traits_t::array_landmark_t mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::array_landmark_t |
Definition at line 104 of file RbaEngine.h.
| typedef observation_traits_t::array_obs_t mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::array_obs_t |
Definition at line 105 of file RbaEngine.h.
| typedef kf2kf_pose_traits_t::array_pose_t mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::array_pose_t |
Definition at line 103 of file RbaEngine.h.
|
protected |
Definition at line 475 of file RbaEngine.h.
| typedef kf2kf_pose_traits_t::frameid2pose_map_t mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::frameid2pose_map_t |
Definition at line 95 of file RbaEngine.h.
| typedef hessian_traits<KF2KF_POSE_TYPE,LM_TYPE,OBS_TYPE> mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::hessian_traits_t |
Definition at line 80 of file RbaEngine.h.
| typedef jacobian_traits<KF2KF_POSE_TYPE,LM_TYPE,OBS_TYPE> mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::jacobian_traits_t |
Definition at line 79 of file RbaEngine.h.
| typedef rba_problem_state_t::k2f_edge_t mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::k2f_edge_t |
Definition at line 90 of file RbaEngine.h.
| typedef rba_problem_state_t::k2k_edge_t mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::k2k_edge_t |
Definition at line 91 of file RbaEngine.h.
| typedef rba_problem_state_t::k2k_edges_deque_t mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::k2k_edges_deque_t |
A list (deque) of KF-to-KF edges (unknown relative poses).
Definition at line 92 of file RbaEngine.h.
| typedef traits_t::keyframe_info mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::keyframe_info |
Definition at line 99 of file RbaEngine.h.
| typedef kf2kf_pose_traits<KF2KF_POSE_TYPE> mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::kf2kf_pose_traits_t |
Definition at line 81 of file RbaEngine.h.
| typedef KF2KF_POSE_TYPE mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::kf2kf_pose_type |
Definition at line 67 of file RbaEngine.h.
| typedef landmark_traits<LM_TYPE> mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::landmark_traits_t |
Definition at line 82 of file RbaEngine.h.
| typedef LM_TYPE mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::lm_type |
Definition at line 68 of file RbaEngine.h.
| typedef traits_t::new_kf_observation_t mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::new_kf_observation_t |
Definition at line 100 of file RbaEngine.h.
| typedef traits_t::new_kf_observations_t mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::new_kf_observations_t |
Definition at line 101 of file RbaEngine.h.
| typedef OBS_TYPE mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::obs_type |
Definition at line 69 of file RbaEngine.h.
| typedef observation_traits<OBS_TYPE> mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::observation_traits_t |
Definition at line 83 of file RbaEngine.h.
| typedef kf2kf_pose_traits_t::pose_flag_t mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::pose_flag_t |
Definition at line 94 of file RbaEngine.h.
| typedef KF2KF_POSE_TYPE::pose_t mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::pose_t |
The type of relative poses (e.g. mrpt::poses::CPose3D)
Definition at line 87 of file RbaEngine.h.
| typedef RbaEngine<KF2KF_POSE_TYPE,LM_TYPE,OBS_TYPE,RBA_OPTIONS> mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::rba_engine_t |
Definition at line 65 of file RbaEngine.h.
| typedef RBA_OPTIONS mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::rba_options_type |
Definition at line 70 of file RbaEngine.h.
| typedef TRBA_Problem_state<KF2KF_POSE_TYPE,LM_TYPE,OBS_TYPE,RBA_OPTIONS> mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::rba_problem_state_t |
Definition at line 88 of file RbaEngine.h.
| typedef observation_traits_t::residual_t mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::residual_t |
Definition at line 106 of file RbaEngine.h.
| typedef KF2KF_POSE_TYPE::se_traits_t mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::se_traits_t |
The SE(2) or SE(3) traits struct (for Lie algebra log/exp maps, etc.)
Definition at line 76 of file RbaEngine.h.
| typedef sensor_model<LM_TYPE,OBS_TYPE> mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::sensor_model_t |
The sensor model for the specified combination of LM parameterization + observation type.
Definition at line 85 of file RbaEngine.h.
| typedef rba_joint_parameterization_traits_t<KF2KF_POSE_TYPE,LM_TYPE,OBS_TYPE> mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::traits_t |
Definition at line 78 of file RbaEngine.h.
| typedef landmark_traits_t::TRelativeLandmarkPos mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TRelativeLandmarkPos |
One landmark position (relative to its base KF)
Definition at line 98 of file RbaEngine.h.
| typedef landmark_traits_t::TRelativeLandmarkPosMap mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TRelativeLandmarkPosMap |
An index of feature IDs and their relative locations.
Definition at line 97 of file RbaEngine.h.
| typedef kf2kf_pose_traits_t::TRelativePosesForEachTarget mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TRelativePosesForEachTarget |
Definition at line 96 of file RbaEngine.h.
| typedef jacobian_traits<KF2KF_POSE_TYPE,LM_TYPE,OBS_TYPE>::TSparseBlocksJacobians_dh_dAp mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TSparseBlocksJacobians_dh_dAp |
Definition at line 109 of file RbaEngine.h.
| typedef jacobian_traits<KF2KF_POSE_TYPE,LM_TYPE,OBS_TYPE>::TSparseBlocksJacobians_dh_df mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TSparseBlocksJacobians_dh_df |
Definition at line 110 of file RbaEngine.h.
| typedef observation_traits_t::vector_residuals_t mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::vector_residuals_t |
Definition at line 107 of file RbaEngine.h.
| mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::RbaEngine | ( | ) |
Default constructor.
Definition at line 19 of file rba_problem_common.h.
References mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::clear().
|
inlinestatic |
Definition at line 746 of file RbaEngine.h.
|
private |
Creates a new known/unknown position landmark (upon first LM observation ), and expands Jacobians with new observation.
| [in] | new_obs | The basic data on the observed landmark: landmark ID, keyframe from which it's observed and parameters ("z" vector) of the observation itself (e.g. pixel coordinates). |
| [in] | fixed_relative_position | If not NULL, this is the first observation of a landmark with a fixed, known position. Each such feature can be created only once, next observations MUST have this field set to NULL as with normal ("unfixed") landmarks. |
| [in] | unknown_relative_position_init_val | Can be set to not-NULL only upon the first observation of a landmark with an unknown relative position. The feature will be created with this initial value for its relative position wrt the KF (further optimization will refine that value). |
Definition at line 17 of file add-observations.h.
References mrpt::srba::rba_joint_parameterization_traits_t< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE >::keyframe_info::adjacent_k2f_edges, ASSERT_, ASSERTDEB_, ASSERTMSG_, mrpt::utils::map_as_vector< KEY, VALUE, VECTOR_T >::end(), mrpt::srba::rba_joint_parameterization_traits_t< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE >::k2f_edge_t::feat_has_known_rel_pos, mrpt::srba::observation_traits< OBS_TRAITS >::observation_t::feat_id, mrpt::srba::rba_joint_parameterization_traits_t< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE >::k2f_edge_t::feat_rel_pos, mrpt::utils::map_as_vector< KEY, VALUE, VECTOR_T >::find(), mrpt::mrpt::format(), mrpt::srba::rba_joint_parameterization_traits_t< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE >::k2f_edge_t::is_first_obs_of_unknown, mrpt::srba::rba_joint_parameterization_traits_t< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE >::kf_observation_t::kf_id, mrpt::srba::rba_joint_parameterization_traits_t< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE >::kf_observation_t::obs, mrpt::srba::rba_joint_parameterization_traits_t< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE >::k2f_edge_t::obs, mrpt::srba::rba_joint_parameterization_traits_t< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE >::kf_observation_t::obs_arr, mrpt::srba::observation_traits< OBS_TRAITS >::observation_t::obs_data, and OBS_SUPER_VERBOSE.
| TKeyFrameID mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::alloc_keyframe | ( | ) |
Users normally won't need to call this directly.
Append an empty new keyframe to the data structures.
Use define_new_keyframe() instead. This method appends an empty new keyframe to the data structures
Definition at line 19 of file alloc_keyframe.h.
| void mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::bfs_visitor | ( | const TKeyFrameID | root_id, |
| const topo_dist_t | max_distance, | ||
| const bool | rely_on_prebuilt_spanning_trees, | ||
| KF_VISITOR & | kf_visitor, | ||
| FEAT_VISITOR & | feat_visitor, | ||
| K2K_EDGE_VISITOR & | k2k_edge_visitor, | ||
| K2F_EDGE_VISITOR & | k2f_edge_visitor | ||
| ) | const |
Visits all k2k & k2f edges following a BFS starting at a given starting node and up to a given maximum depth.
Only k2k edges are considered for BFS paths.
Definition at line 21 of file bfs_visitor.h.
References ASSERTDEB_, mrpt::srba::observation_traits< OBS_TRAITS >::observation_t::feat_id, mrpt::srba::getTheOtherFromPair2(), mrpt::srba::rba_joint_parameterization_traits_t< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE >::kf_observation_t::obs, and mrpt::srba::rba_joint_parameterization_traits_t< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE >::k2f_edge_t::obs.
| void mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::build_opengl_representation | ( | const srba::TKeyFrameID | root_keyframe, |
| const TOpenGLRepresentationOptions & | options, | ||
| mrpt::opengl::CSetOfObjectsPtr | out_scene, | ||
| mrpt::opengl::CSetOfObjectsPtr | out_root_tree = mrpt::opengl::CSetOfObjectsPtr() |
||
| ) | const |
Build an opengl representation of the current state of this RBA problem One of different representations can be generated: those opengl objects passed as NULL smart pointers will not be generated.
| [out] | out_scene | If not a NULL smart pointer, at return will hold a 3D view of the current KF, neighbor KFs and landmarks. |
| [out] | out_root_tree | If not a NULL smart pointer, at return will hold a schematic 2D view of the current KF and its spanning tree. |
Definition at line 24 of file export_opengl.h.
References ASSERT_, mrpt::opengl::stock_objects::CornerXYZSimple(), mrpt::opengl::CSetOfLines::Create(), mrpt::mrpt::format(), mrpt::srba::kf2kf_pose_traits< POSE_TRAITS >::k2k_edge_t::from, mrpt::mrpt::utils::keep_max(), mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TOpenGLRepresentationOptions::span_tree_max_depth, and mrpt::srba::kf2kf_pose_traits< POSE_TRAITS >::k2k_edge_t::to.
| void mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::clear | ( | void | ) |
Reset the entire problem to an empty state (automatically called at construction)
Definition at line 28 of file rba_problem_common.h.
Referenced by mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::RbaEngine().
| void mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::compute_jacobian_dh_df | ( | typename TSparseBlocksJacobians_dh_df::TEntry & | jacob, |
| const k2f_edge_t & | observation, | ||
| std::vector< const pose_flag_t * > * | out_list_of_required_num_poses | ||
| ) | const |
==================================================================== j,i lm_id,base_id h h l obs_frame_id dh_df = ---------------— = ------------------------------—
f f
Definition at line 921 of file srba/include/mrpt/srba/impl/jacobians.h.
References ASSERT_, mrpt::srba::observation_traits< OBS_TRAITS >::observation_t::feat_id, mrpt::math::jacobians::jacob_numeric_estimate(), mrpt::srba::rba_joint_parameterization_traits_t< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE >::kf_observation_t::kf_id, MRPT_UNUSED_PARAM, mrpt::srba::rba_joint_parameterization_traits_t< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE >::kf_observation_t::obs, mrpt::srba::rba_joint_parameterization_traits_t< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE >::k2f_edge_t::obs, and mrpt::math::UNINITIALIZED_MATRIX.
| void mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::compute_jacobian_dh_dp | ( | typename TSparseBlocksJacobians_dh_dAp::TEntry & | jacob, |
| const k2f_edge_t & | observation, | ||
| const k2k_edges_deque_t & | k2k_edges, | ||
| std::vector< const pose_flag_t * > * | out_list_of_required_num_poses | ||
| ) | const |
==================================================================== j,i lm_id,base_id h h l obs_frame_id dh_dp = ---------------— = ------------------------------— d+1 cur_id p p d stp.next_node
See tech report: "A tutorial on SE(3) transformation parameterizations and <h1>on-manifold optimization", Jose-Luis Blanco, 2010.
Definition at line 216 of file srba/include/mrpt/srba/impl/jacobians.h.
References ASSERT_, mrpt::math::jacobians::jacob_numeric_estimate(), mrpt::srba::rba_joint_parameterization_traits_t< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE >::kf_observation_t::kf_id, mrpt::srba::rba_joint_parameterization_traits_t< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE >::k2f_edge_t::obs, and mrpt::poses::UNINITIALIZED_POSE.
| void mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::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 |
Definition at line 20 of file compute_minus_gradient.h.
References ASSERT_.
| void mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::create_complete_spanning_tree | ( | const TKeyFrameID | root_id, |
| frameid2pose_map_t & | span_tree, | ||
| const size_t | max_depth = std::numeric_limits<size_t>::max(), |
||
| std::vector< bool > * | aux_ws = NULL |
||
| ) | const |
Creates a numeric spanning tree between a given root keyframe and the entire graph, returning it into a user-supplied data structure Note that this method does NOT use the depth-limited spanning trees which are built incrementally with the graph.
So, it takes an extra cost to call this method. For the other trees, see get_rba_state()
| [in] | root_id | The root keyframe |
| [out] | span_tree | The output with all found relative poses. Its previous contents are cleared. |
| [in] | max_depth | Defaults to std::numeric_limits<size_t>::max() for infinity depth, can be set to a maximum desired depth from the root. |
| [in] | aux_ws | Auxiliary working space: Set to an uninitialized vector<bool> (it'll automatically initialized) if you want to call this method simultaneously from several threads. Otherwise, setting to NULL will automatically use one working space, reusable between succesive calls. |
Definition at line 18 of file spantree_create_complete.h.
References ASSERT_, ASSERTDEB_, mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TBFSEntryEdges::dist, mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TBFSEntryEdges::edge, mrpt::srba::getTheOtherFromPair2(), mrpt::srba::kf2kf_pose_traits< POSE_TRAITS >::k2k_edge_t::inv_pose, MRPT_UNUSED_PARAM, mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TBFSEntryEdges::prev, and mrpt::srba::kf2kf_pose_traits< POSE_TRAITS >::k2k_edge_t::to.
| size_t mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::create_kf2kf_edge | ( | const TKeyFrameID | new_kf_id, |
| const TPairKeyFrameID & | new_edge, | ||
| const typename traits_t::new_kf_observations_t & | obs, | ||
| const pose_t & | init_inv_pose_val = pose_t() |
||
| ) |
Users normally won't need to call this directly.
Use define_new_keyframe() instead. This method calls: 1) alloc_kf2kf_edge() for creating the data structures 2) spanning_tree.update_symbolic_new_node() for updating the spanning trees.
Definition at line 15 of file create_kf2kf_edge.h.
References mrpt::srba::ecpLinearGraph.
| void mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::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 the required edges and optimize the local area around this new KF.
| [in] | obs | All the landmark observations gathered from this new KF (with data association already solved). |
| [out] | out_new_kf_info | Returned information about the newly created KF. |
| [in] | run_local_optimization | If set to true (default), the local map around the new KF will be optimized (i.e. optimize_local_area() will be called automatically). |
Definition at line 16 of file define_new_keyframe.h.
References mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TNewKeyFrameInfo::clear(), mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TNewKeyFrameInfo::created_edge_ids, mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TNewKeyFrameInfo::kf_id, mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TNewKeyFrameInfo::optimize_results, mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TNewKeyFrameInfo::optimize_results_stg1, and VERBOSE_LEVEL.
|
protected |
This method will call edge_creation_policy(), which has predefined algorithms but could be re-defined by the user in a derived class.
Determines and creates the new kf2fk edges given the set of new observations:
Definition at line 17 of file determine_kf2kf_edges_to_create.h.
|
protectedvirtual |
Implements the edge-creation policy, by default depending on "parameters.edge_creation_policy" if the user doesn't re-implement this virtual method.
Determines and creates the new kf2fk edges given the set of new observations:
See tutorials for examples of how to implement custom policies.
Definition at line 16 of file edge_creation_policy.h.
References ASSERT_, ASSERTMSG_, mrpt::srba::ecpICRA2013, mrpt::srba::ecpLinearGraph, mrpt::srba::ecpStarGraph, mrpt::mrpt::format(), mrpt::srba::TNewEdgeInfo::has_aprox_init_val, mrpt::srba::TNewEdgeInfo::id, THROW_EXCEPTION, and VERBOSE_LEVEL.
Referenced by mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TSRBAParameters::loadFromConfigFile(), and mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TSRBAParameters::saveToConfigFile().
|
inline |
Enable or disables time profiling of all operations (default=enabled), which will be reported upon destruction.
Definition at line 436 of file RbaEngine.h.
References mrpt::utils::CTimeLogger::enable(), and mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::m_profiler.
| double mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::eval_overall_squared_error | ( | ) | const |
Evaluates the quality of the overall map/landmark estimations, by computing the sum of the squared error contributions for all observations.
For this, this method may have to compute very long shortest paths between distant keyframes if no loop-closure edges exist in order to evaluate the best approximation of relative coordinates between observing KFs and features' reference KFs.
The worst-case time consumed by this method is O(M*log(N) + N^2 + N E), N=# of KFs, E=# of edges, M=# of observations.
Definition at line 15 of file eval_overall_error.h.
References ASSERT_, ASSERTDEB_, mrpt::utils::map_as_vector< KEY, VALUE, VECTOR_T >::end(), mrpt::utils::map_as_vector< KEY, VALUE, VECTOR_T >::find(), and mrpt::poses::UNINITIALIZED_POSE.
|
inline |
An unconstrained breadth-first search (BFS) for the shortest path between two keyframes.
Note that this method does NOT use the depth-limited spanning trees which are built incrementally with the graph. So, it takes the extra cost of really running a BFS algorithm. For the other precomputed trees, see get_rba_state() Edge direction is ignored during the search, i.e. as if we had an undirected graph of Keyframes. If both source and target KF coincide, an empty path is returned.
Definition at line 338 of file RbaEngine.h.
References mrpt::srba::TRBA_Problem_state< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::find_path_bfs(), and mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::rba_state.
| void mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::get_global_graphslam_problem | ( | POSE_GRAPH & | global_graph, |
| const ExportGraphSLAM_Params & | params = ExportGraphSLAM_Params() |
||
| ) | const |
Build a graph-slam problem suitable for recovering the (consistent) global pose (vs.
Exports all the keyframes and landmarks as a directed graph in DOT (graphviz) format.
relative ones as are handled in SRBA) of each keyframe.
| [out] | global_graph | Previous contents will be erased. The output global graph will be returned here, initialized with poses from a Dijkstra/Spanning-tree from the first KF. |
| POSE_GRAPH | Must be an instance of mrpt::graphs::CNetworkOfPoses<>, e.g. CNetworkOfPoses2D (for 2D poses) or CNetworkOfPoses3D (for 3D). |
Definition at line 17 of file get_global_graphslam_problem.h.
References mrpt::srba::kf2kf_pose_traits< POSE_TRAITS >::k2k_edge_t::from, mrpt::srba::kf2kf_pose_traits< POSE_TRAITS >::k2k_edge_t::inv_pose, mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::ExportGraphSLAM_Params::root_kf_id, and mrpt::srba::kf2kf_pose_traits< POSE_TRAITS >::k2k_edge_t::to.
|
inline |
Definition at line 438 of file RbaEngine.h.
References mrpt::srba::TRBA_Problem_state< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::k2k_edges, and mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::rba_state.
|
inline |
Definition at line 440 of file RbaEngine.h.
References mrpt::srba::TRBA_Problem_state< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::known_lms, and mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::rba_state.
|
inline |
Definition at line 443 of file RbaEngine.h.
References mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::rba_state.
|
inline |
Definition at line 444 of file RbaEngine.h.
References mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::rba_state.
|
inline |
Access to the time profiler.
Definition at line 447 of file RbaEngine.h.
References mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::m_profiler.
|
inline |
Definition at line 441 of file RbaEngine.h.
References mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::rba_state, and mrpt::srba::TRBA_Problem_state< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::unknown_lms.
| void mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::gl_aux_draw_node | ( | mrpt::opengl::CSetOfObjects & | soo, |
| const std::string & | label, | ||
| const float | x, | ||
| const float | y | ||
| ) | const |
Definition at line 194 of file export_opengl.h.
References mrpt::opengl::CDisk::Create(), mrpt::opengl::CText3D::Create(), and mrpt::opengl::CSetOfObjects::insert().
|
inlinestatic |
pseudo-huber cost function
Definition at line 781 of file RbaEngine.h.
References nanoflann::abs(), and mrpt::mrpt::utils::square().
|
protected |
Make a list of base KFs of my new observations, ordered in descending order by # of shared observations:
(Aux method) Make a list of base KFs of my new observations, ordered in descending order by # of shared observations:
Definition at line 256 of file edge_creation_policy.h.
|
static |
Auxiliary method for numeric Jacobian: numerically evaluates the new observation "y" for a small increment "x" in a relative KF-to-KF pose.
Numeric implementation of the partial Jacobian dh_dAp.
Definition at line 93 of file srba/include/mrpt/srba/impl/jacobians.h.
References ASSERT_, mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TNumeric_dh_dAp_params::is_inverse_dir, mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TNumeric_dh_dAp_params::k2k_edge_id, mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TNumeric_dh_dAp_params::k2k_edges, mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TNumeric_dh_dAp_params::pose_base_wrt_d1, mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TNumeric_dh_dAp_params::pose_d1_wrt_obs, mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TNumeric_dh_dAp_params::sensor_params, mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TNumeric_dh_dAp_params::sensor_pose, mrpt::poses::UNINITIALIZED_POSE, and mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TNumeric_dh_dAp_params::xji_i.
|
static |
Auxiliary method for numeric Jacobian: numerically evaluates the new observation "y" for a small increment "x" in a landmark position.
Definition at line 179 of file srba/include/mrpt/srba/impl/jacobians.h.
References mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TNumeric_dh_df_params::pose_base_wrt_obs, mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TNumeric_dh_df_params::sensor_params, mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TNumeric_dh_df_params::sensor_pose, mrpt::poses::UNINITIALIZED_POSE, and mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TNumeric_dh_df_params::xji_i.
|
protected |
| observation_indices_to_optimize | Indices wrt rba_state.all_observations. An empty vector means use ALL the observations involving the selected unknowns. |
Definition at line 44 of file optimize_edges.h.
References ASSERT_, ASSERT_ABOVEEQ_, ASSERTDEB_, ASSERTMSG_, mrpt::srba::crpLandmarksApprox, mrpt::srba::crpNone, DETAILED_PROFILING_ENTER, DETAILED_PROFILING_LEAVE, mrpt::utils::map_as_vector< KEY, VALUE, VECTOR_T >::end(), mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TOptimizeExtraOutputInfo::extra_results, mrpt::utils::map_as_vector< KEY, VALUE, VECTOR_T >::find(), mrpt::mrpt::format(), mrpt::math::MatrixBlockSparseCols< Scalar, NROWS, NCOLS, INFO, HAS_REMAP, INDEX_REMAP_MAP_IMPL >::getAsDense(), mrpt::math::MatrixBlockSparseCols< Scalar, NROWS, NCOLS, INFO, HAS_REMAP, INDEX_REMAP_MAP_IMPL >::getCol(), mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TOptimizeExtraOutputInfo::HAp_condition_number, mrpt::mrpt::utils::keep_max(), mrpt::math::MATRIX_FORMAT_INT, mrpt::math::norm_inf(), mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TOptimizeExtraOutputInfo::num_jacobians, mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TOptimizeExtraOutputInfo::num_kf2kf_edges_optimized, mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TOptimizeExtraOutputInfo::num_kf2lm_edges_optimized, mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TOptimizeExtraOutputInfo::num_observations, mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TOptimizeExtraOutputInfo::num_span_tree_numeric_updates, mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TOptimizeExtraOutputInfo::num_total_scalar_optimized, mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TOptimizeExtraOutputInfo::obs_rmse, mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TOptimizeExtraOutputInfo::optimized_k2k_edge_indices, mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TOptimizeExtraOutputInfo::optimized_landmark_indices, mrpt::system::pause(), mrpt::system::sprintf_container(), mrpt::math::sum(), mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TOptimizeExtraOutputInfo::total_sqr_error_final, mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::TOptimizeExtraOutputInfo::total_sqr_error_init, mrpt::poses::UNINITIALIZED_POSE, and VERBOSE_LEVEL.
| void mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::optimize_local_area | ( | const TKeyFrameID | root_id, |
| const unsigned int | win_size, | ||
| TOptimizeExtraOutputInfo & | out_info, | ||
| const TOptimizeLocalAreaParams & | params = TOptimizeLocalAreaParams(), |
||
| const std::vector< size_t > & | observation_indices_to_optimize = std::vector<size_t>() |
||
| ) |
Runs least-squares optimization for all the unknowns within a given topological distance to a given KeyFrame.
| [in] | observation_indices_to_optimize | Indices wrt rba_state.all_observations. An empty vector means use ALL the observations involving the selected unknowns. |
Definition at line 15 of file optimize_local_area.h.
References mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::VisitorOptimizeLocalArea::k2k_edges_to_optimize, and mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::VisitorOptimizeLocalArea::lm_IDs_to_optimize.
|
private |
Prepare the list of all required KF roots whose spanning trees need numeric updates with each optimization iteration.
Definition at line 1053 of file srba/include/mrpt/srba/impl/jacobians.h.
References ASSERT_, mrpt::srba::rba_joint_parameterization_traits_t< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE >::k2f_edge_t::feat_rel_pos, mrpt::srba::rba_joint_parameterization_traits_t< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE >::kf_observation_t::kf_id, and mrpt::srba::rba_joint_parameterization_traits_t< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE >::k2f_edge_t::obs.
|
private |
Re-evaluate all Jacobians numerically using their symbolic info.
Return overall number of block Jacobians
Definition at line 1123 of file srba/include/mrpt/srba/impl/jacobians.h.
|
inline |
reprojection_residuals
Definition at line 16 of file reprojection_residuals.h.
References ASSERT_, ASSERTDEB_, and mrpt::poses::UNINITIALIZED_POSE.
| bool mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::save_graph_as_dot | ( | const std::string & | targetFileName, |
| const bool | all_landmarks = false |
||
| ) | const |
Exports all the keyframes (and optionally all landmarks) as a directed graph in DOT (graphviz) format.
Exports all the keyframes and landmarks as a directed graph in DOT (graphviz) format.
Definition at line 16 of file export_dot.h.
References mrpt::srba::kf2kf_pose_traits< POSE_TRAITS >::k2k_edge_t::from, and mrpt::srba::kf2kf_pose_traits< POSE_TRAITS >::k2k_edge_t::to.
|
inline |
Changes the verbosity level: 0=None (only critical msgs), 1=verbose, 2=so verbose you'll have to say "Stop!".
Definition at line 450 of file RbaEngine.h.
References mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::m_verbose_level.
|
static |
Rebuild the Hessian symbolic information from the given Jacobians.
Rebuild the Hessian symbolic information from the given Jacobians Example of the expected template types:
| [out] | H | Output hessian (must be empty at input) |
Definition at line 22 of file sparse_hessian_build_symbolic.h.
References ASSERT_, ASSERTMSG_, and mrpt::mrpt::format().
| size_t mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::sparse_hessian_update_numeric | ( | SPARSEBLOCKHESSIAN & | H | ) | const |
Rebuild the Hessian symbolic information from the internal pointers to blocks of Jacobians.
Only the upper triangle is filled-in (all what is needed for Cholesky) for square Hessians, in whole for rectangular ones (it depends on the symbolic decomposition, done elsewhere).
| SPARSEBLOCKHESSIAN | can be: TSparseBlocksHessian_6x6, TSparseBlocksHessian_3x3 or TSparseBlocksHessian_6x3 |
Definition at line 22 of file sparse_hessian_update_numeric.h.
| const pose_t mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::aux_null_pose |
A fixed SE(3) pose at the origin (used when we need a pointer or a reference to a "null transformation").
Definition at line 685 of file RbaEngine.h.
|
static |
Definition at line 73 of file RbaEngine.h.
|
mutableprivate |
Temporary working space used in create_complete_spanning_tree()
Definition at line 593 of file RbaEngine.h.
|
mutableprivate |
Profiler for all SRBA operations Enabled by default, can be disabled with enable_time_profiler(false)
Definition at line 598 of file RbaEngine.h.
Referenced by mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::enable_time_profiler(), and mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::get_time_profiler().
|
protected |
0: None (only critical msgs), 1: verbose, 2:even more verbose, 3: even more
Definition at line 473 of file RbaEngine.h.
Referenced by mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::setVerbosityLevel().
|
static |
Definition at line 74 of file RbaEngine.h.
| TAllParameters mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::parameters |
Definition at line 430 of file RbaEngine.h.
|
private |
All the beef is here.
Definition at line 591 of file RbaEngine.h.
Referenced by mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::find_path_bfs(), mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::get_k2k_edges(), mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::get_known_feats(), mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::get_rba_state(), and mrpt::srba::RbaEngine< KF2KF_POSE_TYPE, LM_TYPE, OBS_TYPE, RBA_OPTIONS >::get_unknown_feats().
|
static |
Definition at line 72 of file RbaEngine.h.
| Page generated by Doxygen 1.8.9.1 for MRPT 1.3.0 SVN: at Sun Sep 13 03:55:12 UTC 2015 |