From ca7ac9fd69f8672d905d9a3ef5f2039b44450504 Mon Sep 17 00:00:00 2001 From: Peter Albrecht <usnlf@student.kit.edu> Date: Wed, 12 Feb 2025 15:11:54 +0100 Subject: [PATCH] feat: parameter history --- .../skills_gui/memory/SkillManagerWrapper.cpp | 39 ++++++++++++++++++- .../skills_gui/memory/SkillManagerWrapper.h | 15 +++++++ 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/source/RobotAPI/libraries/skills_gui/memory/SkillManagerWrapper.cpp b/source/RobotAPI/libraries/skills_gui/memory/SkillManagerWrapper.cpp index a241634e3..dc26d0dcd 100644 --- a/source/RobotAPI/libraries/skills_gui/memory/SkillManagerWrapper.cpp +++ b/source/RobotAPI/libraries/skills_gui/memory/SkillManagerWrapper.cpp @@ -1,6 +1,7 @@ #include "SkillManagerWrapper.h" #include <mutex> +#include <optional> #include <SimoxUtility/algorithm/string/string_tools.h> @@ -241,6 +242,39 @@ namespace armarx::skills::gui // notify registered widgets of update emit updateAvailable(filterUpdate(snapshot)); } + + std::vector<Parameters> SkillManagerWrapper::getParameterHistoryForSkill(const skills::SkillID& sid) const + { + if (not this->skillParameterHistory.contains(sid)) + { + return {}; + } + return this->skillParameterHistory[sid]; + } + + void SkillManagerWrapper::addParametersToHistory(const skills::SkillID& sid, const Parameters& params) + { + if (not this->skillParameterHistory.contains(sid)) + { + // no history exists for this skill. Assign new + this->skillParameterHistory.insert({sid, {params}}); + } + else + { + // history already exists. Append to list + this->skillParameterHistory[sid].emplace_back(params); + } + } + + std::optional<Parameters> SkillManagerWrapper::getLatestParametersForSkill(const skills::SkillID& sid) const + { + auto parameterList = getParameterHistoryForSkill(sid); + if (parameterList.empty()) + { + return std::nullopt; + } + return parameterList.back(); + } const std::optional<ProviderID> SkillManagerWrapper::findFirstProvider(SkillMap const& map, SkillID const& skillId) @@ -391,8 +425,11 @@ namespace armarx::skills::gui .parameters = params}; ARMARX_CHECK(skillId.isFullySpecified()); // sanity check - ARMARX_IMPORTANT << "Executing skill from GUI: " << skillId << "."; + this->addParametersToHistory(skillId, params); + ARMARX_INFO << "Saved skill parameters to history..."; + ARMARX_IMPORTANT << "Executing skill from GUI: " << skillId << "."; + try { std::scoped_lock l(mutex_memory); diff --git a/source/RobotAPI/libraries/skills_gui/memory/SkillManagerWrapper.h b/source/RobotAPI/libraries/skills_gui/memory/SkillManagerWrapper.h index ec25489db..017739a45 100644 --- a/source/RobotAPI/libraries/skills_gui/memory/SkillManagerWrapper.h +++ b/source/RobotAPI/libraries/skills_gui/memory/SkillManagerWrapper.h @@ -1,12 +1,14 @@ #pragma once #include <mutex> +#include <vector> #include <QObject> #include "RobotAPI/libraries/skills/core/ProviderID.h" #include "RobotAPI/libraries/skills/core/SkillDescription.h" #include "RobotAPI/libraries/skills/core/SkillExecutionID.h" +#include "RobotAPI/libraries/skills/core/SkillID.h" #include "RobotAPI/libraries/skills/core/SkillStatusUpdate.h" #include <RobotAPI/interface/skills/SkillManagerInterface.h> @@ -16,6 +18,10 @@ namespace armarx::skills::gui using SkillMap = std::map<skills::ProviderID, std::map<skills::SkillID, skills::SkillDescription>>; + using Parameters = aron::data::DictPtr; + using SkillParameterMap = + std::map<skills::SkillID, std::vector<Parameters>>; + class SkillManagerWrapper : public QObject { Q_OBJECT @@ -112,6 +118,12 @@ namespace armarx::skills::gui */ void updateFromMemory(); + // == Skill Parameters State == + + std::vector<Parameters> getParameterHistoryForSkill(const skills::SkillID& sid) const; + void addParametersToHistory(const skills::SkillID& sid, const Parameters& params); + std::optional<Parameters> getLatestParametersForSkill(const skills::SkillID& sid) const; + private: mutable std::mutex mutex_memory; mutable std::mutex mutex_snapshot; @@ -119,6 +131,9 @@ namespace armarx::skills::gui armarx::skills::manager::dti::SkillManagerInterfacePrx memory; std::string currentSkillSearch = ""; + // Store a list of all execution parameters for each skill + SkillParameterMap skillParameterHistory; + Snapshot snapshot; /** -- GitLab