ScanLocation.cpp
Go to the documentation of this file.
1 #include "ScanLocation.h"
2 
3 #include <Eigen/Core>
4 
7 
9 
11 
13 {
14 
15  ScanLocation::ScanLocation(const Services& srv) : Base(DefaultSkillDescription()), srv_(srv)
16  {
17  }
18 
20  ScanLocation::MakeGazeTarget(const Eigen::Vector3f& position,
21  const arondto::ScanLocationParams& parameters)
22  {
23  const std::string frame = parameters.frame;
24  const std::string agent = parameters.agent;
25 
26  const FramedPosition targetPos{
27  position,
28  frame,
29  agent,
30  };
31  const gaze_targets::TargetPriority priority{
33  parameters.priority,
34  };
35 
36  // we schedule targets with the given duration but to avoid that none of our targets is active, we add a small dt here
37  const auto timeEps = Duration::MilliSeconds(100);
38 
39  const Duration duration =
40  Duration::SecondsDouble(parameters.durationPerViewSeconds) + timeEps;
42  parameters.gazeTargetName, targetPos, priority, duration, false};
43 
44  return target;
45  }
46 
47  std::vector<Eigen::Vector3f>
48  ScanLocation::MakeGazeTargetPositions(const arondto::ScanLocationParams& parameters)
49  {
50  const float x = parameters.xDelta;
51  const float y = parameters.y;
52  const float z = parameters.z;
53 
54  const std::vector<Eigen::Vector3f> gazePositions{
55  {-x, y, z},
56  {0, y, z},
57  {x, y, z},
58  };
59 
60  return gazePositions;
61  }
62 
64  ScanLocation::init(const Base::SpecializedInitInput& in)
65  {
66  return ::armarx::skills::Skill::InitResult{
67  .status = ::armarx::skills::TerminatedSkillStatus::Succeeded,
68  };
69  }
70 
72  ScanLocation::main(const Base::SpecializedMainInput& in)
73  {
74  const std::vector<Eigen::Vector3f> gazePositions = MakeGazeTargetPositions(in.parameters);
75  const std::vector<std::string> directionNames{"left", "to the front", "to the right"};
76 
77  const Duration duration = Duration::SecondsDouble(in.parameters.durationPerViewSeconds);
78 
79  for (size_t i = 0; i < gazePositions.size(); ++i)
80  {
81  ARMARX_INFO << "Looking " << directionNames.at(i);
83  MakeGazeTarget(gazePositions.at(i), in.parameters));
84  Clock::WaitFor(duration);
85  }
86 
87  return ::armarx::skills::Skill::MainResult{
88  .status = ::armarx::skills::TerminatedSkillStatus::Succeeded};
89  }
90 
91  void
92  ScanLocation::onStopRequested()
93  {
94  ARMARX_IMPORTANT << "Abort requested.";
95  }
96 
99  {
100  Params defaults;
101  defaults.agent = "Armar7";
102  defaults.frame = "root";
103  defaults.priority = 10;
104  defaults.gazeTargetName = "ScanLocationTarget";
105 
106  defaults.durationPerViewSeconds = 4; // [s]
107  defaults.xDelta = 200; // [mm]
108  defaults.y = 500; // [mm]
109  defaults.z = 800; // [mm]
110 
113  .description = "",
114  .rootProfileDefaults = defaults.toAron(),
116  .parametersType = Params::ToAronType(),
117  };
118  }
119 
120 } // namespace armarx::view_selection::skills
armarx::view_selection::skills
This file is part of ArmarX.
Definition: constants.cpp:25
armarx::skills::SimpleSpecializedSkill< arondto::ScanLocationParams >::init
Skill::InitResult init() final
Definition: SimpleSpecializedSkill.h:62
armarx::view_selection::skills::ScanLocation::MakeGazeTargetPositions
static std::vector< Eigen::Vector3f > MakeGazeTargetPositions(const arondto::ScanLocationParams &parameters)
Definition: ScanLocation.cpp:48
ARMARX_IMPORTANT
#define ARMARX_IMPORTANT
Definition: Logging.h:190
armarx::view_selection::skills::ScanLocation::DefaultSkillDescription
static armarx::skills::SkillDescription DefaultSkillDescription()
Definition: ScanLocation.cpp:98
armarx::skills::Skill::parameters
armarx::aron::data::DictPtr parameters
Definition: Skill.h:320
armarx::view_selection::skills::ScanLocation::MakeGazeTarget
static gaze_targets::GazeTarget MakeGazeTarget(const Eigen::Vector3f &position, const arondto::ScanLocationParams &parameters)
Definition: ScanLocation.cpp:20
armarx::core::time::Clock::WaitFor
static void WaitFor(const Duration &duration)
Wait for a certain duration on the virtual clock.
Definition: Clock.cpp:99
armarx::skills::SkillDescription
Definition: SkillDescription.h:17
boost::target
Vertex target(const detail::edge_base< Directed, Vertex > &e, const PCG &)
Definition: point_cloud_graph.h:668
Duration.h
armarx::view_selection::gaze_targets::GazeTarget
Business Object (BO) class of GazeTarget.
Definition: GazeTarget.h:39
aron_conversions.h
armarx::view_selection::gaze_targets::AttentionType::TaskDriven
@ TaskDriven
Task-Driven attention has highest priority.
armarx::core::time::Duration::Seconds
static Duration Seconds(std::int64_t seconds)
Constructs a duration in seconds.
Definition: Duration.cpp:72
ScanLocation.h
armarx::view_selection::skills::ScanLocation::Params
arondto::ScanLocationParams Params
Definition: ScanLocation.h:42
armarx::FramedPosition
The FramedPosition class.
Definition: FramedPose.h:157
armarx::view_selection::skills::ScanLocation::ScanLocation
ScanLocation(const Services &srv)
Definition: ScanLocation.cpp:15
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
armarx::skills::Skill::MainResult
A result struct for th main method of a skill.
Definition: Skill.h:39
armarx::view_selection::skills::ScanLocation::Services
Definition: ScanLocation.h:45
skill_ids.h
armarx::view_selection::client::ViewSelection::commitGazeTarget
void commitGazeTarget(const gaze_targets::GazeTarget &target)
Definition: ViewSelection.cpp:88
armarx::view_selection::skills::ScanLocation::Services::viewSelectionClient
client::ViewSelection & viewSelectionClient
Definition: ScanLocation.h:47
armarx::view_selection::skills::skill_ids::ScanLocation
const armarx::skills::SkillID ScanLocation
Definition: skill_ids.cpp:52
ARMARX_INFO
#define ARMARX_INFO
Definition: Logging.h:181
armarx::skills::SimpleSpecializedSkill< arondto::ScanLocationParams >::main
Skill::MainResult main() final
Definition: SimpleSpecializedSkill.h:71
armarx::skills::Skill::InitResult::status
TerminatedSkillStatus status
Definition: Skill.h:29
armarx::core::time::Duration
Represents a duration.
Definition: Duration.h:16
armarx::skills::Skill::InitResult
A result struct for skill initialization.
Definition: Skill.h:27
Logging.h
armarx::view_selection::gaze_targets::TargetPriority
The Priority of a GazeTarget.
Definition: TargetPriority.h:39
armarx::armem::Duration
armarx::core::time::Duration Duration
Definition: forward_declarations.h:14
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:27
armarx::core::time::Duration::MilliSeconds
static Duration MilliSeconds(std::int64_t milliSeconds)
Constructs a duration in milliseconds.
Definition: Duration.cpp:48