base
Sonar.hpp
Go to the documentation of this file.
1 #ifndef __BASE_SAMPLES_SONAR_HPP__
2 #define __BASE_SAMPLES_SONAR_HPP__
3 
4 #include <vector>
5 #include <base/Float.hpp>
6 #include <base/Time.hpp>
7 #include <base/Angle.hpp>
8 #include <base/Deprecated.hpp>
10 #include <base/samples/SonarBeam.hpp>
11 #include <base/samples/SonarScan.hpp>
13 
14 namespace base { namespace samples {
15 
53 struct Sonar
54 {
55 public:
67  base::Time time;
68 
76  std::vector<base::Time> timestamps;
77 
90  base::Time bin_duration;
91 
97  base::Angle beam_width;
98 
104  base::Angle beam_height;
105 
111  std::vector<base::Angle> bearings;
112 
114  float speed_of_sound;
115 
117  uint32_t bin_count;
118 
120  uint32_t beam_count;
121 
132  std::vector<float> bins;
133 
134  static float getSpeedOfSoundInWater() { return 1497.0; }
135 
136  Sonar()
137  : speed_of_sound(getSpeedOfSoundInWater())
138  , bin_count(0)
139  , beam_count(0) {}
140 
141  Sonar(base::Time time, base::Time bin_duration, int bin_count, base::Angle beam_width, base::Angle beam_height)
142  : time(time)
143  , bin_duration(bin_duration)
144  , beam_width(beam_width)
145  , beam_height(beam_height)
146  , speed_of_sound(getSpeedOfSoundInWater())
147  , bin_count(bin_count)
148  , beam_count(0)
149  {
150  }
151 
152  Sonar(base::Time time, base::Time bin_duration, int bin_count, base::Angle beam_width, base::Angle beam_height,
153  int beam_count, bool per_beam_timestamps)
154  : time(time)
155  , bin_duration(bin_duration)
156  , beam_width(beam_width)
157  , beam_height(beam_height)
158  , speed_of_sound(getSpeedOfSoundInWater())
159  , bin_count(bin_count)
160  , beam_count(beam_count)
161  {
162  resize(bin_count, beam_count, per_beam_timestamps);
163  }
164 
165  void resize(int bin_count, int beam_count, bool per_beam_timestamps);
166 
169  static Sonar fromSingleBeam(base::Time time, base::Time bin_duration, base::Angle beam_width, base::Angle beam_height,
170  std::vector<float> const& bins, base::Angle bearing = base::Angle(),
171  float speed_of_sound = getSpeedOfSoundInWater());
172 
176  base::Time getBinRelativeStartTime(unsigned int bin_idx) const;
177 
180  base::Time getBeamAcquisitionStartTime(unsigned int beam) const;
181 
184  base::Time getBinTime(unsigned int bin, unsigned int beam) const;
185 
188  float getBinStartDistance(unsigned int bin) const;
189 
199  void setRegularBeamBearings(base::Angle start, base::Angle interval);
200 
207  void pushBeam(std::vector<float> const& bins);
208 
211  void pushBeam(std::vector<float> const& bins, base::Angle bearing);
212 
215  void pushBeam(base::Time const& beam_time, std::vector<float> const& beam_bins);
216 
217 
220  void pushBeam(base::Time const& beam_time, std::vector<float> const& beam_bins, base::Angle bearing);
221 
230  void pushBeamBins(std::vector<float> const& beam_bins);
231 
238  void setBeam(unsigned int beam, std::vector<float> const& bins);
239 
242  void setBeam(unsigned int beam, std::vector<float> const& bins, base::Angle bearing);
243 
246  void setBeam(unsigned int beam, base::Time const& beam_time, std::vector<float> const& beam_bins);
247 
250  void setBeam(unsigned int beam, base::Time const& beam_time, std::vector<float> const& beam_bins, base::Angle bearing);
251 
260  void setBeamBins(int beam, std::vector<float> const& beam_bins);
261 
267  base::Angle getBeamBearing(unsigned int beam) const;
268 
270  std::vector<float> getBeamBins(unsigned int beam) const;
271 
273  void getBeamBins(unsigned int beam, std::vector<float>& beam_bins) const;
274 
276  Sonar getBeam(unsigned int beam) const;
277 
280  void validate();
281 
283  explicit Sonar(SonarScan const& old, float gain = 1);
284 
285  explicit Sonar(SonarBeam const& old, float gain = 1);
286 
287  base::samples::SonarBeam toSonarBeam(float gain = 1);
288 
289  base::samples::SonarScan toSonarScan(float gain = 1);
291 };
292 
293 }} // namespaces
294 
295 #endif
Definition: SonarScan.hpp:14
Definition: Time.hpp:11
#define BASE_TYPES_DEPRECATED_SUPPRESS_STOP
Definition: Deprecated.hpp:22
Definition: LinearAngular6DCommand.hpp:8
#define BASE_TYPES_DEPRECATED_SUPPRESS_START
Definition: Deprecated.hpp:14
Definition: SonarBeam.hpp:10
Definition: Angle.hpp:19