slam_toolbox_common.hpp
Go to the documentation of this file.
1 /*
2  * slam_toolbox
3  * Copyright (c) 2008, Willow Garage, Inc.
4  * Copyright Work Modifications (c) 2018, Simbe Robotics, Inc.
5  * Copyright Work Modifications (c) 2019, Steve Macenski
6  *
7  * THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE
8  * COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY
9  * COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS
10  * AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
11  *
12  * BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO
13  * BE BOUND BY THE TERMS OF THIS LICENSE. THE LICENSOR GRANTS YOU THE RIGHTS
14  * CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND
15  * CONDITIONS.
16  *
17  */
18 
19 #ifndef SLAM_TOOLBOX_SLAM_TOOLBOX_COMMON_H_
20 #define SLAM_TOOLBOX_SLAM_TOOLBOX_COMMON_H_
21 
22 #include "ros/ros.h"
26 #include "tf2_ros/message_filter.h"
29 
30 #include "pluginlib/class_loader.h"
31 
39 
40 #include <string>
41 #include <map>
42 #include <vector>
43 #include <queue>
44 #include <cstdlib>
45 #include <fstream>
46 #include <boost/thread.hpp>
47 #include <sys/resource.h>
48 
49 namespace slam_toolbox
50 {
51 
52 // dirty, dirty cheat I love
53 using namespace ::toolbox_types;
54 
56 {
57 public:
59  ~SlamToolbox();
60 
61 protected:
62  // threads
63  void publishVisualizations();
64  void publishTransformLoop(const double& transform_publish_period);
65 
66  // setup
67  void setParams(ros::NodeHandle& nh);
68  void setSolver(ros::NodeHandle& private_nh_);
70 
71  // callbacks
72  virtual void laserCallback(const sensor_msgs::LaserScan::ConstPtr& scan) = 0;
73  bool mapCallback(nav_msgs::GetMap::Request& req,
74  nav_msgs::GetMap::Response& res);
75  virtual bool serializePoseGraphCallback(slam_toolbox_msgs::SerializePoseGraph::Request& req,
76  slam_toolbox_msgs::SerializePoseGraph::Response& resp);
77  virtual bool deserializePoseGraphCallback(slam_toolbox_msgs::DeserializePoseGraph::Request& req,
78  slam_toolbox_msgs::DeserializePoseGraph::Response& resp);
79  void loadSerializedPoseGraph(std::unique_ptr<karto::Mapper>&, std::unique_ptr<karto::Dataset>&);
81 
82  // functional bits
83  karto::LaserRangeFinder* getLaser(const sensor_msgs::LaserScan::ConstPtr& scan);
84  virtual karto::LocalizedRangeScan* addScan(karto::LaserRangeFinder* laser, const sensor_msgs::LaserScan::ConstPtr& scan,
85  karto::Pose2& karto_pose);
86  karto::LocalizedRangeScan* addScan(karto::LaserRangeFinder* laser, PosedScan& scanWPose);
87  bool updateMap();
89  const karto::Pose2& karto_pose, const ros::Time& t, const bool& update_reprocessing_transform);
91  const sensor_msgs::LaserScan::ConstPtr& scan,
92  karto::Pose2& karto_pose);
93  bool shouldStartWithPoseGraph(std::string& filename, geometry_msgs::Pose2D& pose, bool& start_at_dock);
94  bool shouldProcessScan(const sensor_msgs::LaserScan::ConstPtr& scan, const karto::Pose2& pose);
95 
96  // pausing bits
97  bool isPaused(const PausedApplication& app);
98  bool pauseNewMeasurementsCallback(slam_toolbox_msgs::Pause::Request& req,
99  slam_toolbox_msgs::Pause::Response& resp);
100 
101  // ROS-y-ness
103  std::unique_ptr<tf2_ros::Buffer> tf_;
104  std::unique_ptr<tf2_ros::TransformListener> tfL_;
105  std::unique_ptr<tf2_ros::TransformBroadcaster> tfB_;
106  std::unique_ptr<message_filters::Subscriber<sensor_msgs::LaserScan> > scan_filter_sub_;
107  std::unique_ptr<tf2_ros::MessageFilter<sensor_msgs::LaserScan> > scan_filter_;
110 
111  // Storage for ROS parameters
115 
116  double resolution_;
118 
119  // Book keeping
120  std::unique_ptr<mapper_utils::SMapper> smapper_;
121  std::unique_ptr<karto::Dataset> dataset_;
122  std::map<std::string, laser_utils::LaserMetadata> lasers_;
123 
124  // helpers
125  std::unique_ptr<laser_utils::LaserAssistant> laser_assistant_;
126  std::unique_ptr<pose_utils::GetPoseHelper> pose_helper_;
127  std::unique_ptr<map_saver::MapSaver> map_saver_;
128  std::unique_ptr<loop_closure_assistant::LoopClosureAssistant> closure_assistant_;
129  std::unique_ptr<laser_utils::ScanHolder> scan_holder_;
130 
131  // Internal state
132  std::vector<std::unique_ptr<boost::thread> > threads_;
135  PausedState state_;
136  nav_msgs::GetMap::Response map_;
138  std::unique_ptr<karto::Pose2> process_near_pose_;
140 
141  // pluginlib
144 };
145 
146 } // end namespace
147 
148 #endif //SLAM_TOOLBOX_SLAM_TOOLBOX_COMMON_H_
std::vector< std::unique_ptr< boost::thread > > threads_
app
bool pauseNewMeasurementsCallback(slam_toolbox_msgs::Pause::Request &req, slam_toolbox_msgs::Pause::Response &resp)
std::unique_ptr< laser_utils::LaserAssistant > laser_assistant_
filename
nav_msgs::GetMap::Response map_
std::unique_ptr< map_saver::MapSaver > map_saver_
tf2::Stamped< tf2::Transform > setTransformFromPoses(const karto::Pose2 &pose, const karto::Pose2 &karto_pose, const ros::Time &t, const bool &update_reprocessing_transform)
bool isPaused(const PausedApplication &app)
karto::LaserRangeFinder * getLaser(const sensor_msgs::LaserScan::ConstPtr &scan)
virtual void laserCallback(const sensor_msgs::LaserScan::ConstPtr &scan)=0
bool shouldProcessScan(const sensor_msgs::LaserScan::ConstPtr &scan, const karto::Pose2 &pose)
std::unique_ptr< karto::Pose2 > process_near_pose_
std::unique_ptr< tf2_ros::TransformBroadcaster > tfB_
karto::LocalizedRangeScan * getLocalizedRangeScan(karto::LaserRangeFinder *laser, const sensor_msgs::LaserScan::ConstPtr &scan, karto::Pose2 &karto_pose)
geometry_msgs::TransformStamped t
virtual bool serializePoseGraphCallback(slam_toolbox_msgs::SerializePoseGraph::Request &req, slam_toolbox_msgs::SerializePoseGraph::Response &resp)
SlamToolbox(ros::NodeHandle &nh)
boost::shared_ptr< karto::ScanSolver > solver_
std::unique_ptr< mapper_utils::SMapper > smapper_
virtual bool deserializePoseGraphCallback(slam_toolbox_msgs::DeserializePoseGraph::Request &req, slam_toolbox_msgs::DeserializePoseGraph::Response &resp)
std::unique_ptr< loop_closure_assistant::LoopClosureAssistant > closure_assistant_
void setROSInterfaces(ros::NodeHandle &node)
std::unique_ptr< karto::Dataset > dataset_
std::map< std::string, laser_utils::LaserMetadata > lasers_
virtual karto::LocalizedRangeScan * addScan(karto::LaserRangeFinder *laser, const sensor_msgs::LaserScan::ConstPtr &scan, karto::Pose2 &karto_pose)
std::unique_ptr< tf2_ros::Buffer > tf_
bool mapCallback(nav_msgs::GetMap::Request &req, nav_msgs::GetMap::Response &res)
void publishTransformLoop(const double &transform_publish_period)
void loadPoseGraphByParams(ros::NodeHandle &nh)
void setParams(ros::NodeHandle &nh)
ros::ServiceServer ssDesserialize_
void loadSerializedPoseGraph(std::unique_ptr< karto::Mapper > &, std::unique_ptr< karto::Dataset > &)
ros::ServiceServer ssPauseMeasurements_
bool shouldStartWithPoseGraph(std::string &filename, geometry_msgs::Pose2D &pose, bool &start_at_dock)
std::unique_ptr< laser_utils::ScanHolder > scan_holder_
std::unique_ptr< pose_utils::GetPoseHelper > pose_helper_
std::unique_ptr< message_filters::Subscriber< sensor_msgs::LaserScan > > scan_filter_sub_
std::unique_ptr< tf2_ros::TransformListener > tfL_
void setSolver(ros::NodeHandle &private_nh_)
pluginlib::ClassLoader< karto::ScanSolver > solver_loader_
std::unique_ptr< tf2_ros::MessageFilter< sensor_msgs::LaserScan > > scan_filter_


slam_toolbox
Author(s): Steve Macenski
autogenerated on Mon Feb 28 2022 23:46:49