CloseHandAndAttach.cpp
Go to the documentation of this file.
2
3#include <VirtualRobot/RobotNodeSet.h>
4
7
8namespace armarx::skills
9{
11 .skillId = {.skillName = "CloseHandAndAttach"},
12 .description = "Close the hand and attach an object to it",
13 .timeout = armarx::Duration::MilliSeconds(5000),
14 .parametersType = grasp_object::arondto::CloseHandAndAttachAcceptedType::ToAronType(),
15 };
16
24
26 CloseHandAndAttachSkill::main(const SpecializedMainInput& in)
27 {
31
32 robotReader.connect(mns);
33 objectWriter.connect(mns);
34 objectReader.connect(mns);
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, SkillID{
68 .providerId = ProviderID{.providerName = "HandControlSkillProvider"},
70 auto su = prx.executeSkill(in.executorName, params.toAron());
71
72 ARMARX_CHECK(robotReader.synchronizeRobot(*robot, armem::Time::Now()));
73 objInstance = objectReader.queryLatestObjectInstance(in.parameters.objectEntityId);
74
75 auto objPoseInGlobalFrame = objInstance->objectPoseGlobal;
76 auto objPoseInRootFrame =
77 robot->getRootNode()->toLocalCoordinateSystem(objPoseInGlobalFrame);
78 auto objPoseInTCPFrame = robot->getRobotNodeSet(in.parameters.kinematicChainName)
79 ->getTCP()
80 ->toLocalCoordinateSystem(objPoseInGlobalFrame);
81
82 armem::arondto::ObjectInstance arondto;
83 armarx::armem::toAron(arondto, *objInstance);
84
85 // TODO refactor writer to accept non-dto objects
86 arondto.pose.attachmentValid = true;
87 arondto.pose.attachment.agentName = robot->getName();
88 arondto.pose.attachment.frameName =
89 robot->getRobotNodeSet(in.parameters.kinematicChainName)->getTCP()->getName();
90 arondto.pose.attachment.poseInFrame = objPoseInTCPFrame;
91 arondto.pose.objectPoseRobot = objPoseInRootFrame;
92 arondto.pose.robotPose = objPoseInGlobalFrame;
93 arondto.pose.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)
std::map< std::string, bool > requestLocalization(const ObjectID &instanceId, const armarx::core::time::Duration &until)
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
static Duration MilliSeconds(std::int64_t milliSeconds)
Constructs a duration in milliseconds.
Definition Duration.cpp:48
CloseHandAndAttachSkill(armem::client::MemoryNameSystem &mns, armarx::viz::Client &arviz, TwoArmGraspControlSkillContext &)
grasp_object::arondto::CloseHandAndAttachAcceptedType ArgType
static SkillDescription Description
Definition CloseHand.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
void toAron(arondto::MemoryID &dto, const MemoryID &bo)
This file is part of ArmarX.
A result struct for th main method of a skill.
Definition Skill.h:62
armem::client::MemoryNameSystem & mns