Skip to content
Snippets Groups Projects
Commit 4084bc72 authored by Patrick Dormanns's avatar Patrick Dormanns
Browse files

implemented RelaxHand-skill

parent 8fb6f2f3
No related branches found
No related tags found
1 merge request!44Implement RelaxHand-skill
Showing
with 137 additions and 39 deletions
......@@ -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);
}
}
}
......
......@@ -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
......
......@@ -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
......@@ -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;
......
......@@ -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)
{
}
......
......@@ -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
#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
#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
......@@ -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)
{
......
#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);
};
......
<?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>
<?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>
<?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">
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment