From 4084bc720704bb60bc9aa4f06533aa969e283087 Mon Sep 17 00:00:00 2001 From: Patrick Dormanns <patrick.dormanns@student.kit.edu> Date: Tue, 14 Nov 2023 21:23:13 +0100 Subject: [PATCH] implemented RelaxHand-skill --- .../control_skill_provider/Component.cpp | 12 +++++-- source/armarx/control/skills/CMakeLists.txt | 4 +++ source/armarx/control/skills/skills.h | 24 ++++++++++++- .../skills/skills/MoveJointsToPosition.h | 2 +- .../skills/skills/MoveJointsWithVelocity.cpp | 2 +- .../skills/skills/MoveJointsWithVelocity.h | 4 +-- .../control/skills/skills/RelaxHand.cpp | 20 +++++++++++ .../armarx/control/skills/skills/RelaxHand.h | 34 +++++++++++++++++++ .../control/skills/skills/ShapeHand.cpp | 19 ++--------- .../armarx/control/skills/skills/ShapeHand.h | 14 +++----- .../control/skills/skills/aron/HandParam.xml | 11 ++++++ .../skills/skills/aron/RelaxHandParams.xml | 20 +++++++++++ .../skills/skills/aron/ShapeHandParams.xml | 10 +++--- 13 files changed, 137 insertions(+), 39 deletions(-) create mode 100644 source/armarx/control/skills/skills/RelaxHand.cpp create mode 100644 source/armarx/control/skills/skills/RelaxHand.h create mode 100644 source/armarx/control/skills/skills/aron/HandParam.xml create mode 100644 source/armarx/control/skills/skills/aron/RelaxHandParams.xml diff --git a/source/armarx/control/components/control_skill_provider/Component.cpp b/source/armarx/control/components/control_skill_provider/Component.cpp index 3a557d17..b6b21e48 100644 --- a/source/armarx/control/components/control_skill_provider/Component.cpp +++ b/source/armarx/control/components/control_skill_provider/Component.cpp @@ -4,6 +4,7 @@ #include <armarx/control/skills/skills/MoveJointsToPosition.h> #include <armarx/control/skills/skills/MoveJointsWithVelocity.h> +#include <armarx/control/skills/skills/RelaxHand.h> #include <armarx/control/skills/skills/ShapeHand.h> namespace armarx::control::components::control_skill_provider @@ -42,13 +43,13 @@ namespace armarx::control::components::control_skill_provider addSkillFactory<armarx::control::skills::skills::MoveJointsToPosition>(skillRemote); } { - armarx::control::skills::Remote skillRemote{remote.kinematicUnit}; + armarx::control::skills::KinematicUnitRemote skillRemote{remote.kinematicUnit}; addSkillFactory<armarx::control::skills::skills::MoveJointsWithVelocity>( skillRemote); } { - armarx::control::skills::skills::ShapeHand::Remote skillRemote{ - remote.leftHandUnit, remote.rightHandUnit}; + armarx::control::skills::HandUnitRemote skillRemote{remote.leftHandUnit, + remote.rightHandUnit}; addSkillFactory<armarx::control::skills::skills::ShapeHand>(skillRemote); } { @@ -57,6 +58,11 @@ namespace armarx::control::components::control_skill_provider { addSkillFactory<armarx::control::skills::skills::CloseHand>(); } + { + armarx::control::skills::HandUnitRemote skillRemote{remote.leftHandUnit, + remote.rightHandUnit}; + addSkillFactory<armarx::control::skills::skills::RelaxHand>(skillRemote); + } } } diff --git a/source/armarx/control/skills/CMakeLists.txt b/source/armarx/control/skills/CMakeLists.txt index 73ac05a6..e277fbd4 100644 --- a/source/armarx/control/skills/CMakeLists.txt +++ b/source/armarx/control/skills/CMakeLists.txt @@ -2,7 +2,9 @@ armarx_add_aron_library(skills_aron ARON_FILES skills/aron/MoveJointsToPositionParams.xml skills/aron/MoveJointsWithVelocityParams.xml + skills/aron/HandParam.xml skills/aron/ShapeHandParams.xml + skills/aron/RelaxHandParams.xml ) armarx_add_library(skills @@ -11,12 +13,14 @@ armarx_add_library(skills skills/MoveJointsToPosition.cpp skills/MoveJointsWithVelocity.cpp skills/ShapeHand.cpp + skills/RelaxHand.cpp HEADERS skills.h skills/MoveJointsToPosition.h skills/MoveJointsWithVelocity.h skills/ShapeHand.h + skills/RelaxHand.h DEPENDENCIES_PUBLIC diff --git a/source/armarx/control/skills/skills.h b/source/armarx/control/skills/skills.h index 172fd68a..51652e9d 100644 --- a/source/armarx/control/skills/skills.h +++ b/source/armarx/control/skills/skills.h @@ -2,13 +2,35 @@ #include <string> +#include <RobotAPI/interface/units/HandUnitInterface.h> #include <RobotAPI/interface/units/KinematicUnitInterface.h> +#include <armarx/control/skills/skills/aron/ShapeHandParams.aron.generated.h> + namespace armarx::control::skills { - struct Remote + struct KinematicUnitRemote { ::armarx::KinematicUnitInterfacePrx kinematicUnit; }; + struct HandUnitRemote + { + ::armarx::HandUnitInterfacePrx& leftHandUnit; + ::armarx::HandUnitInterfacePrx& rightHandUnit; + + ::armarx::HandUnitInterfacePrx& + getHandUnit(const skills::Hand hand) + { + if (hand == skills::Hand::Left) + { + return leftHandUnit; + } + else // hand == Hand::Right + { + return rightHandUnit; + } + } + }; + } // namespace armarx::control::skills diff --git a/source/armarx/control/skills/skills/MoveJointsToPosition.h b/source/armarx/control/skills/skills/MoveJointsToPosition.h index 498545d5..fc8c0ae2 100644 --- a/source/armarx/control/skills/skills/MoveJointsToPosition.h +++ b/source/armarx/control/skills/skills/MoveJointsToPosition.h @@ -25,7 +25,7 @@ namespace armarx::control::skills::skills { public: - struct Remote : public armarx::control::skills::Remote + struct Remote : public armarx::control::skills::KinematicUnitRemote { ::armarx::armem::robot_state::VirtualRobotReader virtualRobotReader; std::string robotName; diff --git a/source/armarx/control/skills/skills/MoveJointsWithVelocity.cpp b/source/armarx/control/skills/skills/MoveJointsWithVelocity.cpp index dbf8ec4e..287a7ad6 100644 --- a/source/armarx/control/skills/skills/MoveJointsWithVelocity.cpp +++ b/source/armarx/control/skills/skills/MoveJointsWithVelocity.cpp @@ -5,7 +5,7 @@ namespace armarx::control::skills::skills { - MoveJointsWithVelocity::MoveJointsWithVelocity(const Remote& r) : + MoveJointsWithVelocity::MoveJointsWithVelocity(const KinematicUnitRemote& r) : ::armarx::skills::SimpleSpecializedSkill<ParamType>(GetSkillDescription()), remote(r) { } diff --git a/source/armarx/control/skills/skills/MoveJointsWithVelocity.h b/source/armarx/control/skills/skills/MoveJointsWithVelocity.h index 5f201e60..7810cfd6 100644 --- a/source/armarx/control/skills/skills/MoveJointsWithVelocity.h +++ b/source/armarx/control/skills/skills/MoveJointsWithVelocity.h @@ -35,7 +35,7 @@ namespace armarx::control::skills::skills .parametersType = ParamType::ToAronType()}; } - MoveJointsWithVelocity(const Remote&); + MoveJointsWithVelocity(const KinematicUnitRemote&); private: @@ -53,7 +53,7 @@ namespace armarx::control::skills::skills const armarx::core::time::Duration& dur); private: - Remote remote; + KinematicUnitRemote remote; }; } // namespace armarx::control::skills::skills diff --git a/source/armarx/control/skills/skills/RelaxHand.cpp b/source/armarx/control/skills/skills/RelaxHand.cpp new file mode 100644 index 00000000..3c2a121c --- /dev/null +++ b/source/armarx/control/skills/skills/RelaxHand.cpp @@ -0,0 +1,20 @@ +#include "RelaxHand.h" + +namespace armarx::control::skills::skills +{ + RelaxHand::RelaxHand(const HandUnitRemote& r) : + ::armarx::skills::SimpleSpecializedSkill<RelaxHandParams>(GetSkillDescription()), remote(r) + { + } + + armarx::skills::Skill::MainResult + RelaxHand::main(const SpecializedMainInput& in) + { + HandUnitInterfacePrx& handUnit = remote.getHandUnit(in.parameters.hand); + + ARMARX_INFO << "Setting shape of hand '" << handUnit->getHandName() << "' to 'Relax'."; + handUnit->setShape("Relax"); + return MakeSucceededResult(); + } + +} // namespace armarx::control::skills::skills diff --git a/source/armarx/control/skills/skills/RelaxHand.h b/source/armarx/control/skills/skills/RelaxHand.h new file mode 100644 index 00000000..8ef56879 --- /dev/null +++ b/source/armarx/control/skills/skills/RelaxHand.h @@ -0,0 +1,34 @@ +#pragma once + +#include <RobotAPI/libraries/skills/provider/SimpleSpecializedSkill.h> + +#include <armarx/control/skills/skills/aron/RelaxHandParams.aron.generated.h> + +#include "../skills.h" + +namespace armarx::control::skills::skills +{ + + class RelaxHand : public ::armarx::skills::SimpleSpecializedSkill<RelaxHandParams> + { + + public: + static ::armarx::skills::SkillDescription + GetSkillDescription() + { + return ::armarx::skills::SkillDescription{.skillId = {.skillName = "RelaxHand"}, + .description = "Relaxes hand joints", + .timeout = ::armarx::Duration::Seconds(1), + .parametersType = ParamType::ToAronType()}; + } + + RelaxHand(const HandUnitRemote&); + + private: + ::armarx::skills::Skill::MainResult main(const SpecializedMainInput& in) override; + + private: + HandUnitRemote remote; + }; + +} // namespace armarx::control::skills::skills diff --git a/source/armarx/control/skills/skills/ShapeHand.cpp b/source/armarx/control/skills/skills/ShapeHand.cpp index 8396458e..a42bffa8 100644 --- a/source/armarx/control/skills/skills/ShapeHand.cpp +++ b/source/armarx/control/skills/skills/ShapeHand.cpp @@ -4,7 +4,7 @@ namespace armarx::control::skills::skills { - ShapeHand::ShapeHand(const Remote& r) : + ShapeHand::ShapeHand(const HandUnitRemote& r) : ::armarx::skills::SpecializedSkill<ShapeHandParams>(GetSkillDescription()), remote(r) { } @@ -28,7 +28,7 @@ namespace armarx::control::skills::skills // set shape/joinAngles - auto& handUnit = getHandUnit(getParameters().hand); + auto& handUnit = remote.getHandUnit(getParameters().hand); if (getParameters().shapeName) { @@ -80,7 +80,7 @@ namespace armarx::control::skills::skills armarx::skills::Skill::MainResult ShapeHand::waitUntilFinished(const NameValueMap& targetAngles) { - auto& handUnit = getHandUnit(getParameters().hand); + auto& handUnit = remote.getHandUnit(getParameters().hand); const auto movementTimeout = getParameters().waitUntilFinished->movementTimeout; ARMARX_INFO << "Waiting until target position is reached" @@ -162,19 +162,6 @@ namespace armarx::control::skills::skills return MakeSucceededResult(); } - HandUnitInterfacePrx& - ShapeHand::getHandUnit(const Hand hand) - { - if (hand == ::armarx::control::skills::skills::Hand::Left) - { - return remote.leftHandUnit; - } - else - { - return remote.rightHandUnit; - } - } - float ShapeHand::getAccuracy(const std::string& jointName) { diff --git a/source/armarx/control/skills/skills/ShapeHand.h b/source/armarx/control/skills/skills/ShapeHand.h index 9e6b0daa..7310115e 100644 --- a/source/armarx/control/skills/skills/ShapeHand.h +++ b/source/armarx/control/skills/skills/ShapeHand.h @@ -1,10 +1,11 @@ #pragma once -#include <RobotAPI/interface/units/HandUnitInterface.h> #include <RobotAPI/libraries/skills/provider/SpecializedSkill.h> #include <armarx/control/skills/skills/aron/ShapeHandParams.aron.generated.h> +#include "../skills.h" + namespace armarx::control::skills::skills { @@ -23,21 +24,14 @@ namespace armarx::control::skills::skills .parametersType = ParamType::ToAronType()}; } - struct Remote - { - ::armarx::HandUnitInterfacePrx& leftHandUnit; - ::armarx::HandUnitInterfacePrx& rightHandUnit; - }; - - ShapeHand(const Remote&); + ShapeHand(const HandUnitRemote&); private: ::armarx::skills::Skill::MainResult main() override; Skill::MainResult waitUntilFinished(const NameValueMap& targetAngles); private: - Remote remote; - ::armarx::HandUnitInterfacePrx& getHandUnit(const Hand); + HandUnitRemote remote; float getAccuracy(const std::string& jointName); }; diff --git a/source/armarx/control/skills/skills/aron/HandParam.xml b/source/armarx/control/skills/skills/aron/HandParam.xml new file mode 100644 index 00000000..f0cb63ff --- /dev/null +++ b/source/armarx/control/skills/skills/aron/HandParam.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<AronTypeDefinition> + <GenerateTypes> + + <IntEnum name="::armarx::control::skills::skills::Hand"> + <EnumValue key="Left" value="0"/> + <EnumValue key="Right" value="1"/> + </IntEnum> + + </GenerateTypes> +</AronTypeDefinition> diff --git a/source/armarx/control/skills/skills/aron/RelaxHandParams.xml b/source/armarx/control/skills/skills/aron/RelaxHandParams.xml new file mode 100644 index 00000000..27a257ae --- /dev/null +++ b/source/armarx/control/skills/skills/aron/RelaxHandParams.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<AronTypeDefinition> + + <AronIncludes> + <Include include="armarx/control/skills/skills/aron/HandParam.xml" /> + </AronIncludes> + + <GenerateTypes> + + <!-- 'RelaxHand'-skill parameters --> + <Object name="::armarx::control::skills::skills::RelaxHandParams"> + + <ObjectChild key="hand"> + <::armarx::control::skills::skills::Hand /> + </ObjectChild> + + </Object> + + </GenerateTypes> +</AronTypeDefinition> diff --git a/source/armarx/control/skills/skills/aron/ShapeHandParams.xml b/source/armarx/control/skills/skills/aron/ShapeHandParams.xml index 063cf8df..cd468a1a 100644 --- a/source/armarx/control/skills/skills/aron/ShapeHandParams.xml +++ b/source/armarx/control/skills/skills/aron/ShapeHandParams.xml @@ -1,11 +1,11 @@ <?xml version="1.0" encoding="UTF-8" ?> <AronTypeDefinition> - <GenerateTypes> - <IntEnum name="::armarx::control::skills::skills::Hand"> - <EnumValue key="Left" value="0"/> - <EnumValue key="Right" value="1"/> - </IntEnum> + <AronIncludes> + <Include include="armarx/control/skills/skills/aron/HandParam.xml" /> + </AronIncludes> + + <GenerateTypes> <!-- Parameters to define when the skill should terminate (if waiting) --> <Object name="::armarx::control::skills::skills::WaitUntilFinishedParams"> -- GitLab