WPILibC++ 2023.4.3
frc::LinearSystemId Class Reference

#include <frc/system/plant/LinearSystemId.h>

Public Types

template<typename Distance >
using Velocity_t = units::unit_t< units::compound_unit< Distance, units::inverse< units::seconds > > >
 
template<typename Distance >
using Acceleration_t = units::unit_t< units::compound_unit< units::compound_unit< Distance, units::inverse< units::seconds > >, units::inverse< units::seconds > > >
 

Static Public Member Functions

static LinearSystem< 2, 1, 1 > ElevatorSystem (DCMotor motor, units::kilogram_t mass, units::meter_t radius, double G)
 Create a state-space model of the elevator system. More...
 
static LinearSystem< 2, 1, 1 > SingleJointedArmSystem (DCMotor motor, units::kilogram_square_meter_t J, double G)
 Create a state-space model of a single-jointed arm system.The states of the system are [angle, angular velocity], inputs are [voltage], and outputs are [angle]. More...
 
template<typename Distance , typename = std::enable_if_t< std::is_same_v<units::meter, Distance> || std::is_same_v<units::radian, Distance>>>
static LinearSystem< 1, 1, 1 > IdentifyVelocitySystem (decltype(1_V/Velocity_t< Distance >(1)) kV, decltype(1_V/Acceleration_t< Distance >(1)) kA)
 Create a state-space model for a 1 DOF velocity system from its kV (volts/(unit/sec)) and kA (volts/(unit/sec²)). More...
 
template<typename Distance , typename = std::enable_if_t< std::is_same_v<units::meter, Distance> || std::is_same_v<units::radian, Distance>>>
static LinearSystem< 2, 1, 1 > IdentifyPositionSystem (decltype(1_V/Velocity_t< Distance >(1)) kV, decltype(1_V/Acceleration_t< Distance >(1)) kA)
 Create a state-space model for a 1 DOF position system from its kV (volts/(unit/sec)) and kA (volts/(unit/sec²)). More...
 
static LinearSystem< 2, 2, 2 > IdentifyDrivetrainSystem (decltype(1_V/1_mps) kVLinear, decltype(1_V/1_mps_sq) kALinear, decltype(1_V/1_mps) kVAngular, decltype(1_V/1_mps_sq) kAAngular)
 Identify a differential drive drivetrain given the drivetrain's kV and kA in both linear {(volts/(meter/sec), (volts/(meter/sec²))} and angular {(volts/(radian/sec), (volts/(radian/sec²))} cases. More...
 
static LinearSystem< 2, 2, 2 > IdentifyDrivetrainSystem (decltype(1_V/1_mps) kVLinear, decltype(1_V/1_mps_sq) kALinear, decltype(1_V/1_rad_per_s) kVAngular, decltype(1_V/1_rad_per_s_sq) kAAngular, units::meter_t trackwidth)
 Identify a differential drive drivetrain given the drivetrain's kV and kA in both linear {(volts/(meter/sec)), (volts/(meter/sec²))} and angular {(volts/(radian/sec)), (volts/(radian/sec²))} cases. More...
 
static LinearSystem< 1, 1, 1 > FlywheelSystem (DCMotor motor, units::kilogram_square_meter_t J, double G)
 Create a state-space model of a flywheel system, the states of the system are [angular velocity], inputs are [voltage], and outputs are [angular velocity]. More...
 
static LinearSystem< 2, 1, 2 > DCMotorSystem (DCMotor motor, units::kilogram_square_meter_t J, double G)
 Create a state-space model of a DC motor system. More...
 
static LinearSystem< 2, 2, 2 > DrivetrainVelocitySystem (const DCMotor &motor, units::kilogram_t mass, units::meter_t r, units::meter_t rb, units::kilogram_square_meter_t J, double G)
 Create a state-space model of differential drive drivetrain. More...
 

Member Typedef Documentation

◆ Acceleration_t

template<typename Distance >
using frc::LinearSystemId::Acceleration_t = units::unit_t<units::compound_unit< units::compound_unit<Distance, units::inverse<units::seconds> >, units::inverse<units::seconds> >>

◆ Velocity_t

template<typename Distance >
using frc::LinearSystemId::Velocity_t = units::unit_t< units::compound_unit<Distance, units::inverse<units::seconds> >>

Member Function Documentation

◆ DCMotorSystem()

static LinearSystem< 2, 1, 2 > frc::LinearSystemId::DCMotorSystem ( DCMotor  motor,
units::kilogram_square_meter_t  J,
double  G 
)
static

Create a state-space model of a DC motor system.

The states of the system are [angular position, angular velocity], inputs are [voltage], and outputs are [angular position, angular velocity].

Parameters
motorThe motor (or gearbox) attached to the system.
Jthe moment of inertia J of the DC motor.
GGear ratio from motor to output.
Exceptions
std::domain_errorif J <= 0 or G <= 0.

◆ DrivetrainVelocitySystem()

static LinearSystem< 2, 2, 2 > frc::LinearSystemId::DrivetrainVelocitySystem ( const DCMotor motor,
units::kilogram_t  mass,
units::meter_t  r,
units::meter_t  rb,
units::kilogram_square_meter_t  J,
double  G 
)
static

Create a state-space model of differential drive drivetrain.

In this model, the states are [left velocity, right velocity], the inputs are [left voltage, right voltage], and the outputs are [left velocity, right velocity]

Parameters
motorThe motor (or gearbox) driving the drivetrain.
massThe mass of the robot in kilograms.
rThe radius of the wheels in meters.
rbThe radius of the base (half of the track width), in meters.
JThe moment of inertia of the robot.
GGear ratio from motor to wheel.
Exceptions
std::domain_errorif mass <= 0, r <= 0, rb <= 0, J <= 0, or G <= 0.

◆ ElevatorSystem()

static LinearSystem< 2, 1, 1 > frc::LinearSystemId::ElevatorSystem ( DCMotor  motor,
units::kilogram_t  mass,
units::meter_t  radius,
double  G 
)
static

Create a state-space model of the elevator system.

The states of the system are [position, velocity], inputs are [voltage], and outputs are [position].

Parameters
motorThe motor (or gearbox) attached to the carriage.
massThe mass of the elevator carriage, in kilograms.
radiusThe radius of the elevator's driving drum, in meters.
GGear ratio from motor to carriage.
Exceptions
std::domain_errorif mass <= 0, radius <= 0, or G <= 0.

◆ FlywheelSystem()

static LinearSystem< 1, 1, 1 > frc::LinearSystemId::FlywheelSystem ( DCMotor  motor,
units::kilogram_square_meter_t  J,
double  G 
)
static

Create a state-space model of a flywheel system, the states of the system are [angular velocity], inputs are [voltage], and outputs are [angular velocity].

Parameters
motorThe motor (or gearbox) attached to the flywheel.
JThe moment of inertia J of the flywheel.
GGear ratio from motor to flywheel.
Exceptions
std::domain_errorif J <= 0 or G <= 0.

◆ IdentifyDrivetrainSystem() [1/2]

static LinearSystem< 2, 2, 2 > frc::LinearSystemId::IdentifyDrivetrainSystem ( decltype(1_V/1_mps)  kVLinear,
decltype(1_V/1_mps_sq)  kALinear,
decltype(1_V/1_mps)  kVAngular,
decltype(1_V/1_mps_sq)  kAAngular 
)
static

Identify a differential drive drivetrain given the drivetrain's kV and kA in both linear {(volts/(meter/sec), (volts/(meter/sec²))} and angular {(volts/(radian/sec), (volts/(radian/sec²))} cases.

These constants can be found using SysId.

States: [[left velocity], [right velocity]]
Inputs: [[left voltage], [right voltage]]
Outputs: [[left velocity], [right velocity]]

Parameters
kVLinearThe linear velocity gain in volts per (meters per second).
kALinearThe linear acceleration gain in volts per (meters per second squared).
kVAngularThe angular velocity gain in volts per (meters per second).
kAAngularThe angular acceleration gain in volts per (meters per second squared).
Exceptions
domain_errorif kVLinear <= 0, kALinear <= 0, kVAngular <= 0, or kAAngular <= 0.

◆ IdentifyDrivetrainSystem() [2/2]

static LinearSystem< 2, 2, 2 > frc::LinearSystemId::IdentifyDrivetrainSystem ( decltype(1_V/1_mps)  kVLinear,
decltype(1_V/1_mps_sq)  kALinear,
decltype(1_V/1_rad_per_s)  kVAngular,
decltype(1_V/1_rad_per_s_sq)  kAAngular,
units::meter_t  trackwidth 
)
static

Identify a differential drive drivetrain given the drivetrain's kV and kA in both linear {(volts/(meter/sec)), (volts/(meter/sec²))} and angular {(volts/(radian/sec)), (volts/(radian/sec²))} cases.

This can be found using SysId.

States: [[left velocity], [right velocity]]
Inputs: [[left voltage], [right voltage]]
Outputs: [[left velocity], [right velocity]]

Parameters
kVLinearThe linear velocity gain in volts per (meters per second).
kALinearThe linear acceleration gain in volts per (meters per second squared).
kVAngularThe angular velocity gain in volts per (radians per second).
kAAngularThe angular acceleration gain in volts per (radians per second squared).
trackwidthThe distance between the differential drive's left and right wheels, in meters.
Exceptions
domain_errorif kVLinear <= 0, kALinear <= 0, kVAngular <= 0, kAAngular <= 0, or trackwidth <= 0.

◆ IdentifyPositionSystem()

template<typename Distance , typename = std::enable_if_t< std::is_same_v<units::meter, Distance> || std::is_same_v<units::radian, Distance>>>
static LinearSystem< 2, 1, 1 > frc::LinearSystemId::IdentifyPositionSystem ( decltype(1_V/Velocity_t< Distance >(1))  kV,
decltype(1_V/Acceleration_t< Distance >(1))  kA 
)
inlinestatic

Create a state-space model for a 1 DOF position system from its kV (volts/(unit/sec)) and kA (volts/(unit/sec²)).

These constants can be found using SysId. the states of the system are [position, velocity], inputs are [voltage], and outputs are [position].

You MUST use an SI unit (i.e. meters or radians) for the Distance template argument. You may still use non-SI units (such as feet or inches) for the actual method arguments; they will automatically be converted to SI internally.

The parameters provided by the user are from this feedforward model:

u = K_v v + K_a a

Parameters
kVThe velocity gain, in volts/(unit/sec).
kAThe acceleration gain, in volts/(unit/sec²).
Exceptions
std::domain_errorif kV <= 0 or kA <= 0.

◆ IdentifyVelocitySystem()

template<typename Distance , typename = std::enable_if_t< std::is_same_v<units::meter, Distance> || std::is_same_v<units::radian, Distance>>>
static LinearSystem< 1, 1, 1 > frc::LinearSystemId::IdentifyVelocitySystem ( decltype(1_V/Velocity_t< Distance >(1))  kV,
decltype(1_V/Acceleration_t< Distance >(1))  kA 
)
inlinestatic

Create a state-space model for a 1 DOF velocity system from its kV (volts/(unit/sec)) and kA (volts/(unit/sec²)).

These constants can be found using SysId. The states of the system are [velocity], inputs are [voltage], and outputs are [velocity].

You MUST use an SI unit (i.e. meters or radians) for the Distance template argument. You may still use non-SI units (such as feet or inches) for the actual method arguments; they will automatically be converted to SI internally.

The parameters provided by the user are from this feedforward model:

u = K_v v + K_a a

Parameters
kVThe velocity gain, in volts/(unit/sec).
kAThe acceleration gain, in volts/(unit/sec²).
Exceptions
std::domain_errorif kV <= 0 or kA <= 0.

◆ SingleJointedArmSystem()

static LinearSystem< 2, 1, 1 > frc::LinearSystemId::SingleJointedArmSystem ( DCMotor  motor,
units::kilogram_square_meter_t  J,
double  G 
)
static

Create a state-space model of a single-jointed arm system.The states of the system are [angle, angular velocity], inputs are [voltage], and outputs are [angle].

Parameters
motorThe motor (or gearbox) attached to the arm.
JThe moment of inertia J of the arm.
GGear ratio from motor to arm.
Exceptions
std::domain_errorif J <= 0 or G <= 0.

The documentation for this class was generated from the following file: