From 3e4a8c292027256fcf5dbb147e5d898f5c4b92f6 Mon Sep 17 00:00:00 2001 From: Rainer Kartmann <rainer.kartmann@kit.edu> Date: Fri, 19 Feb 2021 18:45:17 +0100 Subject: [PATCH] Prepare decay thread --- .../ObjectPoseObserver/ObjectPoseObserver.cpp | 26 +++++++++++++++++++ .../ObjectPoseObserver/ObjectPoseObserver.h | 17 ++++++++++++ 2 files changed, 43 insertions(+) diff --git a/source/RobotAPI/components/ObjectPoseObserver/ObjectPoseObserver.cpp b/source/RobotAPI/components/ObjectPoseObserver/ObjectPoseObserver.cpp index 28fd1a789..069df7e68 100644 --- a/source/RobotAPI/components/ObjectPoseObserver/ObjectPoseObserver.cpp +++ b/source/RobotAPI/components/ObjectPoseObserver/ObjectPoseObserver.cpp @@ -31,6 +31,7 @@ #include <VirtualRobot/RobotConfig.h> #include <ArmarXCore/core/exceptions/local/UnexpectedEnumValueException.h> +#include <ArmarXCore/core/time/CycleUtil.h> #include <ArmarXCore/observers/variant/Variant.h> #include <RobotAPI/libraries/core/Pose.h> @@ -97,6 +98,11 @@ namespace armarx robotHead.debugObserver = debugObserver; robotHead.fetchDatafields(); + decay.updateTask = new SimpleRunningTask([this]() + { + this->decayUpdateRun(); + }); + createRemoteGuiTab(); RemoteGui_startRunningTask(); } @@ -740,6 +746,26 @@ namespace armarx } } + void ObjectPoseObserver::updateDecayRun() + { + CycleUtil cycle(static_cast<int>(1000 / decay.updateFrequencyHz)); + while (decay.updateTask && !decay.updateTask->isStopped()) + { + { + std::scoped_lock lock(dataMutex); + for (auto& [providerName, objectPoses] : data.objectPoses) + { + for (objpose::ObjectPose& pose : objectPoses) + { + // ToDo: update their confidence according to their + // timestamp and remove objects whose confidence is 0. + } + } + } + cycle.waitForCycleDuration(); + } + } + objpose::ObjectPose* ObjectPoseObserver::Data::findObjectPose(const std::string& providerName, ObjectID& objectID) { diff --git a/source/RobotAPI/components/ObjectPoseObserver/ObjectPoseObserver.h b/source/RobotAPI/components/ObjectPoseObserver/ObjectPoseObserver.h index 190b0828e..2db380bf1 100644 --- a/source/RobotAPI/components/ObjectPoseObserver/ObjectPoseObserver.h +++ b/source/RobotAPI/components/ObjectPoseObserver/ObjectPoseObserver.h @@ -27,6 +27,7 @@ #include <SimoxUtility/caching/CacheMap.h> #include <ArmarXCore/core/logging/Logging.h> +#include <ArmarXCore/core/services/tasks/TaskUtil.h> #include <ArmarXCore/observers/Observer.h> #include <ArmarXCore/observers/variant/DatafieldRef.h> @@ -149,6 +150,9 @@ namespace armarx void toIceWithAttachments(objpose::ObjectPoseSeq& objectPoses, VirtualRobot::RobotPtr agent, objpose::data::ObjectPoseSeq& result, bool& synchronized); + void updateDecayRun(); + + private: DebugObserverInterfacePrx debugObserver; @@ -181,6 +185,19 @@ namespace armarx Data data; + struct Decay + { + /// Time for an object pose to decay. + float durationSeconds = 20.0; + /// Frequency of updating the current decay. + float updateFrequencyHz = 10.0; + + SimpleRunningTask<>::pointer_type updateTask; + }; + Decay decay; + + + class RobotHeadMovement : public armarx::Logging { public: -- GitLab