Class Command::HighResAngleField
Defined in File command.hpp
Nested Relationships
This class is a nested type of Class Command.
Class Documentation
-
class HighResAngleField
A message field for an angle measurement which does not lose precision at very high angles.
This field is represented as an int64_t for the number of revolutions and a float for the radian offset from that number of revolutions.
Public Functions
-
HighResAngleField(HebiCommandRef &internal, HebiCommandHighResAngleField field)
-
inline explicit operator bool() const
Allows casting to a bool to check if the field has a value without directly calling
has()
.This can be used as in the following (assuming ‘parent’ is a parent message, and this field is called ‘myField’)
Command::HighResAngleField& f = parent.myField(); if (f) std::cout << "Field has value: " << f.get() << std::endl; else std::cout << "Field has no value!" << std::endl;
-
bool has() const
True if (and only if) the field has a value.
-
double get() const
If the field has a value, returns that value as a double; otherwise, returns a default.
Note that some precision might be lost converting to a double at very high number of revolutions.
-
void get(int64_t *revolutions, float *radian_offset) const
If the field has a value, returns that value in the int64 and float parameters passed in; otherwise, returns a default.
Note that this maintains the full precision of the underlying angle measurement, even for very large numbers of revolutions.
- Parameters:
revolutions – The number of full revolutions
radian_offset – The offset from the given number of full revolutions. Note that this is usually between 0 and
2*M_PI
, but callers should not assume this.
-
void set(double radians)
Sets the field to a given double value (in radians). Note that double precision floating point numbers cannot represent the same angular resolution at very high magnitudes as they can at lower magnitudes.
-
void set(int64_t revolutions, float radian_offset)
Sets the field to a given integer number of revolutions and a floating point offset from this number of revolutions. The offset does not specifically need to fall within a certain range (i.e., can add more than a single revolution to the integer value), but should be kept relatively small (e.g., below 10,000) to avoid potential loss of precision.
-
void clear()
Removes any currently set value for this field.
-
HighResAngleField(HebiCommandRef &internal, HebiCommandHighResAngleField field)