Loading [MathJax]/extensions/tex2jax.js
geolib2
All Classes Namespaces Files Functions Variables Typedefs Friends Pages
LaserRangeFinder.h
Go to the documentation of this file.
1 #ifndef GEOLIB_LASERRANGEFINDER_H_
2 #define GEOLIB_LASERRANGEFINDER_H_
3 
4 #include "geolib/Ray.h"
5 
6 #include <climits>
7 #include <vector>
8 
9 namespace geo {
10 
11 class Mesh;
12 
14 
15 public:
16 
17  class RenderOptions {
18 
19  public:
20 
21  void setMesh(const geo::Mesh& mesh, const geo::Pose3D& pose) {
22  mesh_ = &mesh;
23  pose_ = pose;
24  }
25 
26  const geo::Pose3D& getPose() const { return pose_; }
27 
28  const geo::Mesh& getMesh() const { return *mesh_; }
29 
30  protected:
31  const geo::Mesh* mesh_;
33 
34  };
35 
36  class RenderResult {
37 
38  public:
39 
40  RenderResult(std::vector<double>& ranges_) : min_i(ranges_.size()-1), max_i(0), ranges(ranges_) {}
41 
42  virtual void renderLine(const Vec2& p1, const Vec2& p2);
43 
44  virtual void renderPoint(uint index, float depth);
45 
46  uint min_i;
47  uint max_i;
48 
50 
52 
53  };
54 
56 
57  virtual ~LaserRangeFinder();
58 
60 
61  RenderResult render(const geo::Shape& shape, const geo::Pose3D& cam_pose, const geo::Pose3D& obj_pose, std::vector<double>& ranges) const;
62 
63  void renderLine(const geo::Vec2& p1, const geo::Vec2& p2, std::vector<double>& ranges) const;
64 
65  void setAngleLimits(double min, double max);
66 
67  inline void setRangeLimits(double min, double max) { range_min_ = min; range_max_ = max; }
68 
69  void setNumBeams(uint n);
70 
71  inline double getAngleMin() const { return a_min_; }
72 
73  inline double getAngleMax() const { return a_max_; }
74 
80  double getAngleIncrement() const;
81 
82  inline const std::vector<double>& getAngles() const { return angles_; }
83 
84  inline double getRangeMin() const { return range_min_; }
85 
86  inline double getRangeMax() const { return range_max_; }
87 
88  inline uint getNumBeams() const { return num_beams_; }
89 
90  geo::Vector3 rangeToPoint(double range, uint i) const;
91 
92  const geo::Vector3 getRayDirection(uint i) const;
93 
94  bool rangesToPoints(const std::vector<double>& ranges, std::vector<geo::Vector3>& points) const;
95 
101  uint getAngleUpperIndex(double angle) const;
102 
109  uint getAngleUpperIndex(double x, double y) const;
110 
111  static geo::Vector3 polarTo2D(double angle, double range);
112 
113  static geo::Vector3 polarTo3D(const geo::Pose3D& laser_pose, double angle, double range);
114 
115  inline const std::vector<geo::Vector3>& rayDirections() const { return ray_dirs_; }
116 
117 protected:
118 
119  double a_min_, a_max_;
120 
122 
124 
126 
128 
129  double angle_incr_;
130 
131  // Number of beams in a half circle
133 
139  int getAngleUpperIndexRaw(double angle) const;
140 
147  int getAngleUpperIndexRaw(double x, double y) const;
148 
149  void calculateRays();
150 
151 };
152 
153 }
154 
155 #endif
geo::LaserRangeFinder::polarTo3D
static geo::Vector3 polarTo3D(const geo::Pose3D &laser_pose, double angle, double range)
Definition: LaserRangeFinder.cpp:370
geo::LaserRangeFinder::setAngleLimits
void setAngleLimits(double min, double max)
Definition: LaserRangeFinder.cpp:285
geo::LaserRangeFinder::getNumBeams
uint getNumBeams() const
Definition: LaserRangeFinder.h:88
geo::LaserRangeFinder::RenderOptions::pose_
geo::Pose3D pose_
Definition: LaserRangeFinder.h:32
geo
Definition: Box.h:6
geo::LaserRangeFinder::setRangeLimits
void setRangeLimits(double min, double max)
Definition: LaserRangeFinder.h:67
vector
geo::LaserRangeFinder::RenderResult::min_i
uint min_i
Definition: LaserRangeFinder.h:46
geo::LaserRangeFinder::RenderOptions::getPose
const geo::Pose3D & getPose() const
Definition: LaserRangeFinder.h:26
geo::Transform3T
Definition: math_types.h:19
geo::LaserRangeFinder::render
void render(const geo::LaserRangeFinder::RenderOptions &options, geo::LaserRangeFinder::RenderResult &res) const
Definition: LaserRangeFinder.cpp:142
geo::LaserRangeFinder::getRayDirection
const geo::Vector3 getRayDirection(uint i) const
Definition: LaserRangeFinder.cpp:351
geo::LaserRangeFinder::polarTo2D
static geo::Vector3 polarTo2D(double angle, double range)
Definition: LaserRangeFinder.cpp:366
geo::LaserRangeFinder::LaserRangeFinder
LaserRangeFinder()
Definition: LaserRangeFinder.cpp:8
geo::LaserRangeFinder::getAngleUpperIndexRaw
int getAngleUpperIndexRaw(double angle) const
Get the index of the first beam with a higher angle than angle. Results may lie outside of the sensor...
Definition: LaserRangeFinder.cpp:332
geo::LaserRangeFinder::i_half_circle_
uint i_half_circle_
Definition: LaserRangeFinder.h:132
geo::LaserRangeFinder::getAngleMax
double getAngleMax() const
Definition: LaserRangeFinder.h:73
geo::LaserRangeFinder::angles_
std::vector< double > angles_
Definition: LaserRangeFinder.h:125
geo::LaserRangeFinder::a_min_
double a_min_
Definition: LaserRangeFinder.h:119
geo::LaserRangeFinder::calculateRays
void calculateRays()
Definition: LaserRangeFinder.cpp:300
geo::LaserRangeFinder::RenderResult::renderLine
virtual void renderLine(const Vec2 &p1, const Vec2 &p2)
Definition: LaserRangeFinder.cpp:22
geo::LaserRangeFinder::rayDirections
const std::vector< geo::Vector3 > & rayDirections() const
Definition: LaserRangeFinder.h:115
geo::LaserRangeFinder::RenderResult::ranges
std::vector< double > & ranges
Definition: LaserRangeFinder.h:49
geo::LaserRangeFinder::RenderResult::renderPoint
virtual void renderPoint(uint index, float depth)
Definition: LaserRangeFinder.cpp:133
geo::LaserRangeFinder::setNumBeams
void setNumBeams(uint n)
Definition: LaserRangeFinder.cpp:293
geo::LaserRangeFinder::RenderResult::lrf_
const geo::LaserRangeFinder * lrf_
Definition: LaserRangeFinder.h:51
geo::LaserRangeFinder::RenderOptions::setMesh
void setMesh(const geo::Mesh &mesh, const geo::Pose3D &pose)
Definition: LaserRangeFinder.h:21
geo::LaserRangeFinder::getAngleMin
double getAngleMin() const
Definition: LaserRangeFinder.h:71
geo::Vector3
Definition: matrix.h:12
geo::LaserRangeFinder::a_max_
double a_max_
Definition: LaserRangeFinder.h:119
geo::LaserRangeFinder::rangeToPoint
geo::Vector3 rangeToPoint(double range, uint i) const
Definition: LaserRangeFinder.cpp:347
geo::LaserRangeFinder::ray_dirs_
std::vector< geo::Vector3 > ray_dirs_
Definition: LaserRangeFinder.h:127
geo::LaserRangeFinder::num_beams_
uint num_beams_
Definition: LaserRangeFinder.h:123
geo::LaserRangeFinder::getAngleIncrement
double getAngleIncrement() const
Angle increment between two beams.
Definition: LaserRangeFinder.cpp:319
geo::LaserRangeFinder::RenderResult::max_i
uint max_i
Definition: LaserRangeFinder.h:47
geo::LaserRangeFinder::~LaserRangeFinder
virtual ~LaserRangeFinder()
Definition: LaserRangeFinder.cpp:11
geo::LaserRangeFinder
Definition: LaserRangeFinder.h:13
geo::LaserRangeFinder::RenderOptions
Definition: LaserRangeFinder.h:17
climits
geo::LaserRangeFinder::range_min_
double range_min_
Definition: LaserRangeFinder.h:121
geo::LaserRangeFinder::getAngleUpperIndex
uint getAngleUpperIndex(double angle) const
Get the index of the first beam with a higher angle than this beam.
Definition: LaserRangeFinder.cpp:323
geo::LaserRangeFinder::renderLine
void renderLine(const geo::Vec2 &p1, const geo::Vec2 &p2, std::vector< double > &ranges) const
Definition: LaserRangeFinder.cpp:272
geo::LaserRangeFinder::angle_incr_
double angle_incr_
Definition: LaserRangeFinder.h:129
geo::LaserRangeFinder::getRangeMin
double getRangeMin() const
Definition: LaserRangeFinder.h:84
geo::LaserRangeFinder::getRangeMax
double getRangeMax() const
Definition: LaserRangeFinder.h:86
geo::Mesh
Definition: Mesh.h:25
geo::LaserRangeFinder::RenderOptions::getMesh
const geo::Mesh & getMesh() const
Definition: LaserRangeFinder.h:28
geo::LaserRangeFinder::rangesToPoints
bool rangesToPoints(const std::vector< double > &ranges, std::vector< geo::Vector3 > &points) const
Definition: LaserRangeFinder.cpp:355
geo::LaserRangeFinder::RenderResult
Definition: LaserRangeFinder.h:36
Ray.h
geo::Vec2T
Definition: math_types.h:24
geo::LaserRangeFinder::getAngles
const std::vector< double > & getAngles() const
Definition: LaserRangeFinder.h:82
geo::LaserRangeFinder::RenderResult::RenderResult
RenderResult(std::vector< double > &ranges_)
Definition: LaserRangeFinder.h:40
geo::Shape
A geometric description of a shape.
Definition: Shape.h:19
geo::LaserRangeFinder::RenderOptions::mesh_
const geo::Mesh * mesh_
Definition: LaserRangeFinder.h:31
geo::LaserRangeFinder::range_max_
double range_max_
Definition: LaserRangeFinder.h:121