From 1e3ef0b1f11cf65a58abf8c4b49db5553b5991e5 Mon Sep 17 00:00:00 2001 From: ARMAR-DE <> Date: Wed, 30 Aug 2023 13:56:26 +0200 Subject: [PATCH] draft (by CP) --- .../ArticulatedObjectWriter.cpp | 10 ++-- .../client/articulated_object/Reader.cpp | 2 +- .../libraries/armem_robot/aron/RobotState.xml | 6 ++ source/RobotAPI/libraries/armem_robot/types.h | 4 +- .../armem_robot_state/CMakeLists.txt | 1 - .../armem_robot_state/aron/JointState.xml | 14 ----- .../armem_robot_state/aron_conversions.cpp | 18 ------ .../armem_robot_state/aron_conversions.h | 3 - .../client/common/RobotReader.cpp | 59 +++++++------------ .../client/common/RobotReader.h | 8 +-- .../client/common/RobotWriter.cpp | 1 - .../client/common/VirtualRobotWriter.cpp | 2 +- 12 files changed, 41 insertions(+), 87 deletions(-) delete mode 100644 source/RobotAPI/libraries/armem_robot_state/aron/JointState.xml diff --git a/source/RobotAPI/libraries/armem_objects/client/articulated_object/ArticulatedObjectWriter.cpp b/source/RobotAPI/libraries/armem_objects/client/articulated_object/ArticulatedObjectWriter.cpp index 0b466d404..5e5b15f15 100644 --- a/source/RobotAPI/libraries/armem_objects/client/articulated_object/ArticulatedObjectWriter.cpp +++ b/source/RobotAPI/libraries/armem_objects/client/articulated_object/ArticulatedObjectWriter.cpp @@ -10,7 +10,6 @@ #include <ArmarXCore/core/system/ArmarXDataPath.h> #include <ArmarXCore/core/system/cmake/CMakePackageFinder.h> - namespace armarx::armem::articulated_object { armem::articulated_object::ArticulatedObject @@ -37,13 +36,14 @@ namespace armarx::armem::articulated_object return armem::articulated_object::ArticulatedObject{ .description = {.name = obj.getType(), - .xml = PackagePath(armarx::ArmarXDataPath::getProject( - {package}, fileRelPath), - obj.getFilename())}, + .xml = PackagePath( + armarx::ArmarXDataPath::getProject({package}, fileRelPath), + obj.getFilename())}, .instance = obj.getName(), .config = {.timestamp = timestamp, .globalPose = Eigen::Affine3f(obj.getRootNode()->getGlobalPose()), - .jointMap = obj.getJointValues()}, + .jointMap = obj.getJointValues(), + .proprioception = std::nullopt}, .timestamp = timestamp}; } diff --git a/source/RobotAPI/libraries/armem_objects/client/articulated_object/Reader.cpp b/source/RobotAPI/libraries/armem_objects/client/articulated_object/Reader.cpp index dd8a8473c..ac01fb3b8 100644 --- a/source/RobotAPI/libraries/armem_objects/client/articulated_object/Reader.cpp +++ b/source/RobotAPI/libraries/armem_objects/client/articulated_object/Reader.cpp @@ -262,7 +262,7 @@ namespace armarx::armem::articulated_object robot::RobotState robotState{.timestamp = objectPose.timestamp, .globalPose = Eigen::Affine3f(objectPose.objectPoseGlobal), - .jointMap = objectPose.objectJointValues}; + .jointMap = objectPose.objectJointValues, .proprioception=std::nullopt}; return robotState; } diff --git a/source/RobotAPI/libraries/armem_robot/aron/RobotState.xml b/source/RobotAPI/libraries/armem_robot/aron/RobotState.xml index 4ef29cf75..38ea8a815 100644 --- a/source/RobotAPI/libraries/armem_robot/aron/RobotState.xml +++ b/source/RobotAPI/libraries/armem_robot/aron/RobotState.xml @@ -4,6 +4,9 @@ <CodeIncludes> <SystemInclude include="<Eigen/Core>" /> </CodeIncludes> + <AronIncludes> + <PackagePath package="RobotAPI" path="libraries/armem_robot_state/aron/Proprioception.xml" /> + </AronIncludes> <GenerateTypes> <Object name="armarx::armem::arondto::RobotState"> @@ -22,6 +25,9 @@ </Dict> </ObjectChild> + <ObjectChild key='proprioception'> + <armarx::armem::arondto::Proprioception optional="true"/> + </ObjectChild> </Object> diff --git a/source/RobotAPI/libraries/armem_robot/types.h b/source/RobotAPI/libraries/armem_robot/types.h index 2eeff803f..9caf84f24 100644 --- a/source/RobotAPI/libraries/armem_robot/types.h +++ b/source/RobotAPI/libraries/armem_robot/types.h @@ -10,7 +10,7 @@ #include <ArmarXCore/core/time/DateTime.h> #include <RobotAPI/libraries/ArmarXObjects/ObjectID.h> - +#include <RobotAPI/libraries/armem_robot_state/aron/Proprioception.aron.generated.h> namespace armarx::armem::robot { @@ -60,6 +60,8 @@ namespace armarx::armem::robot Pose globalPose; JointMap jointMap; + + std::optional<armarx::armem::arondto::Proprioception> proprioception; }; diff --git a/source/RobotAPI/libraries/armem_robot_state/CMakeLists.txt b/source/RobotAPI/libraries/armem_robot_state/CMakeLists.txt index 8dda90015..c71d1d839 100644 --- a/source/RobotAPI/libraries/armem_robot_state/CMakeLists.txt +++ b/source/RobotAPI/libraries/armem_robot_state/CMakeLists.txt @@ -63,7 +63,6 @@ armarx_enable_aron_file_generation_for_target( "${LIB_NAME}" ARON_FILES - aron/JointState.xml aron/Proprioception.xml aron/Exteroception.xml aron/TransformHeader.xml diff --git a/source/RobotAPI/libraries/armem_robot_state/aron/JointState.xml b/source/RobotAPI/libraries/armem_robot_state/aron/JointState.xml deleted file mode 100644 index 5d18e8f78..000000000 --- a/source/RobotAPI/libraries/armem_robot_state/aron/JointState.xml +++ /dev/null @@ -1,14 +0,0 @@ -<!--This class contains the data structure for ObjectPose --> -<?xml version="1.0" encoding="UTF-8" ?> -<AronTypeDefinition> - <GenerateTypes> - <Object name="armarx::armem::arondto::JointState"> - <ObjectChild key='name'> - <String/> - </ObjectChild> - <ObjectChild key='position'> - <float32 /> - </ObjectChild> - </Object> - </GenerateTypes> -</AronTypeDefinition> diff --git a/source/RobotAPI/libraries/armem_robot_state/aron_conversions.cpp b/source/RobotAPI/libraries/armem_robot_state/aron_conversions.cpp index 901d98dcb..78014ea76 100644 --- a/source/RobotAPI/libraries/armem_robot_state/aron_conversions.cpp +++ b/source/RobotAPI/libraries/armem_robot_state/aron_conversions.cpp @@ -4,7 +4,6 @@ #include <ArmarXCore/core/logging/Logging.h> -#include <RobotAPI/libraries/armem_robot_state/aron/JointState.aron.generated.h> #include <RobotAPI/libraries/armem_robot_state/aron/Proprioception.aron.generated.h> #include <RobotAPI/libraries/armem_robot_state/aron/Exteroception.aron.generated.h> #include <RobotAPI/libraries/armem_robot_state/aron/Transform.aron.generated.h> @@ -51,23 +50,6 @@ namespace armarx::armem aron::fromAron(dto.timestamp, bo.timestamp); } - /* JointState */ - - void - fromAron(const arondto::JointState& dto, robot_state::JointState& bo) - { - aron::fromAron(dto.name, bo.name); - aron::fromAron(dto.position, bo.position); - } - - void - toAron(arondto::JointState& dto, const robot_state::JointState& bo) - { - aron::toAron(dto.name, bo.name); - aron::toAron(dto.position, bo.position); - } - - void fromAron(const armarx::armem::prop::arondto::Platform& dto, robot::PlatformState& bo) { diff --git a/source/RobotAPI/libraries/armem_robot_state/aron_conversions.h b/source/RobotAPI/libraries/armem_robot_state/aron_conversions.h index f78efc200..a3e821caa 100644 --- a/source/RobotAPI/libraries/armem_robot_state/aron_conversions.h +++ b/source/RobotAPI/libraries/armem_robot_state/aron_conversions.h @@ -61,9 +61,6 @@ namespace armarx::armem void fromAron(const arondto::TransformHeader& dto, robot_state::TransformHeader& bo); void toAron(arondto::TransformHeader& dto, const robot_state::TransformHeader& bo); - void fromAron(const arondto::JointState& dto, robot_state::JointState& bo); - void toAron(arondto::JointState& dto, const robot_state::JointState& bo); - void fromAron(const armarx::armem::prop::arondto::Platform& dto, robot::PlatformState& bo); void toAron(armarx::armem::prop::arondto::Platform& dto, const robot::PlatformState& bo); diff --git a/source/RobotAPI/libraries/armem_robot_state/client/common/RobotReader.cpp b/source/RobotAPI/libraries/armem_robot_state/client/common/RobotReader.cpp index bfb85d68f..5fb5004c9 100644 --- a/source/RobotAPI/libraries/armem_robot_state/client/common/RobotReader.cpp +++ b/source/RobotAPI/libraries/armem_robot_state/client/common/RobotReader.cpp @@ -23,7 +23,6 @@ #include <RobotAPI/libraries/armem_robot/robot_conversions.h> #include <RobotAPI/libraries/armem_robot/types.h> #include <RobotAPI/libraries/armem_robot_state/aron/Exteroception.aron.generated.h> -#include <RobotAPI/libraries/armem_robot_state/aron/JointState.aron.generated.h> #include <RobotAPI/libraries/armem_robot_state/aron/Proprioception.aron.generated.h> #include <RobotAPI/libraries/armem_robot_state/aron_conversions.h> @@ -186,12 +185,15 @@ namespace armarx::armem::robot_state RobotReader::queryState(const robot::RobotDescription& description, const armem::Time& timestamp) const { - const auto jointMap = queryJointState(description, timestamp); - if (not jointMap) + const auto proprioception = queryProprioception(description, timestamp); + + if (not proprioception.has_value()) { - ARMARX_VERBOSE << "Failed to query joint state for robot '" << description.name << "'."; + ARMARX_VERBOSE << "Failed to query proprioception for robot '" << description.name + << "'."; return std::nullopt; } + const auto jointMap = proprioception->joints.position; const auto globalPose = queryGlobalPose(description, timestamp); if (not globalPose) @@ -200,8 +202,10 @@ namespace armarx::armem::robot_state return std::nullopt; } - return robot::RobotState{ - .timestamp = timestamp, .globalPose = *globalPose, .jointMap = *jointMap}; + return robot::RobotState{.timestamp = timestamp, + .globalPose = *globalPose, + .jointMap = jointMap, + .proprioception = proprioception}; } std::optional<::armarx::armem::robot_state::Transform> @@ -231,10 +235,9 @@ namespace armarx::armem::robot_state // } } - - std::optional<robot::RobotState::JointMap> - RobotReader::queryJointState(const robot::RobotDescription& description, - const armem::Time& timestamp) const // Why timestamp?!?! + std::optional<armarx::armem::arondto::Proprioception> + RobotReader::queryProprioception(const robot::RobotDescription& description, + const armem::Time& timestamp) const // Why timestamp?!?! { // TODO(fabian.reister): how to deal with multiple providers? @@ -263,7 +266,7 @@ namespace armarx::armem::robot_state return std::nullopt; } - return getRobotJointState(qResult.memory, description.name); + return getRobotProprioception(qResult.memory, description.name); } catch (...) { @@ -304,7 +307,6 @@ namespace armarx::armem::robot_state return getRobotJointStates(qResult.memory, description.name); } - std::optional<robot::PlatformState> RobotReader::queryPlatformState(const robot::RobotDescription& description, const armem::Time& timestamp) const @@ -415,19 +417,19 @@ namespace armarx::armem::robot_state } } - std::optional<robot::RobotState::JointMap> - RobotReader::getRobotJointState(const armarx::armem::wm::Memory& memory, - const std::string& name) const + std::optional<armarx::armem::arondto::Proprioception> + RobotReader::getRobotProprioception(const armarx::armem::wm::Memory& memory, + const std::string& name) const { // clang-format off const armem::wm::CoreSegment& coreSegment = memory .getCoreSegment(constants::proprioceptionCoreSegment); // clang-format on - std::optional<robot::RobotState::JointMap> jointMap; + std::optional<armarx::armem::arondto::Proprioception> proprioception; coreSegment.forEachEntity( - [&jointMap](const wm::Entity& entity) + [&proprioception](const wm::Entity& entity) { if (not entity.getLatestSnapshot().hasInstance(0)) { @@ -436,25 +438,10 @@ namespace armarx::armem::robot_state const auto& entityInstance = entity.getLatestSnapshot().getInstance(0); - const auto proprioception = - tryCast<::armarx::armem::arondto::Proprioception>(entityInstance); - ARMARX_CHECK(proprioception.has_value()); - - const armarx::armem::prop::arondto::Joints& joints = proprioception->joints; - - // const auto jointState = tryCast<::armarx::armem::arondto::JointState>(entityInstance); - // if (not jointState) - // { - // ARMARX_WARNING << "Could not convert entity instance to 'JointState'"; - // return; - // } - - jointMap = joints.position; - - // jointMap.emplace(jointState->name, jointState->position); + proprioception = tryCast<::armarx::armem::arondto::Proprioception>(entityInstance); }); - return jointMap; + return proprioception; } RobotReader::JointTrajectory @@ -497,7 +484,6 @@ namespace armarx::armem::robot_state return jointTrajectory; } - // force torque for left and right std::optional<std::map<RobotReader::Hand, robot::ForceTorque>> RobotReader::queryForceTorque(const robot::RobotDescription& description, @@ -563,7 +549,6 @@ namespace armarx::armem::robot_state return getForceTorques(qResult.memory, description.name); } - std::optional<std::map<RobotReader::Hand, robot::ToFArray>> RobotReader::queryToF(const robot::RobotDescription& description, const armem::Time& timestamp) const @@ -594,7 +579,6 @@ namespace armarx::armem::robot_state return getToF(qResult.memory, description.name); } - std::optional<robot::PlatformState> RobotReader::getRobotPlatformState(const armarx::armem::wm::Memory& memory, const std::string& name) const @@ -755,7 +739,6 @@ namespace armarx::armem::robot_state return tofs; } - std::optional<robot::RobotDescription> RobotReader::getRobotDescription(const armarx::armem::wm::Memory& memory, const std::string& name) const diff --git a/source/RobotAPI/libraries/armem_robot_state/client/common/RobotReader.h b/source/RobotAPI/libraries/armem_robot_state/client/common/RobotReader.h index 3a2258558..6f90a9b24 100644 --- a/source/RobotAPI/libraries/armem_robot_state/client/common/RobotReader.h +++ b/source/RobotAPI/libraries/armem_robot_state/client/common/RobotReader.h @@ -66,8 +66,8 @@ namespace armarx::armem::robot_state std::optional<robot::RobotState> queryState(const robot::RobotDescription& description, const armem::Time& timestamp) const; - std::optional<robot::RobotState::JointMap> - queryJointState(const robot::RobotDescription& description, + std::optional<armarx::armem::arondto::Proprioception> + queryProprioception(const robot::RobotDescription& description, const armem::Time& timestamp) const; using JointTrajectory = std::map<armem::Time, robot::RobotState::JointMap>; @@ -134,8 +134,8 @@ namespace armarx::armem::robot_state std::vector<robot::RobotDescription> getRobotDescriptions(const armarx::armem::wm::Memory& memory) const; - std::optional<robot::RobotState::JointMap> - getRobotJointState(const armarx::armem::wm::Memory& memory, const std::string& name) const; + std::optional<armarx::armem::arondto::Proprioception> + getRobotProprioception(const armarx::armem::wm::Memory& memory, const std::string& name) const; JointTrajectory getRobotJointStates(const armarx::armem::wm::Memory& memory, const std::string& name) const; diff --git a/source/RobotAPI/libraries/armem_robot_state/client/common/RobotWriter.cpp b/source/RobotAPI/libraries/armem_robot_state/client/common/RobotWriter.cpp index cfa84fb3f..f971c88c3 100644 --- a/source/RobotAPI/libraries/armem_robot_state/client/common/RobotWriter.cpp +++ b/source/RobotAPI/libraries/armem_robot_state/client/common/RobotWriter.cpp @@ -24,7 +24,6 @@ #include <RobotAPI/libraries/armem_robot/aron_conversions.h> #include <RobotAPI/libraries/armem_robot/robot_conversions.h> #include <RobotAPI/libraries/armem_robot/types.h> -#include <RobotAPI/libraries/armem_robot_state/aron/JointState.aron.generated.h> #include <RobotAPI/libraries/armem_robot_state/aron/Proprioception.aron.generated.h> #include <RobotAPI/libraries/armem_robot_state/aron/Transform.aron.generated.h> #include <RobotAPI/libraries/armem_robot_state/aron/TransformHeader.aron.generated.h> diff --git a/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotWriter.cpp b/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotWriter.cpp index 47519748c..fc3aed1ee 100644 --- a/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotWriter.cpp +++ b/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotWriter.cpp @@ -70,7 +70,7 @@ namespace armarx::armem::robot_state const robot::RobotState robotState{.timestamp = timestamp, .globalPose = robot::RobotState::Pose(robot.getGlobalPose()), - .jointMap = robot.getJointValues()}; + .jointMap = robot.getJointValues(), .proprioception=std::nullopt}; return RobotWriter::storeState(robotState, robot.getType(), -- GitLab