GazeController.h
Go to the documentation of this file.
1 /*
2  * This file is part of ArmarX.
3  *
4  * ArmarX is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation.
7  *
8  * ArmarX is distributed in the hope that it will be useful, but
9  * WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program. If not, see <http://www.gnu.org/licenses/>.
15  *
16  * @package view_selection
17  * @author Johann Mantel
18  * @date 2020
19  * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
20  * GNU General Public License
21  */
22 
23 #pragma once
24 
25 #include <VirtualRobot/VirtualRobot.h>
26 
29 
30 #include <armarx/control/interface/ConfigurableNJointControllerInterface.h>
31 #include <armarx/view_selection/gaze_controller/hemisphere/aron/ControllerConfig.aron.generated.h>
34 
35 namespace armarx
36 {
37  class ControlTarget1DoFActuatorPosition;
38 }
39 
41 {
42  TYPEDEF_PTRS_HANDLE(GazeController);
43 
44  struct Params
45  {
46  std::string nodeSetName;
49  std::size_t maxLoops;
51  };
52 
53  struct Config
54  {
56  std::optional<armarx::view_selection::gaze_controller::Target> target;
57  };
58 
59  using ControlTarget = std::vector<float>;
60 
61  /**
62  * @defgroup Component-GazeControl GazeControl
63  * @ingroup ActiveVision-Components
64  * A description of the component GazeControl.
65  *
66  * @class GazeControl
67  * @ingroup Component-GazeControl
68  * @brief Brief description of class GazeControl.
69  *
70  * Detailed description of class GazeControl.
71  */
73  virtual public NJointControllerWithTripleBuffer<ControlTarget>,
74  virtual public armarx::control::ConfigurableNJointControllerInterface
75  {
76  public:
77  using ConfigPtrT = control::ConfigurableNJointControllerConfigPtr;
78 
79  GazeController(RobotUnitPtr robotUnit,
80  const NJointControllerConfigPtr& config,
81  const VirtualRobot::RobotPtr& robot);
82 
83  ~GazeController() override;
84 
86  const Ice::Current& iceCurrent = Ice::emptyCurrent) override;
87 
89  getConfig(const ::Ice::Current& = ::Ice::emptyCurrent) override;
90 
91 
92  protected:
93  // NJointControllerInterface interface
94  void onInitNJointController() override;
95 
96  // NJointControllerInterface interface
97  void onConnectNJointController() override;
98 
99  // NJointControllerInterface interface
100  std::string getClassName(const Ice::Current& = Ice::emptyCurrent) const override;
101 
102  // NJointController interface
103  void rtRun(const IceUtil::Time& sensorValuesTimestamp,
104  const IceUtil::Time& timeSinceLastIteration) override;
105 
106  // NJointController interface
107  void onPublish(const SensorAndControl&,
109  const DebugObserverInterfacePrx&) override;
110 
111  void rtPreActivateController() override;
112 
113  void rtPostDeactivateController() override;
114 
115  private:
116  // void publishTarget(const armarx::view_selection::gaze_targets::GazeTarget& target);
117  void removeTarget();
118  void additionalTask();
119 
120  // rt variables
121  VirtualRobot::RobotPtr _rtRobot;
122 
123  struct RobotState
124  {
125  std::vector<float> jointValues;
126  // armarx::NameValueMap jointPositions;
127  Eigen::Matrix4f globalRobotPose;
128  };
129 
130  TripleBuffer<RobotState> _robotStateBuffer_rtToAdditionalTask;
131  TripleBuffer<Config> _configBuffer_updateConfigToAdditionalTask;
132  VirtualRobot::RobotPtr _robotAdditionalTask;
133  VirtualRobot::RobotNodePrismaticPtr _virtualPrismaticJoint;
134  VirtualRobot::RobotNodeSetPtr _headNodeSet;
135  std::unique_ptr<VirtualRobot::GazeIK> _gazeIK;
136 
137  std::vector<VirtualRobot::RobotNodePtr> _rtRobotNodes;
138 
139  // node names for RobotState::jointValues
140  std::vector<std::string> _additionalTaskRobotNodeNames;
141 
142 
143  std::vector<armarx::ControlTarget1DoFActuatorPosition*> _rtCtrlTargets;
144 
145  // publishing
147  _gazeTarget_rtRunToPublishing;
148 
149  std::atomic<float> _publishCurrentPitchAngle = 0.0;
150  std::atomic<float> _publishCurrentYawAngle = 0.0;
151  std::atomic<float> _publishTargetPitchAngle = 0.0;
152  std::atomic<float> _publishTargetYawAngle = 0.0;
153 
154  std::atomic_bool rtReady = false;
155  };
156 } // namespace armarx::view_selection::gaze_controller::gaze_ik
armarx::view_selection::gaze_controller::gaze_ik::Params::maxPositionError
float maxPositionError
Definition: GazeController.h:48
armarx::view_selection::gaze_controller::gaze_ik::GazeController::updateConfig
void updateConfig(const ::armarx::aron::data::dto::DictPtr &dto, const Ice::Current &iceCurrent=Ice::emptyCurrent) override
Definition: GazeController.cpp:146
NJointControllerWithTripleBuffer.h
armarx::view_selection::gaze_controller::gaze_ik::GazeController::rtRun
void rtRun(const IceUtil::Time &sensorValuesTimestamp, const IceUtil::Time &timeSinceLastIteration) override
TODO make protected and use attorneys.
Definition: GazeController.cpp:198
NJointControllerBase.h
armarx::view_selection::gaze_controller::gaze_ik::ControlTarget
std::vector< float > ControlTarget
Definition: GazeController.h:59
armarx::view_selection::gaze_controller::gaze_ik::GazeController::~GazeController
~GazeController() override
armarx::NJointControllerWithTripleBuffer
Definition: NJointControllerWithTripleBuffer.h:10
GfxTL::Matrix4f
MatrixXX< 4, 4, float > Matrix4f
Definition: MatrixXX.h:650
armarx::view_selection::gaze_controller::gaze_ik::GazeController::rtPostDeactivateController
void rtPostDeactivateController() override
This function is called after the controller is deactivated.
Definition: GazeController.cpp:233
armarx::NJointControllerBase::ConfigPtrT
NJointControllerConfigPtr ConfigPtrT
Definition: NJointControllerBase.h:587
types.h
armarx::view_selection::gaze_controller::gaze_ik::GazeController::rtPreActivateController
void rtPreActivateController() override
This function is called before the controller is activated.
Definition: GazeController.cpp:227
IceInternal::Handle
Definition: forward_declarations.h:8
armarx::detail::ControlThreadOutputBufferEntry
Definition: ControlThreadOutputBuffer.h:182
armarx::view_selection::gaze_controller::gaze_ik::Params::maxLoops
std::size_t maxLoops
Definition: GazeController.h:49
armarx::view_selection::gaze_controller::gaze_ik::Params::nodeSetName
std::string nodeSetName
Definition: GazeController.h:46
armarx::view_selection::gaze_controller::gaze_ik::GazeController::onInitNJointController
void onInitNJointController() override
Definition: GazeController.cpp:166
armarx::view_selection::gaze_controller::gaze_ik::Config::target
std::optional< armarx::view_selection::gaze_controller::Target > target
Definition: GazeController.h:56
armarx::view_selection::gaze_controller::gaze_ik::GazeController::GazeController
GazeController(RobotUnitPtr robotUnit, const NJointControllerConfigPtr &config, const VirtualRobot::RobotPtr &robot)
Definition: GazeController.cpp:38
armarx::view_selection::gaze_controller::gaze_ik
This file is part of ArmarX.
Definition: aron_conversions.cpp:29
armarx::view_selection::gaze_controller::gaze_ik::GazeController::onConnectNJointController
void onConnectNJointController() override
Definition: GazeController.cpp:187
armarx::armem::Time
armarx::core::time::DateTime Time
Definition: forward_declarations.h:13
armarx::view_selection::gaze_controller::gaze_ik::Params
Definition: GazeController.h:44
armarx::aron::data::DictPtr
std::shared_ptr< Dict > DictPtr
Definition: Dict.h:41
armarx::view_selection::gaze_controller::gaze_ik::Config::params
Params params
Definition: GazeController.h:55
armarx::view_selection::gaze_controller::gaze_ik::Params::maxGradientDecentSteps
std::size_t maxGradientDecentSteps
Definition: GazeController.h:50
IceUtil::Handle< class RobotUnit >
IceInternal::ProxyHandle<::IceProxy::armarx::DebugDrawerInterface >
armarx::view_selection::gaze_controller::gaze_ik::Params::enableJointLimitAvoidance
bool enableJointLimitAvoidance
Definition: GazeController.h:47
armarx::view_selection::gaze_controller::gaze_ik::Config
Definition: GazeController.h:53
armarx::view_selection::gaze_controller::gaze_ik::GazeController
Definition: GazeController.h:72
GazeTarget.h
armarx::view_selection::gaze_controller::gaze_ik::GazeController::getClassName
std::string getClassName(const Ice::Current &=Ice::emptyCurrent) const override
Definition: GazeController.cpp:192
armarx::view_selection::gaze_controller::gaze_ik::TYPEDEF_PTRS_HANDLE
TYPEDEF_PTRS_HANDLE(GazeController)
armarx::view_selection::gaze_controller::gaze_ik::GazeController::getConfig
::armarx::aron::data::dto::DictPtr getConfig(const ::Ice::Current &=::Ice::emptyCurrent) override
Definition: GazeController.cpp:325
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:27
armarx::view_selection::gaze_controller::gaze_ik::GazeController::onPublish
void onPublish(const SensorAndControl &, const DebugDrawerInterfacePrx &, const DebugObserverInterfacePrx &) override
Definition: GazeController.cpp:239
VirtualRobot::RobotPtr
std::shared_ptr< class Robot > RobotPtr
Definition: Bus.h:19
armarx::TripleBuffer< RobotState >