ed_sensor_integration
clearer_plugin.cpp
Go to the documentation of this file.
1 #include "clearer_plugin.h"
2 
3 #include <ed/entity.h>
4 #include <ed/world_model.h>
5 #include <ed/update_request.h>
6 
7 #include <vector>
8 
9 // ----------------------------------------------------------------------------------------------------
10 
12 {
13 }
14 
15 // ----------------------------------------------------------------------------------------------------
16 
18 {
19 }
20 
21 // ----------------------------------------------------------------------------------------------------
22 
24 {
26  config.value("entity_timeout", entity_timeout_);
27 }
28 
29 // ----------------------------------------------------------------------------------------------------
30 
32 {
33  const ed::WorldModel& world = data.world;
34 
35  double current_time = ros::Time::now().toSec();
36 
37  for(ed::WorldModel::const_iterator it = world.begin(); it != world.end(); ++it)
38  {
39  const ed::EntityConstPtr& e = *it;
40 
41  // If the entity is locked, always keep it (don't delete it)
42  if (e->hasFlag("locked") || e->visual())
43  continue;
44 
45  const std::map<std::string, ed::MeasurementConvexHull>& chull_map = e->convexHullMap();
46 
47  if (chull_map.empty())
48  continue;
49 
50  std::vector<std::string> removed_sources;
51  for(std::map<std::string, ed::MeasurementConvexHull>::const_iterator it2 = chull_map.begin(); it2 != chull_map.end(); ++it2)
52  {
53  const ed::MeasurementConvexHull& m = it2->second;
54  if (m.timestamp + entity_timeout_ < current_time)
55  {
56  // too old! Remove this one
57  removed_sources.push_back(it2->first);
58  }
59  }
60 
61  if (removed_sources.size() == chull_map.size())
62  {
63  // All measurement convex hulls are old, so remove the entity!
64  req.removeEntity(e->id());
65  }
66  else
67  {
68  // Only remove the old measurements
69  for(std::vector<std::string>::const_iterator it_source = removed_sources.begin(); it_source != removed_sources.end(); ++it_source)
70  {
71  req.removeConvexHullNew(e->id(), *it_source);
72  }
73  }
74  }
75 }
76 
77 // ----------------------------------------------------------------------------------------------------
78 
ClearerPlugin::ClearerPlugin
ClearerPlugin()
Definition: clearer_plugin.cpp:11
ed::UpdateRequest
update_request.h
ED_REGISTER_PLUGIN
#define ED_REGISTER_PLUGIN(Derived)
vector
std::vector::size
T size(T... args)
ed::InitData
ed::InitData::config
tue::Configuration & config
ClearerPlugin::process
void process(const ed::PluginInput &data, ed::UpdateRequest &req)
Definition: clearer_plugin.cpp:31
ed::WorldModel::begin
const_iterator begin() const
ed::WorldModel::const_iterator
EntityIterator const_iterator
ed::EntityConstPtr
shared_ptr< const Entity > EntityConstPtr
ed::WorldModel::end
const_iterator end() const
std::vector::push_back
T push_back(T... args)
tue::config::ReaderWriter
ed::MeasurementConvexHull
clearer_plugin.h
ed::PluginInput
req
string req
std::map< std::string, ed::MeasurementConvexHull >
ed::MeasurementConvexHull::timestamp
double timestamp
ed::WorldModel
ClearerPlugin
Definition: clearer_plugin.h:9
tue::config::ReaderWriter::value
bool value(const std::string &name, T &value, RequiredOrOptional opt=REQUIRED)
world_model.h
std::map::begin
T begin(T... args)
ClearerPlugin::~ClearerPlugin
~ClearerPlugin()
Definition: clearer_plugin.cpp:17
ClearerPlugin::entity_timeout_
double entity_timeout_
Definition: clearer_plugin.h:24
std::map::empty
T empty(T... args)
std::map::end
T end(T... args)
entity.h
ed::Plugin::initialize
virtual void initialize()
config
tue::config::ReaderWriter config