mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-07-05 03:21:42 +00:00
Initial checkin of unified hierarchy of WPILib 2015
This commit is contained in:
69
wpilibc/src/main/include/Gyro.h
Normal file
69
wpilibc/src/main/include/Gyro.h
Normal file
@@ -0,0 +1,69 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2008. All Rights Reserved. */
|
||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
||||
/* must be accompanied by the FIRST BSD license file in $(WIND_BASE)/WPILib. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef GYRO_H_
|
||||
#define GYRO_H_
|
||||
|
||||
#include "SensorBase.h"
|
||||
#include "PIDSource.h"
|
||||
#include "LiveWindow/LiveWindowSendable.h"
|
||||
|
||||
class AnalogChannel;
|
||||
class AnalogModule;
|
||||
|
||||
/**
|
||||
* Use a rate gyro to return the robots heading relative to a starting position.
|
||||
* The Gyro class tracks the robots heading based on the starting position. As the robot
|
||||
* rotates the new heading is computed by integrating the rate of rotation returned
|
||||
* by the sensor. When the class is instantiated, it does a short calibration routine
|
||||
* where it samples the gyro while at rest to determine the default offset. This is
|
||||
* subtracted from each sample to determine the heading. This gyro class must be used
|
||||
* with a channel that is assigned one of the Analog accumulators from the FPGA. See
|
||||
* AnalogChannel for the current accumulator assignments.
|
||||
*/
|
||||
class Gyro : public SensorBase, public PIDSource, public LiveWindowSendable
|
||||
{
|
||||
public:
|
||||
static const uint32_t kOversampleBits = 10;
|
||||
static const uint32_t kAverageBits = 0;
|
||||
static constexpr float kSamplesPerSecond = 50.0;
|
||||
static constexpr float kCalibrationSampleTime = 5.0;
|
||||
static constexpr float kDefaultVoltsPerDegreePerSecond = 0.007;
|
||||
|
||||
Gyro(uint8_t moduleNumber, uint32_t channel);
|
||||
explicit Gyro(uint32_t channel);
|
||||
explicit Gyro(AnalogChannel *channel);
|
||||
explicit Gyro(AnalogChannel &channel);
|
||||
virtual ~Gyro();
|
||||
virtual float GetAngle();
|
||||
virtual double GetRate();
|
||||
void SetSensitivity(float voltsPerDegreePerSecond);
|
||||
void SetPIDSourceParameter(PIDSourceParameter pidSource);
|
||||
virtual void Reset();
|
||||
|
||||
// PIDSource interface
|
||||
double PIDGet();
|
||||
|
||||
void UpdateTable();
|
||||
void StartLiveWindowMode();
|
||||
void StopLiveWindowMode();
|
||||
std::string GetSmartDashboardType();
|
||||
void InitTable(ITable *subTable);
|
||||
ITable * GetTable();
|
||||
|
||||
private:
|
||||
void InitGyro();
|
||||
|
||||
AnalogChannel *m_analog;
|
||||
float m_voltsPerDegreePerSecond;
|
||||
float m_offset;
|
||||
bool m_channelAllocated;
|
||||
uint32_t m_center;
|
||||
PIDSourceParameter m_pidSource;
|
||||
|
||||
ITable *m_table;
|
||||
};
|
||||
#endif
|
||||
Reference in New Issue
Block a user