ControlTarget1DoFActuator.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 RobotAPI::ArmarXObjects::ActuatorVelocityTarget
17  * @author Raphael Grimm ( raphael dot grimm at kit dot edu )
18  * @date 2017
19  * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
20  * GNU General Public License
21  */
22 
23 #pragma once
24 
25 #include <RobotAPI/components/units/RobotUnit/Constants.h> // for ControllerConstants::ValueNotSetNaN
26 
27 #include "ControlTargetBase.h"
28 
29 namespace armarx
30 {
31 #define make_ControlTarget1DoFActuator(type, invalid, name, varname, cmode) \
32  class name : public ControlTargetBase \
33  { \
34  public: \
35  type varname = ControllerConstants::ValueNotSetNaN; \
36  name() = default; \
37  name(const name&) = default; \
38  name(name&&) = default; \
39  name(type val) : varname{val} \
40  { \
41  } \
42  name& operator=(const name&) = default; \
43  name& operator=(name&&) = default; \
44  name& \
45  operator=(type val) \
46  { \
47  varname = val; \
48  return *this; \
49  } \
50  virtual const std::string& \
51  getControlMode() const override \
52  { \
53  return cmode; \
54  } \
55  virtual void \
56  reset() override \
57  { \
58  varname = invalid; \
59  } \
60  virtual bool \
61  isValid() const override \
62  { \
63  return std::isfinite(varname); \
64  } \
65  DETAIL_ControlTargetBase_DEFAULT_METHOD_IMPLEMENTATION static ControlTargetInfo<name> \
66  GetClassMemberInfo() \
67  { \
68  ControlTargetInfo<name> cti; \
69  cti.addMemberVariable(&name::varname, #varname); \
70  return cti; \
71  } \
72  }
73 
75  ControllerConstants::ValueNotSetNaN,
76  ControlTarget1DoFActuatorPosition,
77  position,
78  ControlModes::Position1DoF);
80  ControllerConstants::ValueNotSetNaN,
81  ControlTarget1DoFActuatorVelocity,
82  velocity,
83  ControlModes::Velocity1DoF);
85  ControllerConstants::ValueNotSetNaN,
86  ControlTarget1DoFActuatorTorque,
87  torque,
88  ControlModes::Torque1DoF);
90  ControllerConstants::ValueNotSetNaN,
91  ControlTarget1DoFActuatorZeroTorque,
92  torque,
93  ControlModes::ZeroTorque1DoF);
95  ControllerConstants::ValueNotSetNaN,
96  ControlTarget1DoFActuatorCurrent,
97  current,
98  ControlModes::Current1DoF);
99 #undef make_ControlTarget1DoFActuator
100 
101  class ControlTarget1DoFActuatorTorqueVelocity : public ControlTarget1DoFActuatorVelocity
102  {
103  public:
104  float maxTorque;
105 
106  const std::string&
107  getControlMode() const override
108  {
109  return ControlModes::VelocityTorque;
110  }
111 
112  void
113  reset() override
114  {
115  ControlTarget1DoFActuatorVelocity::reset();
116  maxTorque = -1.0f; // if < 0, default value for joint is to be used
117  }
118 
119  bool
120  isValid() const override
121  {
122  return ControlTarget1DoFActuatorVelocity::isValid() && std::isfinite(maxTorque);
123  }
124 
125  static ControlTargetInfo<ControlTarget1DoFActuatorTorqueVelocity>
127  {
128  ControlTargetInfo<ControlTarget1DoFActuatorTorqueVelocity> cti;
129  cti.addBaseClass<ControlTarget1DoFActuatorVelocity>();
130  cti.addMemberVariable(&ControlTarget1DoFActuatorTorqueVelocity::maxTorque, "maxTorque");
131  return cti;
132  }
133 
135  };
136 
138  {
139  public:
140  float position;
141  float kp;
142  float kd;
143 
144  const std::string&
145  getControlMode() const override
146  {
147  return ControlModes::ActiveImpedance;
148  }
149 
150  void
151  reset() override
152  {
153  position = 0;
154  kp = 0;
155  kd = 0;
156  }
157 
158  bool
159  isValid() const override
160  {
161  return std::isfinite(position) && kp >= 0;
162  }
163 
164  static ControlTargetInfo<ActiveImpedanceControlTarget>
166  {
171  return cti;
172  }
173 
175  };
176 
178  {
179  public:
180  std::int16_t pwm;
181 
182  public:
183  const std::string&
184  getControlMode() const override
185  {
186  return ControlModes::PWM1DoF;
187  }
188 
189  void
190  reset() override
191  {
193  }
194 
195  bool
196  isValid() const override
197  {
199  }
200 
201  static ControlTargetInfo<ControlTarget1DoFActuatorPWM>
203  {
206  return cti;
207  }
208 
210  };
211 
212  class ControlTarget1DoFActuatorPositionWithPWMLimit : public ControlTarget1DoFActuatorPosition
213  {
214  public:
215  int16_t maxPWM;
216 
217  protected:
218  std::int16_t pwmDefaultLimit = 256;
219  std::int16_t pwmHardLimit = 256;
220 
221  public:
222  const std::string&
223  getControlMode() const override
224  {
225  return ControlModes::PositionWithPwmLimit1DoF;
226  }
227 
228  void
229  reset() override
230  {
232  ControlTarget1DoFActuatorPosition::reset();
233  }
234 
235  bool
236  isValid() const override
237  {
238  return std::abs(maxPWM) <= pwmHardLimit && ControlTarget1DoFActuatorPosition::isValid();
239  }
240 
241  static ControlTargetInfo<ControlTarget1DoFActuatorPositionWithPWMLimit>
243  {
244  ControlTargetInfo<ControlTarget1DoFActuatorPositionWithPWMLimit> cti;
245  cti.addBaseClass<ControlTarget1DoFActuatorPosition>();
246  cti.addMemberVariable(&ControlTarget1DoFActuatorPositionWithPWMLimit::maxPWM, "maxPWM");
248  "pwmHardLimit");
249  return cti;
250  }
251 
252  void
253  setPWMLimits(std::int16_t hard, std::int16_t def, ControlDeviceAccessToken)
254  {
255  pwmHardLimit = hard;
256  pwmDefaultLimit = def;
257  }
258 
260  };
261 
262  class ControlTarget1DoFActuatorVelocityWithPWMLimit : public ControlTarget1DoFActuatorVelocity
263  {
264  public:
265  int16_t maxPWM;
266 
267  protected:
268  std::int16_t pwmDefaultLimit = 256;
269  std::int16_t pwmHardLimit = 256;
270 
271  public:
272  const std::string&
273  getControlMode() const override
274  {
275  return ControlModes::VelocityWithPwmLimit1DoF;
276  }
277 
278  void
279  reset() override
280  {
282  ControlTarget1DoFActuatorVelocity::reset();
283  }
284 
285  bool
286  isValid() const override
287  {
288  return std::abs(maxPWM) <= pwmHardLimit && ControlTarget1DoFActuatorVelocity::isValid();
289  }
290 
291  static ControlTargetInfo<ControlTarget1DoFActuatorVelocityWithPWMLimit>
293  {
294  ControlTargetInfo<ControlTarget1DoFActuatorVelocityWithPWMLimit> cti;
295  cti.addBaseClass<ControlTarget1DoFActuatorVelocity>();
296  cti.addMemberVariable(&ControlTarget1DoFActuatorVelocityWithPWMLimit::maxPWM, "maxPWM");
298  "pwmHardLimit");
299  return cti;
300  }
301 
302  void
303  setPWMLimits(std::int16_t hard, std::int16_t def, ControlDeviceAccessToken)
304  {
305  pwmHardLimit = hard;
306  pwmDefaultLimit = def;
307  }
308 
310  };
311 } // namespace armarx
armarx::ControlTarget1DoFActuatorTorqueVelocity::isValid
bool isValid() const override
Definition: ControlTarget1DoFActuator.h:120
armarx::ActiveImpedanceControlTarget::reset
void reset() override
Definition: ControlTarget1DoFActuator.h:151
armarx::ControlTarget1DoFActuatorTorqueVelocity::reset
void reset() override
Definition: ControlTarget1DoFActuator.h:113
armarx::ActiveImpedanceControlTarget::kd
float kd
Definition: ControlTarget1DoFActuator.h:142
armarx::ControlTarget1DoFActuatorTorqueVelocity::getControlMode
const std::string & getControlMode() const override
Definition: ControlTarget1DoFActuator.h:107
armarx::ControlTarget1DoFActuatorVelocityWithPWMLimit::pwmDefaultLimit
std::int16_t pwmDefaultLimit
Definition: ControlTarget1DoFActuator.h:268
armarx::ControlTarget1DoFActuatorPWM::getControlMode
const std::string & getControlMode() const override
Definition: ControlTarget1DoFActuator.h:184
armarx::ControlTargetBase
Brief description of class JointControlTargetBase.
Definition: ControlTargetBase.h:47
armarx::ControlTarget1DoFActuatorPWM
Definition: ControlTarget1DoFActuator.h:177
ControlTargetBase.h
armarx::introspection::ClassMemberInfo
Definition: ClassMemberInfo.h:34
Constants.h
armarx::ControlTarget1DoFActuatorPositionWithPWMLimit::pwmDefaultLimit
std::int16_t pwmDefaultLimit
Definition: ControlTarget1DoFActuator.h:218
armarx::ControlTarget1DoFActuatorVelocityWithPWMLimit
Definition: ControlTarget1DoFActuator.h:262
armarx::ControlTarget1DoFActuatorPWM::isValid
bool isValid() const override
Definition: ControlTarget1DoFActuator.h:196
armarx::ControlTarget1DoFActuatorVelocityWithPWMLimit::isValid
bool isValid() const override
Definition: ControlTarget1DoFActuator.h:286
std::isfinite
bool isfinite(const std::vector< T, Ts... > &v)
Definition: algorithm.h:327
armarx::abs
std::vector< T > abs(const std::vector< T > &v)
Definition: VectorHelpers.h:253
armarx::make_ControlTarget1DoFActuator
make_ControlTarget1DoFActuator(float, ControllerConstants::ValueNotSetNaN, ControlTarget1DoFActuatorPosition, position, ControlModes::Position1DoF)
armarx::ControlTarget1DoFActuatorTorqueVelocity::GetClassMemberInfo
static ControlTargetInfo< ControlTarget1DoFActuatorTorqueVelocity > GetClassMemberInfo()
Definition: ControlTarget1DoFActuator.h:126
armarx::ActiveImpedanceControlTarget::position
float position
Definition: ControlTarget1DoFActuator.h:140
armarx::introspection::ClassMemberInfo::addMemberVariable
EntryConfigurator< ClassType > addMemberVariable(MemberType ClassType::*ptr, const std::string &name)
add a member variable of the current class
armarx::ControlTarget1DoFActuatorVelocityWithPWMLimit::reset
void reset() override
Definition: ControlTarget1DoFActuator.h:279
armarx::ActiveImpedanceControlTarget::kp
float kp
Definition: ControlTarget1DoFActuator.h:141
armarx::ControlTarget1DoFActuatorPositionWithPWMLimit::setPWMLimits
void setPWMLimits(std::int16_t hard, std::int16_t def, ControlDeviceAccessToken)
Definition: ControlTarget1DoFActuator.h:253
armarx::ControlTarget1DoFActuatorPositionWithPWMLimit::reset
void reset() override
Definition: ControlTarget1DoFActuator.h:229
max
T max(T t1, T t2)
Definition: gdiam.h:48
armarx::ControlTarget1DoFActuatorPositionWithPWMLimit
Definition: ControlTarget1DoFActuator.h:212
armarx::ControlTarget1DoFActuatorPositionWithPWMLimit::maxPWM
int16_t maxPWM
Definition: ControlTarget1DoFActuator.h:215
armarx::ControlTarget1DoFActuatorPWM::pwm
std::int16_t pwm
Definition: ControlTarget1DoFActuator.h:180
armarx::ControlTarget1DoFActuatorVelocityWithPWMLimit::setPWMLimits
void setPWMLimits(std::int16_t hard, std::int16_t def, ControlDeviceAccessToken)
Definition: ControlTarget1DoFActuator.h:303
armarx::ControlTarget1DoFActuatorVelocityWithPWMLimit::pwmHardLimit
std::int16_t pwmHardLimit
Definition: ControlTarget1DoFActuator.h:269
armarx::ControlTarget1DoFActuatorPWM::reset
void reset() override
Definition: ControlTarget1DoFActuator.h:190
armarx::ActiveImpedanceControlTarget
Definition: ControlTarget1DoFActuator.h:137
armarx::ControlTarget1DoFActuatorPositionWithPWMLimit::getControlMode
const std::string & getControlMode() const override
Definition: ControlTarget1DoFActuator.h:223
DETAIL_ControlTargetBase_DEFAULT_METHOD_IMPLEMENTATION
#define DETAIL_ControlTargetBase_DEFAULT_METHOD_IMPLEMENTATION
Definition: ControlTargetBase.h:122
armarx::ControlTarget1DoFActuatorPositionWithPWMLimit::GetClassMemberInfo
static ControlTargetInfo< ControlTarget1DoFActuatorPositionWithPWMLimit > GetClassMemberInfo()
Definition: ControlTarget1DoFActuator.h:242
armarx::ControlTarget1DoFActuatorTorqueVelocity
Definition: ControlTarget1DoFActuator.h:101
armarx::ControlTarget1DoFActuatorPWM::GetClassMemberInfo
static ControlTargetInfo< ControlTarget1DoFActuatorPWM > GetClassMemberInfo()
Definition: ControlTarget1DoFActuator.h:202
armarx::ControlTarget1DoFActuatorTorqueVelocity::maxTorque
float maxTorque
Definition: ControlTarget1DoFActuator.h:104
armarx::ControlTarget1DoFActuatorVelocityWithPWMLimit::getControlMode
const std::string & getControlMode() const override
Definition: ControlTarget1DoFActuator.h:273
armarx::ControlTarget1DoFActuatorVelocityWithPWMLimit::maxPWM
int16_t maxPWM
Definition: ControlTarget1DoFActuator.h:265
armarx::ActiveImpedanceControlTarget::getControlMode
const std::string & getControlMode() const override
Definition: ControlTarget1DoFActuator.h:145
armarx::ActiveImpedanceControlTarget::isValid
bool isValid() const override
Definition: ControlTarget1DoFActuator.h:159
armarx::ControlTarget1DoFActuatorVelocityWithPWMLimit::GetClassMemberInfo
static ControlTargetInfo< ControlTarget1DoFActuatorVelocityWithPWMLimit > GetClassMemberInfo()
Definition: ControlTarget1DoFActuator.h:292
armarx::ControlTarget1DoFActuatorPositionWithPWMLimit::pwmHardLimit
std::int16_t pwmHardLimit
Definition: ControlTarget1DoFActuator.h:219
armarx::ActiveImpedanceControlTarget::GetClassMemberInfo
static ControlTargetInfo< ActiveImpedanceControlTarget > GetClassMemberInfo()
Definition: ControlTarget1DoFActuator.h:165
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:28
armarx::ControlTarget1DoFActuatorPositionWithPWMLimit::isValid
bool isValid() const override
Definition: ControlTarget1DoFActuator.h:236