SimplePeriodicSpecializedSkill.h
Go to the documentation of this file.
1 #pragma once
2 
4 
6 
7 #include "PeriodicSkill.h"
9 
10 namespace armarx
11 {
12  namespace skills
13  {
14  template <class AronT>
16  {
17 
18  public:
20  using ParamType = AronT;
21 
22  using Base::Base;
23 
25 
28  Base(skillDescription), frequency(frequency)
29  {
30  }
31 
32  protected:
33  /// Do not use anymore
35  main(const typename Base::SpecializedMainInput& in) final
36  {
38 
39  while (true)
40  {
42 
43  const auto res = step(in);
44  switch (res.status)
45  {
47  // nothing to do here. break switch
48  break;
50  return Skill::MakeAbortedResult();
52  return Skill::MakeSucceededResult(res.data);
54  return Skill::MakeFailedResult();
55  }
56 
57  const auto sleepDuration = metronome.waitForNextTick();
58  if (not sleepDuration.isPositive())
59  {
60  ARMARX_INFO << deactivateSpam() << __PRETTY_FUNCTION__
61  << ": execution took too long (" << -sleepDuration
62  << " too long. Expected " << frequency.toCycleDuration() << ")";
63  }
64  }
65 
66  // never happens
67  throw skills::error::SkillException(__PRETTY_FUNCTION__, "Should not happen!");
68  }
69 
70  /// Override this method with your own step function
71  virtual StepResult
72  step(const typename Base::SpecializedMainInput& in)
73  {
74  ARMARX_IMPORTANT << "Dummy executing once skill '" << this->description.skillId
75  << "'. Please overwrite this method!";
77  }
78 
79  protected:
81  };
82  } // namespace skills
83 } // namespace armarx
skills
This file is part of ArmarX.
Exception.h
ARMARX_IMPORTANT
#define ARMARX_IMPORTANT
Definition: Logging.h:190
armarx::skills::ActiveOrTerminatedSkillStatus::Succeeded
@ Succeeded
armarx::skills::ActiveOrTerminatedSkillStatus::Failed
@ Failed
armarx::skills::SimplePeriodicSpecializedSkill< platform_control::arondto::MovePlatformToPoseAcceptedType >::ParamType
platform_control::arondto::MovePlatformToPoseAcceptedType ParamType
Definition: SimplePeriodicSpecializedSkill.h:20
armarx::skills::SkillDescription
Definition: SkillDescription.h:17
armarx::core::time::Frequency
Represents a frequency.
Definition: Frequency.h:16
armarx::skills::SimplePeriodicSpecializedSkill::StepResult
PeriodicSkill::StepResult StepResult
Definition: SimplePeriodicSpecializedSkill.h:24
armarx::skills::SimplePeriodicSpecializedSkill::frequency
const armarx::Frequency frequency
Definition: SimplePeriodicSpecializedSkill.h:80
armarx::skills::SimplePeriodicSpecializedSkill::step
virtual StepResult step(const typename Base::SpecializedMainInput &in)
Override this method with your own step function.
Definition: SimplePeriodicSpecializedSkill.h:72
SimpleSpecializedSkill.h
armarx::skills::Skill::MakeFailedResult
static MainResult MakeFailedResult()
Definition: Skill.cpp:338
armarx::skills::SimplePeriodicSpecializedSkill::SimplePeriodicSpecializedSkill
SimplePeriodicSpecializedSkill(const SkillDescription &skillDescription, const armarx::Frequency &frequency)
Definition: SimplePeriodicSpecializedSkill.h:26
armarx::core::time::Frequency::toCycleDuration
Duration toCycleDuration() const
Definition: Frequency.cpp:60
armarx::skills::Skill::description
SkillDescription description
Definition: Skill.h:300
armarx::skills::SkillDescription::skillId
SkillID skillId
Definition: SkillDescription.h:19
armarx::skills::SimpleSpecializedSkill
Definition: SimpleSpecializedSkill.h:10
armarx::skills::ActiveOrTerminatedSkillStatus::Aborted
@ Aborted
Metronome.h
armarx::skills::error::SkillException
A base class for skill exceptions.
Definition: Exception.h:34
armarx::skills::Skill::MakeAbortedResult
static MainResult MakeAbortedResult()
Definition: Skill.cpp:347
armarx::skills::Skill::MakeSucceededResult
static MainResult MakeSucceededResult(aron::data::DictPtr data=nullptr)
Definition: Skill.cpp:329
armarx::skills::Skill::MainResult
A result struct for th main method of a skill.
Definition: Skill.h:39
armarx::skills::ActiveOrTerminatedSkillStatus::Running
@ Running
armarx::core::time::Metronome::waitForNextTick
Duration waitForNextTick()
Wait and block until the target period is met.
Definition: Metronome.cpp:27
armarx::skills::SimplePeriodicSpecializedSkill
Definition: SimplePeriodicSpecializedSkill.h:15
ARMARX_INFO
#define ARMARX_INFO
Definition: Logging.h:181
armarx::core::time::Metronome
Simple rate limiter for use in loops to maintain a certain frequency given a clock.
Definition: Metronome.h:34
armarx::skills::SimpleSpecializedSkill::Base
SpecializedSkill< AronT > Base
Definition: SimpleSpecializedSkill.h:13
armarx::Logging::deactivateSpam
SpamFilterDataPtr deactivateSpam(float deactivationDurationSec=10.0f, const std::string &identifier="", bool deactivate=true) const
disables the logging for the current line for the given amount of seconds.
Definition: Logging.cpp:99
armarx::skills::Skill::throwIfSkillShouldTerminate
void throwIfSkillShouldTerminate(const std::string &abortedMessage="")
Definition: Skill.cpp:305
PeriodicSkill.h
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:27
armarx::skills::SimplePeriodicSpecializedSkill::main
Skill::MainResult main(const typename Base::SpecializedMainInput &in) final
Do not use anymore.
Definition: SimplePeriodicSpecializedSkill.h:35
armarx::skills::PeriodicSkill::StepResult
Definition: PeriodicSkill.h:36