10 #ifndef GRAPHSLAMENGINE_H
11 #define GRAPHSLAMENGINE_H
81 namespace mrpt {
namespace graphslam {
190 template<
class GRAPH_T=
typename mrpt::graphs::CNetworkOfPoses2DInf>
197 typedef std::map<std::string, mrpt::utils::CFileOutputStream*>
fstreams_out;
204 typedef typename GRAPH_T::constraint_t::type_value
pose_t;
261 typename GRAPH_T::global_poses_t* graph_poses)
const;
266 std::set<mrpt::utils::TNodeID>* nodes_set)
const;
317 void getMap(mrpt::maps::COccupancyGridMap2DPtr map,
319 void getMap(mrpt::maps::COctoMapPtr map,
342 mrpt::obs::CObservationPtr& observation,
343 size_t& rawlog_entry);
355 mrpt::obs::CActionCollectionPtr& action,
356 mrpt::obs::CSensoryFramePtr& observations,
357 mrpt::obs::CObservationPtr& observation,
358 size_t& rawlog_entry);
387 std::vector<mrpt::poses::CPose2D>* gt_poses,
388 std::vector<mrpt::system::TTimeStamp>* gt_timestamps=NULL);
391 std::vector<mrpt::poses::CPose3D>* gt_poses,
392 std::vector<mrpt::system::TTimeStamp>* gt_timestamps=NULL);
413 std::vector<mrpt::poses::CPose2D>* gt_poses,
414 std::vector<mrpt::system::TTimeStamp>* gt_timestamps=NULL);
438 std::map<std::string, int>* node_stats,
439 std::map<std::string, int>* edge_stats,
474 "\" in the dipslay window to resume");
585 mrpt::opengl::CSetOfObjectsPtr& viz_object);
598 mrpt::obs::CObservation2DRangeScanPtr>& nodes_to_laser_scans2D,
599 bool full_update=
false);
647 const int keep_every_n_entries = 2);
673 int sleep_time=500 );
689 const mrpt::obs::CActionCollectionPtr action,
690 const mrpt::obs::CSensoryFramePtr observations,
691 const mrpt::obs::CObservationPtr observation);
721 const size_t model_size=1,
733 bool registered=
false,
951 std::map<std::string, std::string>
fields;
#define MRPT_LOG_INFO_STREAM(__CONTENTS)
#define MRPT_LOG_WARN_STREAM(__CONTENTS)
Main file for the GraphSlamEngine.
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.
std::map< std::string, mrpt::utils::CFileOutputStream * >::iterator fstreams_out_it
Map for iterating over output file streams.
mrpt::utils::TColor m_GT_color
virtual void updateCurrPosViewport()
Update the viewport responsible for displaying the graph-building procedure in the estimated position...
std::map< std::string, mrpt::utils::CFileOutputStream * > fstreams_out
Handy typedefs.
bool m_enable_curr_pos_viewport
void save3DScene(const std::string *fname_in=NULL) const
Wrapper method around the COpenGLScene::saveToFile method.
void initClass()
General initialization method to call from the Class Constructors.
mrpt::graphslam::CWindowObserver * m_win_observer
GRAPH_T::constraint_t constraint_t
Type of graph constraints.
mrpt::obs::CObservation2DRangeScanPtr m_first_laser_scan2D
First recorded laser scan - assigned to the root.
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.
void initMapVisualization()
mrpt::synch::CCriticalSection m_graph_section
Mark graph modification/accessing explicitly for multithreaded implementation.
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.
virtual void getRobotEstimatedTrajectory(typename GRAPH_T::global_poses_t *graph_poses) const
void toggleMapVisualization()
bool m_visualize_SLAM_metric
mrpt::graphslam::deciders::CEdgeRegistrationDecider< GRAPH_T > * m_edge_reg
mrpt::opengl::CSetOfObjectsPtr setCurrentPositionModel(const std::string &model_name, const mrpt::utils::TColor &model_color=mrpt::utils::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.
virtual void getNodeIDsOfEstimatedTrajectory(std::set< mrpt::utils::TNodeID > *nodes_set) const
Return the list of nodeIDs which make up robot trajectory.
std::vector< pose_t > m_GT_poses
GRAPH_T::global_pose_t global_pose_t
bool m_user_decides_about_output_dir
void alignOpticalWithMRPTFrame()
GRAPH_T::constraint_t::type_value pose_t
Type of underlying poses (2D/3D).
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.
bool execGraphSlamStep(mrpt::obs::CObservationPtr &observation, size_t &rawlog_entry)
Wrapper method around _execGraphSlamStep.
mrpt::utils::TNodeID m_nodeID_max
Internal counter for querying for the number of nodeIDs.
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
void updateGTVisualization()
Display the next ground truth position in the visualization window.
static mrpt::system::TTimeStamp getTimeStamp(const mrpt::obs::CActionCollectionPtr action, const mrpt::obs::CSensoryFramePtr observations, const mrpt::obs::CObservationPtr observation)
Fill the TTimestamp in a consistent manner.
void queryObserverForEvents()
Query the observer instance for any user events.
double m_offset_y_odometry
virtual bool _execGraphSlamStep(mrpt::obs::CActionCollectionPtr &action, mrpt::obs::CSensoryFramePtr &observations, mrpt::obs::CObservationPtr &observation, size_t &rawlog_entry)
Main class method responsible for parsing each measurement and for executing graphSLAM.
virtual mrpt::poses::CPose3D getLSPoseForGridMapVisualization(const mrpt::utils::TNodeID nodeID) const
return the 3D Pose of a LaserScan that is to be visualized.
mrpt::graphslam::optimizers::CGraphSlamOptimizer< GRAPH_T > * m_optimizer
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.
mrpt::maps::COccupancyGridMap2DPtr m_gridmap_cached
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
mrpt::opengl::CSetOfObjectsPtr initRobotModelVisualizationInternal(const mrpt::poses::CPose2D &p_unused)
Method to help overcome the partial template specialization restriction of C++.
bool m_use_GT
Flag for specifying if we are going to use ground truth data at all.
mrpt::gui::CDisplayWindow3D * m_win
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.
std::vector< double > m_deformation_energy_vec
std::string m_img_prev_path_base
mrpt::obs::CObservation3DRangeScanPtr m_last_laser_scan3D
Last laser scan that the current class instance received.
double m_offset_y_timestamp
mrpt::utils::TColor m_optimized_map_color
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.
std::string m_keystroke_pause_exec
std::string m_current_constraint_type
Type of constraint currently in use.
std::map< mrpt::utils::TNodeID, size_t > m_nodeID_to_gt_indices
Map from nodeIDs to their corresponding closest GT pose index.
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.
mrpt::utils::TColor m_estimated_traj_color
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.
mrpt::system::TTimeStamp m_curr_timestamp
Current dataset timestamp.
std::map< mrpt::utils::TNodeID, mrpt::obs::CObservation2DRangeScanPtr > nodes_to_scans2D_t
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
void getMap(mrpt::maps::COccupancyGridMap2DPtr map, mrpt::system::TTimeStamp *acquisition_time=NULL) const
bool m_is_paused
Indicated if program is temporarily paused by the user.
void saveGraph(const std::string *fname_in=NULL) const
Wrapper method around the GRAPH_T::saveToTextFile method.
mrpt::opengl::CSetOfObjectsPtr initRobotModelVisualization()
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
mrpt::utils::CTimeLogger m_time_logger
Time logger instance.
void toggleGTVisualization()
void initOdometryVisualization()
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::obs::CObservation2DRangeScanPtr m_last_laser_scan2D
Last laser scan that the current class instance received.
std::string m_GT_file_format
int m_text_index_current_constraint_type
std::string m_keystroke_estimated_trajectory
mrpt::maps::COctoMapPtr m_octomap_cached
void initRangeImageViewport()
double m_curr_deformation_energy
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.
virtual void setObjectPropsFromNodeID(const mrpt::utils::TNodeID nodeID, mrpt::opengl::CSetOfObjectsPtr &viz_object)
Set the properties of the map visual object based on the nodeID that it was produced by.
std::string m_keystroke_GT
mrpt::graphslam::deciders::CNodeRegistrationDecider< GRAPH_T > * m_node_reg
double m_offset_y_estimated_traj
mrpt::utils::TColor m_odometry_color
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
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::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
void updateIntensityImageViewport()
In RGB-D TUM Datasets update the Intensity image displayed in a seperate viewport.
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 updateMapVisualization(const std::map< mrpt::utils::TNodeID, mrpt::obs::CObservation2DRangeScanPtr > &nodes_to_laser_scans2D, bool full_update=false)
Update the map visualization based on the current graphSLAM state.
int m_text_index_estimated_traj
bool m_enable_intensity_viewport
void computeSlamMetric(mrpt::utils::TNodeID nodeID, size_t gt_index)
Compare the SLAM result (estimated trajectory) with the GT path.
mrpt::utils::TColor m_current_constraint_type_color
std::string getParamsAsString() const
Wrapper around getParamsAsString.
global_pose_t getCurrentRobotPosEstimation() const
Query CGraphSlamEngine instance for the current estimated robot position.
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...
static const std::string header_sep
Separator string to be used in debugging messages.
double m_offset_y_current_constraint_type
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::utils::TColorf &color=mrpt::utils::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.
This class stores a sequence of <Probabilistic Pose,SensoryFrame> pairs, thus a "metric map" can be t...
A "CObservation"-derived class that represents a 2D range scan measurement (typically from a laser sc...
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).
This class provides simple critical sections functionality.
A versatile "profiler" that logs the time spent within each pair of calls to enter(X)-leave(X),...
GLsizei const GLchar ** string
uint64_t TNodeID
The type for node IDs in graphs of different types.
void BASE_IMPEXP sleep(int time_ms) MRPT_NO_THROWS
An OS-independent method for sending the current thread to "sleep" for a given period of time.
std::string BASE_IMPEXP upperCase(const std::string &str)
Returns a upper-case version of a string.
uint64_t TTimeStamp
A system independent time type, it holds the the number of 100-nanosecond intervals since January 1,...
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
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].