From 006d3411623d7a51542bfbd2266a40c2c38d67a2 Mon Sep 17 00:00:00 2001 From: Rainer Kartmann <rainer.kartmann@kit.edu> Date: Tue, 29 Jun 2021 15:41:00 +0200 Subject: [PATCH] Fix decay and its settings, stream confidences to debug observer --- .../server/ObjectMemory/ObjectMemory.cpp | 6 ++--- .../armem_objects/server/instance/Decay.cpp | 9 ++++--- .../server/instance/SegmentAdapter.cpp | 26 ++++++++++++++----- 3 files changed, 28 insertions(+), 13 deletions(-) diff --git a/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.cpp b/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.cpp index 0c5d82c8d..422419b78 100644 --- a/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.cpp +++ b/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.cpp @@ -130,7 +130,6 @@ namespace armarx::armem::server::obj { attachmentSegment.init(); }); - } void ObjectMemory::onConnectComponent() @@ -146,6 +145,9 @@ namespace armarx::armem::server::obj getProxyFromProperty(kinematicUnitObserver, "cmp.KinematicUnitObserverName", false, "", false); + // Create first to use the original values. + createRemoteGuiTab(); + instance::SegmentAdapter::connect( robotStateComponent, robot, @@ -169,9 +171,7 @@ namespace armarx::armem::server::obj ArVizComponentPluginUser::getArvizClient() ); - createRemoteGuiTab(); RemoteGui_startRunningTask(); - } void ObjectMemory::onDisconnectComponent() diff --git a/source/RobotAPI/libraries/armem_objects/server/instance/Decay.cpp b/source/RobotAPI/libraries/armem_objects/server/instance/Decay.cpp index f1c926413..2d3942250 100644 --- a/source/RobotAPI/libraries/armem_objects/server/instance/Decay.cpp +++ b/source/RobotAPI/libraries/armem_objects/server/instance/Decay.cpp @@ -47,7 +47,7 @@ namespace armarx::armem::server::obj::instance float Decay::calculateConfidence(IceUtil::Time localization, IceUtil::Time now) const { - float duration = (now - localization).toSeconds(); + const float duration = static_cast<float>((now - localization).toSecondsDouble()); if (duration < delaySeconds) { return maxConfidence; @@ -88,17 +88,17 @@ namespace armarx::armem::server::obj::instance } { maxConfidence.setRange(0, 1); - maxConfidence.setSteps(20); + maxConfidence.setSteps(100); maxConfidence.setValue(decay.maxConfidence); } { minConfidence.setRange(0, 1); - minConfidence.setSteps(20); + minConfidence.setSteps(100); minConfidence.setValue(decay.minConfidence); } { removeObjectsBelowConfidence.setRange(0, 1); - removeObjectsBelowConfidence.setSteps(20); + removeObjectsBelowConfidence.setSteps(100); removeObjectsBelowConfidence.setValue(decay.removeObjectsBelowConfidence); } @@ -128,6 +128,7 @@ namespace armarx::armem::server::obj::instance decay.durationSeconds = durationSeconds.getValue(); decay.maxConfidence = maxConfidence.getValue(); decay.minConfidence = minConfidence.getValue(); + decay.removeObjectsBelowConfidence = removeObjectsBelowConfidence.getValue(); } } diff --git a/source/RobotAPI/libraries/armem_objects/server/instance/SegmentAdapter.cpp b/source/RobotAPI/libraries/armem_objects/server/instance/SegmentAdapter.cpp index 46a7a4fba..02f93f7e2 100644 --- a/source/RobotAPI/libraries/armem_objects/server/instance/SegmentAdapter.cpp +++ b/source/RobotAPI/libraries/armem_objects/server/instance/SegmentAdapter.cpp @@ -406,6 +406,8 @@ namespace armarx::armem::server::obj::instance void SegmentAdapter::visualizeRun() { + ObjectFinder objectFinder; + CycleUtil cycle(static_cast<int>(1000 / visu.frequencyHz)); while (visu.updateTask && !visu.updateTask->isStopped()) { @@ -414,33 +416,45 @@ namespace armarx::armem::server::obj::instance if (visu.enabled) { - TIMING_START(Visu); + TIMING_START(tVisu); objpose::ObjectPoseSeq objectPoses; - ObjectFinder objectFinder; visu.minConfidence = -1; { std::scoped_lock lock(memoryMutex); const IceUtil::Time now = TimeUtil::GetTime(); + + // Also include decayed objects in result + // Store original setting. + const float minConf = segment.decay.removeObjectsBelowConfidence; + segment.decay.removeObjectsBelowConfidence = -1; + // Get result. objectPoses = segment.getObjectPoses(now); + // Restore original setting. + segment.decay.removeObjectsBelowConfidence = minConf; + objectFinder = segment.objectFinder; if (segment.decay.enabled) { visu.minConfidence = segment.decay.removeObjectsBelowConfidence; } } + const std::vector<viz::Layer> layers = visu.visualizeCommit(objectPoses, objectFinder); arviz.commit(layers); - TIMING_END_STREAM(Visu, ARMARX_VERBOSE); + TIMING_END_STREAM(tVisu, ARMARX_VERBOSE); if (debugObserver) { - debugObserver->setDebugChannel(getName(), + armarx::StringVariantBaseMap debugValues; + debugValues["t Visualize [ms]"] = new Variant(tVisu.toMilliSecondsDouble()); + for (const auto& [id, pose] : objectPoses) { - { "t Visualize [ms]", new Variant(Visu.toMilliSecondsDouble()) }, - }); + debugValues["confidence(" + id.str() + ")"] = new Variant(pose.confidence); + } + debugObserver->setDebugChannel(getName(), debugValues); } } } -- GitLab