57 lines
2.1 KiB
C++
57 lines
2.1 KiB
C++
/*----------------------------------------------------------------------------*/
|
|
/* Copyright (c) FIRST 2014-2016. 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 the root directory of */
|
|
/* the project. */
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
#pragma once
|
|
|
|
/**
|
|
* Interface for yaw rate gyros
|
|
*/
|
|
class Gyro {
|
|
public:
|
|
virtual ~Gyro() = default;
|
|
|
|
/**
|
|
* Calibrate the gyro by running for a number of samples and computing the
|
|
* center value. Then use the center value as the Accumulator center value for
|
|
* subsequent measurements. It's important to make sure that the robot is not
|
|
* moving while the centering calculations are in progress, this is typically
|
|
* done when the robot is first turned on while it's sitting at rest before
|
|
* the competition starts.
|
|
*/
|
|
virtual void Calibrate() = 0;
|
|
|
|
/**
|
|
* Reset the gyro. Resets the gyro to a heading of zero. This can be used if
|
|
* there is significant drift in the gyro and it needs to be recalibrated
|
|
* after it has been running.
|
|
*/
|
|
virtual void Reset() = 0;
|
|
|
|
/**
|
|
* Return the actual angle in degrees that the robot is currently facing.
|
|
*
|
|
* The angle is based on the current accumulator value corrected by the
|
|
* oversampling rate, the gyro type and the A/D calibration values. The angle
|
|
* is continuous, that is it will continue from 360 to 361 degrees. This
|
|
* allows algorithms that wouldn't want to see a discontinuity in the gyro
|
|
* output as it sweeps past from 360 to 0 on the second time around.
|
|
*
|
|
* @return the current heading of the robot in degrees. This heading is based
|
|
* on integration of the returned rate from the gyro.
|
|
*/
|
|
virtual float GetAngle() const = 0;
|
|
|
|
/**
|
|
* Return the rate of rotation of the gyro
|
|
*
|
|
* The rate is based on the most recent reading of the gyro analog value
|
|
*
|
|
* @return the current rate in degrees per second
|
|
*/
|
|
virtual double GetRate() const = 0;
|
|
};
|