CloseHandAndAttach.cpp
Go to the documentation of this file.
1 #include "CloseHandAndAttach.h"
2 
3 #include <VirtualRobot/RobotNodeSet.h>
4 
6 #include <RobotAPI/libraries/skills/provider/SkillProxy.h>
7 
8 namespace armarx::skills
9 {
10  SkillDescription CloseHandAndAttachSkill::Description = skills::SkillDescription{
11  "CloseHandAndAttach",
12  "Close the hand and attach an object to it",
13  {},
15  grasp_object::arondto::CloseHandAndAttachAcceptedType::ToAronType()};
16 
18  armarx::viz::Client& arviz,
20  TwoArmGraspControlSkill(mns, arviz, Description.skillName, context),
21  SimpleSpecializedSkill<ArgType>(Description)
22  {
23  }
24 
26  CloseHandAndAttachSkill::main(const SpecializedMainInput& in)
27  {
29  armem::obj::instance::Writer objectWriter(mns);
30  armem::obj::instance::Reader objectReader(mns);
31 
32  robotReader.connect();
33  objectWriter.connect();
34  objectReader.connect();
35 
36  // //////////////////////////////
37  // get robot
38  // //////////////////////////////
39  auto robot =
40  robotReader.getSynchronizedRobot(in.parameters.robotName,
42  VirtualRobot::RobotIO::RobotDescription::eStructure);
43  if (!robot)
44  {
45  ARMARX_ERROR << "Lost robot.";
46  return {TerminatedSkillStatus::Failed, nullptr};
47  }
48 
49  // //////////////////////////////
50  // get object pose
51  // //////////////////////////////
52  objectReader.requestLocalization(in.parameters.objectEntityId,
54  std::this_thread::sleep_for(std::chrono::milliseconds(500));
55 
56  auto objInstance = objectReader.queryLatestObjectInstance(in.parameters.objectEntityId);
57  if (!objInstance)
58  {
59  ARMARX_ERROR << "Lost object pose.";
60  return {TerminatedSkillStatus::Failed, nullptr};
61  }
62 
63  // Close hand
64  skills::hand_control::arondto::CloseHandAcceptedType params;
65  params.kinematicChainName = in.parameters.kinematicChainName;
66 
67  SkillProxy prx({manager, "HandControlSkillProvider", CloseHand::Description.skillName});
68  auto su = prx.executeFullSkill(getSkillId().toString(in.executorName), params.toAron());
69 
70  ARMARX_CHECK(robotReader.synchronizeRobot(*robot, armem::Time::Now()));
71  objInstance = objectReader.queryLatestObjectInstance(in.parameters.objectEntityId);
72 
73  auto objPoseInGlobalFrame = objInstance->objectPoseGlobal;
74  auto objPoseInRootFrame =
75  robot->getRootNode()->toLocalCoordinateSystem(objPoseInGlobalFrame);
76  auto objPoseInTCPFrame = robot->getRobotNodeSet(in.parameters.kinematicChainName)
77  ->getTCP()
78  ->toLocalCoordinateSystem(objPoseInGlobalFrame);
79 
80  armem::arondto::ObjectInstance arondto;
81  armarx::armem::toAron(arondto, *objInstance);
82 
83  // TODO refactor writer to accept non-dto objects
84  arondto.pose.attachmentValid = true;
85  arondto.pose.attachment.agentName = robot->getName();
86  arondto.pose.attachment.frameName =
87  robot->getRobotNodeSet(in.parameters.kinematicChainName)->getTCP()->getName();
88  arondto.pose.attachment.poseInFrame = objPoseInTCPFrame;
89  arondto.pose.objectPoseRobot = objPoseInRootFrame;
90  arondto.pose.robotPose = objPoseInGlobalFrame;
91  arondto.pose.robotConfig = robot->getJointValues();
92 
93  objectWriter.commitObject(arondto, objInstance->providerName, armem::Time::Now());
94 
95  return {su.status, nullptr};
96  }
97 } // namespace armarx::skills
armarx::skills::mixin::MNSSkillMixin::mns
armem::client::MemoryNameSystem mns
Definition: MNSSkillMixin.h:11
armarx::skills::CloseHand::Description
static SkillDescription Description
Definition: CloseHand.h:46
armarx::armem::robot_state::VirtualRobotReader
The VirtualRobotReader class.
Definition: VirtualRobotReader.h:39
armarx::skills::Skill::manager
manager::dti::SkillManagerInterfacePrx manager
Definition: Skill.h:291
armarx::skills::CloseHandAndAttachSkill::ArgType
grasp_object::arondto::CloseHandAndAttachAcceptedType ArgType
Definition: CloseHandAndAttach.h:21
armarx::skills::CloseHandAndAttachSkill::Description
static SkillDescription Description
Definition: CloseHandAndAttach.h:31
armarx::skills
This file is part of ArmarX.
Definition: PeriodicUpdateWidget.cpp:11
armarx::core::time::DateTime::Now
static DateTime Now()
Definition: DateTime.cpp:51
armarx::skills::CloseHandAndAttachSkill::CloseHandAndAttachSkill
CloseHandAndAttachSkill(armem::client::MemoryNameSystem &mns, armarx::viz::Client &arviz, TwoArmGraspControlSkillContext &)
Definition: CloseHandAndAttach.cpp:17
armarx::armem::toAron
void toAron(arondto::MemoryID &dto, const MemoryID &bo)
Definition: aron_conversions.cpp:19
armarx::armem::obj::instance::Reader
Definition: ObjectReader.h:41
ARMARX_CHECK
#define ARMARX_CHECK(expression)
Shortcut for ARMARX_CHECK_EXPRESSION.
Definition: ExpressionException.h:82
armarx::armem::obj::instance::Writer
Definition: ObjectWriter.h:36
armarx::skills::SimpleSpecializedSkill
Definition: SimpleSpecializedSkill.h:10
CloseHandAndAttach.h
ARMARX_ERROR
#define ARMARX_ERROR
Definition: Logging.h:196
armarx::skills::Skill::MainResult
A result struct for th main method of a skill.
Definition: Skill.h:39
armarx::skills::TerminatedSkillStatus::Failed
@ Failed
armarx::skills::SimpleSpecializedSkill< grasp_object::arondto::CloseHandAndAttachAcceptedType >::main
Skill::MainResult main() final
Definition: SimpleSpecializedSkill.h:71
armarx::skills::TwoArmGraspControlSkill
Definition: GraspControlSkill.h:77
armarx::viz::toString
const char * toString(InteractionFeedbackType type)
Definition: Interaction.h:28
armarx::skills::TwoArmGraspControlSkillContext
Definition: GraspControlSkill.h:46
armarx::armem::client::MemoryNameSystem
The memory name system (MNS) client.
Definition: MemoryNameSystem.h:68
aron_conversions.h
armarx::viz::Client
Definition: Client.h:117
armarx::skills::Skill::getSkillId
SkillID getSkillId() const
Get the id of the skill.
Definition: Skill.cpp:497
armarx::core::time::Duration::MilliSeconds
static Duration MilliSeconds(std::int64_t milliSeconds)
Constructs a duration in milliseconds.
Definition: Duration.cpp:48