ScanLocation.cpp
Go to the documentation of this file.
1#include "ScanLocation.h"
2
3#include <Eigen/Core>
4
7
9
11
13{
14
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::Seconds(5);
38
39 const Duration duration =
40 Duration::SecondsDouble(parameters.durationPerViewSeconds) + timeEps;
41 const gaze_targets::GazeTarget target{parameters.gazeTargetName,
42 targetPos,
43 priority,
44 duration,
45 false};
46
47 return target;
48 }
49
50 std::vector<Eigen::Vector3f>
51 ScanLocation::MakeGazeTargetPositions(const arondto::ScanLocationParams& parameters)
52 {
53 const float x = parameters.xDelta;
54 const float y = parameters.y;
55 const float z = parameters.z;
56
57 const std::vector<Eigen::Vector3f> gazePositions{
58 {-x, y, z},
59 {0, y, z},
60 {x, y, z},
61 };
62
63 return gazePositions;
64 }
65
67 ScanLocation::init(const Base::SpecializedInitInput& in)
68 {
69 return ::armarx::skills::Skill::InitResult{
71 };
72 }
73
75 ScanLocation::main(const Base::SpecializedMainInput& in)
76 {
77 const std::vector<Eigen::Vector3f> gazePositions = MakeGazeTargetPositions(in.parameters);
78 const std::vector<std::string> directionNames{"left", "to the front", "to the right"};
79
80 const Duration duration = Duration::SecondsDouble(in.parameters.durationPerViewSeconds);
81
82 for (size_t i = 0; i < gazePositions.size(); ++i)
83 {
84 ARMARX_INFO << "Looking " << directionNames.at(i);
86 MakeGazeTarget(gazePositions.at(i), in.parameters));
87 Clock::WaitFor(duration);
88 }
89
90 if (in.parameters.keepCentralGazeTargetAfterScanning)
91 {
92 const float y = in.parameters.y;
93 const float z = in.parameters.z;
94
95 const Eigen::Vector3f gazePosition{0, y, z};
96
97 auto const infinite = armarx::Duration::MilliSeconds(-1);
98
99 auto gazeTarget = MakeGazeTarget(gazePosition, in.parameters);
100 gazeTarget.duration = infinite;
101
102 ARMARX_INFO << "Spawning final gaze target at the center";
103 srv_.viewSelectionClient.commitGazeTarget(gazeTarget);
104 }
105
106 return ::armarx::skills::Skill::MainResult{
108 }
109
110 void
111 ScanLocation::onStopRequested()
112 {
113 ARMARX_IMPORTANT << "Abort requested.";
114 }
115
116 armarx::skills::SkillDescription
118 {
119 Params defaults;
120 defaults.agent = "Armar7";
121 defaults.frame = "root";
122 defaults.priority = 10;
123 defaults.gazeTargetName = "ScanLocationTarget";
124 defaults.keepCentralGazeTargetAfterScanning = false;
125
126 defaults.durationPerViewSeconds = 4; // [s]
127 defaults.xDelta = 200; // [mm]
128 defaults.y = 500; // [mm]
129 defaults.z = 800; // [mm]
130
132 .skillId = skill_ids::ScanLocation,
133 .description = "",
134 .rootProfileDefaults = defaults.toAron(),
136 .parametersType = Params::ToAronType(),
137 };
138 }
139
140} // namespace armarx::view_selection::skills
static void WaitFor(const Duration &duration)
Wait for a certain duration on the virtual clock.
Definition Clock.cpp:99
static Duration Seconds(std::int64_t seconds)
Constructs a duration in seconds.
Definition Duration.cpp:72
static Duration SecondsDouble(double seconds)
Constructs a duration in seconds.
Definition Duration.cpp:78
static Duration MilliSeconds(std::int64_t milliSeconds)
Constructs a duration in milliseconds.
Definition Duration.cpp:48
The FramedPosition class.
Definition FramedPose.h:158
Represents a duration.
Definition Duration.h:17
static Duration Seconds(std::int64_t seconds)
Constructs a duration in seconds.
Definition Duration.cpp:72
armarx::aron::data::DictPtr parameters
Definition Skill.h:369
void commitGazeTarget(const gaze_targets::GazeTarget &target)
Business Object (BO) class of GazeTarget.
Definition GazeTarget.h:23
static gaze_targets::GazeTarget MakeGazeTarget(const Eigen::Vector3f &position, const arondto::ScanLocationParams &parameters)
::armarx::skills::SimpleSpecializedSkill< Params > Base
static std::vector< Eigen::Vector3f > MakeGazeTargetPositions(const arondto::ScanLocationParams &parameters)
static armarx::skills::SkillDescription DefaultSkillDescription()
#define ARMARX_INFO
The normal logging level.
Definition Logging.h:181
#define ARMARX_IMPORTANT
The logging level for always important information, but expected behaviour (in contrast to ARMARX_WAR...
Definition Logging.h:190
@ TaskDriven
Task-Driven attention has highest priority.
const armarx::skills::SkillID ScanLocation
Definition skill_ids.cpp:56
This file is part of ArmarX.
Definition constants.cpp:26
This file offers overloads of toIce() and fromIce() functions for STL container types.
A result struct for skill initialization.
Definition Skill.h:50
A result struct for th main method of a skill.
Definition Skill.h:62