HEBI C++ API  3.12.2
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
command.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include "hebi.h"
4 
5 #include <string>
6 
7 #include "color.hpp"
8 #include "gains.hpp"
9 #include "ip_address.hpp"
10 #include "message_helpers.hpp"
11 #include "util.hpp"
12 
13 namespace hebi {
14 
34 class Command final {
35 public:
36  enum class ControlStrategy {
38  Off,
40  DirectPWM,
43  Strategy2,
46  Strategy3,
49  Strategy4,
52  Strategy5
53  };
54 
55  enum class MstopStrategy {
57  Disabled,
59  MotorOff,
62  };
63 
64  enum class PositionLimitStrategy {
70  MotorOff,
72  Disabled,
73  };
74 
75 protected:
77  class FloatField final {
78  public:
79 #ifndef DOXYGEN_OMIT_INTERNAL
80  FloatField(HebiCommandRef& internal, HebiCommandFloatField field);
81 #endif // DOXYGEN_OMIT_INTERNAL
82  explicit operator bool() const { return has(); }
96  bool has() const;
99  float get() const;
101  void set(float value);
103  void clear();
104 
106  private:
107  HebiCommandRef& internal_;
108  HebiCommandFloatField const field_;
109  };
110 
116  class HighResAngleField final {
117  public:
118 #ifndef DOXYGEN_OMIT_INTERNAL
119  HighResAngleField(HebiCommandRef& internal, HebiCommandHighResAngleField field);
120 #endif // DOXYGEN_OMIT_INTERNAL
121  explicit operator bool() const { return has(); }
135  bool has() const;
141  double get() const;
153  void get(int64_t* revolutions, float* radian_offset) const;
158  void set(double radians);
165  void set(int64_t revolutions, float radian_offset);
167  void clear();
168 
170  private:
171  HebiCommandRef& internal_;
172  HebiCommandHighResAngleField const field_;
173  };
174 
177  class NumberedFloatField final {
178  public:
179 #ifndef DOXYGEN_OMIT_INTERNAL
180  NumberedFloatField(HebiCommandRef& internal, HebiCommandNumberedFloatField field);
181 #endif // DOXYGEN_OMIT_INTERNAL
182  bool has(size_t fieldNumber) const;
193  float get(size_t fieldNumber) const;
199  void set(size_t fieldNumber, float value);
205  void clear(size_t fieldNumber);
206 
208  private:
209  HebiCommandRef& internal_;
210  HebiCommandNumberedFloatField const field_;
211  };
212 
214  class IpAddressField final {
215  public:
216 #ifndef DOXYGEN_OMIT_INTERNAL
217  IpAddressField(HebiCommandRef& internal, HebiCommandUInt64Field field);
218 #endif // DOXYGEN_OMIT_INTERNAL
219  explicit operator bool() const { return has(); }
233  bool has() const;
236  IpAddress get() const;
238  void set(const IpAddress& value);
240  void clear();
241 
243  private:
244  HebiCommandRef& internal_;
245  HebiCommandUInt64Field const field_;
246  };
247 
249  class BoolField final {
250  public:
251 #ifndef DOXYGEN_OMIT_INTERNAL
252  BoolField(HebiCommandRef& internal, HebiCommandBoolField field);
253 #endif // DOXYGEN_OMIT_INTERNAL
254  bool has() const;
258  bool get() const;
260  void set(bool value);
262  void clear();
263 
265  private:
266  HebiCommandRef& internal_;
267  HebiCommandBoolField const field_;
268  };
269 
271  class StringField final {
272  public:
273 #ifndef DOXYGEN_OMIT_INTERNAL
274  StringField(HebiCommandPtr internal, HebiCommandStringField field);
275 #endif // DOXYGEN_OMIT_INTERNAL
276  explicit operator bool() const { return has(); }
290  bool has() const;
293  std::string get() const;
295  void set(const std::string& value);
297  void clear();
298 
300  private:
301  HebiCommandPtr const internal_;
302  HebiCommandStringField const field_;
303  };
304 
306  class FlagField final {
307  public:
308 #ifndef DOXYGEN_OMIT_INTERNAL
309  FlagField(HebiCommandRef& internal, HebiCommandFlagField field);
310 #endif // DOXYGEN_OMIT_INTERNAL
311  explicit operator bool() const { return has(); }
325  bool has() const;
327  void set();
329  void clear();
330 
332  private:
333  HebiCommandRef& internal_;
334  HebiCommandFlagField const field_;
335  };
336 
338  template<typename T>
339  class EnumField final {
340  public:
341 #ifndef DOXYGEN_OMIT_INTERNAL
342  EnumField(HebiCommandRef& internal, HebiCommandEnumField field) : internal_(internal), field_(field) {}
343 #endif // DOXYGEN_OMIT_INTERNAL
344  explicit operator bool() const { return has(); }
358  bool has() const {
359  return enumGetter(internal_, field_, nullptr) == HebiStatusSuccess;
360  }
363  T get() const {
364  int32_t ret{};
365  enumGetter(internal_, field_, &ret);
366  return static_cast<T>(ret);
367  }
369  void set(T _value) {
370  int32_t value = static_cast<int32_t>(_value);
371  hebiCommandSetEnum(internal_, field_, &value);
372  }
374  void clear() {
375  hebiCommandSetEnum(internal_, field_, nullptr);
376  }
377 
379  private:
380  HebiCommandRef& internal_;
381  HebiCommandEnumField const field_;
382  };
383 
385  class IoBank final {
386  public:
387 #ifndef DOXYGEN_OMIT_INTERNAL
388  IoBank(HebiCommandPtr internal, HebiCommandRef& internal_ref, HebiCommandIoPinBank bank);
389 #endif // DOXYGEN_OMIT_INTERNAL
390  bool hasInt(size_t pinNumber) const;
401  bool hasFloat(size_t pinNumber) const;
407  int64_t getInt(size_t pinNumber) const;
414  float getFloat(size_t pinNumber) const;
420  void setInt(size_t pinNumber, int64_t value);
426  void setFloat(size_t pinNumber, float value);
432  bool hasLabel(size_t pinNumber) const;
438  std::string getLabel(size_t pinNumber) const;
443  void setLabel(size_t pinNumber, const std::string&);
448  void clear(size_t pinNumber);
449 
451  private:
452  HebiCommandPtr internal_;
453  HebiCommandRef& internal_ref_;
454  HebiCommandIoPinBank const bank_;
455  };
457  class LedField final {
458  public:
459 #ifndef DOXYGEN_OMIT_INTERNAL
460  LedField(HebiCommandRef& internal, HebiCommandLedField field);
461 #endif // DOXYGEN_OMIT_INTERNAL
462  bool has() const;
477  Color get() const;
483  void set(const Color& color);
488  void clear();
489 
491  private:
492  HebiCommandRef& internal_;
493  HebiCommandLedField const field_;
494  };
495 
497  class Io final {
498  public:
499 #ifndef DOXYGEN_OMIT_INTERNAL
500  Io(HebiCommandPtr internal, HebiCommandRef& internal_ref)
501  : a_(internal, internal_ref, HebiCommandIoBankA),
502  b_(internal, internal_ref, HebiCommandIoBankB),
503  c_(internal, internal_ref, HebiCommandIoBankC),
504  d_(internal, internal_ref, HebiCommandIoBankD),
505  e_(internal, internal_ref, HebiCommandIoBankE),
506  f_(internal, internal_ref, HebiCommandIoBankF) {}
507 #endif // DOXYGEN_OMIT_INTERNAL
508 
509  // With all submessage and field getters: Note that the returned reference
510  // should not be used after the lifetime of this parent.
511 
512  // Subfields ----------------
513 
515  IoBank& a() { return a_; }
517  const IoBank& a() const { return a_; }
519  IoBank& b() { return b_; }
521  const IoBank& b() const { return b_; }
523  IoBank& c() { return c_; }
525  const IoBank& c() const { return c_; }
527  IoBank& d() { return d_; }
529  const IoBank& d() const { return d_; }
531  IoBank& e() { return e_; }
533  const IoBank& e() const { return e_; }
535  IoBank& f() { return f_; }
537  const IoBank& f() const { return f_; }
538 
540  private:
541  IoBank a_;
542  IoBank b_;
543  IoBank c_;
544  IoBank d_;
545  IoBank e_;
546  IoBank f_;
547  };
548 
550 
552  class Settings final {
553  protected:
555  class Actuator final {
556  public:
557 #ifndef DOXYGEN_OMIT_INTERNAL
558  Actuator(HebiCommandRef& internal)
559  : position_gains_(internal, HebiCommandFloatPositionKp, HebiCommandBoolPositionDOnError),
560  velocity_gains_(internal, HebiCommandFloatVelocityKp, HebiCommandBoolVelocityDOnError),
561  effort_gains_(internal, HebiCommandFloatEffortKp, HebiCommandBoolEffortDOnError),
562  spring_constant_(internal, HebiCommandFloatSpringConstant),
563  reference_position_(internal, HebiCommandFloatReferencePosition),
564  reference_effort_(internal, HebiCommandFloatReferenceEffort),
565  velocity_limit_min_(internal, HebiCommandFloatVelocityLimitMin),
566  velocity_limit_max_(internal, HebiCommandFloatVelocityLimitMax),
567  effort_limit_min_(internal, HebiCommandFloatEffortLimitMin),
568  effort_limit_max_(internal, HebiCommandFloatEffortLimitMax),
569  offset_reference_position_(internal, HebiCommandFloatOffsetReferencePosition),
570  position_limit_min_(internal, HebiCommandHighResAnglePositionLimitMin),
571  position_limit_max_(internal, HebiCommandHighResAnglePositionLimitMax),
572  control_strategy_(internal, HebiCommandEnumControlStrategy),
573  mstop_strategy_(internal, HebiCommandEnumMstopStrategy),
574  min_position_limit_strategy_(internal, HebiCommandEnumMinPositionLimitStrategy),
575  max_position_limit_strategy_(internal, HebiCommandEnumMaxPositionLimitStrategy) {}
576 #endif // DOXYGEN_OMIT_INTERNAL
577 
578  // With all submessage and field getters: Note that the returned reference
579  // should not be used after the lifetime of this parent.
580 
581  // Submessages ----------------
582 
584  CommandGains& positionGains() { return position_gains_; }
586  const CommandGains& positionGains() const { return position_gains_; }
588  CommandGains& velocityGains() { return velocity_gains_; }
590  const CommandGains& velocityGains() const { return velocity_gains_; }
592  CommandGains& effortGains() { return effort_gains_; }
594  const CommandGains& effortGains() const { return effort_gains_; }
595 
596  // Subfields ----------------
597 
599  FloatField& springConstant() { return spring_constant_; }
601  const FloatField& springConstant() const { return spring_constant_; }
604  FloatField& referencePosition() { return reference_position_; }
607  const FloatField& referencePosition() const { return reference_position_; }
609  FloatField& referenceEffort() { return reference_effort_; }
611  const FloatField& referenceEffort() const { return reference_effort_; }
613  FloatField& velocityLimitMin() { return velocity_limit_min_; }
615  const FloatField& velocityLimitMin() const { return velocity_limit_min_; }
617  FloatField& velocityLimitMax() { return velocity_limit_max_; }
619  const FloatField& velocityLimitMax() const { return velocity_limit_max_; }
621  FloatField& effortLimitMin() { return effort_limit_min_; }
623  const FloatField& effortLimitMin() const { return effort_limit_min_; }
625  FloatField& effortLimitMax() { return effort_limit_max_; }
627  const FloatField& effortLimitMax() const { return effort_limit_max_; }
630  FloatField& offsetReferencePosition() { return offset_reference_position_; }
633  const FloatField& offsetReferencePosition() const { return offset_reference_position_; }
635  HighResAngleField& positionLimitMin() { return position_limit_min_; }
637  const HighResAngleField& positionLimitMin() const { return position_limit_min_; }
639  HighResAngleField& positionLimitMax() { return position_limit_max_; }
641  const HighResAngleField& positionLimitMax() const { return position_limit_max_; }
643  EnumField<ControlStrategy>& controlStrategy() { return control_strategy_; }
645  const EnumField<ControlStrategy>& controlStrategy() const { return control_strategy_; }
647  EnumField<MstopStrategy>& mstopStrategy() { return mstop_strategy_; }
649  const EnumField<MstopStrategy>& mstopStrategy() const { return mstop_strategy_; }
651  EnumField<PositionLimitStrategy>& minPositionLimitStrategy() { return min_position_limit_strategy_; }
653  const EnumField<PositionLimitStrategy>& minPositionLimitStrategy() const { return min_position_limit_strategy_; }
655  EnumField<PositionLimitStrategy>& maxPositionLimitStrategy() { return max_position_limit_strategy_; }
657  const EnumField<PositionLimitStrategy>& maxPositionLimitStrategy() const { return max_position_limit_strategy_; }
658 
660  private:
661  CommandGains position_gains_;
662  CommandGains velocity_gains_;
663  CommandGains effort_gains_;
664 
665  FloatField spring_constant_;
666  FloatField reference_position_;
667  FloatField reference_effort_;
668  FloatField velocity_limit_min_;
669  FloatField velocity_limit_max_;
670  FloatField effort_limit_min_;
671  FloatField effort_limit_max_;
672  FloatField offset_reference_position_;
673  HighResAngleField position_limit_min_;
674  HighResAngleField position_limit_max_;
675  EnumField<ControlStrategy> control_strategy_;
676  EnumField<MstopStrategy> mstop_strategy_;
677  EnumField<PositionLimitStrategy> min_position_limit_strategy_;
678  EnumField<PositionLimitStrategy> max_position_limit_strategy_;
679  };
680 
682  class Imu final {
683  public:
684 #ifndef DOXYGEN_OMIT_INTERNAL
685  Imu(HebiCommandRef& internal)
686  : accel_includes_gravity_(internal, HebiCommandBoolAccelIncludesGravity) {}
687 #endif // DOXYGEN_OMIT_INTERNAL
688 
689  // With all submessage and field getters: Note that the returned reference
690  // should not be used after the lifetime of this parent.
691 
692  // Subfields ----------------
693 
695  BoolField& accelIncludesGravity() { return accel_includes_gravity_; }
697  const BoolField& accelIncludesGravity() const { return accel_includes_gravity_; }
698 
700  private:
701  BoolField accel_includes_gravity_;
702  };
703 
704  public:
705 #ifndef DOXYGEN_OMIT_INTERNAL
706  Settings(HebiCommandPtr internal_ptr, HebiCommandRef& internal)
707  : actuator_(internal),
708  imu_(internal),
709  name_(internal_ptr, HebiCommandStringName),
710  family_(internal_ptr, HebiCommandStringFamily),
711  user_settings_bytes_1_(internal_ptr, HebiCommandStringUserSettingsBytes1),
712  user_settings_bytes_2_(internal_ptr, HebiCommandStringUserSettingsBytes2),
713  user_settings_bytes_3_(internal_ptr, HebiCommandStringUserSettingsBytes3),
714  user_settings_bytes_4_(internal_ptr, HebiCommandStringUserSettingsBytes4),
715  user_settings_bytes_5_(internal_ptr, HebiCommandStringUserSettingsBytes5),
716  user_settings_bytes_6_(internal_ptr, HebiCommandStringUserSettingsBytes6),
717  user_settings_bytes_7_(internal_ptr, HebiCommandStringUserSettingsBytes7),
718  user_settings_bytes_8_(internal_ptr, HebiCommandStringUserSettingsBytes8),
719  user_settings_float_1_(internal, HebiCommandFloatUserSettingsFloat1),
720  user_settings_float_2_(internal, HebiCommandFloatUserSettingsFloat2),
721  user_settings_float_3_(internal, HebiCommandFloatUserSettingsFloat3),
722  user_settings_float_4_(internal, HebiCommandFloatUserSettingsFloat4),
723  user_settings_float_5_(internal, HebiCommandFloatUserSettingsFloat5),
724  user_settings_float_6_(internal, HebiCommandFloatUserSettingsFloat6),
725  user_settings_float_7_(internal, HebiCommandFloatUserSettingsFloat7),
726  user_settings_float_8_(internal, HebiCommandFloatUserSettingsFloat8),
727  ip_address_(internal, HebiCommandUInt64IpAddress),
728  subnet_mask_(internal, HebiCommandUInt64SubnetMask),
729  save_current_settings_(internal, HebiCommandFlagSaveCurrentSettings) {}
730 #endif // DOXYGEN_OMIT_INTERNAL
731 
732  // With all submessage and field getters: Note that the returned reference
733  // should not be used after the lifetime of this parent.
734 
735  // Submessages ----------------
736 
738  Actuator& actuator() { return actuator_; }
740  const Actuator& actuator() const { return actuator_; }
742  Imu& imu() { return imu_; }
744  const Imu& imu() const { return imu_; }
745 
746  // Subfields ----------------
747 
750  StringField& name() { return name_; }
753  const StringField& name() const { return name_; }
756  StringField& family() { return family_; }
759  const StringField& family() const { return family_; }
763  {
764  switch (number) {
765  case 1: return user_settings_bytes_1_;
766  case 2: return user_settings_bytes_2_;
767  case 3: return user_settings_bytes_3_;
768  case 4: return user_settings_bytes_4_;
769  case 5: return user_settings_bytes_5_;
770  case 6: return user_settings_bytes_6_;
771  case 7: return user_settings_bytes_7_;
772  case 8: return user_settings_bytes_8_;
773  }
774  throw std::out_of_range("Invalid option for bytes array user setting entry!");
775  }
778  const StringField& userSettingsBytes(size_t number) const
779  {
780  switch (number) {
781  case 1: return user_settings_bytes_1_;
782  case 2: return user_settings_bytes_2_;
783  case 3: return user_settings_bytes_3_;
784  case 4: return user_settings_bytes_4_;
785  case 5: return user_settings_bytes_5_;
786  case 6: return user_settings_bytes_6_;
787  case 7: return user_settings_bytes_7_;
788  case 8: return user_settings_bytes_8_;
789  }
790  throw std::out_of_range("Invalid option for bytes array user setting entry!");
791  }
795  {
796  switch (number) {
797  case 1: return user_settings_float_1_;
798  case 2: return user_settings_float_2_;
799  case 3: return user_settings_float_3_;
800  case 4: return user_settings_float_4_;
801  case 5: return user_settings_float_5_;
802  case 6: return user_settings_float_6_;
803  case 7: return user_settings_float_7_;
804  case 8: return user_settings_float_8_;
805  }
806  throw std::out_of_range("Invalid option for float user setting entry!");
807  }
810  const FloatField& userSettingsFloat(size_t number) const
811  {
812  switch (number) {
813  case 1: return user_settings_float_1_;
814  case 2: return user_settings_float_2_;
815  case 3: return user_settings_float_3_;
816  case 4: return user_settings_float_4_;
817  case 5: return user_settings_float_5_;
818  case 6: return user_settings_float_6_;
819  case 7: return user_settings_float_7_;
820  case 8: return user_settings_float_8_;
821  }
822  throw std::out_of_range("Invalid option for float user setting entry!");
823  }
826  IpAddressField& ipAddress() { return ip_address_; }
829  const IpAddressField& ipAddress() const { return ip_address_; }
831  IpAddressField& subnetMask() { return subnet_mask_; }
833  const IpAddressField& subnetMask() const { return subnet_mask_; }
835  FlagField& saveCurrentSettings() { return save_current_settings_; }
837  const FlagField& saveCurrentSettings() const { return save_current_settings_; }
838 
840 
841  private:
842  Actuator actuator_;
843  Imu imu_;
844 
845  StringField name_;
846  StringField family_;
847  StringField user_settings_bytes_1_;
848  StringField user_settings_bytes_2_;
849  StringField user_settings_bytes_3_;
850  StringField user_settings_bytes_4_;
851  StringField user_settings_bytes_5_;
852  StringField user_settings_bytes_6_;
853  StringField user_settings_bytes_7_;
854  StringField user_settings_bytes_8_;
855  FloatField user_settings_float_1_;
856  FloatField user_settings_float_2_;
857  FloatField user_settings_float_3_;
858  FloatField user_settings_float_4_;
859  FloatField user_settings_float_5_;
860  FloatField user_settings_float_6_;
861  FloatField user_settings_float_7_;
862  FloatField user_settings_float_8_;
863  IpAddressField ip_address_;
864  IpAddressField subnet_mask_;
865  FlagField save_current_settings_;
866  };
867 
869  class Actuator final {
870  public:
871 #ifndef DOXYGEN_OMIT_INTERNAL
872  Actuator(HebiCommandRef& internal)
873  : velocity_(internal, HebiCommandFloatVelocity),
874  effort_(internal, HebiCommandFloatEffort),
875  position_(internal, HebiCommandHighResAnglePosition) {}
876 #endif // DOXYGEN_OMIT_INTERNAL
877 
878  // With all submessage and field getters: Note that the returned reference
879  // should not be used after the lifetime of this parent.
880 
881  // Subfields ----------------
882 
884  FloatField& velocity() { return velocity_; }
886  const FloatField& velocity() const { return velocity_; }
888  FloatField& effort() { return effort_; }
890  const FloatField& effort() const { return effort_; }
892  HighResAngleField& position() { return position_; }
894  const HighResAngleField& position() const { return position_; }
895 
897  private:
898  FloatField velocity_;
899  FloatField effort_;
900  HighResAngleField position_;
901  };
902 
903 private:
908  HebiCommandPtr internal_;
909  HebiCommandRef internal_ref_;
910 
911 public:
912 #ifndef DOXYGEN_OMIT_INTERNAL
913 
917  Command(HebiCommandPtr);
918 #endif // DOXYGEN_OMIT_INTERNAL
919 
922  Command(Command&& other);
923 
924  // With all submessage and field getters: Note that the returned reference
925  // should not be used after the lifetime of this parent.
926 
927  // Submessages -------------------------------------------------------------
928 
930  Io& io() { return io_; }
932  const Io& io() const { return io_; }
934  Settings& settings() { return settings_; }
936  const Settings& settings() const { return settings_; }
938  Actuator& actuator() { return actuator_; }
940  const Actuator& actuator() const { return actuator_; }
941 
942  // Subfields -------------------------------------------------------------
943 
944 #ifndef DOXYGEN_OMIT_INTERNAL
945  NumberedFloatField& debug() { return debug_; }
948  const NumberedFloatField& debug() const { return debug_; }
949 #endif // DOXYGEN_OMIT_INTERNAL
950  StringField& appendLog() { return append_log_; }
953  const StringField& appendLog() const { return append_log_; }
955  FlagField& reset() { return reset_; }
957  const FlagField& reset() const { return reset_; }
959  FlagField& boot() { return boot_; }
961  const FlagField& boot() const { return boot_; }
963  FlagField& stopBoot() { return stop_boot_; }
965  const FlagField& stopBoot() const { return stop_boot_; }
967  FlagField& clearLog() { return clear_log_; }
969  const FlagField& clearLog() const { return clear_log_; }
971  LedField& led() { return led_; }
973  const LedField& led() const { return led_; }
974 
979 
980  /* Disable move assigment operator. */
981  Command& operator=(Command&& other) = delete;
982 
983 private:
984  Io io_;
985  Settings settings_;
986  Actuator actuator_;
987 
988  NumberedFloatField debug_;
989  StringField append_log_;
990  FlagField reset_;
991  FlagField boot_;
992  FlagField stop_boot_;
993  FlagField clear_log_;
994  LedField led_;
995 };
996 
997 } // namespace hebi
const FloatField & referencePosition() const
Definition: command.hpp:607
void clear()
Removes any currently set value for this field.
Definition: command.cpp:130
void set(const Color &color)
Commands a color that overrides the module's control of the LED (if the alpha channel is 255),...
Definition: command.cpp:242
bool has() const
True if (and only if) the field has a value.
Definition: command.hpp:358
void clear()
Removes any currently set value for this field.
Definition: command.cpp:67
const IoBank & a() const
I/O pin bank a (pins 1-8 available)
Definition: command.hpp:517
IoBank & f()
I/O pin bank f (pins 1-8 available)
Definition: command.hpp:535
IpAddress get() const
If the field has a value, returns that value; otherwise, returns 0.0.0.0.
Definition: command.cpp:99
FloatField & offsetReferencePosition()
Definition: command.hpp:630
FlagField & reset()
Restart the module.
Definition: command.hpp:955
FlagField & saveCurrentSettings()
Indicates if the module should save the current values of all of its settings.
Definition: command.hpp:835
IoBank & d()
I/O pin bank d (pins 1-8 available)
Definition: command.hpp:527
const EnumField< PositionLimitStrategy > & minPositionLimitStrategy() const
The position limit strategy (at the minimum position) for the actuator.
Definition: command.hpp:653
MstopStrategy
Definition: command.hpp:55
const FloatField & effortLimitMin() const
The firmware safety limit for the minimum allowed effort.
Definition: command.hpp:623
void clear()
Removes any currently set value for this field.
Definition: command.cpp:112
const FloatField & velocityLimitMin() const
The firmware safety limit for the minimum allowed velocity.
Definition: command.hpp:615
HighResAngleField & positionLimitMax()
The firmware safety limit for the maximum allowed position.
Definition: command.hpp:639
#define HEBI_DISABLE_COPY(Class)
Definition: util.hpp:16
void clear()
Removes any currently set value for this field.
Definition: command.cpp:27
std::string getLabel(size_t pinNumber) const
If this numbered pin in this bank has a string label value, returns that value; otherwise returns an ...
Definition: command.cpp:202
A message field representable by a bool value.
Definition: command.hpp:249
Actuator & actuator()
Actuator-specific commands.
Definition: command.hpp:938
const FloatField & offsetReferencePosition() const
Definition: command.hpp:633
Actuator-specific commands.
Definition: command.hpp:869
void hebiCommandSetEnum(HebiCommandRef &command, HebiCommandEnumField field, const int32_t *value)
Definition: message_helpers.cpp:390
Io & io()
Any available digital or analog output pins on the device.
Definition: command.hpp:930
const FloatField & effort() const
Effort at the module output; units vary (e.g., N * m for rotational joints and N for linear stages).
Definition: command.hpp:890
Triggering the M-Stop results in the control strategy being set to 'off'. Remains 'off' until changed...
Settings & settings()
Module settings that are typically changed at a slower rate.
Definition: command.hpp:934
StringField & userSettingsBytes(size_t number)
Definition: command.hpp:762
const Io & io() const
Any available digital or analog output pins on the device.
Definition: command.hpp:932
FloatField & springConstant()
The spring constant of the module.
Definition: command.hpp:599
bool get() const
If the field has a value, returns that value; otherwise, returns false.
Definition: command.cpp:119
FloatField & effortLimitMin()
The firmware safety limit for the minimum allowed effort.
Definition: command.hpp:621
bool has() const
True if (and only if) the field has a value.
Definition: command.cpp:117
A message field for interfacing with a bank of I/O pins.
Definition: command.hpp:385
Triggering the M-Stop results in the motor holding the motor position. Operations resume to normal on...
FlagField & boot()
Boot the module from bootloader into application.
Definition: command.hpp:959
Actuator & actuator()
Actuator-specific settings, such as controller gains.
Definition: command.hpp:738
const HighResAngleField & position() const
Position of the module output (post-spring), in radians.
Definition: command.hpp:894
const IoBank & d() const
I/O pin bank d (pins 1-8 available)
Definition: command.hpp:529
void setInt(size_t pinNumber, int64_t value)
Sets the particular pin to a integer value (representing a digital output).
Definition: command.cpp:190
StringField & family()
Definition: command.hpp:756
Command objects have various fields that can be set; when sent to the module, these fields control in...
Definition: command.hpp:34
const BoolField & accelIncludesGravity() const
Whether to include acceleration due to gravity in acceleration feedback.
Definition: command.hpp:697
IoBank & a()
I/O pin bank a (pins 1-8 available)
Definition: command.hpp:515
A message field representable by a std::string.
Definition: command.hpp:271
BoolField & accelIncludesGravity()
Whether to include acceleration due to gravity in acceleration feedback.
Definition: command.hpp:695
Definition: arm.cpp:10
FloatField & userSettingsFloat(size_t number)
Definition: command.hpp:794
bool hasLabel(size_t pinNumber) const
True if (and only if) the particular numbered pin in this bank has a string label set in this message...
Definition: command.cpp:198
void clear(size_t fieldNumber)
Removes any currently set value for the numbered subvalue of this field.
Definition: command.cpp:88
void set(size_t fieldNumber, float value)
Sets the particular numbered subvalue of this field to a given value.
Definition: command.cpp:84
std::string get() const
If the field has a value, returns a copy of that value; otherwise, returns a default.
Definition: command.cpp:139
IpAddressField & subnetMask()
Sets the subnet mask for this module; must be used with IP Address if setting a static IP address.
Definition: command.hpp:831
void set()
Sets this flag.
Definition: command.cpp:164
A message field for interfacing with an LED.
Definition: command.hpp:457
const FlagField & clearLog() const
Clears the log message on the module.
Definition: command.hpp:969
Exceeding the position limit results in the actuator holding the position. Needs to be manually set t...
const FloatField & effortLimitMax() const
The firmware safety limit for the maximum allowed effort.
Definition: command.hpp:627
The motor is not given power (equivalent to a 0 PWM value)
const IpAddressField & subnetMask() const
Sets the subnet mask for this module; must be used with IP Address if setting a static IP address.
Definition: command.hpp:833
const StringField & name() const
Definition: command.hpp:753
CommandGains & effortGains()
Controller gains for the effort PID loop.
Definition: command.hpp:592
#define HEBI_DISABLE_COPY_MOVE(Class)
Definition: util.hpp:6
const FlagField & reset() const
Restart the module.
Definition: command.hpp:957
const IoBank & c() const
I/O pin bank c (pins 1-8 available)
Definition: command.hpp:525
IoBank & c()
I/O pin bank c (pins 1-8 available)
Definition: command.hpp:523
const CommandGains & effortGains() const
Controller gains for the effort PID loop.
Definition: command.hpp:594
HighResAngleField & position()
Position of the module output (post-spring), in radians.
Definition: command.hpp:892
const FloatField & springConstant() const
The spring constant of the module.
Definition: command.hpp:601
Exceeding the position limit results in the control strategy being set to 'off'. Remains 'off' until ...
const EnumField< ControlStrategy > & controlStrategy() const
How the position, velocity, and effort PID loops are connected in order to control motor PWM.
Definition: command.hpp:645
CommandGains & velocityGains()
Controller gains for the velocity PID loop.
Definition: command.hpp:588
const IoBank & b() const
I/O pin bank b (pins 1-8 available)
Definition: command.hpp:521
Actuator-specific settings, such as controller gains.
Definition: command.hpp:555
Module settings that are typically changed at a slower rate.
Definition: command.hpp:552
const CommandGains & positionGains() const
Controller gains for the position PID loop.
Definition: command.hpp:586
FloatField & referencePosition()
Definition: command.hpp:604
bool has() const
True if (and only if) the field has a value.
Definition: command.cpp:32
const Settings & settings() const
Module settings that are typically changed at a slower rate.
Definition: command.hpp:936
A two-state message field (either set/true or cleared/false).
Definition: command.hpp:306
void set(T _value)
Sets the field to a given value.
Definition: command.hpp:369
bool has() const
Returns true if the flag is set, false if it is cleared.
Definition: command.cpp:162
StringField & appendLog()
Appends to the current log message on the module.
Definition: command.hpp:951
const Actuator & actuator() const
Actuator-specific settings, such as controller gains.
Definition: command.hpp:740
IoBank & b()
I/O pin bank b (pins 1-8 available)
Definition: command.hpp:519
const IoBank & e() const
I/O pin bank e (pins 1-8 available)
Definition: command.hpp:533
A message field containing a numbered set of single-precision floating point values.
Definition: command.hpp:177
Triggering the M-Stop has no effect.
HebiStatusCode enumGetter(const RefT &ref, MetadataT &metadata, int field, int32_t *value)
Definition: message_helpers.cpp:300
const FloatField & userSettingsFloat(size_t number) const
Definition: command.hpp:810
const StringField & family() const
Definition: command.hpp:759
Color get() const
Returns the current LED command.
Definition: command.cpp:231
int64_t getInt(size_t pinNumber) const
If this numbered pin in this bank has an integer (e.g., digital) value, returns that value; otherwise...
Definition: command.cpp:178
double get() const
If the field has a value, returns that value as a double; otherwise, returns a default.
Definition: command.cpp:36
const FlagField & boot() const
Boot the module from bootloader into application.
Definition: command.hpp:961
FloatField & effortLimitMax()
The firmware safety limit for the maximum allowed effort.
Definition: command.hpp:625
EnumField< ControlStrategy > & controlStrategy()
How the position, velocity, and effort PID loops are connected in order to control motor PWM.
Definition: command.hpp:643
const LedField & led() const
The module's LED.
Definition: command.hpp:973
HighResAngleField & positionLimitMin()
The firmware safety limit for the minimum allowed position.
Definition: command.hpp:635
float getFloat(size_t pinNumber) const
If this numbered pin in this bank has an floating point (e.g., analog or PWM) value,...
Definition: command.cpp:184
FloatField & velocity()
Velocity of the module output (post-spring), in radians/second.
Definition: command.hpp:884
Exceeding the position limit results in a virtual spring that pushes the actuator back to within the ...
const IpAddressField & ipAddress() const
Definition: command.hpp:829
Any available digital or analog output pins on the device.
Definition: command.hpp:497
const HighResAngleField & positionLimitMin() const
The firmware safety limit for the minimum allowed position.
Definition: command.hpp:637
float get() const
If the field has a value, returns that value; otherwise, returns a default.
Definition: command.cpp:17
FloatField & referenceEffort()
The internal effort reference offset (setting this matches the current effort to the given reference ...
Definition: command.hpp:609
ControlStrategy
Definition: command.hpp:36
const EnumField< PositionLimitStrategy > & maxPositionLimitStrategy() const
The position limit strategy (at the maximum position) for the actuator.
Definition: command.hpp:657
A simple wrapper class for IpAddress objects.
Definition: ip_address.hpp:36
const HighResAngleField & positionLimitMax() const
The firmware safety limit for the maximum allowed position.
Definition: command.hpp:641
const Imu & imu() const
IMU-specific settings.
Definition: command.hpp:744
const FloatField & referenceEffort() const
The internal effort reference offset (setting this matches the current effort to the given reference ...
Definition: command.hpp:611
const FlagField & saveCurrentSettings() const
Indicates if the module should save the current values of all of its settings.
Definition: command.hpp:837
void clear()
Removes any currently set value for this field.
Definition: command.hpp:374
IoBank & e()
I/O pin bank e (pins 1-8 available)
Definition: command.hpp:531
FlagField & clearLog()
Clears the log message on the module.
Definition: command.hpp:967
EnumField< PositionLimitStrategy > & maxPositionLimitStrategy()
The position limit strategy (at the maximum position) for the actuator.
Definition: command.hpp:655
const EnumField< MstopStrategy > & mstopStrategy() const
The motion stop strategy for the actuator.
Definition: command.hpp:649
T get() const
If the field has a value, returns that value; otherwise, returns a default.
Definition: command.hpp:363
void clear()
Removes any currently set value for this field, so that the module maintains its previous state of LE...
Definition: command.cpp:246
Command(Command &&other)
Move constructor (necessary for containment in STL template classes)
Definition: command.cpp:250
A message field for an angle measurement which does not lose precision at very high angles.
Definition: command.hpp:116
void set(double radians)
Sets the field to a given double value (in radians). Note that double precision floating point number...
Definition: command.cpp:52
Imu & imu()
IMU-specific settings.
Definition: command.hpp:742
const FlagField & stopBoot() const
Stop the module from automatically booting into application.
Definition: command.hpp:965
void clear()
Removes any currently set value for this field.
Definition: command.cpp:157
EnumField< MstopStrategy > & mstopStrategy()
The motion stop strategy for the actuator.
Definition: command.hpp:647
void set(float value)
Sets the field to a given value.
Definition: command.cpp:25
bool has() const
True if (and only if) the field has a value.
Definition: command.cpp:135
void set(bool value)
Sets the field to a given value.
Definition: command.cpp:125
bool has() const
True if (and only if) the field has a value.
Definition: command.cpp:95
const FloatField & velocity() const
Velocity of the module output (post-spring), in radians/second.
Definition: command.hpp:886
const Actuator & actuator() const
Actuator-specific commands.
Definition: command.hpp:940
float get(size_t fieldNumber) const
If the particular numbered subvalue of this field has a value, returns that value; otherwise returns ...
Definition: command.cpp:76
FloatField & velocityLimitMax()
The firmware safety limit for the maximum allowed velocity.
Definition: command.hpp:617
const StringField & appendLog() const
Appends to the current log message on the module.
Definition: command.hpp:953
const FloatField & velocityLimitMax() const
The firmware safety limit for the maximum allowed velocity.
Definition: command.hpp:619
IMU-specific settings.
Definition: command.hpp:682
StringField & name()
Definition: command.hpp:750
LedField & led()
The module's LED.
Definition: command.hpp:971
void setFloat(size_t pinNumber, float value)
Sets the particular pin to a floating point value (representing a PWM output).
Definition: command.cpp:194
void setLabel(size_t pinNumber, const std::string &)
Sets the string label for a particular pin.
Definition: command.cpp:214
Exceeding the position limit has no effect.
bool has() const
Returns true if the LED command has been set, and false otherwise.
Definition: command.cpp:227
void set(const IpAddress &value)
Sets the field to a given value.
Definition: command.cpp:107
bool hasFloat(size_t pinNumber) const
True if (and only if) the particular numbered pin in this bank has an floating point (e....
Definition: command.cpp:174
const CommandGains & velocityGains() const
Controller gains for the velocity PID loop.
Definition: command.hpp:590
bool hasInt(size_t pinNumber) const
True if (and only if) the particular numbered pin in this bank has an integer (e.g....
Definition: command.cpp:170
const IoBank & f() const
I/O pin bank f (pins 1-8 available)
Definition: command.hpp:537
A direct PWM value (-1 to 1) can be sent to the motor (subject to onboard safety limiting).
Structure to describe an RGB color.
Definition: color.hpp:8
CommandGains & positionGains()
Controller gains for the position PID loop.
Definition: command.hpp:584
A message field representable by an unsigned 64 bit integer value.
Definition: command.hpp:214
A message field representable by a single-precision floating point value.
Definition: command.hpp:77
bool has(size_t fieldNumber) const
True if (and only if) the particular numbered subvalue of this field has a value.
Definition: command.cpp:72
void clear()
Clears this flag (e.g., sets it to false/off).
Definition: command.cpp:166
Command & operator=(Command &&other)=delete
PositionLimitStrategy
Definition: command.hpp:64
const StringField & userSettingsBytes(size_t number) const
Definition: command.hpp:778
bool has() const
True if (and only if) the field has a value.
Definition: command.cpp:15
FloatField & velocityLimitMin()
The firmware safety limit for the minimum allowed velocity.
Definition: command.hpp:613
void clear(size_t pinNumber)
Removes any currently set value for this pin.
Definition: command.cpp:220
void set(const std::string &value)
Sets the field to a given value.
Definition: command.cpp:151
IpAddressField & ipAddress()
Definition: command.hpp:826
EnumField< PositionLimitStrategy > & minPositionLimitStrategy()
The position limit strategy (at the minimum position) for the actuator.
Definition: command.hpp:651
FlagField & stopBoot()
Stop the module from automatically booting into application.
Definition: command.hpp:963
A message field representable by an enum of a given type.
Definition: command.hpp:339
FloatField & effort()
Effort at the module output; units vary (e.g., N * m for rotational joints and N for linear stages).
Definition: command.hpp:888