Decay.cpp
Go to the documentation of this file.
1 #include "Decay.h"
2 
3 #include <SimoxUtility/math/scale_value.h>
4 
7 
9 {
10 
11  void
13  {
14  defs->optional(enabled,
15  prefix + "enabled",
16  "If true, object poses decay over time when not localized anymore.");
17  defs->optional(delaySeconds,
18  prefix + "delaySeconds",
19  "Duration after latest localization before decay starts.");
20  defs->optional(
21  durationSeconds, prefix + "durationSeconds", "How long to reach minimal confidence.");
22  defs->optional(maxConfidence, prefix + "maxConfidence", "Confidence when decay starts.");
23  defs->optional(minConfidence, prefix + "minConfidence", "Confidence after decay duration.");
24  defs->optional(removeObjectsBelowConfidence,
25  prefix + "removeObjectsBelowConfidence",
26  "Remove objects whose confidence is lower than this value.");
27  }
28 
29  void
31  {
32  if (pose.attachment or pose.isStatic)
33  {
34  pose.confidence = 1.0;
35  }
36  else
37  {
38  pose.confidence = calculateConfidence(pose.timestamp, now);
39  }
40  }
41 
42  void
44  {
45  for (objpose::ObjectPose& pose : objectPoses)
46  {
47  updateConfidence(pose, now);
48  }
49  }
50 
51  float
52  Decay::calculateConfidence(const DateTime& localization, const DateTime& now) const
53  {
54  const float duration = static_cast<float>((now - localization).toSecondsDouble());
55  if (duration < delaySeconds)
56  {
57  return maxConfidence;
58  }
59  else if (duration > delaySeconds + this->durationSeconds)
60  {
61  return minConfidence;
62  }
63  else
64  {
65  return simox::math::scale_value_from_to(duration,
70  }
71  }
72 
73  void
75  {
76  using namespace armarx::RemoteGui::Client;
77 
78  enabled.setValue(decay.enabled);
79  {
80  float max = 1e6;
83  delaySeconds.setSteps(int(10 * max)); // = 0.1 steps
85  }
86  {
87  float max = 1e6;
90  durationSeconds.setSteps(int(10 * max)); // = 0.1 steps
92  }
93  {
94  maxConfidence.setRange(0, 1);
97  }
98  {
99  minConfidence.setRange(0, 1);
100  minConfidence.setSteps(100);
102  }
103  {
107  }
108 
109  GridLayout grid;
110  int row = 0;
111  grid.add(Label("Enabled"), {row, 0}).add(enabled, {row, 1});
112  row++;
113  grid.add(Label("Delay [sec]"), {row, 0}).add(delaySeconds, {row, 1});
114  row++;
115  grid.add(Label("Duration [sec]"), {row, 0}).add(durationSeconds, {row, 1});
116  row++;
117  grid.add(Label("Max Confidence"), {row, 0}).add(maxConfidence, {row, 1});
118  row++;
119  grid.add(Label("Min Confidence"), {row, 0}).add(minConfidence, {row, 1});
120  row++;
121  grid.add(Label("Remove Objects with Confidence < "), {row, 0})
122  .add(removeObjectsBelowConfidence, {row, 1});
123  row++;
124 
125  group.setLabel("Decay");
126  group.addChild(grid);
127  }
128 
129  void
131  {
132  decay.enabled = enabled.getValue();
138  }
139 
140 } // namespace armarx::armem::server::obj::instance
armarx::armem::server::obj::instance::Decay::RemoteGui::maxConfidence
armarx::RemoteGui::Client::FloatSlider maxConfidence
Definition: Decay.h:52
armarx::armem::server::obj::instance::Decay::minConfidence
float minConfidence
Definition: Decay.h:40
armarx::RemoteGui::Client::FloatSpinBox::getValue
float getValue() const
Definition: Widgets.cpp:352
armarx::RemoteGui::Client::ContainerWidget::addChild
void addChild(Widget const &child)
Definition: Widgets.cpp:95
armarx::objpose::ObjectPoseSeq
std::vector< ObjectPose > ObjectPoseSeq
Definition: forward_declarations.h:20
armarx::armem::server::obj::instance::Decay::RemoteGui::update
void update(Decay &decay)
Definition: Decay.cpp:130
armarx::armem::server::obj::instance::Decay::updateConfidence
void updateConfidence(objpose::ObjectPose &pose, const DateTime &now) const
Definition: Decay.cpp:30
armarx::armem::server::obj::instance::Decay::updateConfidences
void updateConfidences(objpose::ObjectPoseSeq &objectPoses, const DateTime &now) const
Definition: Decay.cpp:43
armarx::armem::server::obj::instance::Decay
Models decay of object localizations by decreasing the confidence the longer the object was not local...
Definition: Decay.h:18
DateTime.h
armarx::RemoteGui::Client::GridLayout::add
GridLayout & add(Widget const &child, Pos pos, Span span=Span{1, 1})
Definition: Widgets.cpp:438
armarx::RemoteGui::Client::FloatSpinBox::setValue
void setValue(float newValue)
Definition: Widgets.cpp:358
armarx::max
std::vector< T > max(const std::vector< T > &v1, const std::vector< T > &v2)
Definition: VectorHelpers.h:297
armarx::RemoteGui::Client::FloatSpinBox::setRange
void setRange(float min, float max)
Definition: Widgets.cpp:330
armarx::RemoteGui::Client::FloatSlider::setValue
void setValue(float newValue)
Definition: Widgets.cpp:396
armarx::armem::server::obj::instance::Decay::removeObjectsBelowConfidence
float removeObjectsBelowConfidence
Definition: Decay.h:42
armarx::armem::server::obj::instance::Decay::RemoteGui::enabled
armarx::RemoteGui::Client::CheckBox enabled
Definition: Decay.h:48
armarx::armem::server::obj::instance
Definition: ArticulatedObjectVisu.cpp:16
armarx::armem::server::obj::instance::Decay::RemoteGui::minConfidence
armarx::RemoteGui::Client::FloatSlider minConfidence
Definition: Decay.h:53
armarx::RemoteGui::Client::CheckBox::getValue
bool getValue() const
Definition: Widgets.cpp:246
visionx::voxelgrid::Label
uint32_t Label
Type of an object label.
Definition: types.h:6
armarx::objpose::ObjectPose::isStatic
bool isStatic
Whether object is static. Static objects don't decay.
Definition: ObjectPose.h:63
armarx::RemoteGui::Client::GridLayout
Definition: Widgets.h:186
armarx::armem::server::obj::instance::Decay::delaySeconds
float delaySeconds
Duration after latest localization before decay starts.
Definition: Decay.h:35
armarx::armem::server::obj::instance::Decay::RemoteGui::delaySeconds
armarx::RemoteGui::Client::FloatSpinBox delaySeconds
Definition: Decay.h:50
armarx::RemoteGui::Client::FloatSlider::getValue
float getValue() const
Definition: Widgets.cpp:390
Decay.h
armarx::armem::server::obj::instance::Decay::enabled
bool enabled
Definition: Decay.h:32
armarx::armem::server::obj::instance::Decay::durationSeconds
float durationSeconds
How long to reach minConfidence.
Definition: Decay.h:37
armarx::RemoteGui::Client::FloatSpinBox::setDecimals
void setDecimals(int decimals)
Definition: Widgets.cpp:345
armarx::RemoteGui::Client::FloatSpinBox::setSteps
void setSteps(int steps)
Definition: Widgets.cpp:338
armarx::armem::server::obj::instance::Decay::RemoteGui::setup
void setup(const Decay &decay)
Definition: Decay.cpp:74
armarx::RemoteGui::Client::GroupBox::setLabel
void setLabel(std::string const &text)
Definition: Widgets.cpp:420
armarx::RemoteGui::Client::FloatSlider::setRange
void setRange(float min, float max)
Definition: Widgets.cpp:375
armarx::armem::server::obj::instance::Decay::maxConfidence
float maxConfidence
Definition: Decay.h:39
armarx::core::time::DateTime
Represents a point in time.
Definition: DateTime.h:24
armarx::armem::server::obj::instance::Decay::defineProperties
void defineProperties(armarx::PropertyDefinitionsPtr defs, const std::string &prefix="decay.")
Definition: Decay.cpp:12
armarx::armem::server::obj::instance::Decay::RemoteGui::durationSeconds
armarx::RemoteGui::Client::FloatSpinBox durationSeconds
Definition: Decay.h:51
TimeUtil.h
armarx::RemoteGui::Client::CheckBox::setValue
void setValue(bool newValue)
Definition: Widgets.cpp:252
IceUtil::Handle< class PropertyDefinitionContainer >
armarx::objpose::ObjectPose::attachment
std::optional< ObjectAttachmentInfo > attachment
Attachment information.
Definition: ObjectPose.h:93
armarx::armem::server::obj::instance::Decay::RemoteGui::group
armarx::RemoteGui::Client::GroupBox group
Definition: Decay.h:46
armarx::RemoteGui::Client
Definition: EigenWidgets.cpp:8
armarx::objpose::ObjectPose::confidence
float confidence
Confidence in [0, 1] (1 = full, 0 = none).
Definition: ObjectPose.h:96
armarx::objpose::ObjectPose
An object pose as stored by the ObjectPoseStorage.
Definition: ObjectPose.h:33
armarx::armem::server::obj::instance::Decay::RemoteGui::removeObjectsBelowConfidence
armarx::RemoteGui::Client::FloatSlider removeObjectsBelowConfidence
Definition: Decay.h:55
armarx::objpose::ObjectPose::timestamp
DateTime timestamp
Source timestamp.
Definition: ObjectPose.h:98
armarx::RemoteGui::Client::FloatSlider::setSteps
void setSteps(int steps)
Definition: Widgets.cpp:383