diff --git a/source/RobotAPI/components/ObjectPoseClientExample/ObjectPoseClientExample.cpp b/source/RobotAPI/components/ObjectPoseClientExample/ObjectPoseClientExample.cpp index 43f32295717ff031d2ac9b6f54184c21b8c60e73..6359111c24ef51d35360ff8def6853f9fdae55ae 100644 --- a/source/RobotAPI/components/ObjectPoseClientExample/ObjectPoseClientExample.cpp +++ b/source/RobotAPI/components/ObjectPoseClientExample/ObjectPoseClientExample.cpp @@ -70,7 +70,9 @@ namespace armarx while (objectProcessingTask && !objectProcessingTask->isStopped()) { - const objpose::ObjectPoseSeq objectPoses = ObjectPoseClient::getObjectPoses(); + // This client can be copied to other classes to give them access to the object pose storage. + objpose::ObjectPoseClient client = getClient(); + const objpose::ObjectPoseSeq objectPoses = client.fetchObjectPoses(); ARMARX_VERBOSE << "Received poses of " << objectPoses.size() << " objects."; diff --git a/source/RobotAPI/libraries/ArmarXObjects/Scene.h b/source/RobotAPI/libraries/ArmarXObjects/Scene.h index a4cc41d80b5fccc87b1e9d871808c685ce332401..635ff62897e54f669f3c01ca3879666332f6a0a8 100644 --- a/source/RobotAPI/libraries/ArmarXObjects/Scene.h +++ b/source/RobotAPI/libraries/ArmarXObjects/Scene.h @@ -43,6 +43,7 @@ namespace armarx::objects Eigen::Vector3f position = Eigen::Vector3f::Zero(); Eigen::Quaternionf orientation = Eigen::Quaternionf::Identity(); + std::optional<bool> isStatic; std::map<std::string, float> jointValues; ObjectID getClassID() const; diff --git a/source/RobotAPI/libraries/ArmarXObjects/json_conversions.cpp b/source/RobotAPI/libraries/ArmarXObjects/json_conversions.cpp index 617baca941ebb86be7e3b05ecac1e79efc23490c..161983900123a6848d2e667258236f2bd95aa33a 100644 --- a/source/RobotAPI/libraries/ArmarXObjects/json_conversions.cpp +++ b/source/RobotAPI/libraries/ArmarXObjects/json_conversions.cpp @@ -79,31 +79,51 @@ void armarx::objpose::from_json(const nlohmann::json& j, ObjectPose& op) void armarx::objects::to_json(nlohmann::json& j, const SceneObject& rhs) { - // j["instanceID"] = rhs.instanceID; j["class"] = rhs.className; j["instanceName"] = rhs.instanceName; j["collection"] = rhs.collection; j["position"] = rhs.position; j["orientation"] = rhs.orientation; + if (rhs.isStatic.has_value()) + { + j["isStatic"] = rhs.isStatic.value(); + } j["jointValues"] = rhs.jointValues; } void armarx::objects::from_json(const nlohmann::json& j, SceneObject& rhs) { - // j.at("instanceID").get_to(rhs.instanceID); j.at("class").get_to(rhs.className); if (j.count("instanceName")) { j["instanceName"].get_to(rhs.instanceName); } + else + { + rhs.instanceName.clear(); + } j.at("collection").get_to(rhs.collection); j.at("position").get_to(rhs.position); j.at("orientation").get_to(rhs.orientation); + + if (j.count("isStatic")) + { + rhs.isStatic = j.at("isStatic").get<bool>(); + } + else + { + rhs.isStatic = std::nullopt; + } + if (j.count("jointValues")) { j.at("jointValues").get_to(rhs.jointValues); } + else + { + rhs.jointValues.clear(); + } } diff --git a/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp b/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp index 485715690f3fdbfe089f3557582bae86ef7210ad..9f0d717489ab6012f1a812e1a1ad1c3f8499ead5 100644 --- a/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp +++ b/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp @@ -936,7 +936,8 @@ namespace armarx::armem::server::obj::instance pose.providerName = sceneName; pose.objectType = objpose::ObjectType::KnownObject; - pose.isStatic = true; // Objects loaded from prior knowledge are considerd static to exclude them from decay. + // If not specified, assume loaded objects are static. + pose.isStatic = object.isStatic.has_value() ? object.isStatic.value() : true; pose.objectID = classID.withInstanceName( object.instanceName.empty() ? std::to_string(idCounters[classID]++)