10 #ifndef GRAPHSLAMENGINE_H
11 #define GRAPHSLAMENGINE_H
151 template <
class GRAPH_T =
typename mrpt::graphs::CNetworkOfPoses2DInf>
158 using fstreams_out = std::map<std::string, mrpt::io::CFileOutputStream>;
165 using pose_t =
typename GRAPH_T::constraint_t::type_value;
226 std::set<mrpt::graphs::TNodeID>* nodes_set)
const;
350 std::vector<mrpt::poses::CPose2D>* gt_poses,
351 std::vector<mrpt::system::TTimeStamp>* gt_timestamps = NULL);
354 std::vector<mrpt::poses::CPose3D>* gt_poses,
355 std::vector<mrpt::system::TTimeStamp>* gt_timestamps = NULL);
376 std::vector<mrpt::poses::CPose2D>* gt_poses,
377 std::vector<mrpt::system::TTimeStamp>* gt_timestamps = NULL);
401 std::map<std::string, int>* node_stats,
402 std::map<std::string, int>* edge_stats,
443 "Program is paused. "
446 <<
"\" in the dipslay window to resume");
457 std::this_thread::sleep_for(1
s);
575 nodes_to_laser_scans2D,
576 bool full_update =
false);
625 const int keep_every_n_entries = 2);
700 const size_t model_size = 1,
const pose_t& init_pose =
pose_t());
711 bool registered =
false,
std::string class_name =
"Class");
932 std::map<std::string, std::string>
fields;
Main file for the GraphSlamEngine.
virtual void getNodeIDsOfEstimatedTrajectory(std::set< mrpt::graphs::TNodeID > *nodes_set) const
Return the list of nodeIDs which make up robot trajectory.
void computeMap() const
Compute the map of the environment based on the recorded measurements.
fstreams_out m_out_streams
keeps track of the out fstreams so that they can be closed (if still open) in the class Dtor.
virtual void updateCurrPosViewport()
Update the viewport responsible for displaying the graph-building procedure in the estimated position...
bool m_enable_curr_pos_viewport
mrpt::img::TColor m_odometry_color
virtual mrpt::poses::CPose3D getLSPoseForGridMapVisualization(const mrpt::graphs::TNodeID nodeID) const
return the 3D Pose of a LaserScan that is to be visualized.
void initClass()
General initialization method to call from the Class Constructors.
mrpt::graphslam::CWindowObserver * m_win_observer
mrpt::img::TColor m_GT_color
bool m_observation_only_dataset
mrpt::system::TTimeStamp m_init_timestamp
First recorded timestamp in the dataset.
void updateAllVisuals()
Wrapper around the deciders/optimizer updateVisuals methods.
typename GRAPH_T::global_pose_t global_pose_t
void initMapVisualization()
void toggleOdometryVisualization()
pose_t m_curr_odometry_only_pose
Current robot position based solely on odometry.
void loadParams(const std::string &fname)
Read the configuration variables from the .ini file specified by the user.
typename GRAPH_T::constraint_t::type_value pose_t
Type of underlying poses (2D/3D).
void toggleMapVisualization()
bool m_visualize_SLAM_metric
mrpt::graphslam::deciders::CEdgeRegistrationDecider< GRAPH_T > * m_edge_reg
std::vector< pose_t > m_GT_poses
bool m_user_decides_about_output_dir
mrpt::opengl::CSetOfObjects::Ptr setCurrentPositionModel(const std::string &model_name, const mrpt::img::TColor &model_color=mrpt::img::TColor(0, 0, 0), const size_t model_size=1, const pose_t &init_pose=pose_t())
Set the opengl model that indicates the latest position of the trajectory at hand.
mrpt::graphs::TNodeID m_nodeID_max
Internal counter for querying for the number of nodeIDs.
void alignOpticalWithMRPTFrame()
double m_offset_x_left
Offset from the left side of the canvas.
size_t m_GT_poses_step
Rate at which to read the GT poses.
static void readGTFile(const std::string &fname_GT, std::vector< mrpt::poses::CPose2D > *gt_poses, std::vector< mrpt::system::TTimeStamp > *gt_timestamps=NULL)
Parse the ground truth .txt file and fill in the corresponding gt_poses vector.
void decimateLaserScan(mrpt::obs::CObservation2DRangeScan &laser_scan_in, mrpt::obs::CObservation2DRangeScan *laser_scan_out, const int keep_every_n_entries=2)
Cut down on the size of the given laser scan.
void initIntensityImageViewport()
int m_text_index_timestamp
std::map< mrpt::graphs::TNodeID, mrpt::obs::CObservation2DRangeScan::Ptr > nodes_to_scans2D_t
void updateGTVisualization()
Display the next ground truth position in the visualization window.
void queryObserverForEvents()
Query the observer instance for any user events.
double m_offset_y_odometry
mrpt::obs::CObservation3DRangeScan::Ptr m_last_laser_scan3D
Last laser scan that the current class instance received.
mrpt::graphslam::optimizers::CGraphSlamOptimizer< GRAPH_T > * m_optimizer
virtual void setObjectPropsFromNodeID(const mrpt::graphs::TNodeID nodeID, mrpt::opengl::CSetOfObjects::Ptr &viz_object)
Set the properties of the map visual object based on the nodeID that it was produced by.
bool m_is_first_time_node_reg
Track the first node registration occurance.
int m_text_index_odometry
struct mrpt::graphslam::CGraphSlamEngine::TRGBDInfoFileParams m_info_params
const GRAPH_T & getGraph() const
Return a reference to the underlying GRAPH_T instance.
double m_dataset_grab_time
Time it took to record the dataset.
void initCurrPosViewport()
CGraphSlamEngine(const std::string &config_file, const std::string &rawlog_fname="", const std::string &fname_GT="", mrpt::graphslam::CWindowManager *win_manager=NULL, mrpt::graphslam::deciders::CNodeRegistrationDecider< GRAPH_T > *node_reg=NULL, mrpt::graphslam::deciders::CEdgeRegistrationDecider< GRAPH_T > *edge_reg=NULL, mrpt::graphslam::optimizers::CGraphSlamOptimizer< GRAPH_T > *optimizer=NULL)
Constructor of CGraphSlamEngine class template.
mrpt::math::CMatrixDouble33 m_rot_TUM_to_MRPT
bool m_use_GT
Flag for specifying if we are going to use ground truth data at all.
mrpt::gui::CDisplayWindow3D * m_win
void computeSlamMetric(mrpt::graphs::TNodeID nodeID, size_t gt_index)
Compare the SLAM result (estimated trajectory) with the GT path.
std::string m_keystroke_odometry
void initResultsFile(const std::string &fname)
Automate the creation and initialization of a results file relevant to the application.
virtual void monitorNodeRegistration(bool registered=false, std::string class_name="Class")
Assert that the given nodes number matches the registered graph nodes, otherwise throw exception.
std::string m_rawlog_fname
Rawlog file from which to read the measurements.
mrpt::img::TColor m_optimized_map_color
std::vector< double > m_deformation_energy_vec
std::string m_img_prev_path_base
double m_offset_y_timestamp
virtual GRAPH_T::global_poses_t getRobotEstimatedTrajectory() const
GRAPH_T m_graph
The graph object to be built and optimized.
mrpt::graphslam::detail::CEdgeCounter m_edge_counter
Instance to keep track of all the edges + visualization related operations.
const bool m_enable_visuals
Determine if we are to enable visualization support or not.
mrpt::img::TColor m_estimated_traj_color
std::string m_keystroke_pause_exec
std::string m_current_constraint_type
Type of constraint currently in use.
void getDeformationEnergyVector(std::vector< double > *vec_out) const
Fill the given vector with the deformation energy values computed for the SLAM evaluation metric.
bool m_map_is_cached
Indicates if the map is cached.
mrpt::system::TTimeStamp m_map_acq_time
Timestamp at which the map was computed.
static void readGTFileRGBD_TUM(const std::string &fname_GT, std::vector< mrpt::poses::CPose2D > *gt_poses, std::vector< mrpt::system::TTimeStamp > *gt_timestamps=NULL)
Parse the ground truth .txt file and fill in the corresponding m_GT_poses vector.
std::mutex m_graph_section
Mark graph modification/accessing explicitly for multithreaded implementation.
virtual bool _execGraphSlamStep(mrpt::obs::CActionCollection::Ptr &action, mrpt::obs::CSensoryFrame::Ptr &observations, mrpt::obs::CObservation::Ptr &observation, size_t &rawlog_entry)
Main class method responsible for parsing each measurement and for executing graphSLAM.
mrpt::system::TTimeStamp m_curr_timestamp
Current dataset timestamp.
static double accumulateAngleDiffs(const mrpt::poses::CPose2D &p1, const mrpt::poses::CPose2D &p2)
size_t m_GT_poses_index
Counter for reading back the GT_poses.
void updateOdometryVisualization()
Update odometry-only cloud with latest odometry estimation.
std::string m_keystroke_map
void updateEstimatedTrajectoryVisualization(bool full_update=false)
Update the Esstimated robot trajectory with the latest estimated robot position.
bool m_enable_range_viewport
bool m_is_paused
Indicated if program is temporarily paused by the user.
void initEstimatedTrajectoryVisualization()
void dumpVisibilityErrorMsg(std::string viz_flag, int sleep_time=500)
Wrapper method that used for printing error messages in a consistent manner.
double m_offset_y_paused_message
bool m_visualize_estimated_trajectory
void toggleGTVisualization()
void initOdometryVisualization()
typename GRAPH_T::constraint_t constraint_t
Type of graph constraints.
size_t m_robot_model_size
How big are the robots going to be in the scene.
bool getGraphSlamStats(std::map< std::string, int > *node_stats, std::map< std::string, int > *edge_stats, mrpt::system::TTimeStamp *timestamp=NULL)
Fill the given maps with stats regarding the overall execution of graphslam.
std::string m_img_external_storage_dir
mrpt::opengl::CSetOfObjects::Ptr initRobotModelVisualization()
std::string m_GT_file_format
int m_text_index_current_constraint_type
std::string m_keystroke_estimated_trajectory
void initRangeImageViewport()
double m_curr_deformation_energy
static mrpt::system::TTimeStamp getTimeStamp(const mrpt::obs::CActionCollection::Ptr action, const mrpt::obs::CSensoryFrame::Ptr observations, const mrpt::obs::CObservation::Ptr observation)
Fill the TTimestamp in a consistent manner.
void save3DScene(const std::string *fname_in=nullptr) const
Wrapper method around the COpenGLScene::saveToFile method.
void execDijkstraNodesEstimation()
Wrapper around the GRAPH_T::dijkstra_nodes_estimate.
void initSlamMetricVisualization()
mrpt::gui::CDisplayWindowPlots * m_win_plot
DisplayPlots instance for visualizing the evolution of the SLAM metric.
std::string m_keystroke_GT
mrpt::maps::COccupancyGridMap2D::Ptr m_gridmap_cached
mrpt::graphslam::deciders::CNodeRegistrationDecider< GRAPH_T > * m_node_reg
typename fstreams_out::iterator fstreams_out_it
Map for iterating over output file streams.
double m_offset_y_estimated_traj
void initGTVisualization()
void toggleEstimatedTrajectoryVisualization()
virtual ~CGraphSlamEngine()
Default Destructor.
const std::string m_paused_message
Message to be displayed while paused.
static const std::string report_sep
std::map< std::string, mrpt::io::CFileOutputStream > fstreams_out
Handy typedefs.
void updateSlamMetricVisualization()
Update the displayPlots window with the new information with regards to the metric.
std::string getRawlogFname()
Return the filename of the used rawlog file.
mrpt::obs::CObservation2DRangeScan::Ptr m_last_laser_scan2D
Last laser scan that the current class instance received.
bool execGraphSlamStep(mrpt::obs::CObservation::Ptr &observation, size_t &rawlog_entry)
Wrapper method around _execGraphSlamStep.
mrpt::maps::CSimpleMap m_simple_map_cached
Acquired map in CSimpleMap representation.
bool m_request_to_exit
Indicate whether the user wants to exit the application (e.g.
void getDescriptiveReport(std::string *report_str) const
Fill the provided string with a detailed report of the class state.
std::string m_config_fname
mrpt::opengl::CSetOfObjects::Ptr initRobotModelVisualizationInternal(const mrpt::poses::CPose2D &p_unused)
Method to help overcome the partial template specialization restriction of C++.
void updateIntensityImageViewport()
In RGB-D TUM Datasets update the Intensity image displayed in a seperate viewport.
mrpt::obs::CObservation2DRangeScan::Ptr m_first_laser_scan2D
First recorded laser scan - assigned to the root.
mrpt::graphslam::CWindowManager * m_win_manager
std::vector< std::string > m_supported_constraint_types
MRPT CNetworkOfPoses constraint classes that are currently supported.
int m_text_index_paused_message
std::vector< pose_t > m_odometry_poses
void saveGraph(const std::string *fname_in=nullptr) const
Wrapper method around the GRAPH_T::saveToTextFile method.
int m_text_index_estimated_traj
bool m_enable_intensity_viewport
std::string getParamsAsString() const
Wrapper around getParamsAsString.
mrpt::img::TColor m_current_constraint_type_color
global_pose_t getCurrentRobotPosEstimation() const
Query CGraphSlamEngine instance for the current estimated robot position.
mrpt::maps::COctoMap::Ptr m_octomap_cached
void generateReportFiles(const std::string &output_dir_fname_in)
Generate and write to a corresponding report for each of the respective self/decider/optimizer classe...
std::map< mrpt::graphs::TNodeID, size_t > m_nodeID_to_gt_indices
Map from nodeIDs to their corresponding closest GT pose index.
mrpt::system::CTimeLogger m_time_logger
Time logger instance.
void updateMapVisualization(const std::map< mrpt::graphs::TNodeID, mrpt::obs::CObservation2DRangeScan::Ptr > &nodes_to_laser_scans2D, bool full_update=false)
Update the map visualization based on the current graphSLAM state.
static const std::string header_sep
Separator string to be used in debugging messages.
double m_offset_y_current_constraint_type
void getMap(mrpt::maps::COccupancyGridMap2D::Ptr map, mrpt::system::TTimeStamp *acquisition_time=NULL) const
nodes_to_scans2D_t m_nodes_to_laser_scans2D
Map of NodeIDs to their corresponding LaserScans.
bool m_visualize_odometry_poses
void printParams() const
Print the problem parameters to the console for verification.
void updateRangeImageViewport()
In RGB-D TUM Datasets update the Range image displayed in a seperate viewport.
Class acts as a container for storing pointers to mrpt::gui::CDisplayWindow3D, mrpt::graphslam::CWind...
Monitor events in the visualization window.
Interface for implementing node registration classes.
Generic class for tracking the total number of edges for different tpes of edges and for storing visu...
Interface for implementing graphSLAM optimizer classes.
A graphical user interface (GUI) for efficiently rendering 3D scenes in real-time.
void addTextMessage(const double x, const double y, const std::string &text, const mrpt::img::TColorf &color=mrpt::img::TColorf(1.0, 1.0, 1.0), const size_t unique_index=0, const mrpt::opengl::TOpenGLFont font=mrpt::opengl::MRPT_GLUT_BITMAP_TIMES_ROMAN_24)
Add 2D text messages overlapped to the 3D rendered scene.
Create a GUI window and display plots with MATLAB-like interfaces and commands.
std::shared_ptr< COccupancyGridMap2D > Ptr
std::shared_ptr< COctoMap > Ptr
This class stores a sequence of <Probabilistic Pose,SensoryFrame> pairs, thus a "metric map" can be t...
std::shared_ptr< CActionCollection > Ptr
A "CObservation"-derived class that represents a 2D range scan measurement (typically from a laser sc...
std::shared_ptr< CObservation2DRangeScan > Ptr
std::shared_ptr< CObservation3DRangeScan > Ptr
std::shared_ptr< CObservation > Ptr
std::shared_ptr< CSensoryFrame > Ptr
std::shared_ptr< CSetOfObjects > Ptr
A class used to store a 2D pose, including the 2D coordinate point and a heading (phi) angle.
A class used to store a 3D pose (a 3D translation + a rotation in 3D).
Versatile class for consistent logging and management of output messages.
A versatile "profiler" that logs the time spent within each pair of calls to enter(X)-leave(X),...
GLsizei const GLchar ** string
std::string upperCase(const std::string &str)
Returns a upper-case version of a string.
mrpt::Clock::time_point TTimeStamp
A system independent time type, it holds the the number of 100-nanosecond intervals since January 1,...
uint64_t TNodeID
A generic numeric type for unique IDs of nodes or entities.
SLAM methods related to graphs of pose constraints.
Struct responsible for keeping the parameters of the .info file in RGBD related datasets.
void initTRGBDInfoFileParams()
std::map< std::string, std::string > fields
Format for the parameters in the info file: string literal - related value (kept in a string represen...
void parseFile()
Parse the RGBD information file to gain information about the rawlog file contents.
void setRawlogFile(const std::string &rawlog_fname)
A RGB color - floats in the range [0,1].
#define MRPT_LOG_INFO_STREAM(__CONTENTS)
#define MRPT_LOG_WARN_STREAM(__CONTENTS)