Sensor.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2006-2011, SRI International (R)
3  *
4  * This program is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU Lesser General Public License as published by
6  * the Free Software Foundation, either version 3 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public License
15  * along with this program. If not, see <http://www.gnu.org/licenses/>.
16  */
17 
18 #pragma once
19 
20 #ifndef __OpenKarto_Sensor_h__
21 #define __OpenKarto_Sensor_h__
22 
23 #include <OpenKarto/List.h>
24 #include <OpenKarto/Object.h>
25 
26 namespace karto
27 {
28 
30 
31 
36 
40 
41  class SensorData;
42 
46  class KARTO_EXPORT Sensor : public Object
47  {
48  KARTO_RTTI();
49 
50  protected:
55  Sensor(const Identifier& rName);
56 
57  //@cond EXCLUDE
61  virtual ~Sensor();
62  //@endcond
63 
64  public:
69  inline const Pose2& GetOffsetPose() const
70  {
71  return m_pOffsetPose->GetValue();
72  }
73 
78  inline void SetOffsetPose(const Pose2& rPose)
79  {
80  m_pOffsetPose->SetValue(rPose);
81  }
82 
86  virtual void Validate() = 0;
87 
92  virtual void Validate(SensorData* pSensorData) = 0;
93 
94  private:
95  // restrict the following functions
96  Sensor(const Sensor&);
97  const Sensor& operator=(const Sensor&);
98 
99  private:
104  }; // Sensor
105 
110 
115 
120 
124 
131  class Drive : public Sensor
132  {
133  KARTO_RTTI();
134 
135  public:
140  Drive(const Identifier& rName)
141  : Sensor(rName)
142  {
143  }
144 
145  protected:
146  //@cond EXCLUDE
150  virtual ~Drive()
151  {
152  }
153  //@endcond
154 
155  public:
156  virtual void Validate()
157  {
158  }
159 
163  virtual void Validate(SensorData* pSensorData)
164  {
165  if (pSensorData == NULL)
166  {
167  throw Exception("SensorData == NULL");
168  }
169  }
170 
171  private:
172  // restrict the following functions
173  Drive(const Drive&);
174  const Drive& operator=(const Drive&);
175  }; // class Drive
176 
180  KARTO_TYPE(Drive);
181 
185 
193  typedef enum
194  {
196 
200 
204 
209 
214 
218 
219  class LocalizedLaserScan;
220  class CoordinateConverter;
221  class LaserRangeFinder;
222 
248  {
249  KARTO_RTTI();
250 
251  protected:
252  //@cond EXCLUDE
256  virtual ~LaserRangeFinder();
257  //@endcond
258 
259  public:
264  inline kt_double GetMinimumRange() const
265  {
266  return m_pMinimumRange->GetValue();
267  }
268 
273  inline void SetMinimumRange(kt_double minimumRange)
274  {
275  m_pMinimumRange->SetValue(minimumRange);
276 
277  SetRangeThreshold(GetRangeThreshold());
278  }
279 
284  inline kt_double GetMaximumRange() const
285  {
286  return m_pMaximumRange->GetValue();
287  }
288 
293  inline void SetMaximumRange(kt_double maximumRange)
294  {
295  m_pMaximumRange->SetValue(maximumRange);
296 
297  SetRangeThreshold(GetRangeThreshold());
298  }
299 
305  {
306  return m_pRangeThreshold->GetValue();
307  }
308 
313  void SetRangeThreshold(kt_double rangeThreshold);
314 
319  inline kt_double GetMinimumAngle() const
320  {
321  return m_pMinimumAngle->GetValue();
322  }
323 
328  inline void SetMinimumAngle(kt_double minimumAngle)
329  {
330  m_pMinimumAngle->SetValue(minimumAngle);
331 
332  Update();
333  }
334 
339  inline kt_double GetMaximumAngle() const
340  {
341  return m_pMaximumAngle->GetValue();
342  }
343 
348  inline void SetMaximumAngle(kt_double maximumAngle)
349  {
350  m_pMaximumAngle->SetValue(maximumAngle);
351 
352  Update();
353  }
354 
360  {
361  return m_pAngularResolution->GetValue();
362  }
363 
368  void SetAngularResolution(kt_double angularResolution);
369 
375  {
376  return m_pType->GetValue();
377  }
378 
384  {
385  return m_NumberOfRangeReadings;
386  }
387 
391  virtual void Validate();
392 
397  virtual void Validate(SensorData* pSensorData);
398 
407  const Vector2dList GetPointReadings(LocalizedLaserScan* pLocalizedLaserScan, CoordinateConverter* pCoordinateConverter, kt_bool ignoreThresholdPoints = true, kt_bool flipY = false) const;
408 
409  public:
416  static LaserRangeFinder* CreateLaserRangeFinder(LaserRangeFinderType type, const Identifier& rName);
417 
418  private:
423  LaserRangeFinder(const Identifier& rName);
424 
428  void Update()
429  {
430  m_NumberOfRangeReadings = static_cast<kt_int32u>(math::Round((GetMaximumAngle() - GetMinimumAngle()) / GetAngularResolution()) + 1);
431  }
432 
433  private:
435  const LaserRangeFinder& operator=(const LaserRangeFinder&);
436 
437  private:
438  // sensor m_Parameters
441 
443 
446 
448 
450 
452  }; // LaserRangeFinder
453 
458 
463 
465 
466 }
467 
468 #endif // __OpenKarto_Sensor_h__
karto::math::Round
kt_double Round(kt_double value)
Definition: Math.h:114
karto::LaserRangeFinder::GetMinimumRange
kt_double GetMinimumRange() const
Definition: Sensor.h:264
karto::LaserRangeFinder::m_pMaximumRange
Parameter< kt_double > * m_pMaximumRange
Definition: Sensor.h:445
karto::LaserRangeFinder::Update
void Update()
Definition: Sensor.h:428
kt_double
double kt_double
Definition: Types.h:160
karto::LaserRangeFinder
Definition: Sensor.h:247
karto::Sensor::Validate
virtual void Validate()=0
karto::Drive::KARTO_RTTI
KARTO_RTTI()
karto::Drive::operator=
const Drive & operator=(const Drive &)
karto::Drive::Validate
virtual void Validate(SensorData *pSensorData)
Definition: Sensor.h:163
karto::LaserRangeFinder::m_NumberOfRangeReadings
kt_int32u m_NumberOfRangeReadings
Definition: Sensor.h:451
karto::Drive::Drive
Drive(const Identifier &rName)
Definition: Sensor.h:140
karto::KARTO_TYPE
KARTO_TYPE(Grid< kt_int8u >)
karto::LaserRangeFinder::GetRangeThreshold
kt_double GetRangeThreshold() const
Definition: Sensor.h:304
karto::LaserRangeFinder::GetMaximumAngle
kt_double GetMaximumAngle() const
Definition: Sensor.h:339
karto::LaserRangeFinder_Hokuyo_URG_04LX
@ LaserRangeFinder_Hokuyo_URG_04LX
Definition: Sensor.h:202
karto::LaserRangeFinder_Sick_LMS200
@ LaserRangeFinder_Sick_LMS200
Definition: Sensor.h:198
karto::SensorData
Definition: SensorData.h:64
karto::KARTO_AUTO_TYPE
KARTO_AUTO_TYPE(LaserRangeFinderType, &RegisterLaserRangeFinderType)
karto::SensorPtr
SmartPointer< Sensor > SensorPtr
Definition: Sensor.h:114
karto::LaserRangeFinder::m_pType
ParameterEnum * m_pType
Definition: Sensor.h:449
karto::Sensor::m_pOffsetPose
Parameter< Pose2 > * m_pOffsetPose
Definition: Sensor.h:103
karto::LaserRangeFinder_Sick_LMS100
@ LaserRangeFinder_Sick_LMS100
Definition: Sensor.h:197
karto::LaserRangeFinder::m_pMaximumAngle
Parameter< kt_double > * m_pMaximumAngle
Definition: Sensor.h:440
karto::RegisterLaserRangeFinderType
KARTO_EXPORT void RegisterLaserRangeFinderType()
Definition: Sensor.cpp:34
karto::LaserRangeFinder::SetMinimumRange
void SetMinimumRange(kt_double minimumRange)
Definition: Sensor.h:273
karto::Sensor::SetOffsetPose
void SetOffsetPose(const Pose2 &rPose)
Definition: Sensor.h:78
karto::LaserRangeFinder::GetType
kt_int64s GetType()
Definition: Sensor.h:374
karto::LaserRangeFinder::GetMinimumAngle
kt_double GetMinimumAngle() const
Definition: Sensor.h:319
karto::LaserRangeFinder_Sick_LMS291
@ LaserRangeFinder_Sick_LMS291
Definition: Sensor.h:199
KARTO_EXPORT
#define KARTO_EXPORT
Definition: Macros.h:78
karto::SensorList
List< SensorPtr > SensorList
Definition: Sensor.h:119
karto::Parameter
Definition: Parameter.h:436
karto::CoordinateConverter
Definition: CoordinateConverter.h:40
karto::Sensor::GetOffsetPose
const Pose2 & GetOffsetPose() const
Definition: Sensor.h:69
karto::List< Vector2d >
karto::LaserRangeFinder::SetMaximumRange
void SetMaximumRange(kt_double maximumRange)
Definition: Sensor.h:293
karto::LaserRangeFinder::m_pMinimumRange
Parameter< kt_double > * m_pMinimumRange
Definition: Sensor.h:444
karto::LocalizedLaserScan
Definition: SensorData.h:567
kt_int64s
signed long long kt_int64s
Definition: Types.h:127
karto::LaserRangeFinder_Hokuyo_UTM_30LX
@ LaserRangeFinder_Hokuyo_UTM_30LX
Definition: Sensor.h:201
kt_bool
bool kt_bool
Definition: Types.h:145
Object.h
karto::LaserRangeFinder::m_pMinimumAngle
Parameter< kt_double > * m_pMinimumAngle
Definition: Sensor.h:439
karto::LaserRangeFinder::GetMaximumRange
kt_double GetMaximumRange() const
Definition: Sensor.h:284
karto::ParameterEnum
Definition: Parameter.h:748
karto::LaserRangeFinder::GetNumberOfRangeReadings
kt_int32u GetNumberOfRangeReadings() const
Definition: Sensor.h:383
karto::LaserRangeFinderPtr
SmartPointer< LaserRangeFinder > LaserRangeFinderPtr
Definition: Sensor.h:462
KARTO_RTTI
#define KARTO_RTTI()
Definition: Meta.h:198
karto::Exception
Definition: Exception.h:38
karto::Identifier
Definition: Identifier.h:40
karto::LaserRangeFinder::SetMaximumAngle
void SetMaximumAngle(kt_double maximumAngle)
Definition: Sensor.h:348
kt_int32u
uint32_t kt_int32u
Definition: Types.h:111
karto::LaserRangeFinder::m_pAngularResolution
Parameter< kt_double > * m_pAngularResolution
Definition: Sensor.h:442
karto::SmartPointer
Definition: SmartPointer.h:39
karto::LaserRangeFinder::GetAngularResolution
kt_double GetAngularResolution() const
Definition: Sensor.h:359
karto::LaserRangeFinder_Custom
@ LaserRangeFinder_Custom
Definition: Sensor.h:195
karto::LaserRangeFinder::m_pRangeThreshold
Parameter< kt_double > * m_pRangeThreshold
Definition: Sensor.h:447
karto::Pose2
Definition: Geometry.h:2182
karto::Object
Definition: Object.h:54
karto::LaserRangeFinderType
LaserRangeFinderType
Definition: Sensor.h:193
karto::Drive
Definition: Sensor.h:131
karto::Sensor
Definition: Sensor.h:46
karto::Vector2dList
List< Vector2d > Vector2dList
Definition: Sensor.h:35
karto::LaserRangeFinder::SetMinimumAngle
void SetMinimumAngle(kt_double minimumAngle)
Definition: Sensor.h:328
List.h
karto
Definition: Any.cpp:20


nav2d_karto
Author(s): Sebastian Kasperski
autogenerated on Wed Mar 2 2022 00:37:22