[sysid] Fix adjusted R² calculation (#6101)

It hardcoded p to 2.
This commit is contained in:
Tyler Veness
2023-12-26 20:06:10 -08:00
committed by GitHub
parent 5659038443
commit f2c2bab7dc
9 changed files with 147 additions and 112 deletions

View File

@@ -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);
}