laser_scan_observer.h
Go to the documentation of this file.
1 #ifndef __LASER_SCAN_OBSERVER_H
2 #define __LASER_SCAN_OBSERVER_H
3 
4 #include <utility>
5 #include <sensor_msgs/LaserScan.h>
6 #include <boost/shared_ptr.hpp>
7 
8 #include "../core/sensor_data.h"
9 #include "topic_with_transform.h"
10 
15 class LaserScanObserver : public TopicObserver<sensor_msgs::LaserScan> {
17 public: //methods
22  LaserScanObserver(bool skip_max_vals = false):
23  _skip_max_vals(skip_max_vals),
24  _prev_x(0), _prev_y(0), _prev_yaw(0) {}
31  virtual void handle_transformed_msg(
32  const ScanPtr msg, const tf::StampedTransform& t) {
33 
34  double new_x = t.getOrigin().getX();
35  double new_y = t.getOrigin().getY();
36  double new_yaw = tf::getYaw(t.getRotation());
37 
38  TransformedLaserScan laser_scan;
39  laser_scan.quality = 1.0;
40  double angle = msg->angle_min;
41 
42  for (const auto &range : msg->ranges) {
43  ScanPoint sp(range, angle);
44  angle += msg->angle_increment;
45 
46  if (sp.range < msg->range_min) {
47  continue;
48  } else if (msg->range_max <= sp.range) {
49  sp.is_occupied = false;
50  sp.range = msg->range_max;
51  if (_skip_max_vals) {
52  continue;
53  }
54  }
55  laser_scan.points.push_back(sp);
56  }
57 
58  laser_scan.d_x = new_x - _prev_x;
59  laser_scan.d_y = new_y - _prev_y;
60  laser_scan.d_yaw = new_yaw - _prev_yaw;
61  _prev_x = new_x, _prev_y = new_y, _prev_yaw = new_yaw;
62 
63  handle_laser_scan(laser_scan);
64  }
65 
66  virtual void handle_laser_scan(TransformedLaserScan &) = 0;
67 
68 private: // fields
71 };
72 
73 #endif
static double getYaw(const Quaternion &bt_q)
virtual void handle_laser_scan(TransformedLaserScan &)=0
TFSIMD_FORCE_INLINE const tfScalar & getY() const
Class responsibilities: observes laser scans and odometry; converts ROS structures to internal repres...
Contains a point in polar coordinates and a state whether it is occupied.
Definition: sensor_data.h:16
TFSIMD_FORCE_INLINE tfScalar angle(const Quaternion &q1, const Quaternion &q2)
double range
The range of point in polar.
Definition: sensor_data.h:25
TFSIMD_FORCE_INLINE Vector3 & getOrigin()
The base class which subclasses convert laser scan and odometry data ROS structures to internal data ...
The following classes are defined in this file TopicObserver - abstract base class which subclasses o...
Quaternion getRotation() const
LaserScanObserver(bool skip_max_vals=false)
double quality
The quality of scan. 0 - low, 1 - fine.
Definition: sensor_data.h:37
TFSIMD_FORCE_INLINE const tfScalar & getX() const
virtual void handle_transformed_msg(const ScanPtr msg, const tf::StampedTransform &t)
Converts ROS-specific structures that hold sensor data to internal framework&#39;s structures; Laser scan...
Framework internal representation of a laser scan.
Definition: sensor_data.h:33
bool is_occupied
True, if this point is occupied and False otherwise.
Definition: sensor_data.h:27


tiny_slam
Author(s):
autogenerated on Mon Jun 10 2019 15:30:57