LookAtArticulatedObjectFrame.cpp
Go to the documentation of this file.
2 
3 #include <Eigen/Core>
4 
5 #include <VirtualRobot/XML/RobotIO.h>
6 
10 
17 
18 #include <armarx/view_selection/skills/aron/LookAt.aron.generated.h>
21 
23 {
25  Base(DefaultSkillDescription()), srv_(srv)
26  {
27  }
28 
30  LookAtArticulatedObjectFrame::init(const Base::SpecializedInitInput& in)
31  {
32  return ::armarx::skills::Skill::InitResult{
33  .status = ::armarx::skills::TerminatedSkillStatus::Succeeded};
34  }
35 
37  LookAtArticulatedObjectFrame::main(const Base::SpecializedMainInput& in)
38  {
39  ARMARX_INFO << "Querying descriptions";
40  const auto descriptions = srv_.articulatedObjectReader->queryDescriptions(
41  Clock::Now(), in.parameters.objectPoseProvider);
42 
43  ARMARX_INFO << "Available descriptions are:";
44  for (const auto& description : descriptions)
45  {
47  }
48 
49  ObjectID objectID;
50  fromAron(in.parameters.object, objectID);
51 
52  const std::string objectName = objectID.dataset() + "/" + objectID.className();
53  ARMARX_INFO << "Searching for object name `" << objectName << "`";
54 
55  const auto isMatchingDescription = [&objectID](const auto& description) -> bool
56  { return objectID.equalClass(ObjectID(description.name)); };
57 
58  const auto descriptionIt =
59  std::find_if(descriptions.begin(), descriptions.end(), isMatchingDescription);
60  ARMARX_CHECK(descriptionIt != descriptions.end())
61  << "Description " << objectID << " not available";
62 
63  ARMARX_INFO << "getting object";
64  std::optional<armarx::armem::articulated_object::ArticulatedObject> objectOpt =
65  srv_.articulatedObjectReader->get(*descriptionIt,
66  Clock::Now(),
67  objectID.instanceName(),
68  in.parameters.objectPoseProvider);
69  ARMARX_CHECK(objectOpt);
70 
71  // load object
72 
73  armarx::armem::articulated_object::ArticulatedObject articulatedObject = *objectOpt;
74 
75  const std::string xmlFilename = articulatedObject.description.xml.toSystemPath();
76  ARMARX_INFO << "Loading (virtual) robot '" << articulatedObject.description.name
77  << "' from XML file '" << xmlFilename << "'";
78 
79  auto object = VirtualRobot::RobotIO::loadRobot(
80  xmlFilename, VirtualRobot::RobotIO::RobotDescription::eStructure);
81  ARMARX_CHECK_NOT_NULL(object);
82 
83  object->setJointValues(articulatedObject.config.jointMap);
84  object->setGlobalPose(articulatedObject.config.globalPose.matrix());
85  object->setName(objectID.str()); // this is optional, name not used directly
86 
87  // obtain global pose of frame
88 
89  const auto node = object->getRobotNode(in.parameters.node);
90  ARMARX_CHECK_NOT_NULL(node) << ("`" + in.parameters.node + "` node does not exist");
91 
92  const Eigen::Vector3f globalPose = node->getGlobalPosition();
93 
94  // generate view target
95  const armarx::view_selection::gaze_targets::arondto::GazeTarget gazeTarget = [&]()
96  {
97  armarx::view_selection::gaze_targets::arondto::GazeTarget gazeTarget;
98  gazeTarget.name =
99  "LookAtArticulatedObjectFrame_" + objectID.str() + ":" + in.parameters.node;
100 
101  gazeTarget.position.header.agent = ""; // not needed
102  gazeTarget.position.header.frame = armarx::GlobalFrame; // not needed
103 
104  gazeTarget.position.position = globalPose;
105 
106  gazeTarget.duration =
107  armarx::core::time::Duration::SecondsDouble(in.parameters.durationSeconds);
108 
109  gazeTarget.priority.attentionType =
111  gazeTarget.priority.priority = in.parameters.priority;
112 
113  gazeTarget.creationTimestamp = Clock::Now();
114  gazeTarget.keepInQueue = false;
115 
116  return gazeTarget;
117  }();
118 
119  // execute subskill
120  {
121  using Parameters = armarx::view_selection::skills::arondto::LookAtParams;
122 
124  manager,
126  .providerId =
128  armarx::view_selection::skills::constants::
129  ViewSelectionSkillProviderName},
131  Parameters subSkillParams = subSkill.getRootProfileParameters();
132 
133  subSkillParams.target = gazeTarget;
134 
135  auto update = callSubskill(subSkill, subSkillParams.toAron());
136 
137  if (update.has_value() and not update->hasBeenSucceeded())
138  {
139  return MakeFailedResult();
140  }
141  }
142 
143  return MakeSucceededResult();
144  }
145 
146  void
147  LookAtArticulatedObjectFrame::onStopRequested()
148  {
149  }
150 
153  {
154  Params defaults;
155  defaults.priority = 100;
156  defaults.objectPoseProvider = std::nullopt; // "any"
157 
160  .description = "",
161  .rootProfileDefaults = defaults.toAron(),
162  .timeout = armarx::Duration::Minutes(10),
163  .parametersType = Params::ToAronType(),
164  .resultType = Result::ToAronType(),
165  };
166  }
167 
168 } // namespace armarx::view_selection::skills
armarx::view_selection::skills
This file is part of ArmarX.
Definition: constants.cpp:25
armarx::skills::SimpleSpecializedSkill< arondto::LookAtArticulatedObjectFrameParams >::init
Skill::InitResult init() final
Definition: SimpleSpecializedSkill.h:62
armarx::view_selection::skills::constants::skill_names::LookAt
const std::string LookAt
Definition: constants.cpp:36
armarx::skills::Skill::manager
manager::dti::SkillManagerInterfacePrx manager
Definition: Skill.h:314
SkillID.h
armarx::armem::robot_state::Robot
Definition: types.h:126
SpecializedSkillProxy.h
armarx::armem::attachment::ObjectID
armem::MemoryID ObjectID
Definition: types.h:79
armarx::skills::SkillDescription
Definition: SkillDescription.h:17
ARMARX_CHECK_NOT_NULL
#define ARMARX_CHECK_NOT_NULL(ptr)
This macro evaluates whether ptr is not null and if it turns out to be false it will throw an Express...
Definition: ExpressionException.h:206
armarx::GlobalFrame
const std::string GlobalFrame
Definition: FramedPose.h:65
armarx::skills::ProviderID::providerName
std::string providerName
Definition: ProviderID.h:28
Duration.h
armarx::skills::SkillID::providerId
std::optional< ProviderID > providerId
Definition: SkillID.h:40
armarx::armem::robot_state::description::RobotDescription::xml
PackagePath xml
Definition: types.h:49
armarx::skills::gui::Parameters
aron::data::DictPtr Parameters
Definition: SkillManagerWrapper.h:21
armarx::armem::robot_state::RobotState::jointMap
JointMap jointMap
Definition: types.h:121
aron_conversions.h
armarx::view_selection::skills::LookAtArticulatedObjectFrame::Services
Definition: LookAtArticulatedObjectFrame.h:44
armarx::view_selection::skills::skill_ids::LookAtArticulatedObjectFrame
const armarx::skills::SkillID LookAtArticulatedObjectFrame
Definition: skill_ids.cpp:44
armarx::skills::Skill::callSubskill
std::optional< TerminatedSkillStatusUpdate > callSubskill(const skills::SkillProxy &proxy)
Call a subskill with default parameters and block until the subskill terminates.
Definition: Skill.cpp:32
ARMARX_CHECK
#define ARMARX_CHECK(expression)
Shortcut for ARMARX_CHECK_EXPRESSION.
Definition: ExpressionException.h:82
armarx::skills::Skill::MakeFailedResult
static MainResult MakeFailedResult()
Definition: Skill.cpp:355
armarx::skills::ProviderID
Definition: ProviderID.h:12
armarx::view_selection::skills::LookAtArticulatedObjectFrame::Params
arondto::LookAtArticulatedObjectFrameParams Params
Definition: LookAtArticulatedObjectFrame.h:40
LookAtArticulatedObjectFrame.h
FramedPose.h
armarx::PackagePath::toSystemPath
static std::filesystem::path toSystemPath(const data::PackagePath &pp)
Definition: PackagePath.cpp:47
armarx::armem::robot_state::Robot::config
RobotState config
Definition: types.h:131
armarx::view_selection::skills::LookAtArticulatedObjectFrame::Services::articulatedObjectReader
std::experimental::observer_ptr<::armarx::armem::articulated_object::Reader > articulatedObjectReader
Definition: LookAtArticulatedObjectFrame.h:47
armarx::skills::SpecializedSkillProxy
Definition: SpecializedSkillProxy.h:10
armarx::skills::Skill::description
SkillDescription description
Definition: Skill.h:323
armarx::skills::SkillDescription::skillId
SkillID skillId
Definition: SkillDescription.h:19
armarx::skills::SimpleSpecializedSkill
Definition: SimpleSpecializedSkill.h:10
armarx::core::time::Duration::SecondsDouble
static Duration SecondsDouble(double seconds)
Constructs a duration in seconds.
Definition: Duration.cpp:78
Metronome.h
constants.h
armarx::core::time::Duration::Minutes
static Duration Minutes(std::int64_t minutes)
Constructs a duration in minutes.
Definition: Duration.cpp:96
armarx::armem::robot_state::RobotState::globalPose
Pose globalPose
Definition: types.h:120
armarx::skills::Skill::MakeSucceededResult
static MainResult MakeSucceededResult(aron::data::DictPtr data=nullptr)
Definition: Skill.cpp:346
armarx::skills::Skill::MainResult
A result struct for th main method of a skill.
Definition: Skill.h:39
skill_ids.h
armarx::view_selection::skills::LookAtArticulatedObjectFrame::DefaultSkillDescription
static armarx::skills::SkillDescription DefaultSkillDescription()
Definition: LookAtArticulatedObjectFrame.cpp:152
armarx::armem::server::ltm::util::mongodb::detail::update
bool update(mongocxx::collection &coll, const nlohmann::json &query, const nlohmann::json &update)
Definition: mongodb.cpp:68
armarx::view_selection::gaze_targets::dto::AttentionType::TaskDriven
@ TaskDriven
Definition: GazeTargets.ice:19
ExpressionException.h
forward_declarations.h
armarx::armem::robot_state::description::RobotDescription::name
std::string name
Definition: types.h:48
ARMARX_INFO
#define ARMARX_INFO
Definition: Logging.h:181
armarx::skills::SimpleSpecializedSkill< arondto::LookAtArticulatedObjectFrameParams >::main
Skill::MainResult main() final
Definition: SimpleSpecializedSkill.h:71
armarx::skills::Skill::InitResult::status
TerminatedSkillStatus status
Definition: Skill.h:29
armarx::skills::Skill::InitResult
A result struct for skill initialization.
Definition: Skill.h:27
armarx::view_selection::skills::LookAtArticulatedObjectFrame::LookAtArticulatedObjectFrame
LookAtArticulatedObjectFrame(const Services &srv)
Definition: LookAtArticulatedObjectFrame.cpp:24
armarx::fromAron
void fromAron(const arondto::PackagePath &dto, PackageFileLocation &bo)
armarx::core::time::Clock::Now
static DateTime Now()
Current time on the virtual clock.
Definition: Clock.cpp:93
armarx::skills::SkillID
Definition: SkillID.h:14
aron_conversions.h
armarx::armem::robot_state::Robot::description
description::RobotDescription description
Definition: types.h:128