6#include <unordered_map>
8#include <condition_variable>
10#include <units/angle.h>
11#include <units/angular_velocity.h>
12#include <units/force.h>
13#include <units/time.h>
14#include <units/temperature.h>
15#include <frc/geometry/Quaternion.h>
16#include <frc/geometry/Rotation3d.h>
18#include "redux/canand/CanandDevice.h"
19#include "redux/canand/CanandEventLoop.h"
20#include "redux/canand/CanandSettingsManager.h"
21#include "redux/canand/CooldownWarning.h"
22#include "redux/frames/Frame.h"
23#include "redux/sensors/canandgyro/CanandgyroDetails.h"
24#include "redux/sensors/canandgyro/CanandgyroData.h"
25#include "redux/sensors/canandgyro/CanandgyroFaults.h"
26#include "redux/sensors/canandgyro/CanandgyroStatus.h"
27#include "redux/sensors/canandgyro/CanandgyroSettings.h"
137 bool dataRecvOnce{
false};
138 bool useYawAngleFrame{
true};
139 units::second_t lastMessageTime{0_s};
192 if (this->useYawAngleFrame) {
298 inline bool SetPoseRPY(units::turn_t newRoll, units::turn_t newPitch, units::turn_t newYaw, units::second_t timeout = 20_ms, uint32_t retries = 5) {
311 inline bool SetPoseR3D(frc::Rotation3d newPose, units::second_t timeout = 20_ms, uint32_t retries = 5) {
312 return SetPose(newPose.GetQuaternion(), timeout);
324 bool SetPose(frc::Quaternion newPose, units::second_t timeout = 20_ms, uint32_t retries = 5);
334 bool SetYaw(units::turn_t yaw, units::second_t timeout = 20_ms, uint32_t retries = 5);
436 return stg.GetSettings(timeout, missingTimeout, attempts);
522 return stg.SetSettings(settings, timeout, attempts);
Definition CanandAddress.h:62
Definition CanandDevice.h:35
Definition CanandMessage.h:26
Definition CanandSettingsManager.h:82
T GetValue()
Definition Frame.h:127
Definition CanandgyroData.h:74
Definition CanandgyroData.h:17
Definition CanandgyroFaults.h:13
Definition CanandgyroSettings.h:54
Definition Canandgyro.h:110
CanandgyroFaults GetStickyFaults()
Definition Canandgyro.h:345
redux::frames::Frame< CanandgyroStatus > & GetStatusFrame()
Definition Canandgyro.h:585
frc::Rotation3d GetRotation3d()
Definition Canandgyro.h:165
bool SetPose(frc::Quaternion newPose, units::second_t timeout=20_ms, uint32_t retries=5)
redux::frames::Frame< CanandgyroStatus > status
Definition Canandgyro.h:131
redux::canand::CanandSettingsManager< CanandgyroSettings > & GetInternalSettingsManager()
Definition Canandgyro.h:545
bool SetYaw(units::turn_t yaw, units::second_t timeout=20_ms, uint32_t retries=5)
CanandgyroStatus GetStatus()
Definition Canandgyro.h:365
units::turn_t GetRoll()
Definition Canandgyro.h:223
void SetPartyMode(uint8_t level)
CanandgyroSettings ResetFactoryDefaults(units::second_t timeout=350_ms)
Definition Canandgyro.h:533
units::turns_per_second_t GetAngularVelocityPitch()
Definition Canandgyro.h:236
redux::frames::Frame< units::turn_t > & GetYawFrame()
Definition Canandgyro.h:554
units::standard_gravity_t GetAccelerationY()
Definition Canandgyro.h:254
void HandleMessage(redux::canand::CanandMessage &msg) override
CanandgyroFaults GetActiveFaults()
Definition Canandgyro.h:353
units::turn_t GetYaw()
Definition Canandgyro.h:191
bool WaitForCalibrationToFinish(units::second_t timeout)
redux::canand::CanandSettingsManager< CanandgyroSettings > stg
Definition Canandgyro.h:134
units::turns_per_second_t GetAngularVelocityRoll()
Definition Canandgyro.h:230
redux::frames::Frame< frc::Quaternion > & GetAngularPositionFrame()
Definition Canandgyro.h:567
units::celsius_t GetTemperature()
Definition Canandgyro.h:359
units::standard_gravity_t GetAccelerationX()
Definition Canandgyro.h:248
redux::frames::Frame< bool > calibrating
Definition Canandgyro.h:113
redux::frames::Frame< Acceleration > & GetAccelerationFrame()
Definition Canandgyro.h:579
units::turn_t GetPitch()
Definition Canandgyro.h:216
redux::frames::Frame< units::turn_t > singleYaw
Definition Canandgyro.h:116
redux::frames::Frame< units::turn_t > multiYaw
Definition Canandgyro.h:119
void UseDedicatedYawAngleFrame(bool use)
Definition Canandgyro.h:182
redux::frames::Frame< frc::Quaternion > quat
Definition Canandgyro.h:122
units::turns_per_second_t GetAngularVelocityYaw()
Definition Canandgyro.h:242
CanandgyroSettings SetSettings(CanandgyroSettings &settings, units::second_t timeout=20_ms, uint32_t attempts=3)
Definition Canandgyro.h:521
redux::canand::CanandFirmwareVersion GetMinimumFirmwareVersion() override
Definition Canandgyro.h:592
redux::frames::Frame< units::turn_t > & GetMultiturnYawFrame()
Definition Canandgyro.h:561
redux::frames::Frame< Acceleration > accel
Definition Canandgyro.h:128
CanandgyroSettings GetSettingsAsync()
Definition Canandgyro.h:496
redux::canand::CanandAddress & GetAddress() override
bool IsCalibrating()
Definition Canandgyro.h:274
redux::frames::Frame< AngularVelocity > vel
Definition Canandgyro.h:125
std::string GetDeviceClassName() override
Definition Canandgyro.h:591
frc::Quaternion GetQuaternion()
Definition Canandgyro.h:157
Canandgyro(int canID, std::string bus="halcan")
void StartFetchSettings()
Definition Canandgyro.h:443
CanandgyroSettings GetSettings(units::second_t timeout=350_ms, units::second_t missingTimeout=20_ms, uint32_t attempts=3)
Definition Canandgyro.h:435
units::turn_t GetMultiturnYaw()
Definition Canandgyro.h:207
units::standard_gravity_t GetAccelerationZ()
Definition Canandgyro.h:260
frc::Rotation2d GetRotation2d()
Definition Canandgyro.h:172
bool SetPoseRPY(units::turn_t newRoll, units::turn_t newPitch, units::turn_t newYaw, units::second_t timeout=20_ms, uint32_t retries=5)
Definition Canandgyro.h:298
bool SetPoseR3D(frc::Rotation3d newPose, units::second_t timeout=20_ms, uint32_t retries=5)
Definition Canandgyro.h:311
redux::frames::Frame< AngularVelocity > & GetVelocityFrame()
Definition Canandgyro.h:573
@ kResetFactoryDefault
Definition CanandgyroDetails.h:107
void RemoveCANListener(CanandDevice *device)
Definition Canandgyro.h:32
Definition CanandFirmwareVersion.h:17
Definition CanandgyroStatus.h:13