#include <ctre/phoenix/sensors/CANCoder.h>
Public Member Functions | |
CANCoder (int deviceNumber, std::string const &canbus="") | |
Constructor. | |
~CANCoder () | |
double | GetPosition () |
Gets the position of the sensor. | |
double | GetVelocity () |
Sets the position of the sensor. | |
ErrorCode | SetPosition (double newPosition, int timeoutMs=0) |
Sets the position of the sensor. | |
ErrorCode | SetPositionToAbsolute (int timeoutMs=0) |
Sets the position of the sensor to match the magnet's "Absolute Sensor". | |
double | GetAbsolutePosition () |
Gets the absolute position of the sensor. | |
ErrorCode | ConfigVelocityMeasurementPeriod (SensorVelocityMeasPeriod period, int timeoutMs=0) |
Configures the period of each velocity sample. | |
ErrorCode | ConfigVelocityMeasurementWindow (int windowSize, int timeoutMs=0) |
Sets the number of velocity samples used in the rolling average velocity measurement. | |
ErrorCode | ConfigAbsoluteSensorRange (ctre::phoenix::sensors::AbsoluteSensorRange absoluteSensorRange, int timeoutMs=0) |
Sets the signage and range of the "Absolute Position" signal. | |
ErrorCode | ConfigMagnetOffset (double offsetDegrees, int timeoutMs=0) |
Adjusts the zero point for the absolute position register. | |
ErrorCode | ConfigSensorInitializationStrategy (ctre::phoenix::sensors::SensorInitializationStrategy initializationStrategy, int timeoutMs=0) |
Pick the strategy on how to initialize the CANCoder's "Position" register. | |
ErrorCode | ConfigFeedbackCoefficient (double sensorCoefficient, const std::string &unitString, ctre::phoenix::sensors::SensorTimeBase sensortimeBase, int timeoutMs=0) |
Choose what units you want the API to get/set. | |
double | GetBusVoltage () |
Gets the bus voltage seen by the device. | |
ctre::phoenix::sensors::MagnetFieldStrength | GetMagnetFieldStrength () |
Gets the magnet's health. | |
ErrorCode | ConfigSensorDirection (bool bSensorDirection, int timeoutMs=0) |
Choose which direction is interpreted as positive displacement. | |
ErrorCode | GetLastError () |
Call GetLastError() generated by this object. | |
std::string | GetLastUnitString () |
Get the units for the signal retrieved in the last called get routine. | |
double | GetLastTimestamp () |
Get the timestamp of the CAN frame retrieved in the last called get routine. | |
ErrorCode | ConfigSetCustomParam (int newValue, int paramIndex, int timeoutMs=0) |
Sets the value of a custom parameter. | |
int | ConfigGetCustomParam (int paramIndex, int timeoutMs=0) |
Gets the value of a custom parameter. | |
ErrorCode | ConfigSetParameter (ParamEnum param, double value, uint8_t subValue, int ordinal, int timeoutMs=0) |
Sets a parameter. | |
double | ConfigGetParameter (ParamEnum param, int ordinal, int timeoutMs=0) |
Gets a parameter. | |
ErrorCode | ConfigGetParameter (ParamEnum param, int32_t valueToSend, int32_t &valueReceived, uint8_t &subValue, int32_t ordinal, int32_t timeoutMs) |
Gets a parameter by passing an int by reference. | |
ErrorCode | SetStatusFramePeriod (CANCoderStatusFrame statusFrame, uint8_t periodMs, int timeoutMs=0) |
Sets the period of the given status frame. | |
int | GetStatusFramePeriod (CANCoderStatusFrame frame, int timeoutMs=0) |
Gets the period of the given status frame. | |
int | GetFirmwareVersion () |
Gets the firmware version of the device. | |
bool | HasResetOccurred () |
Returns true if the device has reset since last call. | |
ErrorCode | GetFaults (CANCoderFaults &toFill) |
Gets the CANCoder fault status. | |
ErrorCode | GetStickyFaults (CANCoderStickyFaults &toFill) |
Gets the CANCoder sticky fault status. | |
ErrorCode | ClearStickyFaults (int timeoutMs=0) |
Clears the Sticky Faults. | |
ctre::phoenix::ErrorCode | ConfigAllSettings (const CANCoderConfiguration &allConfigs, int timeoutMs=50) |
Configures all persistent settings. | |
ErrorCode | GetAllConfigs (CANCoderConfiguration &allConfigs, int timeoutMs=50) |
Gets all persistant settings. | |
ErrorCode | ConfigFactoryDefault (int timeoutMs=50) |
Configures all persistent settings to defaults (overloaded so timeoutMs is 50 ms). | |
CANCoderSimCollection & | GetSimCollection () |
![]() | |
CANBusAddressable (int deviceNumber) | |
Constructor for a CANBusAddressable device. | |
int | GetDeviceNumber () |
Static Public Member Functions | |
static void | DestroyAllCANCoders () |
Destructs all CANCoder objects. | |
CTRE CANCoder.
// Example usage of a CANCoder
CANCoder cancoder{0}; // creates a new CANCoder with ID 0
CANCoderConfiguration config;
// set units of the CANCoder to radians, with velocity being radians per second
config.sensorCoefficient = 2 * M_PI / 4096.0;
config.unitString = "rad";
config.sensorTimeBase = SensorTimeBase::PerSecond;
cancoder.ConfigAllSettings(config);
std::cout << cancoder.GetPosition() << std::endl; // prints the position of the CANCoder
std::cout << cancoder.GetVelocity() << std::endl; // prints the velocity recorded by the CANCoder
ErrorCode error = cancoder.GetLastError(); // gets the last error generated by the CANCoder
CANCoderFaults faults;
ErrorCode faultsError = cancoder.GetFaults(faults); // fills faults with the current CANCoder faults; returns the last error generated
cancoder.SetStatusFramePeriod(CANCoderStatusFrame_SensorData, 10); // changes the period of the sensor data frame to 10ms
If the Phoenix 5 API must be used for this device, the device must have 22.X firmware. This firmware is available in Tuner X after selecting Phoenix 5 in the firmware year dropdown.
ctre::phoenix::sensors::CANCoder::CANCoder | ( | int | deviceNumber, |
std::string const & | canbus = "" ) |
Constructor.
deviceNumber | The CAN Device ID of the CANCoder. |
canbus | Name of the CANbus; can be a SocketCAN interface (on Linux), or a CANivore device name or serial number |
ctre::phoenix::sensors::CANCoder::~CANCoder | ( | ) |
ErrorCode ctre::phoenix::sensors::CANCoder::ClearStickyFaults | ( | int | timeoutMs = 0 | ) |
Clears the Sticky Faults.
timeoutMs | Timeout value in ms. If nonzero, function will wait for config success and report an error if it times out. If zero, no blocking or checking is performed. |
ErrorCode ctre::phoenix::sensors::CANCoder::ConfigAbsoluteSensorRange | ( | ctre::phoenix::sensors::AbsoluteSensorRange | absoluteSensorRange, |
int | timeoutMs = 0 ) |
Sets the signage and range of the "Absolute Position" signal.
Choose unsigned for an absolute range of [0,+1) rotations, [0,360) deg, etc... Choose signed for an absolute range of [-0.5,+0.5) rotations, [-180,+180) deg, etc...
absoluteSensorRange | Desired Sign/Range for the absolute position register. |
timeoutMs | Timeout value in ms. If nonzero, function will wait for config success and report an error if it times out. If zero, no blocking or checking is performed. |
ctre::phoenix::ErrorCode ctre::phoenix::sensors::CANCoder::ConfigAllSettings | ( | const CANCoderConfiguration & | allConfigs, |
int | timeoutMs = 50 ) |
Configures all persistent settings.
allConfigs | Object with all of the persistant settings |
timeoutMs | Timeout value in ms. If nonzero, function will wait for config success and report an error if it times out. If zero, no blocking or checking is performed. |
ErrorCode ctre::phoenix::sensors::CANCoder::ConfigFactoryDefault | ( | int | timeoutMs = 50 | ) |
Configures all persistent settings to defaults (overloaded so timeoutMs is 50 ms).
timeoutMs | Timeout value in ms. If nonzero, function will wait for config success and report an error if it times out. If zero, no blocking or checking is performed. |
ErrorCode ctre::phoenix::sensors::CANCoder::ConfigFeedbackCoefficient | ( | double | sensorCoefficient, |
const std::string & | unitString, | ||
ctre::phoenix::sensors::SensorTimeBase | sensortimeBase, | ||
int | timeoutMs = 0 ) |
Choose what units you want the API to get/set.
This also impacts the units displayed in Self-Test in Tuner. Depending on your mechanism, you may want to scale rotational units (deg, radians, rotations), or scale to a distance (inches, centimeters).
sensorCoefficient | Scalar to multiply the CANCoder's native 12-bit resolute sensor. Defaults to 0.087890625 to produce degrees. |
unitString | String holding the unit to report in. This impacts all routines (except for ConfigMagnetOffset) and the self-test in Tuner. The string value itself is arbitrary. The max number of letters will depend on firmware versioning, but generally CANCoder supports up to eight letters. However, common units such as "centimeters" are supported explicitly despite exceeding the eight-letter limit. Default is "deg" |
sensortimeBase | Desired denominator to report velocity in. This impacts GetVelocity and the reported velocity in self-test in Tuner. Default is "Per Second". |
timeoutMs | Timeout value in ms. If nonzero, function will wait for config success and report an error if it times out. If zero, no blocking or checking is performed. |
int ctre::phoenix::sensors::CANCoder::ConfigGetCustomParam | ( | int | paramIndex, |
int | timeoutMs = 0 ) |
Gets the value of a custom parameter.
This is for arbitrary use.
Sometimes it is necessary to save calibration/duty cycle/output information in the device. Particularly if the device is part of a subsystem that can be replaced.
paramIndex | Index of custom parameter. [0-1] |
timeoutMs | Timeout value in ms. If nonzero, function will wait for config success and report an error if it times out. If zero, no blocking or checking is performed. |
double ctre::phoenix::sensors::CANCoder::ConfigGetParameter | ( | ParamEnum | param, |
int | ordinal, | ||
int | timeoutMs = 0 ) |
Gets a parameter.
Generally this is not used. This can be utilized in
param | Parameter enumeration. |
ordinal | Ordinal of parameter. |
timeoutMs | Timeout value in ms. If nonzero, function will wait for config success and report an error if it times out. If zero, no blocking or checking is performed. |
ErrorCode ctre::phoenix::sensors::CANCoder::ConfigGetParameter | ( | ParamEnum | param, |
int32_t | valueToSend, | ||
int32_t & | valueReceived, | ||
uint8_t & | subValue, | ||
int32_t | ordinal, | ||
int32_t | timeoutMs ) |
Gets a parameter by passing an int by reference.
param | Parameter enumeration |
valueToSend | Value to send to parameter |
valueReceived | Reference to integer to receive |
subValue | SubValue of parameter |
ordinal | Ordinal of parameter |
timeoutMs | Timeout value in ms. If nonzero, function will wait for config success and report an error if it times out. If zero, no blocking or checking is performed. |
ErrorCode ctre::phoenix::sensors::CANCoder::ConfigMagnetOffset | ( | double | offsetDegrees, |
int | timeoutMs = 0 ) |
Adjusts the zero point for the absolute position register.
The absolute position of the sensor will always have a discontinuity (360 -> 0 deg) or (+180 -> -180) and a hard-limited mechanism may have such a discontinuity in its functional range. In which case use this config to move the discontinuity outside of the function range.
offsetDegrees | Offset in degrees (unit string and coefficient DO NOT apply for this config). |
timeoutMs | Timeout value in ms. If nonzero, function will wait for config success and report an error if it times out. If zero, no blocking or checking is performed. |
ErrorCode ctre::phoenix::sensors::CANCoder::ConfigSensorDirection | ( | bool | bSensorDirection, |
int | timeoutMs = 0 ) |
Choose which direction is interpreted as positive displacement.
This affects both "Position" and "Absolute Position".
bSensorDirection | False (default) means positive rotation occurs when magnet is spun counter-clockwise when observer is facing the LED side of CANCoder. |
timeoutMs | Timeout value in ms. If nonzero, function will wait for config success and report an error if it times out. If zero, no blocking or checking is performed. |
ErrorCode ctre::phoenix::sensors::CANCoder::ConfigSensorInitializationStrategy | ( | ctre::phoenix::sensors::SensorInitializationStrategy | initializationStrategy, |
int | timeoutMs = 0 ) |
Pick the strategy on how to initialize the CANCoder's "Position" register.
Depending on the mechanism, it may be desirable to auto set the Position register to match the Absolute Position (swerve for example). Or it may be desired to zero the sensor on boot (drivetrain translation sensor or a relative servo).
TIP: Tuner's self-test feature will report what the boot sensor value will be in the event the CANCoder is reset.
initializationStrategy | The sensor initialization strategy to use. This will impact the behavior the next time CANCoder boots up. |
timeoutMs | Timeout value in ms. If nonzero, function will wait for config success and report an error if it times out. If zero, no blocking or checking is performed. |
ErrorCode ctre::phoenix::sensors::CANCoder::ConfigSetCustomParam | ( | int | newValue, |
int | paramIndex, | ||
int | timeoutMs = 0 ) |
Sets the value of a custom parameter.
This is for arbitrary use.
Sometimes it is necessary to save calibration/duty cycle/output information in the device. Particularly if the device is part of a subsystem that can be replaced.
newValue | Value for custom parameter. |
paramIndex | Index of custom parameter. [0-1] |
timeoutMs | Timeout value in ms. If nonzero, function will wait for config success and report an error if it times out. If zero, no blocking or checking is performed. |
ErrorCode ctre::phoenix::sensors::CANCoder::ConfigSetParameter | ( | ParamEnum | param, |
double | value, | ||
uint8_t | subValue, | ||
int | ordinal, | ||
int | timeoutMs = 0 ) |
Sets a parameter.
Generally this is not used. This can be utilized in
param | Parameter enumeration. |
value | Value of parameter. |
subValue | Subvalue for parameter. Maximum value of 255. |
ordinal | Ordinal of parameter. |
timeoutMs | Timeout value in ms. If nonzero, function will wait for config success and report an error if it times out. If zero, no blocking or checking is performed. |
ErrorCode ctre::phoenix::sensors::CANCoder::ConfigVelocityMeasurementPeriod | ( | SensorVelocityMeasPeriod | period, |
int | timeoutMs = 0 ) |
Configures the period of each velocity sample.
Every 1ms a position value is sampled, and the delta between that sample and the position sampled kPeriod ms ago is inserted into a filter. kPeriod is configured with this function.
period | Desired period for the velocity measurement. |
timeoutMs | Timeout value in ms. If nonzero, function will wait for config success and report an error if it times out. If zero, no blocking or checking is performed. |
ErrorCode ctre::phoenix::sensors::CANCoder::ConfigVelocityMeasurementWindow | ( | int | windowSize, |
int | timeoutMs = 0 ) |
Sets the number of velocity samples used in the rolling average velocity measurement.
windowSize | Number of samples in the rolling average of velocity measurement. Valid values are 1,2,4,8,16,32. If another value is specified, it will truncate to nearest support value. |
timeoutMs | Timeout value in ms. If nonzero, function will wait for config success and report an error if it times out. If zero, no blocking or checking is performed. |
|
static |
Destructs all CANCoder objects.
double ctre::phoenix::sensors::CANCoder::GetAbsolutePosition | ( | ) |
Gets the absolute position of the sensor.
The absolute position may be unsigned (for example: [0,360) deg), or signed (for example: [-180,+180) deg). This is determined by a configuration. The default selection is unsigned. The units are determined by the coefficient and unit-string configuration params, default is degrees. Note: this signal is not affected by calls to SetPosition().
ErrorCode ctre::phoenix::sensors::CANCoder::GetAllConfigs | ( | CANCoderConfiguration & | allConfigs, |
int | timeoutMs = 50 ) |
Gets all persistant settings.
allConfigs | Object with all of the persistant settings |
timeoutMs | Timeout value in ms. If nonzero, function will wait for config success and report an error if it times out. If zero, no blocking or checking is performed. |
double ctre::phoenix::sensors::CANCoder::GetBusVoltage | ( | ) |
Gets the bus voltage seen by the device.
ErrorCode ctre::phoenix::sensors::CANCoder::GetFaults | ( | CANCoderFaults & | toFill | ) |
Gets the CANCoder fault status.
toFill | Container for fault statuses. |
int ctre::phoenix::sensors::CANCoder::GetFirmwareVersion | ( | ) |
Gets the firmware version of the device.
ErrorCode ctre::phoenix::sensors::CANCoder::GetLastError | ( | ) |
Call GetLastError() generated by this object.
Not all functions return an error code but can potentially report errors.
This function can be used to retrieve those error codes.
double ctre::phoenix::sensors::CANCoder::GetLastTimestamp | ( | ) |
Get the timestamp of the CAN frame retrieved in the last called get routine.
std::string ctre::phoenix::sensors::CANCoder::GetLastUnitString | ( | ) |
Get the units for the signal retrieved in the last called get routine.
ctre::phoenix::sensors::MagnetFieldStrength ctre::phoenix::sensors::CANCoder::GetMagnetFieldStrength | ( | ) |
Gets the magnet's health.
double ctre::phoenix::sensors::CANCoder::GetPosition | ( | ) |
Gets the position of the sensor.
This may be relative or absolute depending on configuration. The units are determined by the coefficient and unit-string configuration params, default is degrees.
CANCoderSimCollection & ctre::phoenix::sensors::CANCoder::GetSimCollection | ( | ) |
int ctre::phoenix::sensors::CANCoder::GetStatusFramePeriod | ( | CANCoderStatusFrame | frame, |
int | timeoutMs = 0 ) |
Gets the period of the given status frame.
frame | Frame to get the period of. |
timeoutMs | Timeout value in ms. If nonzero, function will wait for config success and report an error if it times out. If zero, no blocking or checking is performed. |
ErrorCode ctre::phoenix::sensors::CANCoder::GetStickyFaults | ( | CANCoderStickyFaults & | toFill | ) |
Gets the CANCoder sticky fault status.
toFill | Container for sticky fault statuses. |
double ctre::phoenix::sensors::CANCoder::GetVelocity | ( | ) |
Sets the position of the sensor.
The units are determined by the coefficient and unit-string configuration params, default is degrees.
newPosition |
bool ctre::phoenix::sensors::CANCoder::HasResetOccurred | ( | ) |
Returns true if the device has reset since last call.
ErrorCode ctre::phoenix::sensors::CANCoder::SetPosition | ( | double | newPosition, |
int | timeoutMs = 0 ) |
Sets the position of the sensor.
The units are determined by the coefficient and unit-string configuration params, default is degrees.
newPosition |
ErrorCode ctre::phoenix::sensors::CANCoder::SetPositionToAbsolute | ( | int | timeoutMs = 0 | ) |
Sets the position of the sensor to match the magnet's "Absolute Sensor".
The units are determined by the coefficient and unit-string configuration params, default is degrees.
ErrorCode ctre::phoenix::sensors::CANCoder::SetStatusFramePeriod | ( | CANCoderStatusFrame | statusFrame, |
uint8_t | periodMs, | ||
int | timeoutMs = 0 ) |
Sets the period of the given status frame.
statusFrame | Frame whose period is to be changed. |
periodMs | Period in ms for the given frame. |
timeoutMs | Timeout value in ms. If nonzero, function will wait for config success and report an error if it times out. If zero, no blocking or checking is performed. |