LookAtObject.cpp
Go to the documentation of this file.
1 #include "LookAtObject.h"
2 
3 #include <Eigen/Core>
4 
7 
13 
14 #include <armarx/view_selection/skills/aron/LookAt.aron.generated.h>
17 
19 {
20  LookAtObject::LookAtObject(const Services& srv) : Base(DefaultSkillDescription()), srv_(srv)
21  {
22  }
23 
25  LookAtObject::init(const Base::SpecializedInitInput& in)
26  {
27  return ::armarx::skills::Skill::InitResult{
28  .status = ::armarx::skills::TerminatedSkillStatus::Succeeded};
29  }
30 
32  LookAtObject::main(const Base::SpecializedMainInput& in)
33  {
34  ARMARX_INFO << "Querying object";
35 
36  ObjectID objectID;
37  fromAron(in.parameters.object, objectID);
38 
39  const auto result = srv_.objectInstanceReader->queryLatestObjectInstance(objectID);
40 
41  if (not result)
42  {
43  ARMARX_INFO << "Memory query did not provide any observation for " << objectID;
44  return MakeFailedResult();
45  }
46 
47  const armarx::objpose::ObjectPose objectObservation = result.value();
48 
49  const Eigen::Vector3f globalPosition = objectObservation.objectPoseGlobal.block<3, 1>(0, 3);
50 
51  // generate view target
52  const armarx::view_selection::gaze_targets::arondto::GazeTarget gazeTarget = [&]()
53  {
54  armarx::view_selection::gaze_targets::arondto::GazeTarget gazeTarget;
55  gazeTarget.name = "LookAtObject_" + objectID.str();
56 
57  gazeTarget.position.header.agent = ""; // not needed
58  gazeTarget.position.header.frame = armarx::GlobalFrame; // not needed
59 
60  gazeTarget.position.position = globalPosition;
61 
62  gazeTarget.duration =
63  armarx::core::time::Duration::SecondsDouble(in.parameters.durationSeconds);
64 
65  gazeTarget.priority.attentionType =
67  gazeTarget.priority.priority = in.parameters.priority;
68 
69  gazeTarget.creationTimestamp = Clock::Now();
70  gazeTarget.keepInQueue = false;
71 
72  return gazeTarget;
73  }();
74 
75  // execute subskill
76  {
77  using Parameters = armarx::view_selection::skills::arondto::LookAtParams;
78 
80  manager,
82  .providerId =
84  armarx::view_selection::skills::constants::
85  ViewSelectionSkillProviderName},
87  Parameters subSkillParams = subSkill.getRootProfileParameters();
88 
89  subSkillParams.target = gazeTarget;
90 
91  auto update = callSubskill(subSkill, subSkillParams.toAron());
92 
93  if (update.has_value() and not update->hasBeenSucceeded())
94  {
95  return MakeFailedResult();
96  }
97  }
98 
99  return MakeSucceededResult();
100  }
101 
102  void
103  LookAtObject::onStopRequested()
104  {
105  }
106 
109  {
110  Params defaults;
111  defaults.priority = 100;
112  //defaults.maxObservationAgeSeconds = 15 * 60; // quater of an hour
113  defaults.durationSeconds = 1.5;
114 
117  .description = "Look at the location where an instance of the object class has most "
118  "recently been seen.",
119  .rootProfileDefaults = defaults.toAron(),
120  .timeout = armarx::Duration::Minutes(5),
121  .parametersType = Params::ToAronType(),
122  .resultType = Result::ToAronType(),
123  };
124  }
125 
126 } // namespace armarx::view_selection::skills
armarx::view_selection::skills
This file is part of ArmarX.
Definition: constants.cpp:25
armarx::skills::SimpleSpecializedSkill< arondto::LookAtObjectParams >::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
armarx::ObjectID
A known object ID of the form "Dataset/ClassName" or "Dataset/ClassName/InstanceName".
Definition: ObjectID.h:10
armarx::view_selection::skills::LookAtObject::Services
Definition: LookAtObject.h:43
SpecializedSkillProxy.h
armarx::view_selection::skills::LookAtObject::Services::objectInstanceReader
std::experimental::observer_ptr<::armarx::armem::obj::instance::Reader > objectInstanceReader
Definition: LookAtObject.h:46
armarx::skills::SkillDescription
Definition: SkillDescription.h:17
armarx::GlobalFrame
const std::string GlobalFrame
Definition: FramedPose.h:65
armarx::skills::ProviderID::providerName
std::string providerName
Definition: ProviderID.h:28
armarx::view_selection::skills::LookAtObject::DefaultSkillDescription
static armarx::skills::SkillDescription DefaultSkillDescription()
Definition: LookAtObject.cpp:108
Duration.h
armarx::skills::SkillID::providerId
std::optional< ProviderID > providerId
Definition: SkillID.h:40
armarx::skills::gui::Parameters
aron::data::DictPtr Parameters
Definition: SkillManagerWrapper.h:21
aron_conversions.h
armarx::view_selection::skills::LookAtObject::LookAtObject
LookAtObject(const Services &srv)
Definition: LookAtObject.cpp:20
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::skills::Skill::MakeFailedResult
static MainResult MakeFailedResult()
Definition: Skill.cpp:355
LookAtObject.h
armarx::skills::ProviderID
Definition: ProviderID.h:12
armarx::view_selection::skills::LookAtObject::Params
arondto::LookAtObjectParams Params
Definition: LookAtObject.h:39
FramedPose.h
armarx::skills::SpecializedSkillProxy
Definition: SpecializedSkillProxy.h:10
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::view_selection::skills::skill_ids::LookAtObject
const armarx::skills::SkillID LookAtObject
Definition: skill_ids.cpp:48
armarx::core::time::Duration::Minutes
static Duration Minutes(std::int64_t minutes)
Constructs a duration in minutes.
Definition: Duration.cpp:96
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::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
forward_declarations.h
armarx::objpose::ObjectPose::objectPoseGlobal
Eigen::Matrix4f objectPoseGlobal
The object pose in the global frame.
Definition: ObjectPose.h:71
ARMARX_INFO
#define ARMARX_INFO
Definition: Logging.h:181
armarx::skills::SimpleSpecializedSkill< arondto::LookAtObjectParams >::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::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::objpose::ObjectPose
An object pose as stored by the ObjectPoseStorage.
Definition: ObjectPose.h:33
armarx::ObjectID::str
std::string str() const
Return "dataset/className" or "dataset/className/instanceName".
Definition: ObjectID.cpp:60