okapi::IMU class

Base classes

class ContinuousRotarySensor

Constructors, destructors, conversion operators

IMU(std::uint8_t iport, IMUAxes iaxis = IMUAxes::z)
An inertial sensor on the given port.

Public functions

auto get() const -> double override
Get the current rotation about the configured axis.
auto getRemapped(double iupperBound = 1800, double ilowerBound = -1800) const -> double
Get the current sensor value remapped into the target range ([-1800, 1800] by default).
auto getAcceleration() const -> double
Get the current acceleration along the configured axis.
auto reset() -> std::int32_t override
Reset the rotation value to zero.
auto reset(double inewAngle) -> std::int32_t
Resets rotation value to desired value For example, reset(0) will reset the sensor to zero.
auto calibrate() -> std::int32_t
Calibrate the IMU.
auto controllerGet() -> double override
Get the sensor value for use in a control loop.
auto isCalibrating() const -> bool

Protected functions

auto readAngle() const -> double
Get the current rotation about the configured axis.

Protected variables

std::uint8_t port
IMUAxes axis
double offset

Function documentation

okapi::IMU::IMU(std::uint8_t iport, IMUAxes iaxis = IMUAxes::z)

An inertial sensor on the given port.

Parameters
iport The port number in the range [1, 21].
iaxis The axis of the inertial sensor to measure, default IMUAxes::z.

The IMU returns an angle about the selected axis in degrees.

auto imuZ = IMU(1);
auto imuX = IMU(1, IMUAxes::x);

double okapi::IMU::get() const override

Get the current rotation about the configured axis.

Returns The current sensor value or PROS_ERR.

double okapi::IMU::getRemapped(double iupperBound = 1800, double ilowerBound = -1800) const

Get the current sensor value remapped into the target range ([-1800, 1800] by default).

Parameters
iupperBound The upper bound of the range.
ilowerBound The lower bound of the range.
Returns The remapped sensor value.

double okapi::IMU::getAcceleration() const

Get the current acceleration along the configured axis.

Returns The current sensor value or PROS_ERR.

std::int32_t okapi::IMU::reset() override

Reset the rotation value to zero.

Returns 1 or PROS_ERR.

std::int32_t okapi::IMU::reset(double inewAngle)

Resets rotation value to desired value For example, reset(0) will reset the sensor to zero.

Parameters
inewAngle desired reset value
Returns 1 or PROS_ERR.

But reset(90) will reset the sensor to 90 degrees.

std::int32_t okapi::IMU::calibrate()

Calibrate the IMU.

Returns 1 or PROS_ERR.

Resets the rotation value to zero. Calibration is expected to take two seconds, but is bounded to five seconds.

double okapi::IMU::controllerGet() override

Get the sensor value for use in a control loop.

Returns The current sensor value or PROS_ERR.

This method might be automatically called in another thread by the controller.

bool okapi::IMU::isCalibrating() const

Returns Whether the IMU is calibrating.

double okapi::IMU::readAngle() const protected

Get the current rotation about the configured axis.

Returns The current sensor value or PROS_ERR.

The internal offset is not accounted for or modified. This just reads from the sensor.