HEBI C++ API  2.2.0
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 "util.hpp"
8 #include "vector_3_f.hpp"
9 
10 namespace hebi {
11 
31 class Feedback final {
32 public:
33  enum class TemperatureState {
35  Normal,
37  Critical,
42  };
43 
44  enum class MstopState {
46  Triggered,
49  };
50 
51  enum class PositionLimitState {
54  Below,
56  AtLower,
58  Inside,
60  AtUpper,
63  Above,
66  };
67 
68  enum class VelocityLimitState {
71  Below,
73  AtLower,
75  Inside,
77  AtUpper,
80  Above,
83  };
84 
85  enum class EffortLimitState {
88  Below,
90  AtLower,
92  Inside,
94  AtUpper,
97  Above,
100  };
101 
102  enum class CommandLifetimeState {
104  Unlocked,
109  };
110 
111  enum class ArQuality {
127  };
128 
129 protected:
131  class FloatField final {
132  public:
133 #ifndef DOXYGEN_OMIT_INTERNAL
134  FloatField(HebiFeedbackPtr internal, HebiFeedbackFloatField field);
135 #endif // DOXYGEN_OMIT_INTERNAL
136  explicit operator bool() const { return has(); }
150  bool has() const;
153  float get() const;
154 
156  private:
157  HebiFeedbackPtr const internal_;
158  HebiFeedbackFloatField const field_;
159  };
160 
166  class HighResAngleField final {
167  public:
168 #ifndef DOXYGEN_OMIT_INTERNAL
169  HighResAngleField(HebiFeedbackPtr internal, HebiFeedbackHighResAngleField field);
170 #endif // DOXYGEN_OMIT_INTERNAL
171  explicit operator bool() const { return has(); }
185  bool has() const;
191  double get() const;
203  void get(int64_t* revolutions, float* radian_offset) const;
204 
206  private:
207  HebiFeedbackPtr const internal_;
208  HebiFeedbackHighResAngleField const field_;
209  };
210 
213  class NumberedFloatField final {
214  public:
215 #ifndef DOXYGEN_OMIT_INTERNAL
216  NumberedFloatField(HebiFeedbackPtr internal, HebiFeedbackNumberedFloatField field);
217 #endif // DOXYGEN_OMIT_INTERNAL
218  bool has(size_t fieldNumber) const;
229  float get(size_t fieldNumber) const;
230 
232  private:
233  HebiFeedbackPtr const internal_;
234  HebiFeedbackNumberedFloatField const field_;
235  };
236 
238  class UInt64Field final {
239  public:
240 #ifndef DOXYGEN_OMIT_INTERNAL
241  UInt64Field(HebiFeedbackPtr internal, HebiFeedbackUInt64Field field);
242 #endif // DOXYGEN_OMIT_INTERNAL
243  explicit operator bool() const { return has(); }
257  bool has() const;
260  uint64_t get() const;
261 
263  private:
264  HebiFeedbackPtr const internal_;
265  HebiFeedbackUInt64Field const field_;
266  };
267 
270  class Vector3fField final {
271  public:
272 #ifndef DOXYGEN_OMIT_INTERNAL
273  Vector3fField(HebiFeedbackPtr internal, HebiFeedbackVector3fField field);
274 #endif // DOXYGEN_OMIT_INTERNAL
275  explicit operator bool() const { return has(); }
289  bool has() const;
292  Vector3f get() const;
293 
295  private:
296  HebiFeedbackPtr const internal_;
297  HebiFeedbackVector3fField const field_;
298  };
299 
302  class QuaternionfField final {
303  public:
304 #ifndef DOXYGEN_OMIT_INTERNAL
305  QuaternionfField(HebiFeedbackPtr internal, HebiFeedbackQuaternionfField field);
306 #endif // DOXYGEN_OMIT_INTERNAL
307  explicit operator bool() const { return has(); }
321  bool has() const;
324  Quaternionf get() const;
325 
327  private:
328  HebiFeedbackPtr const internal_;
329  HebiFeedbackQuaternionfField const field_;
330  };
331 
333  template<typename T>
334  class EnumField final {
335  public:
336 #ifndef DOXYGEN_OMIT_INTERNAL
337  EnumField(HebiFeedbackPtr internal, HebiFeedbackEnumField field) : internal_(internal), field_(field) {}
338 #endif // DOXYGEN_OMIT_INTERNAL
339  explicit operator bool() const { return has(); }
353  bool has() const { return (hebiFeedbackGetEnum(internal_, field_, nullptr) == HebiStatusSuccess); }
356  T get() const {
357  int32_t ret{};
358  hebiFeedbackGetEnum(internal_, field_, &ret);
359  return static_cast<T>(ret);
360  }
361 
363  private:
364  HebiFeedbackPtr const internal_;
365  HebiFeedbackEnumField const field_;
366  };
367 
369  class IoBank final {
370  public:
371 #ifndef DOXYGEN_OMIT_INTERNAL
372  IoBank(HebiFeedbackPtr internal, HebiFeedbackIoPinBank bank);
373 #endif // DOXYGEN_OMIT_INTERNAL
374  bool hasInt(size_t pinNumber) const;
385  bool hasFloat(size_t pinNumber) const;
391  int64_t getInt(size_t pinNumber) const;
398  float getFloat(size_t pinNumber) const;
399 
401  private:
402  HebiFeedbackPtr const internal_;
403  HebiFeedbackIoPinBank const bank_;
404  };
405 
407  class LedField final {
408  public:
409 #ifndef DOXYGEN_OMIT_INTERNAL
410  LedField(HebiFeedbackPtr internal, HebiFeedbackLedField field);
411 #endif // DOXYGEN_OMIT_INTERNAL
412  explicit operator bool() const { return hasColor(); }
426  bool hasColor() const;
428  Color getColor() const;
429 
431  private:
432  HebiFeedbackPtr const internal_;
433  HebiFeedbackLedField const field_;
434  };
435 
437  class Io final {
438  public:
439 #ifndef DOXYGEN_OMIT_INTERNAL
440  Io(HebiFeedbackPtr internal)
441  : internal_(internal),
442  a_(internal, HebiFeedbackIoBankA),
443  b_(internal, HebiFeedbackIoBankB),
444  c_(internal, HebiFeedbackIoBankC),
445  d_(internal, HebiFeedbackIoBankD),
446  e_(internal, HebiFeedbackIoBankE),
447  f_(internal, HebiFeedbackIoBankF) {}
448 #endif // DOXYGEN_OMIT_INTERNAL
449 
450  // With all submessage and field getters: Note that the returned reference
451  // should not be used after the lifetime of this parent.
452 
453  // Subfields ----------------
454 
456  const IoBank& a() const { return a_; }
458  const IoBank& b() const { return b_; }
460  const IoBank& c() const { return c_; }
462  const IoBank& d() const { return d_; }
464  const IoBank& e() const { return e_; }
466  const IoBank& f() const { return f_; }
467 
469  private:
470  HebiFeedbackPtr const internal_;
471 
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(HebiFeedbackPtr internal)
485  : internal_(internal),
486  velocity_(internal, HebiFeedbackFloatVelocity),
487  effort_(internal, HebiFeedbackFloatEffort),
488  velocity_command_(internal, HebiFeedbackFloatVelocityCommand),
489  effort_command_(internal, HebiFeedbackFloatEffortCommand),
490  deflection_(internal, HebiFeedbackFloatDeflection),
491  deflection_velocity_(internal, HebiFeedbackFloatDeflectionVelocity),
492  motor_velocity_(internal, HebiFeedbackFloatMotorVelocity),
493  motor_current_(internal, HebiFeedbackFloatMotorCurrent),
494  motor_sensor_temperature_(internal, HebiFeedbackFloatMotorSensorTemperature),
495  motor_winding_current_(internal, HebiFeedbackFloatMotorWindingCurrent),
496  motor_winding_temperature_(internal, HebiFeedbackFloatMotorWindingTemperature),
497  motor_housing_temperature_(internal, HebiFeedbackFloatMotorHousingTemperature),
498  pwm_command_(internal, HebiFeedbackFloatPwmCommand),
499  position_(internal, HebiFeedbackHighResAnglePosition),
500  position_command_(internal, HebiFeedbackHighResAnglePositionCommand),
501  motor_position_(internal, HebiFeedbackHighResAngleMotorPosition),
502  sequence_number_(internal, HebiFeedbackUInt64SequenceNumber),
503  temperature_state_(internal, HebiFeedbackEnumTemperatureState),
504  mstop_state_(internal, HebiFeedbackEnumMstopState),
505  position_limit_state_(internal, HebiFeedbackEnumPositionLimitState),
506  velocity_limit_state_(internal, HebiFeedbackEnumVelocityLimitState),
507  effort_limit_state_(internal, HebiFeedbackEnumEffortLimitState),
508  command_lifetime_state_(internal, HebiFeedbackEnumCommandLifetimeState) {}
509 #endif // DOXYGEN_OMIT_INTERNAL
510 
511  // With all submessage and field getters: Note that the returned reference
512  // should not be used after the lifetime of this parent.
513 
514  // Subfields ----------------
515 
517  const FloatField& velocity() const { return velocity_; }
519  const FloatField& effort() const { return effort_; }
521  const FloatField& velocityCommand() const { return velocity_command_; }
523  const FloatField& effortCommand() const { return effort_command_; }
525  const FloatField& deflection() const { return deflection_; }
527  const FloatField& deflectionVelocity() const { return deflection_velocity_; }
529  const FloatField& motorVelocity() const { return motor_velocity_; }
531  const FloatField& motorCurrent() const { return motor_current_; }
533  const FloatField& motorSensorTemperature() const { return motor_sensor_temperature_; }
535  const FloatField& motorWindingCurrent() const { return motor_winding_current_; }
537  const FloatField& motorWindingTemperature() const { return motor_winding_temperature_; }
539  const FloatField& motorHousingTemperature() const { return motor_housing_temperature_; }
541  const FloatField& pwmCommand() const { return pwm_command_; }
543  const HighResAngleField& position() const { return position_; }
545  const HighResAngleField& positionCommand() const { return position_command_; }
547  const HighResAngleField& motorPosition() const { return motor_position_; }
549  const UInt64Field& sequenceNumber() const { return sequence_number_; }
551  const EnumField<TemperatureState>& temperatureState() const { return temperature_state_; }
553  const EnumField<MstopState>& mstopState() const { return mstop_state_; }
555  const EnumField<PositionLimitState>& positionLimitState() const { return position_limit_state_; }
557  const EnumField<VelocityLimitState>& velocityLimitState() const { return velocity_limit_state_; }
559  const EnumField<EffortLimitState>& effortLimitState() const { return effort_limit_state_; }
561  const EnumField<CommandLifetimeState>& commandLifetimeState() const { return command_lifetime_state_; }
562 
564  private:
565  HebiFeedbackPtr const internal_;
566 
567  FloatField velocity_;
568  FloatField effort_;
569  FloatField velocity_command_;
570  FloatField effort_command_;
571  FloatField deflection_;
572  FloatField deflection_velocity_;
573  FloatField motor_velocity_;
574  FloatField motor_current_;
575  FloatField motor_sensor_temperature_;
576  FloatField motor_winding_current_;
577  FloatField motor_winding_temperature_;
578  FloatField motor_housing_temperature_;
579  FloatField pwm_command_;
580  HighResAngleField position_;
581  HighResAngleField position_command_;
582  HighResAngleField motor_position_;
583  UInt64Field sequence_number_;
584  EnumField<TemperatureState> temperature_state_;
585  EnumField<MstopState> mstop_state_;
586  EnumField<PositionLimitState> position_limit_state_;
587  EnumField<VelocityLimitState> velocity_limit_state_;
588  EnumField<EffortLimitState> effort_limit_state_;
589  EnumField<CommandLifetimeState> command_lifetime_state_;
590  };
591 
593  class Mobile final {
594  public:
595 #ifndef DOXYGEN_OMIT_INTERNAL
596  Mobile(HebiFeedbackPtr internal)
597  : internal_(internal),
598  battery_level_(internal, HebiFeedbackFloatBatteryLevel),
599  ar_position_(internal, HebiFeedbackVector3fArPosition),
600  ar_orientation_(internal, HebiFeedbackQuaternionfArOrientation),
601  ar_quality_(internal, HebiFeedbackEnumArQuality) {}
602 #endif // DOXYGEN_OMIT_INTERNAL
603 
604  // With all submessage and field getters: Note that the returned reference
605  // should not be used after the lifetime of this parent.
606 
607  // Subfields ----------------
608 
610  const FloatField& batteryLevel() const { return battery_level_; }
612  const Vector3fField& arPosition() const { return ar_position_; }
614  const QuaternionfField& arOrientation() const { return ar_orientation_; }
616  const EnumField<ArQuality>& arQuality() const { return ar_quality_; }
617 
619  private:
620  HebiFeedbackPtr const internal_;
621 
622  FloatField battery_level_;
623  Vector3fField ar_position_;
624  QuaternionfField ar_orientation_;
625  EnumField<ArQuality> ar_quality_;
626  };
627 
629  class Imu final {
630  public:
631 #ifndef DOXYGEN_OMIT_INTERNAL
632  Imu(HebiFeedbackPtr internal)
633  : internal_(internal),
634  accelerometer_(internal, HebiFeedbackVector3fAccelerometer),
635  gyro_(internal, HebiFeedbackVector3fGyro),
636  orientation_(internal, HebiFeedbackQuaternionfOrientation) {}
637 #endif // DOXYGEN_OMIT_INTERNAL
638 
639  // With all submessage and field getters: Note that the returned reference
640  // should not be used after the lifetime of this parent.
641 
642  // Subfields ----------------
643 
645  const Vector3fField& accelerometer() const { return accelerometer_; }
647  const Vector3fField& gyro() const { return gyro_; }
649  const QuaternionfField& orientation() const { return orientation_; }
650 
652  private:
653  HebiFeedbackPtr const internal_;
654 
655  Vector3fField accelerometer_;
656  Vector3fField gyro_;
657  QuaternionfField orientation_;
658  };
659 
660 private:
665  HebiFeedbackPtr internal_;
666 
667 public:
668 #ifndef DOXYGEN_OMIT_INTERNAL
669 
673  Feedback(HebiFeedbackPtr);
674 #endif // DOXYGEN_OMIT_INTERNAL
675 
678  Feedback(Feedback&& other);
679 
680  // With all submessage and field getters: Note that the returned reference
681  // should not be used after the lifetime of this parent.
682 
683  // Submessages -------------------------------------------------------------
684 
686  const Io& io() const { return io_; }
688  const Actuator& actuator() const { return actuator_; }
690  const Mobile& mobile() const { return mobile_; }
692  const Imu& imu() const { return imu_; }
693 
694  // Subfields -------------------------------------------------------------
695 
697  const FloatField& boardTemperature() const { return board_temperature_; }
699  const FloatField& processorTemperature() const { return processor_temperature_; }
701  const FloatField& voltage() const { return voltage_; }
702 #ifndef DOXYGEN_OMIT_INTERNAL
703  const NumberedFloatField& debug() const { return debug_; }
705 #endif // DOXYGEN_OMIT_INTERNAL
706  const UInt64Field& receiveTimeUs() const { return receive_time_us_; }
709  const UInt64Field& transmitTimeUs() const { return transmit_time_us_; }
711  const UInt64Field& hardwareReceiveTimeUs() const { return hardware_receive_time_us_; }
713  const UInt64Field& hardwareTransmitTimeUs() const { return hardware_transmit_time_us_; }
715  const UInt64Field& senderId() const { return sender_id_; }
717  const LedField& led() const { return led_; }
718 
723 
724  /* Disable move assigment operator. */
725  Feedback& operator=(Feedback&& other) = delete;
726 
727 private:
728  Io io_;
729  Actuator actuator_;
730  Mobile mobile_;
731  Imu imu_;
732 
733  FloatField board_temperature_;
734  FloatField processor_temperature_;
735  FloatField voltage_;
736  NumberedFloatField debug_;
737  UInt64Field receive_time_us_;
738  UInt64Field transmit_time_us_;
739  UInt64Field hardware_receive_time_us_;
740  UInt64Field hardware_transmit_time_us_;
741  UInt64Field sender_id_;
742  LedField led_;
743 };
744 
745 } // 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:68
const FloatField & voltage() const
Bus voltage that the module is running at (in Volts).
Definition: feedback.hpp:701
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:525
bool has() const
True if (and only if) the field has a value.
Definition: feedback.hpp:353
const FloatField & motorVelocity() const
The velocity (in radians/second) of the motor shaft.
Definition: feedback.hpp:529
Camera position tracking is not available.
const IoBank & e() const
I/O pin bank e (pins 1-8 available)
Definition: feedback.hpp:464
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:51
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:713
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: color.hpp:5
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:690
const EnumField< MstopState > & mstopState() const
Current status of the MStop.
Definition: feedback.hpp:553
const HighResAngleField & positionCommand() const
Commanded position of the module output (post-spring), in radians.
Definition: feedback.hpp:545
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:519
CommandLifetimeState
Definition: feedback.hpp:102
const EnumField< EffortLimitState > & effortLimitState() const
Software-controlled bounds on the allowable effort of the module.
Definition: feedback.hpp:559
#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:612
A message field representable by a single-precision floating point value.
Definition: feedback.hpp:131
Inertial measurement unit feedback (accelerometers and gyros).
Definition: feedback.hpp:629
Feedback objects have various fields representing feedback from modules; which fields are populated d...
Definition: feedback.hpp:31
A message field for interfacing with a bank of I/O pins.
Definition: feedback.hpp:369
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:462
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:302
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:517
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:557
const UInt64Field & senderId() const
Unique ID of the module transmitting this feedback.
Definition: feedback.hpp:715
A message field for an angle measurement which does not lose precision at very high angles.
Definition: feedback.hpp:166
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:523
const IoBank & f() const
I/O pin bank f (pins 1-8 available)
Definition: feedback.hpp:466
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:616
TemperatureState
Definition: feedback.hpp:33
const HighResAngleField & position() const
Position of the module output (post-spring), in radians.
Definition: feedback.hpp:543
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:334
const FloatField & motorWindingTemperature() const
The estimated temperature of the motor windings.
Definition: feedback.hpp:537
const FloatField & boardTemperature() const
Ambient temperature inside the module (measured at the IMU chip), in degrees Celsius.
Definition: feedback.hpp:697
T get() const
If the field has a value, returns that value; otherwise, returns a default.
Definition: feedback.hpp:356
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:647
const EnumField< TemperatureState > & temperatureState() const
Describes how the temperature inside the module is limiting the output of the motor.
Definition: feedback.hpp:551
const FloatField & processorTemperature() const
Temperature of the processor chip, in degrees Celsius.
Definition: feedback.hpp:699
const LedField & led() const
The module's LED.
Definition: feedback.hpp:717
A message field for interfacing with an LED.
Definition: feedback.hpp:407
const Imu & imu() const
Inertial measurement unit feedback (accelerometers and gyros).
Definition: feedback.hpp:692
const FloatField & motorWindingCurrent() const
The estimated current in the motor windings.
Definition: feedback.hpp:535
const FloatField & batteryLevel() const
Charge level of the device’s battery (in percent).
Definition: feedback.hpp:610
const FloatField & velocityCommand() const
Commanded velocity of the module output (post-spring), in radians/second.
Definition: feedback.hpp:521
const QuaternionfField & orientation() const
A filtered estimate of the orientation of the module.
Definition: feedback.hpp:649
const EnumField< CommandLifetimeState > & commandLifetimeState() const
The state of the command lifetime safety controller, with respect to the current group.
Definition: feedback.hpp:561
Feedback generally from a mobile device such as a phone or tablet.
Definition: feedback.hpp:593
const FloatField & motorHousingTemperature() const
The estimated temperature of the motor housing.
Definition: feedback.hpp:539
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:437
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:527
A message field representable by an unsigned 64 bit integer value.
Definition: feedback.hpp:238
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:111
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:456
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:707
const FloatField & motorSensorTemperature() const
The temperature from a sensor near the motor housing.
Definition: feedback.hpp:533
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:709
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:555
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:44
const Vector3fField & accelerometer() const
Accelerometer data, in m/s^2.
Definition: feedback.hpp:645
const FloatField & pwmCommand() const
Commanded PWM signal sent to the motor; final output of PID controllers.
Definition: feedback.hpp:541
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:711
Feedback(Feedback &&other)
Move constructor (necessary for containment in STL template classes)
Definition: feedback.cpp:153
The module has not been inside the safety limits since it was booted or the safety limits were set.
EffortLimitState
Definition: feedback.hpp:85
Camera position tracking is providing optimal results.
const Actuator & actuator() const
Actuator-specific feedback.
Definition: feedback.hpp:688
const Io & io() const
Feedback from any available I/O pins on the device.
Definition: feedback.hpp:686
const QuaternionfField & arOrientation() const
A device's orientation in the world as calculated from an augmented reality framework.
Definition: feedback.hpp:614
const UInt64Field & sequenceNumber() const
Sequence number going to module (local)
Definition: feedback.hpp:549
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:547
A message field containing a numbered set of single-precision floating point values.
Definition: feedback.hpp:213
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:270
const IoBank & b() const
I/O pin bank b (pins 1-8 available)
Definition: feedback.hpp:458
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:460
const FloatField & motorCurrent() const
Current supplied to the motor.
Definition: feedback.hpp:531