mrpt_icp_slam_2d_wrapper.h
Go to the documentation of this file.
00001 /*
00002  * File: mrpt_icp_slam_2d_wrapper.h
00003  * Author: Vladislav Tananaev
00004  *
00005  */
00006 
00007 #ifndef MRPT_ICP_SLAM_2D_WRAPPER_H
00008 #define MRPT_ICP_SLAM_2D_WRAPPER_H
00009 
00010 // MRPT libraries
00011 #include <mrpt/slam/CMetricMapBuilderICP.h>
00012 #include <mrpt/opengl/COpenGLScene.h>
00013 #include <mrpt/opengl/CGridPlaneXY.h>
00014 #include <mrpt/opengl/stock_objects.h>
00015 #include <mrpt/utils/CConfigFile.h>
00016 #include <mrpt/utils/CFileGZInputStream.h>
00017 #include <mrpt/utils/CFileGZOutputStream.h>
00018 #include <mrpt/system/os.h>
00019 #include <mrpt/system/threads.h>
00020 #include <mrpt/system/filesystem.h>
00021 #include <mrpt/opengl/CPlanarLaserScan.h>  // This class lives in the lib [mrpt-maps] and must be included by hand
00022 #include <mrpt/poses/CPosePDFGaussian.h>
00023 #include <mrpt/poses/CPose3DPDF.h>
00024 
00025 #include <mrpt/gui/CDisplayWindow3D.h>
00026 
00027 #include <stdint.h>
00028 #include <iostream>  // std::cout
00029 #include <fstream>   // std::ifstream
00030 #include <string>
00031 
00032 // add ros libraries
00033 #include <ros/ros.h>
00034 #include <ros/package.h>
00035 #include <tf/transform_listener.h>
00036 #include <tf/transform_broadcaster.h>
00037 // add ros msgs
00038 #include <nav_msgs/OccupancyGrid.h>
00039 #include "nav_msgs/MapMetaData.h"
00040 #include <nav_msgs/Path.h>
00041 #include <std_msgs/String.h>
00042 #include <std_msgs/Header.h>
00043 #include <std_msgs/Int32.h>
00044 #include <nav_msgs/GetMap.h>
00045 #include <geometry_msgs/PoseArray.h>
00046 #include <geometry_msgs/PoseStamped.h>
00047 #include <geometry_msgs/PoseWithCovarianceStamped.h>
00048 #include <sensor_msgs/LaserScan.h>
00049 #include <sensor_msgs/PointCloud.h>
00050 #include <visualization_msgs/MarkerArray.h>
00051 #include <visualization_msgs/Marker.h>
00052 
00053 // mrpt bridge libs
00054 #include <mrpt_bridge/pose.h>
00055 #include <mrpt_bridge/map.h>
00056 #include <mrpt_bridge/mrpt_log_macros.h>
00057 #include <mrpt_bridge/laser_scan.h>
00058 #include <mrpt_bridge/time.h>
00059 #include <mrpt_bridge/point_cloud.h>
00060 #include <mrpt/version.h>
00061 #if MRPT_VERSION >= 0x130
00062 #include <mrpt/obs/CActionRobotMovement2D.h>
00063 #include <mrpt/obs/CActionRobotMovement3D.h>
00064 #include <mrpt/obs/CActionCollection.h>
00065 #include <mrpt/obs/CObservationOdometry.h>
00066 #include <mrpt/obs/CSensoryFrame.h>
00067 #include <mrpt/maps/CMultiMetricMap.h>
00068 #include <mrpt/obs/CRawlog.h>
00069 using namespace mrpt::maps;
00070 using namespace mrpt::obs;
00071 #else
00072 #include <mrpt/slam/CActionRobotMovement2D.h>
00073 #include <mrpt/slam/CActionRobotMovement3D.h>
00074 #include <mrpt/slam/CActionCollection.h>
00075 #include <mrpt/slam/CObservationOdometry.h>
00076 #include <mrpt/slam/CSensoryFrame.h>
00077 #include <mrpt/slam/CMultiMetricMap.h>
00078 #include <mrpt/slam/CRawlog.h>
00079 #endif
00080 using namespace mrpt;
00081 using namespace mrpt::slam;
00082 using namespace mrpt::opengl;
00083 using namespace mrpt::gui;
00084 using namespace mrpt::system;
00085 using namespace mrpt::math;
00086 using namespace mrpt::utils;
00087 using namespace mrpt::poses;
00088 using namespace std;
00089 
00094 class ICPslamWrapper
00095 {
00096 public:
00100   ICPslamWrapper();
00101 
00105   ~ICPslamWrapper();
00106 
00112   void read_iniFile(std::string ini_filename);
00116   void init3Dwindow();
00120   void run3Dwindow();
00121 
00125   void get_param();
00129   void init();
00135   bool rawlogPlay();
00141   bool is_file_exists(const std::string &name);
00151   void laserCallback(const sensor_msgs::LaserScan &_msg);
00156   void publishTF();
00161   void publishMapPose();
00167   void updateSensorPose(std::string _frame_id);
00173   void updateTrajectoryTimerCallback(const ros::TimerEvent& event);
00179   void publishTrajectoryTimerCallback(const ros::TimerEvent& event);
00180 
00181 protected:
00182   CMetricMapBuilderICP mapBuilder;  
00183   ros::NodeHandle n_;               
00184   double rawlog_play_delay;         
00185   bool rawlog_play_;                
00186 
00187   std::string rawlog_filename;  
00188   std::string ini_filename;     
00189   std::string global_frame_id;  
00190   std::string odom_frame_id;    
00191   std::string base_frame_id;    
00192   geometry_msgs::PoseStamped pose; 
00193 
00194   ros::Publisher trajectory_pub_;  
00195   nav_msgs::Path path;             
00196 
00197   ros::Timer update_trajector_timer;   
00198   ros::Timer publish_trajectory_timer; 
00199 
00200   double trajectory_update_rate;    
00201   double trajectory_publish_rate;   
00202 
00203   // Sensor source
00204   std::string sensor_source;                                 
00205   std::map<std::string, mrpt::poses::CPose3D> laser_poses_;  
00206 
00207   // Subscribers
00208   std::vector<ros::Subscriber> sensorSub_;  
00209 
00210   const CMultiMetricMap *metric_map_;  
00211   // CPose3DPDFPtr curPDF;          ///<current robot pose
00212   ros::Publisher pub_map_, pub_metadata_, pub_pose_, pub_point_cloud_;  
00213 
00214   tf::TransformListener listenerTF_;         
00215   tf::TransformBroadcaster tf_broadcaster_;  
00216 
00217   CTicTac tictac;  
00218   float t_exec;    
00219   CSensoryFramePtr observations;
00220   CObservationPtr observation;
00221   mrpt::system::TTimeStamp timeLastUpdate_;  
00222 
00223   ros::Time stamp;  
00224 
00225   mrpt::gui::CDisplayWindow3DPtr win3D_;  
00226 
00227   std::vector<CObservation2DRangeScanPtr> lst_current_laser_scans;
00228   bool isObsBasedRawlog;
00229   bool SHOW_PROGRESS_3D_REAL_TIME;
00230   int SHOW_PROGRESS_3D_REAL_TIME_DELAY_MS;
00231   bool SHOW_LASER_SCANS_3D;
00232   bool CAMERA_3DSCENE_FOLLOWS_ROBOT;
00233 };
00234 
00235 #endif /* MRPT_ICP_SLAM_2D_WRAPPER_H */


mrpt_icp_slam_2d
Author(s): Jose Luis Blanco Claraco, Vladislav Tananaev
autogenerated on Sun Sep 17 2017 03:02:10