diff --git a/source/RobotAPI/libraries/ArmarXObjects/CMakeLists.txt b/source/RobotAPI/libraries/ArmarXObjects/CMakeLists.txt index da1d938b96fc8e7fe3d2a9cb2c0f25df386a06af..20f30486fd3249168f6f80a9353d6dd78cc7b2ea 100644 --- a/source/RobotAPI/libraries/ArmarXObjects/CMakeLists.txt +++ b/source/RobotAPI/libraries/ArmarXObjects/CMakeLists.txt @@ -20,6 +20,7 @@ set(LIB_FILES ObjectPoseClient.cpp PoseManifoldGaussian.cpp ProvidedObjectPose.cpp + Scene.cpp json_conversions.cpp ice_conversions.cpp @@ -40,6 +41,7 @@ set(LIB_HEADERS ObjectPoseClient.h PoseManifoldGaussian.h ProvidedObjectPose.h + Scene.h forward_declarations.h json_conversions.h diff --git a/source/RobotAPI/libraries/ArmarXObjects/Scene.cpp b/source/RobotAPI/libraries/ArmarXObjects/Scene.cpp new file mode 100644 index 0000000000000000000000000000000000000000..1437da55faff8976d7c87ac9f76f9a2adf11432f --- /dev/null +++ b/source/RobotAPI/libraries/ArmarXObjects/Scene.cpp @@ -0,0 +1,44 @@ +#include "Scene.h" + +#include <RobotAPI/libraries/ArmarXObjects/ObjectID.h> +#include <RobotAPI/libraries/ArmarXObjects/ObjectFinder.h> + + +namespace armarx::objects +{ + + ObjectID SceneObject::getClassID() const + { + return ObjectID(className); + } + + + ObjectID SceneObject::getClassID(ObjectFinder& finder) const + { + ObjectID id = getClassID(); + if (id.dataset().empty()) + { + if (std::optional<ObjectInfo> info = finder.findObject(id.className())) + { + return info->id(); + } + } + return id; + } + + + ObjectID SceneObject::getObjectID() const + { + return getClassID().withInstanceName(instanceName); + } + + + ObjectID SceneObject::getObjectID(ObjectFinder& finder) const + { + return getClassID(finder).withInstanceName(instanceName); + } + +} + + + diff --git a/source/RobotAPI/libraries/ArmarXObjects/Scene.h b/source/RobotAPI/libraries/ArmarXObjects/Scene.h new file mode 100644 index 0000000000000000000000000000000000000000..a4cc41d80b5fccc87b1e9d871808c685ce332401 --- /dev/null +++ b/source/RobotAPI/libraries/ArmarXObjects/Scene.h @@ -0,0 +1,59 @@ +/* + * This file is part of ArmarX. + * + * ArmarX is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * ArmarX is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * @package RobotAPI::ArmarXObjects::ObjectMemory + * @author Rainer Kartmann ( rainer dot kartmann at kit dot edu ) + * @date 2021 + * @copyright http://www.gnu.org/licenses/gpl-2.0.txt + * GNU General Public License + */ +#pragma once + +#include <map> +#include <string> +#include <vector> + +#include <Eigen/Core> +#include <Eigen/Geometry> + +#include "forward_declarations.h" + + +namespace armarx::objects +{ + + struct SceneObject + { + std::string className; + std::string instanceName; + std::string collection; + + Eigen::Vector3f position = Eigen::Vector3f::Zero(); + Eigen::Quaternionf orientation = Eigen::Quaternionf::Identity(); + + std::map<std::string, float> jointValues; + + ObjectID getClassID() const; + ObjectID getClassID(ObjectFinder& finder) const; + ObjectID getObjectID() const; + ObjectID getObjectID(ObjectFinder& finder) const; + }; + + struct Scene + { + std::vector<SceneObject> objects; + }; + +} diff --git a/source/RobotAPI/libraries/ArmarXObjects/forward_declarations.h b/source/RobotAPI/libraries/ArmarXObjects/forward_declarations.h index b7175785af42fce4284769d47290b3aae3616614..320305ba22474d6eca649966c7988ad7b3048c0b 100644 --- a/source/RobotAPI/libraries/ArmarXObjects/forward_declarations.h +++ b/source/RobotAPI/libraries/ArmarXObjects/forward_declarations.h @@ -27,6 +27,12 @@ namespace armarx::objpose class ObjectPoseClient; } +namespace armarx::objects +{ + struct Scene; + struct SceneObject; +} + // Ice Types namespace armarx::objpose::data diff --git a/source/RobotAPI/libraries/ArmarXObjects/json_conversions.cpp b/source/RobotAPI/libraries/ArmarXObjects/json_conversions.cpp index 3888855892a95cecb6ea5fecc55e63763c894f6a..617baca941ebb86be7e3b05ecac1e79efc23490c 100644 --- a/source/RobotAPI/libraries/ArmarXObjects/json_conversions.cpp +++ b/source/RobotAPI/libraries/ArmarXObjects/json_conversions.cpp @@ -3,8 +3,12 @@ #include <SimoxUtility/json/eigen_conversion.h> #include <SimoxUtility/shapes/json_conversions.h> +#include "ObjectID.h" +#include "ObjectPose.h" +#include "Scene.h" #include "ice_conversions.h" + void armarx::to_json(nlohmann::json& j, const ObjectID& id) { j["dataset"] = id.dataset(); @@ -71,3 +75,46 @@ void armarx::objpose::from_json(const nlohmann::json& j, ObjectPose& op) op.localOOBB = j.at("localOOBB").get<simox::OrientedBoxf>(); } } + + +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; + 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); + } + j.at("collection").get_to(rhs.collection); + j.at("position").get_to(rhs.position); + j.at("orientation").get_to(rhs.orientation); + if (j.count("jointValues")) + { + j.at("jointValues").get_to(rhs.jointValues); + } +} + + + +void armarx::objects::to_json(nlohmann::json& j, const Scene& rhs) +{ + j["objects"] = rhs.objects; +} + + +void armarx::objects::from_json(const nlohmann::json& j, Scene& rhs) +{ + j.at("objects").get_to(rhs.objects); +} diff --git a/source/RobotAPI/libraries/ArmarXObjects/json_conversions.h b/source/RobotAPI/libraries/ArmarXObjects/json_conversions.h index 048e7d933af5913678f17abd7eacbcf76e4e83c1..608ad14424234ef4120f117d511310a42be71bcc 100644 --- a/source/RobotAPI/libraries/ArmarXObjects/json_conversions.h +++ b/source/RobotAPI/libraries/ArmarXObjects/json_conversions.h @@ -2,8 +2,8 @@ #include <SimoxUtility/json/json.hpp> -#include "ObjectID.h" -#include "ObjectPose.h" +#include "forward_declarations.h" + namespace armarx { @@ -16,3 +16,13 @@ namespace armarx::objpose void to_json(nlohmann::json& j, const ObjectPose& op); void from_json(const nlohmann::json& j, ObjectPose& op); } + + +namespace armarx::objects +{ + void to_json(nlohmann::json& j, const SceneObject& rhs); + void from_json(const nlohmann::json& j, SceneObject& rhs); + + void to_json(nlohmann::json& j, const Scene& rhs); + void from_json(const nlohmann::json& j, Scene& rhs); +} diff --git a/source/RobotAPI/libraries/armem_objects/CMakeLists.txt b/source/RobotAPI/libraries/armem_objects/CMakeLists.txt index 74928ae14dc40cc72b49c6a81570525336c48bfa..b0663babe7059ddbc2915869dc49d06a128f03e5 100644 --- a/source/RobotAPI/libraries/armem_objects/CMakeLists.txt +++ b/source/RobotAPI/libraries/armem_objects/CMakeLists.txt @@ -21,8 +21,6 @@ armarx_add_library( aron_conversions.h aron_forward_declarations.h - SceneSnapshot.h - server/class/FloorVis.h server/class/Segment.h @@ -50,8 +48,6 @@ armarx_add_library( SOURCES aron_conversions.cpp - SceneSnapshot.cpp - client/articulated_object/Reader.cpp client/articulated_object/Writer.cpp client/articulated_object/ArticulatedObjectReader.cpp diff --git a/source/RobotAPI/libraries/armem_objects/SceneSnapshot.cpp b/source/RobotAPI/libraries/armem_objects/SceneSnapshot.cpp deleted file mode 100644 index d3ece87d9746198af2f5b9acc5b81cce38d189aa..0000000000000000000000000000000000000000 --- a/source/RobotAPI/libraries/armem_objects/SceneSnapshot.cpp +++ /dev/null @@ -1,90 +0,0 @@ -#include "SceneSnapshot.h" - -#include <SimoxUtility/json.h> - -#include <RobotAPI/libraries/ArmarXObjects/ObjectID.h> -#include <RobotAPI/libraries/ArmarXObjects/ObjectFinder.h> - -// #include <RobotAPI/libraries/armem/core/json_conversions.h> - - -namespace armarx::armem::obj -{ - - ObjectID SceneSnapshot::Object::getClassID() const - { - return ObjectID(className); - } - - - ObjectID SceneSnapshot::Object::getClassID(ObjectFinder& finder) const - { - ObjectID id = getClassID(); - if (id.dataset().empty()) - { - if (std::optional<ObjectInfo> info = finder.findObject(id.className())) - { - return info->id(); - } - } - return id; - } - - - ObjectID SceneSnapshot::Object::getObjectID() const - { - return getClassID().withInstanceName(instanceName); - } - - - ObjectID SceneSnapshot::Object::getObjectID(ObjectFinder& finder) const - { - return getClassID(finder).withInstanceName(instanceName); - } - -} - - -void armarx::armem::obj::to_json(nlohmann::json& j, const SceneSnapshot::Object& 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; - j["jointValues"] = rhs.jointValues; -} - - -void armarx::armem::obj::from_json(const nlohmann::json& j, SceneSnapshot::Object& 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); - } - j.at("collection").get_to(rhs.collection); - j.at("position").get_to(rhs.position); - j.at("orientation").get_to(rhs.orientation); - if (j.count("jointValues")) - { - j.at("jointValues").get_to(rhs.jointValues); - } -} - - - -void armarx::armem::obj::to_json(nlohmann::json& j, const SceneSnapshot& rhs) -{ - j["objects"] = rhs.objects; -} - - -void armarx::armem::obj::from_json(const nlohmann::json& j, SceneSnapshot& rhs) -{ - j.at("objects").get_to(rhs.objects); -} - - diff --git a/source/RobotAPI/libraries/armem_objects/SceneSnapshot.h b/source/RobotAPI/libraries/armem_objects/SceneSnapshot.h deleted file mode 100644 index 3e24156490544ebc537372a0d204c052ae8b2428..0000000000000000000000000000000000000000 --- a/source/RobotAPI/libraries/armem_objects/SceneSnapshot.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - * This file is part of ArmarX. - * - * ArmarX is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * ArmarX is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - * @package RobotAPI::ArmarXObjects::ObjectMemory - * @author Rainer Kartmann ( rainer dot kartmann at kit dot edu ) - * @date 2021 - * @copyright http://www.gnu.org/licenses/gpl-2.0.txt - * GNU General Public License - */ -#pragma once - -#include <SimoxUtility/json/json.hpp> - -#include <Eigen/Geometry> - - -namespace armarx -{ - class ObjectID; - class ObjectFinder; -} -namespace armarx::armem::obj -{ - - struct SceneSnapshot - { - struct Object - { - std::string className; - std::string instanceName; - std::string collection; - - Eigen::Vector3f position = Eigen::Vector3f::Zero(); - Eigen::Quaternionf orientation = Eigen::Quaternionf::Identity(); - - std::map<std::string, float> jointValues; - - ObjectID getClassID() const; - ObjectID getClassID(ObjectFinder& finder) const; - ObjectID getObjectID() const; - ObjectID getObjectID(ObjectFinder& finder) const; - }; - std::vector<Object> objects; - }; - - void to_json(nlohmann::json& j, const SceneSnapshot::Object& rhs); - void from_json(const nlohmann::json& j, SceneSnapshot::Object& rhs); - - void to_json(nlohmann::json& j, const SceneSnapshot& rhs); - void from_json(const nlohmann::json& j, SceneSnapshot& rhs); - -}