laser_utils.hpp
Go to the documentation of this file.
1 /*
2  * toolbox_types
3  * Copyright (c) 2019, Samsung Research America
4  *
5  * THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE
6  * COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY
7  * COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS
8  * AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
9  *
10  * BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO
11  * BE BOUND BY THE TERMS OF THIS LICENSE. THE LICENSOR GRANTS YOU THE RIGHTS
12  * CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND
13  * CONDITIONS.
14  *
15  */
16 
17 /* Author: Steven Macenski */
18 
19 #ifndef SLAM_TOOLBOX_LASER_UTILS_H_
20 #define SLAM_TOOLBOX_LASER_UTILS_H_
21 
22 #include <string>
23 
24 #include "ros/ros.h"
26 #include "tf2/utils.h"
27 #include "karto_sdk/Mapper.h"
28 
29 namespace laser_utils
30 {
31 
32 // Convert a laser scan to a vector of readings
33 inline std::vector<double> scanToReadings(const sensor_msgs::LaserScan& scan, const bool& inverted)
34 {
35  std::vector<double> readings;
36 
37  if (inverted)
38  {
39  for(std::vector<float>::const_reverse_iterator it = scan.ranges.rbegin(); it != scan.ranges.rend(); ++it)
40  {
41  readings.push_back(*it);
42  }
43  }
44  else
45  {
46  for(std::vector<float>::const_iterator it = scan.ranges.begin(); it != scan.ranges.end(); ++it)
47  {
48  readings.push_back(*it);
49  }
50  }
51 
52  return readings;
53 };
54 
55 // Store laser scanner information
57 {
58 public:
59  LaserMetadata();
61  LaserMetadata(karto::LaserRangeFinder* lsr, bool invert);
62  bool isInverted() const;
64  void invertScan(sensor_msgs::LaserScan& scan) const;
65 
66 private:
68  bool inverted;
69 };
70 
71 // Help take a scan from a laser and create a laser object
73 {
74 public:
75  LaserAssistant(ros::NodeHandle& nh, tf2_ros::Buffer* tf, const std::string& base_frame);
76  ~LaserAssistant();
77  LaserMetadata toLaserMetadata(sensor_msgs::LaserScan scan);
78 
79 private:
80  karto::LaserRangeFinder* makeLaser(const double& mountingYaw);
81  bool isInverted(double& mountingYaw);
82 
85  sensor_msgs::LaserScan scan_;
86  std::string frame_, base_frame_;
87  geometry_msgs::TransformStamped laser_pose_;
88 };
89 
90 // Hold some scans and utilities around them
92 {
93 public:
94  ScanHolder(std::map<std::string, laser_utils::LaserMetadata>& lasers);
95  ~ScanHolder();
96  sensor_msgs::LaserScan getCorrectedScan(const int& id);
97  void addScan(const sensor_msgs::LaserScan scan);
98 
99 private:
100  std::unique_ptr<std::vector<sensor_msgs::LaserScan> > current_scans_;
101  std::map<std::string, laser_utils::LaserMetadata>& lasers_;
102 };
103 
104 } // end namespace
105 
106 #endif //SLAM_TOOLBOX_LASER_UTILS_H_
karto::LaserRangeFinder * laser
Definition: laser_utils.hpp:67
karto::LaserRangeFinder * getLaser()
Definition: laser_utils.cpp:44
geometry_msgs::TransformStamped laser_pose_
Definition: laser_utils.hpp:87
std::unique_ptr< std::vector< sensor_msgs::LaserScan > > current_scans_
std::map< std::string, laser_utils::LaserMetadata > & lasers_
std::vector< double > scanToReadings(const sensor_msgs::LaserScan &scan, const bool &inverted)
Definition: laser_utils.hpp:33
void invertScan(sensor_msgs::LaserScan &scan) const
Definition: laser_utils.cpp:49
sensor_msgs::LaserScan scan_
Definition: laser_utils.hpp:85


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