Scheduler.h
Go to the documentation of this file.
1#pragma once
2
3#include <atomic>
4#include <experimental/memory>
5#include <functional>
6#include <mutex>
7#include <optional>
8#include <set>
9#include <string>
10#include <vector>
11
12#include <Eigen/Core>
13
14#include <VirtualRobot/VirtualRobot.h>
15
20
23
26
28{
29
31 {
32 public:
41
42 struct Params
43 {
44 std::string robotName;
45 Eigen::Vector3f defaultTarget;
46 std::string gazeOriginFrameName = "AzureKinect_RGB";
47
48 // Visualization
54 };
55
56 Scheduler(const InjectedServices& srv, const Params& params);
57 virtual ~Scheduler();
58
60 void resetPriorityQueue();
61
63
64 private:
65 VirtualRobot::RobotPtr robot_ = nullptr;
66
67 gaze_targets::GazeTarget _idleGazeTarget;
68
69 // submit next target from queue based on priority and preemption attributes
70 // WARNING: can only be safely called after acquiring the targetLock
71 void scheduleNextTarget();
72
73 void submitControlTarget(const gaze_targets::GazeTarget& target);
74
75 // an irreplaceable default target with low priority used if no other
76 // targets are submitted
77 void resetRequestedTargets();
78
79 void visualizeActiveTarget();
80
81 const InjectedServices srv;
82 const Params params;
83
84 void init();
85
86 // target managemant needs to be synchronized
87 std::atomic_bool _clearGazeTargets = false;
88 std::mutex _newGazeTargetsMutex;
89 std::vector<gaze_targets::GazeTarget> _newGazeTargets;
90 using RequestedTargets = std::multiset<gaze_targets::GazeTarget, std::greater<>>;
91 RequestedTargets requestedTargets;
93 armarx::DateTime currentDeadline = DateTime::Invalid();
96 };
97
98} // namespace armarx::view_selection::gaze_scheduler
static DateTime Invalid()
Definition DateTime.cpp:57
IceUtil::Handle< PeriodicTask< T > > pointer_type
Shared pointer type for convenience.
A simple triple buffer for lockfree comunication between a single writer and a single reader.
Represents a point in time.
Definition DateTime.h:25
void submitToQueue(gaze_targets::GazeTarget target)
Scheduler(const InjectedServices &srv, const Params &params)
Definition Scheduler.cpp:30
void handleTargetUpdate(const gaze_targets::GazeTarget &memoryTarget)
Business Object (BO) class of GazeTarget.
Definition GazeTarget.h:23
std::shared_ptr< class Robot > RobotPtr
Definition Bus.h:19
std::experimental::observer_ptr< viz::Client > arviz
Definition Scheduler.h:37
std::experimental::observer_ptr< ControllerHandlerInterface > controllerHandler
Definition Scheduler.h:39
std::experimental::observer_ptr< armem::robot_state::VirtualRobotReader > virtualRobotReader
Definition Scheduler.h:36