mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-21 01:01:43 +00:00
@@ -96,13 +96,12 @@ TEST(FeedforwardAnalysisTest, Arm1) {
|
||||
sysid::ArmSim model{Ks, Kv, Ka, Kg, offset};
|
||||
auto ff = sysid::CalculateFeedforwardGains(CollectData(model),
|
||||
sysid::analysis::kArm);
|
||||
auto& gains = std::get<0>(ff);
|
||||
|
||||
EXPECT_NEAR(gains[0], Ks, 0.003);
|
||||
EXPECT_NEAR(gains[1], Kv, 0.003);
|
||||
EXPECT_NEAR(gains[2], Ka, 0.003);
|
||||
EXPECT_NEAR(gains[3], Kg, 0.003);
|
||||
EXPECT_NEAR(gains[4], offset, 0.007);
|
||||
EXPECT_NEAR(ff.coeffs[0], Ks, 0.003);
|
||||
EXPECT_NEAR(ff.coeffs[1], Kv, 0.003);
|
||||
EXPECT_NEAR(ff.coeffs[2], Ka, 0.003);
|
||||
EXPECT_NEAR(ff.coeffs[3], Kg, 0.003);
|
||||
EXPECT_NEAR(ff.coeffs[4], offset, 0.007);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -116,13 +115,12 @@ TEST(FeedforwardAnalysisTest, Arm2) {
|
||||
sysid::ArmSim model{Ks, Kv, Ka, Kg, offset};
|
||||
auto ff = sysid::CalculateFeedforwardGains(CollectData(model),
|
||||
sysid::analysis::kArm);
|
||||
auto& gains = std::get<0>(ff);
|
||||
|
||||
EXPECT_NEAR(gains[0], Ks, 0.003);
|
||||
EXPECT_NEAR(gains[1], Kv, 0.003);
|
||||
EXPECT_NEAR(gains[2], Ka, 0.003);
|
||||
EXPECT_NEAR(gains[3], Kg, 0.003);
|
||||
EXPECT_NEAR(gains[4], offset, 0.007);
|
||||
EXPECT_NEAR(ff.coeffs[0], Ks, 0.003);
|
||||
EXPECT_NEAR(ff.coeffs[1], Kv, 0.003);
|
||||
EXPECT_NEAR(ff.coeffs[2], Ka, 0.003);
|
||||
EXPECT_NEAR(ff.coeffs[3], Kg, 0.003);
|
||||
EXPECT_NEAR(ff.coeffs[4], offset, 0.007);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -134,11 +132,10 @@ TEST(FeedforwardAnalysisTest, Drivetrain1) {
|
||||
sysid::SimpleMotorSim model{Ks, Kv, Ka};
|
||||
auto ff = sysid::CalculateFeedforwardGains(CollectData(model),
|
||||
sysid::analysis::kDrivetrain);
|
||||
auto& gains = std::get<0>(ff);
|
||||
|
||||
EXPECT_NEAR(gains[0], Ks, 0.003);
|
||||
EXPECT_NEAR(gains[1], Kv, 0.003);
|
||||
EXPECT_NEAR(gains[2], Ka, 0.003);
|
||||
EXPECT_NEAR(ff.coeffs[0], Ks, 0.003);
|
||||
EXPECT_NEAR(ff.coeffs[1], Kv, 0.003);
|
||||
EXPECT_NEAR(ff.coeffs[2], Ka, 0.003);
|
||||
}
|
||||
|
||||
TEST(FeedforwardAnalysisTest, Drivetrain2) {
|
||||
@@ -149,11 +146,10 @@ TEST(FeedforwardAnalysisTest, Drivetrain2) {
|
||||
sysid::SimpleMotorSim model{Ks, Kv, Ka};
|
||||
auto ff = sysid::CalculateFeedforwardGains(CollectData(model),
|
||||
sysid::analysis::kDrivetrain);
|
||||
auto& gains = std::get<0>(ff);
|
||||
|
||||
EXPECT_NEAR(gains[0], Ks, 0.003);
|
||||
EXPECT_NEAR(gains[1], Kv, 0.003);
|
||||
EXPECT_NEAR(gains[2], Ka, 0.003);
|
||||
EXPECT_NEAR(ff.coeffs[0], Ks, 0.003);
|
||||
EXPECT_NEAR(ff.coeffs[1], Kv, 0.003);
|
||||
EXPECT_NEAR(ff.coeffs[2], Ka, 0.003);
|
||||
}
|
||||
|
||||
TEST(FeedforwardAnalysisTest, DrivetrainAngular1) {
|
||||
@@ -164,11 +160,10 @@ TEST(FeedforwardAnalysisTest, DrivetrainAngular1) {
|
||||
sysid::SimpleMotorSim model{Ks, Kv, Ka};
|
||||
auto ff = sysid::CalculateFeedforwardGains(
|
||||
CollectData(model), sysid::analysis::kDrivetrainAngular);
|
||||
auto& gains = std::get<0>(ff);
|
||||
|
||||
EXPECT_NEAR(gains[0], Ks, 0.003);
|
||||
EXPECT_NEAR(gains[1], Kv, 0.003);
|
||||
EXPECT_NEAR(gains[2], Ka, 0.003);
|
||||
EXPECT_NEAR(ff.coeffs[0], Ks, 0.003);
|
||||
EXPECT_NEAR(ff.coeffs[1], Kv, 0.003);
|
||||
EXPECT_NEAR(ff.coeffs[2], Ka, 0.003);
|
||||
}
|
||||
|
||||
TEST(FeedforwardAnalysisTest, DrivetrainAngular2) {
|
||||
@@ -179,11 +174,10 @@ TEST(FeedforwardAnalysisTest, DrivetrainAngular2) {
|
||||
sysid::SimpleMotorSim model{Ks, Kv, Ka};
|
||||
auto ff = sysid::CalculateFeedforwardGains(
|
||||
CollectData(model), sysid::analysis::kDrivetrainAngular);
|
||||
auto& gains = std::get<0>(ff);
|
||||
|
||||
EXPECT_NEAR(gains[0], Ks, 0.003);
|
||||
EXPECT_NEAR(gains[1], Kv, 0.003);
|
||||
EXPECT_NEAR(gains[2], Ka, 0.003);
|
||||
EXPECT_NEAR(ff.coeffs[0], Ks, 0.003);
|
||||
EXPECT_NEAR(ff.coeffs[1], Kv, 0.003);
|
||||
EXPECT_NEAR(ff.coeffs[2], Ka, 0.003);
|
||||
}
|
||||
|
||||
TEST(FeedforwardAnalysisTest, Elevator1) {
|
||||
@@ -195,12 +189,11 @@ TEST(FeedforwardAnalysisTest, Elevator1) {
|
||||
sysid::ElevatorSim model{Ks, Kv, Ka, Kg};
|
||||
auto ff = sysid::CalculateFeedforwardGains(CollectData(model),
|
||||
sysid::analysis::kElevator);
|
||||
auto& gains = std::get<0>(ff);
|
||||
|
||||
EXPECT_NEAR(gains[0], Ks, 0.003);
|
||||
EXPECT_NEAR(gains[1], Kv, 0.003);
|
||||
EXPECT_NEAR(gains[2], Ka, 0.003);
|
||||
EXPECT_NEAR(gains[3], Kg, 0.003);
|
||||
EXPECT_NEAR(ff.coeffs[0], Ks, 0.003);
|
||||
EXPECT_NEAR(ff.coeffs[1], Kv, 0.003);
|
||||
EXPECT_NEAR(ff.coeffs[2], Ka, 0.003);
|
||||
EXPECT_NEAR(ff.coeffs[3], Kg, 0.003);
|
||||
}
|
||||
|
||||
TEST(FeedforwardAnalysisTest, Elevator2) {
|
||||
@@ -212,12 +205,11 @@ TEST(FeedforwardAnalysisTest, Elevator2) {
|
||||
sysid::ElevatorSim model{Ks, Kv, Ka, Kg};
|
||||
auto ff = sysid::CalculateFeedforwardGains(CollectData(model),
|
||||
sysid::analysis::kElevator);
|
||||
auto& gains = std::get<0>(ff);
|
||||
|
||||
EXPECT_NEAR(gains[0], Ks, 0.003);
|
||||
EXPECT_NEAR(gains[1], Kv, 0.003);
|
||||
EXPECT_NEAR(gains[2], Ka, 0.003);
|
||||
EXPECT_NEAR(gains[3], Kg, 0.003);
|
||||
EXPECT_NEAR(ff.coeffs[0], Ks, 0.003);
|
||||
EXPECT_NEAR(ff.coeffs[1], Kv, 0.003);
|
||||
EXPECT_NEAR(ff.coeffs[2], Ka, 0.003);
|
||||
EXPECT_NEAR(ff.coeffs[3], Kg, 0.003);
|
||||
}
|
||||
|
||||
TEST(FeedforwardAnalysisTest, Simple1) {
|
||||
@@ -228,11 +220,10 @@ TEST(FeedforwardAnalysisTest, Simple1) {
|
||||
sysid::SimpleMotorSim model{Ks, Kv, Ka};
|
||||
auto ff = sysid::CalculateFeedforwardGains(CollectData(model),
|
||||
sysid::analysis::kSimple);
|
||||
auto& gains = std::get<0>(ff);
|
||||
|
||||
EXPECT_NEAR(gains[0], Ks, 0.003);
|
||||
EXPECT_NEAR(gains[1], Kv, 0.003);
|
||||
EXPECT_NEAR(gains[2], Ka, 0.003);
|
||||
EXPECT_NEAR(ff.coeffs[0], Ks, 0.003);
|
||||
EXPECT_NEAR(ff.coeffs[1], Kv, 0.003);
|
||||
EXPECT_NEAR(ff.coeffs[2], Ka, 0.003);
|
||||
}
|
||||
|
||||
TEST(FeedforwardAnalysisTest, Simple2) {
|
||||
@@ -243,9 +234,8 @@ TEST(FeedforwardAnalysisTest, Simple2) {
|
||||
sysid::SimpleMotorSim model{Ks, Kv, Ka};
|
||||
auto ff = sysid::CalculateFeedforwardGains(CollectData(model),
|
||||
sysid::analysis::kSimple);
|
||||
auto& gains = std::get<0>(ff);
|
||||
|
||||
EXPECT_NEAR(gains[0], Ks, 0.003);
|
||||
EXPECT_NEAR(gains[1], Kv, 0.003);
|
||||
EXPECT_NEAR(gains[2], Ka, 0.003);
|
||||
EXPECT_NEAR(ff.coeffs[0], Ks, 0.003);
|
||||
EXPECT_NEAR(ff.coeffs[1], Kv, 0.003);
|
||||
EXPECT_NEAR(ff.coeffs[2], Ka, 0.003);
|
||||
}
|
||||
|
||||
@@ -11,12 +11,12 @@ TEST(OLSTest, TwoVariablesTwoPoints) {
|
||||
Eigen::MatrixXd X{{1.0, 1.0}, {1.0, 2.0}};
|
||||
Eigen::VectorXd y{{3.0}, {5.0}};
|
||||
|
||||
auto [coefficients, cod, rmse] = sysid::OLS(X, y);
|
||||
EXPECT_EQ(coefficients.size(), 2u);
|
||||
auto [coeffs, rSquared, rmse] = sysid::OLS(X, y);
|
||||
EXPECT_EQ(coeffs.size(), 2u);
|
||||
|
||||
EXPECT_NEAR(coefficients[0], 1.0, 0.05);
|
||||
EXPECT_NEAR(coefficients[1], 2.0, 0.05);
|
||||
EXPECT_NEAR(cod, 1.0, 1E-4);
|
||||
EXPECT_NEAR(coeffs[0], 1.0, 0.05);
|
||||
EXPECT_NEAR(coeffs[1], 2.0, 0.05);
|
||||
EXPECT_NEAR(rSquared, 1.0, 1e-4);
|
||||
}
|
||||
|
||||
TEST(OLSTest, TwoVariablesFivePoints) {
|
||||
@@ -25,12 +25,12 @@ TEST(OLSTest, TwoVariablesFivePoints) {
|
||||
Eigen::MatrixXd X{{1, 2}, {1, 3}, {1, 5}, {1, 7}, {1, 9}};
|
||||
Eigen::VectorXd y{{4}, {5}, {7}, {10}, {15}};
|
||||
|
||||
auto [coefficients, cod, rmse] = sysid::OLS(X, y);
|
||||
EXPECT_EQ(coefficients.size(), 2u);
|
||||
auto [coeffs, rSquared, rmse] = sysid::OLS(X, y);
|
||||
EXPECT_EQ(coeffs.size(), 2u);
|
||||
|
||||
EXPECT_NEAR(coefficients[0], 0.305, 0.05);
|
||||
EXPECT_NEAR(coefficients[1], 1.518, 0.05);
|
||||
EXPECT_NEAR(cod, 0.985, 0.05);
|
||||
EXPECT_NEAR(coeffs[0], 0.305, 0.05);
|
||||
EXPECT_NEAR(coeffs[1], 1.518, 0.05);
|
||||
EXPECT_NEAR(rSquared, 0.985, 0.05);
|
||||
}
|
||||
|
||||
#ifndef NDEBUG
|
||||
|
||||
Reference in New Issue
Block a user