diff --git a/source/armarx/speech/skills/object_last_seen_at/core/ObjectLastSeenAt.cpp b/source/armarx/speech/skills/object_last_seen_at/core/ObjectLastSeenAt.cpp index dc3d9fea1e2c57f70512d7df7e729bba5fac0c81..3437637d9437e32a5387b2a65f7a863fef651056 100644 --- a/source/armarx/speech/skills/object_last_seen_at/core/ObjectLastSeenAt.cpp +++ b/source/armarx/speech/skills/object_last_seen_at/core/ObjectLastSeenAt.cpp @@ -40,6 +40,7 @@ #include <RobotAPI/libraries/aron/core/aron_conversions.h> #include <RobotAPI/libraries/ArmarXObjects/aron_conversions/objpose.h> #include <RobotAPI/libraries/armem_objects/aron_conversions.h> +#include <RobotAPI/libraries/armem/core/aron_conversions.h> #include <armarx/symbolic_planning/armem/symbolic_scene_memory/client/reader/SymbolicSceneReader.h> @@ -189,17 +190,6 @@ namespace armarx::speech::object_last_seen_at::core ARMARX_DEBUG << "Got description of objects"; - // Collect current objects from working memory - // auto objectPoseStorage = remote.objectInstanceReader->getObjectPoseStorage(); - // std::unordered_map<std::string, armarx::objpose::data::ObjectPoseSeq> objectPosesByProvider; - // for (const auto providerName : objectPoseStorage->getAvailableProviderNames()) - // { - // if (providerName != properties.objectProviderName) - // { - // objectPosesByProvider[providerName] = objectPoseStorage->getObjectPosesByProvider(providerName); - // } - // } - for (auto object_description : object_descriptions) { auto object_description_name = object_description.second.id; @@ -209,8 +199,6 @@ namespace armarx::speech::object_last_seen_at::core [](unsigned char c) { return std::tolower(c); }); //convert description name to lowercase - armem::MemoryID newObjectPoseClassID = armem::MemoryID("Object", "Class", "", ""); - ARMARX_DEBUG << object_description_name; if (object_description_name.find(object_name) != std::string::npos) @@ -229,7 +217,7 @@ namespace armarx::speech::object_last_seen_at::core return true; // for now return here, later put this below - /** + try{ //obtain the object pose from the object memory: const armem::MemoryID sourceId = armem::MemoryID::fromString(object_description.second.source); @@ -242,25 +230,33 @@ namespace armarx::speech::object_last_seen_at::core .snapshots().atTime(sourceId.timestamp); armem::client::QueryResult result = reader.query(builder.buildQueryInput()); + + if(result.success) { armem::wm::Memory& memory = result.memory; - memory.forEachInstance([this](const armem::wm::EntityInstance& instance) + memory.forEachInstance([this, &sourceId](const armem::wm::EntityInstance& instance) { - armarx::objpose::ObjectPose pose = - armarx::aron::fromAron<armarx::objpose::ObjectPose>( - armarx::armem::arondto::ObjectInstance::FromAron(instance.data()) - ); + const armarx::armem::arondto::ObjectInstance i = armarx::armem::arondto::ObjectInstance::FromAron(instance.data()); + objpose::ObjectPose pose; + armarx::armem::fromAron(i, pose); + + // objpose::ObjectPose pose = + // armarx::aron::fromAron<objpose::ObjectPose>( + // armarx::armem::arondto::ObjectInstance::FromAron(instance.data()) + // ); auto currentTime = armarx::armem::Time::Now(); - auto ageOfObjectInformation = currentTime.toSecondsSinceEpoch() - instance.metadata().sentTime.toSecondsSinceEpoch(); + //auto ageOfObjectInformation = currentTime.toSecondsSinceEpoch() - instance.metadata().sentTime.toSecondsSinceEpoch(); armarx::armem::arondto::ObjectInstance objectInstance; armarx::objpose::toAron(objectInstance.pose, pose); - objectInstance.classID = ""; //objectClassId; + armem::MemoryID newObjectPoseClassID = armem::MemoryID("Object", "Class", "PriorKnowledgeData", sourceId.entityName); + + armarx::armem::toAron(objectInstance.classID, newObjectPoseClassID);//objectClassId; objectInstance.pose.confidence = 1.0; // we are sure about the location objectInstance.pose.timestamp = armarx::Clock::Now(); // we must update the timestamp @@ -276,12 +272,12 @@ namespace armarx::speech::object_last_seen_at::core ARMARX_ERROR << "Error while updating object instance in object memory: " << e.what(); } - */ } { // if the location is unkown, we need to query the LTM + ARMARX_INFO << "Information not in WM, searching LTM"; const auto queryResult = queryLTM(object_description.second.id); ARMARX_INFO << VAROUT(queryResult.locationName); @@ -303,6 +299,7 @@ namespace armarx::speech::object_last_seen_at::core } // object is not in symbolic scene memory (-> currently not visible) and we need to leverage the LTM + ARMARX_INFO << "Information not in WM, searching LTM"; const auto queryResult = queryLTM(object_name); ARMARX_INFO << VAROUT(queryResult.locationName); if (queryResult.locationName == "(unknown)") @@ -341,17 +338,8 @@ namespace armarx::speech::object_last_seen_at::core ARMARX_INFO << "Object instance is not available"; } - return true; } - - // ARMARX_WARNING << "Could not find an object matching the name " << object_name - // << " in the symbolic scene memory"; - - // std::string answer = "I cannot remember having seen the " + - // spokenObjectNameFromStringName(object_name) + " today."; - // this->subskills.say(answer); - // return false; } } // namespace armarx::speech::object_last_seen_at::core diff --git a/source/armarx/speech/skills/scene_knowledge_verbalization/skills/CMakeLists.txt b/source/armarx/speech/skills/scene_knowledge_verbalization/skills/CMakeLists.txt index 2b4f4cc787283fed689136f2e2c6c751bf08b130..58c18fb30c61c0942ee1ad053c5a18ce6de4b16c 100644 --- a/source/armarx/speech/skills/scene_knowledge_verbalization/skills/CMakeLists.txt +++ b/source/armarx/speech/skills/scene_knowledge_verbalization/skills/CMakeLists.txt @@ -15,11 +15,13 @@ armarx_add_library(scene_knowledge_verbalization_skills RobotAPISkills armem_objects + armarx_symbolic_planning + # armarx_speech armarx_speech::scene_knowledge_verbalization_constants armarx_speech::scene_knowledge_verbalization_aron - armarx_symbolic_planning::symbolic_scene_memory_client + DEPENDENCIES_PRIVATE range-v3::range-v3 diff --git a/source/armarx/speech/skills/scene_knowledge_verbalization/skills/ObjectsAtLocation.cpp b/source/armarx/speech/skills/scene_knowledge_verbalization/skills/ObjectsAtLocation.cpp index 536e02ed0d443a5c5c26c34bb0a52277de21b7c8..77439791441fab340d6260753dbdf4c174b05a3d 100644 --- a/source/armarx/speech/skills/scene_knowledge_verbalization/skills/ObjectsAtLocation.cpp +++ b/source/armarx/speech/skills/scene_knowledge_verbalization/skills/ObjectsAtLocation.cpp @@ -279,11 +279,12 @@ namespace armarx::speech::scene_knowledge_verbalization::skills spokenObjectNames.push_back("the " + getObjectSpokenName(objectId)); } + //const auto locationInstanceName = getLocationInstanceName(locationId); + ss << getSpokenList(spokenObjectNames); + ss << in.parameters.preposition; //<< " the " << locationInstanceName; ss << "."; - // Add the location of where you searched for objects - say(ss.str()); return MakeSucceededResult();