HEBI C++ API  3.10.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
feedback.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include "hebi.h"
4 
5 #include "color.hpp"
6 #include "quaternion_f.hpp"
7 #include "message_helpers.hpp"
8 #include "util.hpp"
9 #include "vector_3_f.hpp"
10 
11 namespace hebi {
12 
32 class Feedback final {
33 public:
34  enum class TemperatureState {
36  Normal,
38  Critical,
43  };
44 
45  enum class MstopState {
47  Triggered,
50  };
51 
52  enum class PositionLimitState {
55  Below,
57  AtLower,
59  Inside,
61  AtUpper,
64  Above,
67  };
68 
69  enum class VelocityLimitState {
72  Below,
74  AtLower,
76  Inside,
78  AtUpper,
81  Above,
84  };
85 
86  enum class EffortLimitState {
89  Below,
91  AtLower,
93  Inside,
95  AtUpper,
98  Above,
101  };
102 
103  enum class CommandLifetimeState {
105  Unlocked,
110  };
111 
112  enum class ArQuality {
128  };
129 
130 protected:
132  class FloatField final {
133  public:
134 #ifndef DOXYGEN_OMIT_INTERNAL
135  FloatField(const HebiFeedbackRef& internal, HebiFeedbackFloatField field);
136 #endif // DOXYGEN_OMIT_INTERNAL
137  explicit operator bool() const { return has(); }
151  bool has() const;
154  float get() const;
155 
157  private:
158  const HebiFeedbackRef& internal_;
159  HebiFeedbackFloatField const field_;
160  };
161 
167  class HighResAngleField final {
168  public:
169 #ifndef DOXYGEN_OMIT_INTERNAL
170  HighResAngleField(const HebiFeedbackRef& internal, HebiFeedbackHighResAngleField field);
171 #endif // DOXYGEN_OMIT_INTERNAL
172  explicit operator bool() const { return has(); }
186  bool has() const;
192  double get() const;
204  void get(int64_t* revolutions, float* radian_offset) const;
205 
207  private:
208  const HebiFeedbackRef& internal_;
209  HebiFeedbackHighResAngleField const field_;
210  };
211 
214  class NumberedFloatField final {
215  public:
216 #ifndef DOXYGEN_OMIT_INTERNAL
217  NumberedFloatField(const HebiFeedbackRef& internal, HebiFeedbackNumberedFloatField field);
218 #endif // DOXYGEN_OMIT_INTERNAL
219  bool has(size_t fieldNumber) const;
230  float get(size_t fieldNumber) const;
231 
233  private:
234  const HebiFeedbackRef& internal_;
235  HebiFeedbackNumberedFloatField const field_;
236  };
237 
239  class UInt64Field final {
240  public:
241 #ifndef DOXYGEN_OMIT_INTERNAL
242  UInt64Field(const HebiFeedbackRef& internal, HebiFeedbackUInt64Field field);
243 #endif // DOXYGEN_OMIT_INTERNAL
244  explicit operator bool() const { return has(); }
258  bool has() const;
261  uint64_t get() const;
262 
264  private:
265  const HebiFeedbackRef& internal_;
266  HebiFeedbackUInt64Field const field_;
267  };
268 
271  class Vector3fField final {
272  public:
273 #ifndef DOXYGEN_OMIT_INTERNAL
274  Vector3fField(const HebiFeedbackRef& internal, HebiFeedbackVector3fField field);
275 #endif // DOXYGEN_OMIT_INTERNAL
276  explicit operator bool() const { return has(); }
290  bool has() const;
293  Vector3f get() const;
294 
296  private:
297  const HebiFeedbackRef& internal_;
298  HebiFeedbackVector3fField const field_;
299  };
300 
303  class QuaternionfField final {
304  public:
305 #ifndef DOXYGEN_OMIT_INTERNAL
306  QuaternionfField(const HebiFeedbackRef& internal, HebiFeedbackQuaternionfField field);
307 #endif // DOXYGEN_OMIT_INTERNAL
308  explicit operator bool() const { return has(); }
322  bool has() const;
325  Quaternionf get() const;
326 
328  private:
329  const HebiFeedbackRef& internal_;
330  HebiFeedbackQuaternionfField const field_;
331  };
332 
334  template<typename T>
335  class EnumField final {
336  public:
337 #ifndef DOXYGEN_OMIT_INTERNAL
338  EnumField(const HebiFeedbackRef& internal, HebiFeedbackEnumField field) : internal_(internal), field_(field) {}
339 #endif // DOXYGEN_OMIT_INTERNAL
340  explicit operator bool() const { return has(); }
354  bool has() const {
355  return (enumGetter(internal_, field_, nullptr) == HebiStatusSuccess);
356  }
359  T get() const {
360  int32_t ret{};
361  enumGetter(internal_, field_, &ret);
362  return static_cast<T>(ret);
363  }
364 
366  private:
367  const HebiFeedbackRef& internal_;
368  HebiFeedbackEnumField const field_;
369  };
370 
372  class IoBank final {
373  public:
374 #ifndef DOXYGEN_OMIT_INTERNAL
375  IoBank(const HebiFeedbackRef& internal, HebiFeedbackIoPinBank bank);
376 #endif // DOXYGEN_OMIT_INTERNAL
377  bool hasInt(size_t pinNumber) const;
388  bool hasFloat(size_t pinNumber) const;
394  int64_t getInt(size_t pinNumber) const;
401  float getFloat(size_t pinNumber) const;
402 
404  private:
405  const HebiFeedbackRef& internal_;
406  HebiFeedbackIoPinBank const bank_;
407  };
408 
410  class LedField final {
411  public:
412 #ifndef DOXYGEN_OMIT_INTERNAL
413  LedField(const HebiFeedbackRef& internal, HebiFeedbackLedField field);
414 #endif // DOXYGEN_OMIT_INTERNAL
415  explicit operator bool() const { return hasColor(); }
429  bool hasColor() const;
431  Color getColor() const;
432 
434  private:
435  const HebiFeedbackRef& internal_;
436  HebiFeedbackLedField const field_;
437  };
438 
440  class Io final {
441  public:
442 #ifndef DOXYGEN_OMIT_INTERNAL
443  Io(const HebiFeedbackRef& internal)
444  : a_(internal, HebiFeedbackIoBankA),
445  b_(internal, HebiFeedbackIoBankB),
446  c_(internal, HebiFeedbackIoBankC),
447  d_(internal, HebiFeedbackIoBankD),
448  e_(internal, HebiFeedbackIoBankE),
449  f_(internal, HebiFeedbackIoBankF) {}
450 #endif // DOXYGEN_OMIT_INTERNAL
451 
452  // With all submessage and field getters: Note that the returned reference
453  // should not be used after the lifetime of this parent.
454 
455  // Subfields ----------------
456 
458  const IoBank& a() const { return a_; }
460  const IoBank& b() const { return b_; }
462  const IoBank& c() const { return c_; }
464  const IoBank& d() const { return d_; }
466  const IoBank& e() const { return e_; }
468  const IoBank& f() const { return f_; }
469 
471  private:
472  IoBank a_;
473  IoBank b_;
474  IoBank c_;
475  IoBank d_;
476  IoBank e_;
477  IoBank f_;
478  };
479 
481  class Actuator final {
482  public:
483 #ifndef DOXYGEN_OMIT_INTERNAL
484  Actuator(const HebiFeedbackRef& internal)
485  : velocity_(internal, HebiFeedbackFloatVelocity),
486  effort_(internal, HebiFeedbackFloatEffort),
487  velocity_command_(internal, HebiFeedbackFloatVelocityCommand),
488  effort_command_(internal, HebiFeedbackFloatEffortCommand),
489  deflection_(internal, HebiFeedbackFloatDeflection),
490  deflection_velocity_(internal, HebiFeedbackFloatDeflectionVelocity),
491  motor_velocity_(internal, HebiFeedbackFloatMotorVelocity),
492  motor_current_(internal, HebiFeedbackFloatMotorCurrent),
493  motor_sensor_temperature_(internal, HebiFeedbackFloatMotorSensorTemperature),
494  motor_winding_current_(internal, HebiFeedbackFloatMotorWindingCurrent),
495  motor_winding_temperature_(internal, HebiFeedbackFloatMotorWindingTemperature),
496  motor_housing_temperature_(internal, HebiFeedbackFloatMotorHousingTemperature),
497  pwm_command_(internal, HebiFeedbackFloatPwmCommand),
498  inner_effort_command_(internal, HebiFeedbackFloatInnerEffortCommand),
499  position_(internal, HebiFeedbackHighResAnglePosition),
500  position_command_(internal, HebiFeedbackHighResAnglePositionCommand),
501  motor_position_(internal, HebiFeedbackHighResAngleMotorPosition),
502  temperature_state_(internal, HebiFeedbackEnumTemperatureState),
503  mstop_state_(internal, HebiFeedbackEnumMstopState),
504  position_limit_state_(internal, HebiFeedbackEnumPositionLimitState),
505  velocity_limit_state_(internal, HebiFeedbackEnumVelocityLimitState),
506  effort_limit_state_(internal, HebiFeedbackEnumEffortLimitState),
507  command_lifetime_state_(internal, HebiFeedbackEnumCommandLifetimeState) {}
508 #endif // DOXYGEN_OMIT_INTERNAL
509 
510  // With all submessage and field getters: Note that the returned reference
511  // should not be used after the lifetime of this parent.
512 
513  // Subfields ----------------
514 
516  const FloatField& velocity() const { return velocity_; }
518  const FloatField& effort() const { return effort_; }
520  const FloatField& velocityCommand() const { return velocity_command_; }
522  const FloatField& effortCommand() const { return effort_command_; }
524  const FloatField& deflection() const { return deflection_; }
526  const FloatField& deflectionVelocity() const { return deflection_velocity_; }
528  const FloatField& motorVelocity() const { return motor_velocity_; }
530  const FloatField& motorCurrent() const { return motor_current_; }
532  const FloatField& motorSensorTemperature() const { return motor_sensor_temperature_; }
534  const FloatField& motorWindingCurrent() const { return motor_winding_current_; }
536  const FloatField& motorWindingTemperature() const { return motor_winding_temperature_; }
538  const FloatField& motorHousingTemperature() const { return motor_housing_temperature_; }
540  const FloatField& pwmCommand() const { return pwm_command_; }
542  const FloatField& innerEffortCommand() const { return inner_effort_command_; }
544  const HighResAngleField& position() const { return position_; }
546  const HighResAngleField& positionCommand() const { return position_command_; }
548  const HighResAngleField& motorPosition() const { return motor_position_; }
550  const EnumField<TemperatureState>& temperatureState() const { return temperature_state_; }
552  const EnumField<MstopState>& mstopState() const { return mstop_state_; }
554  const EnumField<PositionLimitState>& positionLimitState() const { return position_limit_state_; }
556  const EnumField<VelocityLimitState>& velocityLimitState() const { return velocity_limit_state_; }
558  const EnumField<EffortLimitState>& effortLimitState() const { return effort_limit_state_; }
560  const EnumField<CommandLifetimeState>& commandLifetimeState() const { return command_lifetime_state_; }
561 
563  private:
564  FloatField velocity_;
565  FloatField effort_;
566  FloatField velocity_command_;
567  FloatField effort_command_;
568  FloatField deflection_;
569  FloatField deflection_velocity_;
570  FloatField motor_velocity_;
571  FloatField motor_current_;
572  FloatField motor_sensor_temperature_;
573  FloatField motor_winding_current_;
574  FloatField motor_winding_temperature_;
575  FloatField motor_housing_temperature_;
576  FloatField pwm_command_;
577  FloatField inner_effort_command_;
578  HighResAngleField position_;
579  HighResAngleField position_command_;
580  HighResAngleField motor_position_;
581  EnumField<TemperatureState> temperature_state_;
582  EnumField<MstopState> mstop_state_;
583  EnumField<PositionLimitState> position_limit_state_;
584  EnumField<VelocityLimitState> velocity_limit_state_;
585  EnumField<EffortLimitState> effort_limit_state_;
586  EnumField<CommandLifetimeState> command_lifetime_state_;
587  };
588 
590  class Mobile final {
591  public:
592 #ifndef DOXYGEN_OMIT_INTERNAL
593  Mobile(const HebiFeedbackRef& internal)
594  : battery_level_(internal, HebiFeedbackFloatBatteryLevel),
595  ar_position_(internal, HebiFeedbackVector3fArPosition),
596  ar_orientation_(internal, HebiFeedbackQuaternionfArOrientation),
597  ar_quality_(internal, HebiFeedbackEnumArQuality) {}
598 #endif // DOXYGEN_OMIT_INTERNAL
599 
600  // With all submessage and field getters: Note that the returned reference
601  // should not be used after the lifetime of this parent.
602 
603  // Subfields ----------------
604 
606  const FloatField& batteryLevel() const { return battery_level_; }
608  const Vector3fField& arPosition() const { return ar_position_; }
610  const QuaternionfField& arOrientation() const { return ar_orientation_; }
612  const EnumField<ArQuality>& arQuality() const { return ar_quality_; }
613 
615  private:
616  FloatField battery_level_;
617  Vector3fField ar_position_;
618  QuaternionfField ar_orientation_;
619  EnumField<ArQuality> ar_quality_;
620  };
621 
623  class Imu final {
624  public:
625 #ifndef DOXYGEN_OMIT_INTERNAL
626  Imu(const HebiFeedbackRef& internal)
627  : accelerometer_(internal, HebiFeedbackVector3fAccelerometer),
628  gyro_(internal, HebiFeedbackVector3fGyro),
629  orientation_(internal, HebiFeedbackQuaternionfOrientation) {}
630 #endif // DOXYGEN_OMIT_INTERNAL
631 
632  // With all submessage and field getters: Note that the returned reference
633  // should not be used after the lifetime of this parent.
634 
635  // Subfields ----------------
636 
638  const Vector3fField& accelerometer() const { return accelerometer_; }
640  const Vector3fField& gyro() const { return gyro_; }
642  const QuaternionfField& orientation() const { return orientation_; }
643 
645  private:
646  Vector3fField accelerometer_;
647  Vector3fField gyro_;
648  QuaternionfField orientation_;
649  };
650 
651 private:
656  HebiFeedbackPtr internal_;
657  HebiFeedbackRef internal_ref_;
658 
659 public:
660 #ifndef DOXYGEN_OMIT_INTERNAL
661 
665  Feedback(HebiFeedbackPtr);
666 #endif // DOXYGEN_OMIT_INTERNAL
667 
670  Feedback(Feedback&& other);
671 
672  // With all submessage and field getters: Note that the returned reference
673  // should not be used after the lifetime of this parent.
674 
675  // Submessages -------------------------------------------------------------
676 
678  const Io& io() const { return io_; }
680  const Actuator& actuator() const { return actuator_; }
682  const Mobile& mobile() const { return mobile_; }
684  const Imu& imu() const { return imu_; }
685 
686  // Subfields -------------------------------------------------------------
687 
689  const FloatField& boardTemperature() const { return board_temperature_; }
691  const FloatField& processorTemperature() const { return processor_temperature_; }
693  const FloatField& voltage() const { return voltage_; }
694 #ifndef DOXYGEN_OMIT_INTERNAL
695  const NumberedFloatField& debug() const { return debug_; }
697 #endif // DOXYGEN_OMIT_INTERNAL
698  const UInt64Field& sequenceNumber() const { return sequence_number_; }
701  const UInt64Field& receiveTimeUs() const { return receive_time_us_; }
703  const UInt64Field& transmitTimeUs() const { return transmit_time_us_; }
705  const UInt64Field& hardwareReceiveTimeUs() const { return hardware_receive_time_us_; }
707  const UInt64Field& hardwareTransmitTimeUs() const { return hardware_transmit_time_us_; }
709  const UInt64Field& senderId() const { return sender_id_; }
711  const UInt64Field& rxSequenceNumber() const { return rx_sequence_number_; }
713  const LedField& led() const { return led_; }
714 
719 
720  /* Disable move assigment operator. */
721  Feedback& operator=(Feedback&& other) = delete;
722 
723 private:
724  Io io_;
725  Actuator actuator_;
726  Mobile mobile_;
727  Imu imu_;
728 
729  FloatField board_temperature_;
730  FloatField processor_temperature_;
731  FloatField voltage_;
732  NumberedFloatField debug_;
733  UInt64Field sequence_number_;
734  UInt64Field receive_time_us_;
735  UInt64Field transmit_time_us_;
736  UInt64Field hardware_receive_time_us_;
737  UInt64Field hardware_transmit_time_us_;
738  UInt64Field sender_id_;
739  UInt64Field rx_sequence_number_;
740  LedField led_;
741 };
742 
743 } // namespace hebi
bool has() const
True if (and only if) the field has a value.
Definition: feedback.cpp:14
The AR session is attempting to resume after an interruption.
The module has not been inside the safety limits since it was booted or the safety limits were set.
VelocityLimitState
Definition: feedback.hpp:69
const FloatField & voltage() const
Bus voltage that the module is running at (in Volts).
Definition: feedback.hpp:693
bool has(size_t fieldNumber) const
True if (and only if) the particular numbered subvalue of this field has a value.
Definition: feedback.cpp:52
const FloatField & deflection() const
Difference (in radians) between the pre-spring and post-spring output position.
Definition: feedback.hpp:524
bool has() const
True if (and only if) the field has a value.
Definition: feedback.hpp:354
const FloatField & motorVelocity() const
The velocity (in radians/second) of the motor shaft.
Definition: feedback.hpp:528
Camera position tracking is not available.
const IoBank & e() const
I/O pin bank e (pins 1-8 available)
Definition: feedback.hpp:466
Structure to hold a 3-D floating point vector (i.e., x/y/z components)
Definition: vector_3_f.hpp:8
#define HEBI_DISABLE_COPY(Class)
Definition: util.hpp:16
bool has() const
True if (and only if) the field has a value.
Definition: feedback.cpp:29
PositionLimitState
Definition: feedback.hpp:52
Commands are locked out due to control from other users.
Tracking is available albeit suboptimal for an unknown reason.
The device is moving too fast for accurate image-based position tracking.
const UInt64Field & hardwareTransmitTimeUs() const
Timestamp of when message was transmitted from module (remote; microseconds)
Definition: feedback.hpp:707
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: feedback.cpp:124
Definition: arm.cpp:10
float getFloat(size_t pinNumber) const
If this numbered pin in this bank has an floating point (e.g., analog or PWM) value,...
Definition: feedback.cpp:130
Structure to hold a floating point quaternion (i.e., w/x/y/z components)
Definition: quaternion_f.hpp:8
double get() const
If the field has a value, returns that value as a double; otherwise, returns a default.
Definition: feedback.cpp:33
const Mobile & mobile() const
Feedback generally from a mobile device such as a phone or tablet.
Definition: feedback.hpp:682
const EnumField< MstopState > & mstopState() const
Current status of the MStop.
Definition: feedback.hpp:552
const HighResAngleField & positionCommand() const
Commanded position of the module output (post-spring), in radians.
Definition: feedback.hpp:546
const FloatField & effort() const
Effort at the module output; units vary (e.g., N * m for rotational joints and N for linear stages).
Definition: feedback.hpp:518
CommandLifetimeState
Definition: feedback.hpp:103
const FloatField & innerEffortCommand() const
In control strategies 2 and 4, this is the torque of force command going to the inner torque PID loop...
Definition: feedback.hpp:542
const EnumField< EffortLimitState > & effortLimitState() const
Software-controlled bounds on the allowable effort of the module.
Definition: feedback.hpp:558
#define HEBI_DISABLE_COPY_MOVE(Class)
Definition: util.hpp:6
const Vector3fField & arPosition() const
A device's position in the world as calculated from an augmented reality framework,...
Definition: feedback.hpp:608
const UInt64Field & rxSequenceNumber() const
Sequence number of incoming packet per module (local)
Definition: feedback.hpp:711
A message field representable by a single-precision floating point value.
Definition: feedback.hpp:132
Inertial measurement unit feedback (accelerometers and gyros).
Definition: feedback.hpp:623
Feedback objects have various fields representing feedback from modules; which fields are populated d...
Definition: feedback.hpp:32
A message field for interfacing with a bank of I/O pins.
Definition: feedback.hpp:372
bool hasInt(size_t pinNumber) const
True if (and only if) the particular numbered pin in this bank has an integer (e.g....
Definition: feedback.cpp:116
The effort of the module was near the upper safety limit, and the motor output is being limited or re...
const IoBank & d() const
I/O pin bank d (pins 1-8 available)
Definition: feedback.hpp:464
The AR session has not yet gathered enough camera or motion data to provide tracking information.
A message field representable by a 3-D vector of single-precision floating point values.
Definition: feedback.hpp:303
bool hasColor() const
Returns true if the LED color is set, and false otherwise.
Definition: feedback.cpp:139
The velocity of the module was near the upper safety limit, and the motor output is being limited or ...
const FloatField & velocity() const
Velocity of the module output (post-spring), in radians/second.
Definition: feedback.hpp:516
bool has() const
True if (and only if) the field has a value.
Definition: feedback.cpp:82
The effort of the module was within the safety limits.
const EnumField< VelocityLimitState > & velocityLimitState() const
Software-controlled bounds on the allowable velocity of the module.
Definition: feedback.hpp:556
const UInt64Field & senderId() const
Unique ID of the module transmitting this feedback.
Definition: feedback.hpp:709
A message field for an angle measurement which does not lose precision at very high angles.
Definition: feedback.hpp:167
const FloatField & effortCommand() const
Commanded effort at the module output; units vary (e.g., N * m for rotational joints and N for linear...
Definition: feedback.hpp:522
const IoBank & f() const
I/O pin bank f (pins 1-8 available)
Definition: feedback.hpp:468
The module has not been inside the safety limits since it was booted or the safety limits were set.
const EnumField< ArQuality > & arQuality() const
The status of the augmented reality tracking, if using an AR enabled device.
Definition: feedback.hpp:612
HebiStatusCode enumGetter(const RefT &ref, MetadataT &metadata, int field, int32_t *value)
Definition: message_helpers.cpp:300
TemperatureState
Definition: feedback.hpp:34
const HighResAngleField & position() const
Position of the module output (post-spring), in radians.
Definition: feedback.hpp:544
The position of the module was near the upper safety limit, and the motor output is being limited or ...
A message field representable by an enum of a given type.
Definition: feedback.hpp:335
const FloatField & motorWindingTemperature() const
The estimated temperature of the motor windings.
Definition: feedback.hpp:536
const FloatField & boardTemperature() const
Ambient temperature inside the module (measured at the IMU chip), in degrees Celsius.
Definition: feedback.hpp:689
T get() const
If the field has a value, returns that value; otherwise, returns a default.
Definition: feedback.hpp:359
Commands from others are locked out due to control from this group.
Temperature within normal range.
const Vector3fField & gyro() const
Gyro data, in radians/second.
Definition: feedback.hpp:640
const EnumField< TemperatureState > & temperatureState() const
Describes how the temperature inside the module is limiting the output of the motor.
Definition: feedback.hpp:550
const FloatField & processorTemperature() const
Temperature of the processor chip, in degrees Celsius.
Definition: feedback.hpp:691
const LedField & led() const
The module's LED.
Definition: feedback.hpp:713
A message field for interfacing with an LED.
Definition: feedback.hpp:410
const UInt64Field & sequenceNumber() const
Sequence number going to module (local)
Definition: feedback.hpp:699
const Imu & imu() const
Inertial measurement unit feedback (accelerometers and gyros).
Definition: feedback.hpp:684
const FloatField & motorWindingCurrent() const
The estimated current in the motor windings.
Definition: feedback.hpp:534
const FloatField & batteryLevel() const
Charge level of the device’s battery (in percent).
Definition: feedback.hpp:606
const FloatField & velocityCommand() const
Commanded velocity of the module output (post-spring), in radians/second.
Definition: feedback.hpp:520
const QuaternionfField & orientation() const
A filtered estimate of the orientation of the module.
Definition: feedback.hpp:642
const EnumField< CommandLifetimeState > & commandLifetimeState() const
The state of the command lifetime safety controller, with respect to the current group.
Definition: feedback.hpp:560
Feedback generally from a mobile device such as a phone or tablet.
Definition: feedback.hpp:590
const FloatField & motorHousingTemperature() const
The estimated temperature of the motor housing.
Definition: feedback.hpp:538
float get(size_t fieldNumber) const
If the particular numbered subvalue of this field has a value, returns that value; otherwise returns ...
Definition: feedback.cpp:56
float get() const
If the field has a value, returns that value; otherwise, returns a default.
Definition: feedback.cpp:18
Motor output beginning to be limited due to high temperature.
Feedback from any available I/O pins on the device.
Definition: feedback.hpp:440
There is not command lifetime active on this module.
const FloatField & deflectionVelocity() const
Velocity (in radians/second) of the difference between the pre-spring and post-spring output position...
Definition: feedback.hpp:526
A message field representable by an unsigned 64 bit integer value.
Definition: feedback.hpp:239
Feedback & operator=(Feedback &&other)=delete
Vector3f get() const
If the field has a value, returns that value; otherwise, returns a default.
Definition: feedback.cpp:86
Temperature exceeds max allowable for electronics; motor output disabled.
The effort of the module was near the lower safety limit, and the motor output is being limited or re...
ArQuality
Definition: feedback.hpp:112
The velocity of the module was near the lower safety limit, and the motor output is being limited or ...
const IoBank & a() const
I/O pin bank a (pins 1-8 available)
Definition: feedback.hpp:458
Temperature exceeds max allowable for motor; motor output disabled.
const UInt64Field & receiveTimeUs() const
Timestamp of when message was received from module (local; microseconds)
Definition: feedback.hpp:701
const FloatField & motorSensorTemperature() const
The temperature from a sensor near the motor housing.
Definition: feedback.hpp:532
The position of the module was within the safety limits.
const UInt64Field & transmitTimeUs() const
Timestamp of when message was transmitted to module (local; microseconds)
Definition: feedback.hpp:703
uint64_t get() const
If the field has a value, returns that value; otherwise, returns a default.
Definition: feedback.cpp:71
const EnumField< PositionLimitState > & positionLimitState() const
Software-controlled bounds on the allowable position of the module; user settable.
Definition: feedback.hpp:554
Actuator-specific feedback.
Definition: feedback.hpp:481
bool has() const
True if (and only if) the field has a value.
Definition: feedback.cpp:99
MstopState
Definition: feedback.hpp:45
const Vector3fField & accelerometer() const
Accelerometer data, in m/s^2.
Definition: feedback.hpp:638
const FloatField & pwmCommand() const
Commanded PWM signal sent to the motor; final output of PID controllers.
Definition: feedback.hpp:540
bool has() const
True if (and only if) the field has a value.
Definition: feedback.cpp:67
const UInt64Field & hardwareReceiveTimeUs() const
Timestamp of when message was received by module (remote; microseconds)
Definition: feedback.hpp:705
Feedback(Feedback &&other)
Move constructor (necessary for containment in STL template classes)
Definition: feedback.cpp:154
The module has not been inside the safety limits since it was booted or the safety limits were set.
EffortLimitState
Definition: feedback.hpp:86
Camera position tracking is providing optimal results.
const Actuator & actuator() const
Actuator-specific feedback.
Definition: feedback.hpp:680
const Io & io() const
Feedback from any available I/O pins on the device.
Definition: feedback.hpp:678
const QuaternionfField & arOrientation() const
A device's orientation in the world as calculated from an augmented reality framework.
Definition: feedback.hpp:610
Structure to describe an RGB color.
Definition: color.hpp:8
The velocity of the module was within the safety limits.
const HighResAngleField & motorPosition() const
The position of an actuator’s internal motor before the gear reduction, in radians.
Definition: feedback.hpp:548
A message field containing a numbered set of single-precision floating point values.
Definition: feedback.hpp:214
bool hasFloat(size_t pinNumber) const
True if (and only if) the particular numbered pin in this bank has an floating point (e....
Definition: feedback.cpp:120
Quaternionf get() const
If the field has a value, returns that value; otherwise, returns a default.
Definition: feedback.cpp:103
A message field representable by a 3-D vector of single-precision floating point values.
Definition: feedback.hpp:271
const IoBank & b() const
I/O pin bank b (pins 1-8 available)
Definition: feedback.hpp:460
Color getColor() const
Returns the led color.
Definition: feedback.cpp:143
The position of the module was near the lower safety limit, and the motor output is being limited or ...
const IoBank & c() const
I/O pin bank c (pins 1-8 available)
Definition: feedback.hpp:462
const FloatField & motorCurrent() const
Current supplied to the motor.
Definition: feedback.hpp:530