OpenHandAndDetach.cpp
Go to the documentation of this file.
1#include "OpenHandAndDetach.h"
2
3#include <VirtualRobot/RobotNodeSet.h>
4
6
8
9namespace armarx::skills
10{
12 .skillId = {.skillName = "OpenHandAndDetach"},
13 .description = "Open the hand and detach an object from it",
14 .timeout = armarx::Duration::MilliSeconds(120000),
15 .parametersType = grasp_object::arondto::OpenHandAndDetachAcceptedType::ToAronType(),
16 };
17
25
27 OpenHandAndDetachSkill::main(const SpecializedMainInput& in)
28 {
32
33 robotReader.connect(mns);
34 objectWriter.connect(mns);
35 objectReader.connect(mns);
36
37 // //////////////////////////////
38 // get robot
39 // //////////////////////////////
40 auto robot =
41 robotReader.getSynchronizedRobot(in.parameters.robotName,
43 VirtualRobot::RobotIO::RobotDescription::eStructure);
44 if (!robot)
45 {
46 ARMARX_ERROR << "Lost robot.";
47 return {TerminatedSkillStatus::Failed, nullptr};
48 }
49
50 // //////////////////////////////
51 // get object pose
52 // //////////////////////////////
53 auto objInstance = objectReader.queryLatestObjectInstance(in.parameters.objectEntityId);
54 if (!objInstance)
55 {
56 ARMARX_ERROR << "Lost object pose.";
57 return {TerminatedSkillStatus::Failed, nullptr};
58 }
59
60 // Open hand
61 skills::hand_control::arondto::OpenHandAcceptedType params;
62 params.kinematicChainName = in.parameters.kinematicChainName;
63
64 SkillProxy prx(manager, SkillID{
65 .providerId = ProviderID{.providerName = context.handControlSkillProvider},
67 auto su = prx.executeSkill(in.executorName, params.toAron());
68
69 ARMARX_CHECK(robotReader.synchronizeRobot(*robot, armem::Time::Now()));
70 objInstance = objectReader.queryLatestObjectInstance(in.parameters.objectEntityId);
71 if (!objInstance)
72 {
73 ARMARX_ERROR << "Lost object pose.";
74 return {TerminatedSkillStatus::Failed, nullptr};
75 }
76
77 auto objPoseInRootFrame = objInstance->objectPoseRobot;
78 auto robotPoseGlobal = robot->getRootNode()->getGlobalPose();
79
80 auto newObjPoseGlobal = robotPoseGlobal * objPoseInRootFrame;
81
82 //auto objPoseInTCPFrame = robot->getRobotNodeSet(in.kinematicChainName)->getTCP()->toLocalCoordinateSystem(objPoseInGlobalFrame);
83
84 armem::arondto::ObjectInstance arondto;
85
86 // TODO
87 // objInstance->attachmentValid = false;
88 // objInstance->attachment.agentName = "";
89 // objInstance->attachment.frameName = "";
90 // objInstance->objectPoseGlobal = newObjPoseGlobal;
91 // objInstance->objectPoseRobot = objPoseInRootFrame;
92 // objInstance->robotPose = robot->getRootNode()->getGlobalPose();
93 // objInstance->robotConfig = robot->getJointValues();
94
95 objectWriter.commitObject(arondto, objInstance->providerName, armem::Time::Now());
96
97 return {su.status, nullptr};
98 }
99} // namespace armarx::skills
static Duration MilliSeconds(std::int64_t milliSeconds)
Constructs a duration in milliseconds.
Definition Duration.cpp:48
The memory name system (MNS) client.
std::optional< objpose::ObjectPose > queryLatestObjectInstance(const ObjectID &instanceId)
void connect(armem::client::MemoryNameSystem &memoryNameSystem)
void connect(armem::client::MemoryNameSystem &memoryNameSystem)
bool commitObject(const armem::arondto::ObjectInstance &inst, const std::string &provider, const armem::Time &)
virtual void connect(armem::client::MemoryNameSystem &memoryNameSystem)
VirtualRobot::RobotPtr getSynchronizedRobot(const std::string &name, const VirtualRobot::RobotIO::RobotDescription &loadMode=VirtualRobot::RobotIO::RobotDescription::eStructure, bool blocking=true)
bool synchronizeRobot(VirtualRobot::Robot &robot, const armem::Time &timestamp) const
Synchronize both the platform pose and the joint values of a virtual robot, according to the robot st...
static DateTime Now()
Definition DateTime.cpp:51
grasp_object::arondto::OpenHandAndDetachAcceptedType ArgType
OpenHandAndDetachSkill(armem::client::MemoryNameSystem &mns, armarx::viz::Client &arviz, TwoArmGraspControlSkillContext &)
static SkillDescription Description
Definition OpenHand.h:46
std::string skillName
Definition SkillID.h:41
manager::dti::SkillManagerInterfacePrx manager
Definition Skill.h:363
virtual MainResult main()
Override this method with the actual implementation.
Definition Skill.cpp:542
TwoArmGraspControlSkill(armem::client::MemoryNameSystem &mns, armarx::viz::Client &arviz, const std::string &layerName, TwoArmGraspControlSkillContext &c)
TwoArmGraspControlSkillContext & context
#define ARMARX_CHECK(expression)
Shortcut for ARMARX_CHECK_EXPRESSION.
#define ARMARX_ERROR
The logging level for unexpected behaviour, that must be fixed.
Definition Logging.h:196
This file is part of ArmarX.
A result struct for th main method of a skill.
Definition Skill.h:62
armem::client::MemoryNameSystem & mns