ed
entity.h
Go to the documentation of this file.
1 #ifndef ED_ENTITY_H_
2 #define ED_ENTITY_H_
3 
4 #include "ed/types.h"
5 #include "ed/convex_hull_2d.h"
6 #include "ed/convex_hull.h"
7 #include "ed/uuid.h"
8 
9 #include <tue/config/data.h>
10 
11 #include <boost/circular_buffer.hpp>
12 #include <ros/time.h>
13 
14 #include "ed/property.h"
15 #include "ed/property_key.h"
16 
17 #include "ed/logging.h"
18 
20 
21 #include <map>
22 #include <set>
23 #include <vector>
24 
25 namespace ed
26 {
27 
28 // ----------------------------------------------------------------------------------------------------
29 
30 class Entity
31 {
32 
33 public:
34  Entity(const UUID& id = generateID(), const TYPE& type = "", const unsigned int& measurement_buffer_size = 5);
35  ~Entity();
36 
37  static UUID generateID();
38  inline const UUID& id() const { return id_; }
39 
40  inline const TYPE& type() const { return type_; }
41  inline void setType(const TYPE& type) { type_ = type; types_.insert(type); }
42 
43  inline const std::set<TYPE>& types() const { return types_; }
44  inline void addType(const TYPE& type) { types_.insert(type); }
45  inline void removeType(const TYPE& type) { types_.erase(type); }
46  inline bool hasType(const TYPE& type) const { return types_.find(type) != types_.end(); }
47 
48  void measurements(std::vector<MeasurementConstPtr>& measurements, double min_timestamp = 0) const;
49  void measurements(std::vector<MeasurementConstPtr>& measurements, unsigned int num) const;
51  inline unsigned int measurementSeq() const { return measurements_seq_; }
53 
54  void addMeasurement(MeasurementConstPtr measurement);
55 
56  [[deprecated("Use visual() or collision() instead.")]]
57  inline geo::ShapeConstPtr shape() const { return visual(); }
58  inline geo::ShapeConstPtr visual() const { return visual_; }
59  inline geo::ShapeConstPtr collision() const { return collision_; }
60  [[deprecated("Use setVisual() or setCollision() instead.")]]
61  inline void setShape(const geo::ShapeConstPtr& shape) { setVisual(shape); }
62  void setVisual(const geo::ShapeConstPtr& visual);
64 
66  inline void addVolume(const std::string& volume_name, const geo::ShapeConstPtr& volume_shape) { volumes_[volume_name] = volume_shape; ++volumes_revision_; }
67  inline void removeVolume(const std::string& volume_name) { volumes_.erase(volume_name); ++volumes_revision_; }
68 
69  [[deprecated("Use visualRevision(), collisionRevision() or volumesRevision() instead.")]]
70  inline unsigned long shapeRevision() const{ return visualRevision(); }
71  inline unsigned long visualRevision() const{ return visual_ ? visual_revision_ : 0; }
72  inline unsigned long collisionRevision() const{ return collision_ ? collision_revision_ : 0; }
73  inline unsigned long volumesRevision() const{ return !volumes_.empty() ? volumes_revision_ : 0; }
74 
75  inline const ConvexHull& convexHull() const { return convex_hull_new_; }
76 
77  void setConvexHull(const ConvexHull& convex_hull, const geo::Pose3D& pose, double time, const std::string& source = "")
78  {
79  if (convex_hull.points.empty())
80  {
81  // This signals that the measurement convex hull must be removed
82  convex_hull_map_.erase(source);
83  }
84  else
85  {
87  m.convex_hull = convex_hull;
88  m.pose = pose;
89  m.timestamp = time;
90  }
91 
93  }
94 
96 
97  inline const geo::Pose3D& pose() const
98  {
99  if (!has_pose_)
100  log::warning() << "Someone's accessing an entity's pose while it doesnt have one." << std::endl;
101  return pose_;
102  }
103 
104  inline void setPose(const geo::Pose3D& pose)
105  {
106  pose_ = pose;
107  if (visual_)
109 
110  has_pose_ = true;
111  }
112 
113  inline void removePose() { has_pose_ = false; }
114 
115  inline bool has_pose() const { return has_pose_; }
116 
117  inline const tue::config::DataConstPointer& data() const { return config_; }
119 
120 // inline double creationTime() const { return creation_time_; }
121 
122  inline void setRelationTo(Idx child_idx, Idx r_idx) { relations_to_[child_idx] = r_idx; }
123 
124  inline void setRelationFrom(Idx parent_idx, Idx r_idx) { relations_from_[parent_idx] = r_idx; }
125 
126  inline Idx relationTo(Idx child_idx) const
127  {
129  if (it == relations_to_.end())
130  return INVALID_IDX;
131  return it->second;
132  }
133 
134  inline Idx relationFrom(Idx parent_idx) const
135  {
137  if (it == relations_from_.end())
138  return INVALID_IDX;
139  return it->second;
140  }
141 
142  inline const std::map<Idx, Idx>& relationsFrom() const { return relations_from_; }
143 
144  inline const std::map<Idx, Idx>& relationsTo() const { return relations_to_; }
145 
146  template<typename T>
147  const T* property(const PropertyKey<T>& key) const
148  {
150  if (it == properties_.end())
151  return 0;
152 
153  const Property& p = it->second;
154 
155  try
156  {
157  return &p.value.getValue<T>();
158  }
159  catch (std::bad_cast& e)
160  {
161  return 0;
162  }
163  }
164 
165 // template<typename T>
166 // void setProperty(const PropertyKey<T>& key, const T& t)
167 // {
168 // if (!key.valid())
169 // return;
170 
171 // std::map<Idx, Property>::iterator it = properties_.find(key.idx);
172 // if (it == properties_.end())
173 // {
174 // Property& p = properties_[key.idx];
175 // p.entry = key.entry;
176 // p.revision = 0;
177 // p.value.setValue(t);
178 // }
179 // else
180 // {
181 // Property& p = it->second;
182 // p.value.setValue(t);
183 // ++(p.revision);
184 // }
185 // }
186 
187  void setProperty(Idx idx, const Property& p)
188  {
190  if (it == properties_.end())
191  {
192  Property& p_new = properties_[idx];
193  p_new.entry = p.entry;
194  p_new.revision = p.revision;
195  p_new.value = p.value;
196  }
197  else
198  {
199  Property& p_new = it->second;
200  p_new.value = p.value;
201  p_new.revision = p.revision;
202  }
203 
204  if (revision_ < p.revision)
205  revision_ = p.revision;
206  }
207 
208  const std::map<Idx, Property>& properties() const { return properties_; }
209 
210  inline unsigned long revision() const { return revision_; }
211 
212  inline void setRevision(unsigned long revision) { revision_ = revision; }
213 
214  inline void setExistenceProbability(double prob) { existence_prob_ = prob; }
215 
216  inline double existenceProbability() const { return existence_prob_; }
217 
218  inline void setLastUpdateTimestamp(double t) { last_update_timestamp_ = t; }
219 
220  inline double lastUpdateTimestamp() const { return last_update_timestamp_; }
221 
222  inline void setFlag(const std::string& flag) { flags_.insert(flag); }
223 
224  inline void removeFlag(const std::string& flag) { flags_.erase(flag); }
225 
226  inline bool hasFlag(const std::string& flag) const { return flags_.find(flag) != flags_.end(); }
227 
228  inline const std::set<std::string>& flags() const { return flags_; }
229 
230 private:
231 
233 
234  unsigned long revision_;
235 
237 
239 
241 
243 
244  boost::circular_buffer<MeasurementConstPtr> measurements_;
246  unsigned int measurements_seq_;
247 
251  unsigned long visual_revision_;
252  unsigned long collision_revision_;
253  unsigned long volumes_revision_;
254 
257 
258  bool has_pose_;
260 
261 // double creation_time_;
262 
264 
267 
268  // Generic property map
270 
271  void updateConvexHull();
272 
274 
276 
277 };
278 
279 }
280 
281 #endif
ed::Entity::types_
std::set< TYPE > types_
Definition: entity.h:238
ed::Entity::addType
void addType(const TYPE &type)
Definition: entity.h:44
ed::Entity::has_pose
bool has_pose() const
Definition: entity.h:115
ed::Entity::removePose
void removePose()
Definition: entity.h:113
convex_hull.h
ed::PropertyKey::idx
Idx idx
Definition: property_key.h:15
convex_hull_2d.h
std::string
std::shared_ptr
ed::Entity::setExistenceProbability
void setExistenceProbability(double prob)
Definition: entity.h:214
ed::Entity::setCollision
void setCollision(const geo::ShapeConstPtr &collision)
Definition: entity.cpp:132
ed::Entity::lastUpdateTimestamp
double lastUpdateTimestamp() const
Definition: entity.h:220
ed::ConvexHull
Definition: convex_hull.h:11
types.h
ed::Entity::relationTo
Idx relationTo(Idx child_idx) const
Definition: entity.h:126
t
Timer t
ed::Entity::removeType
void removeType(const TYPE &type)
Definition: entity.h:45
ed::Entity::setConvexHull
void setConvexHull(const ConvexHull &convex_hull, const geo::Pose3D &pose, double time, const std::string &source="")
Definition: entity.h:77
measurement_convex_hull.h
vector
std::map::find
T find(T... args)
property.h
ed::Entity::hasFlag
bool hasFlag(const std::string &flag) const
Definition: entity.h:226
ed::Entity::property
const T * property(const PropertyKey< T > &key) const
Definition: entity.h:147
ed::Entity::volumes_revision_
unsigned long volumes_revision_
Definition: entity.h:253
ed::Entity::properties_
std::map< Idx, Property > properties_
Definition: entity.h:269
ed::Entity::setLastUpdateTimestamp
void setLastUpdateTimestamp(double t)
Definition: entity.h:218
ed::Entity::convexHull
const ConvexHull & convexHull() const
Definition: entity.h:75
ed::Property::entry
const PropertyKeyDBEntry * entry
Definition: property.h:17
geo::Transform3T
ed::Entity::shapeRevision
unsigned long shapeRevision() const
Definition: entity.h:70
ed::Entity::relationsFrom
const std::map< Idx, Idx > & relationsFrom() const
Definition: entity.h:142
ed::Entity::setShape
void setShape(const geo::ShapeConstPtr &shape)
Definition: entity.h:61
ed::Entity::pose_
geo::Pose3D pose_
Definition: entity.h:259
data.h
ed::Entity::measurements_seq_
unsigned int measurements_seq_
Definition: entity.h:246
ed::Entity::relations_from_
std::map< Idx, Idx > relations_from_
Definition: entity.h:265
ed::Entity::measurementSeq
unsigned int measurementSeq() const
Definition: entity.h:51
ed::Entity::data
const tue::config::DataConstPointer & data() const
Definition: entity.h:117
std::bad_cast
ed::Entity::volumesRevision
unsigned long volumesRevision() const
Definition: entity.h:73
ed::Entity::updateConvexHull
void updateConvexHull()
Definition: entity.cpp:43
ed::Entity::flags
const std::set< std::string > & flags() const
Definition: entity.h:228
ed::Entity::shape
geo::ShapeConstPtr shape() const
Definition: entity.h:57
ed::MeasurementConvexHull::convex_hull
ConvexHull convex_hull
Definition: measurement_convex_hull.h:12
ed::Property::value
Variant value
Definition: property.h:16
ed::Entity::type
const TYPE & type() const
Definition: entity.h:40
ed::Entity::setFlag
void setFlag(const std::string &flag)
Definition: entity.h:222
ed::Entity::setType
void setType(const TYPE &type)
Definition: entity.h:41
ed::Entity::id_
UUID id_
Definition: entity.h:232
ed::Entity::removeFlag
void removeFlag(const std::string &flag)
Definition: entity.h:224
ed::Entity::relations_to_
std::map< Idx, Idx > relations_to_
Definition: entity.h:266
ed::Entity::convex_hull_map_
std::map< std::string, MeasurementConvexHull > convex_hull_map_
Definition: entity.h:255
ed::Entity::last_update_timestamp_
double last_update_timestamp_
Definition: entity.h:242
ed::Entity::collisionRevision
unsigned long collisionRevision() const
Definition: entity.h:72
ed::Entity
Definition: entity.h:30
ed::Entity::collision_
geo::ShapeConstPtr collision_
Definition: entity.h:249
ed::log::warning
std::ostream & warning()
Definition: logging.cpp:52
ed::Entity::type_
TYPE type_
Definition: entity.h:236
ed::MeasurementConvexHull
Definition: measurement_convex_hull.h:10
std::set::erase
T erase(T... args)
ed::INVALID_IDX
static const Idx INVALID_IDX
Definition: types.h:22
ed::UUID
Definition: uuid.h:10
ed::Entity::pose
const geo::Pose3D & pose() const
Definition: entity.h:97
ed::Entity::hasType
bool hasType(const TYPE &type) const
Definition: entity.h:46
ed::Entity::setRelationTo
void setRelationTo(Idx child_idx, Idx r_idx)
Definition: entity.h:122
uuid.h
map
ed::Entity::measurements
void measurements(std::vector< MeasurementConstPtr > &measurements, double min_timestamp=0) const
Definition: entity.cpp:165
ed::Entity::measurements_
boost::circular_buffer< MeasurementConstPtr > measurements_
Definition: entity.h:244
ed::MeasurementConvexHull::timestamp
double timestamp
Definition: measurement_convex_hull.h:14
ed::Entity::convexHullMap
const std::map< std::string, MeasurementConvexHull > & convexHullMap() const
Definition: entity.h:95
ed::Entity::setRelationFrom
void setRelationFrom(Idx parent_idx, Idx r_idx)
Definition: entity.h:124
ed::Entity::relationsTo
const std::map< Idx, Idx > & relationsTo() const
Definition: entity.h:144
ed::MeasurementConstPtr
shared_ptr< const Measurement > MeasurementConstPtr
Definition: types.h:33
ed::Entity::visual_
geo::ShapeConstPtr visual_
Definition: entity.h:248
ed::Entity::generateID
static UUID generateID()
Definition: entity.cpp:198
ed::Entity::addVolume
void addVolume(const std::string &volume_name, const geo::ShapeConstPtr &volume_shape)
Definition: entity.h:66
ed::Entity::revision
unsigned long revision() const
Definition: entity.h:210
ed::Entity::~Entity
~Entity()
Definition: entity.cpp:36
ed::Entity::existenceProbability
double existenceProbability() const
Definition: entity.h:216
std::endl
T endl(T... args)
ed::Entity::addMeasurement
void addMeasurement(MeasurementConstPtr measurement)
Definition: entity.cpp:144
ed::Entity::has_pose_
bool has_pose_
Definition: entity.h:258
ed::Entity::setRevision
void setRevision(unsigned long revision)
Definition: entity.h:212
ed::Entity::bestMeasurement
MeasurementConstPtr bestMeasurement() const
Definition: entity.h:52
property_key.h
ed::Entity::revision_
unsigned long revision_
Definition: entity.h:234
std::set::insert
T insert(T... args)
ed::Entity::visual_revision_
unsigned long visual_revision_
Definition: entity.h:251
ed::MeasurementConvexHull::pose
geo::Pose3D pose
Definition: measurement_convex_hull.h:13
ed::Entity::types
const std::set< TYPE > & types() const
Definition: entity.h:43
ed::Entity::setData
void setData(const tue::config::DataConstPointer &data)
Definition: entity.h:118
ed::Entity::removeVolume
void removeVolume(const std::string &volume_name)
Definition: entity.h:67
ed::Entity::properties
const std::map< Idx, Property > & properties() const
Definition: entity.h:208
logging.h
ed::Entity::volumes_
std::map< std::string, geo::ShapeConstPtr > volumes_
Definition: entity.h:250
tue::config::DataConstPointer
ed::Variant::getValue
TypeWrapper< T >::REFTYPE getValue()
Definition: variant.h:61
ed::Entity::convex_hull_new_
ConvexHull convex_hull_new_
Definition: entity.h:256
ed::Entity::updateConvexHullFromVisual
void updateConvexHullFromVisual()
Definition: entity.cpp:88
ed::Entity::Entity
Entity(const UUID &id=generateID(), const TYPE &type="", const unsigned int &measurement_buffer_size=5)
Definition: entity.cpp:17
ed
Definition: convex_hull.h:8
ed::Entity::existence_prob_
double existence_prob_
Definition: entity.h:240
ed::Entity::collision
geo::ShapeConstPtr collision() const
Definition: entity.h:59
ed::Entity::flags_
std::set< std::string > flags_
Definition: entity.h:275
std::map::end
T end(T... args)
ed::PropertyKey
Definition: property_key.h:12
ed::Entity::id
const UUID & id() const
Definition: entity.h:38
ed::Entity::best_measurement_
MeasurementConstPtr best_measurement_
Definition: entity.h:245
ed::Entity::config_
tue::config::DataConstPointer config_
Definition: entity.h:263
ed::Entity::volumes
const std::map< std::string, geo::ShapeConstPtr > & volumes() const
Definition: entity.h:65
ed::Property::revision
unsigned long revision
Definition: property.h:18
ed::Entity::setVisual
void setVisual(const geo::ShapeConstPtr &visual)
Definition: entity.cpp:119
ed::Entity::visual
geo::ShapeConstPtr visual() const
Definition: entity.h:58
set
ed::Entity::lastMeasurement
MeasurementConstPtr lastMeasurement() const
Definition: entity.cpp:188
ed::Idx
uint64_t Idx
Definition: types.h:21
ed::Entity::collision_revision_
unsigned long collision_revision_
Definition: entity.h:252
ed::Entity::visualRevision
unsigned long visualRevision() const
Definition: entity.h:71
ed::Entity::setProperty
void setProperty(Idx idx, const Property &p)
Definition: entity.h:187
ed::Entity::relationFrom
Idx relationFrom(Idx parent_idx) const
Definition: entity.h:134
ed::Property
Definition: property.h:12
ed::Entity::setPose
void setPose(const geo::Pose3D &pose)
Definition: entity.h:104
ed::ConvexHull::points
std::vector< geo::Vec2f > points
Definition: convex_hull.h:13