Skip to content

Commit

Permalink
[sysid] Fix arm characterization crash (wpilibsuite#6422)
Browse files Browse the repository at this point in the history
  • Loading branch information
calcmogul authored and DeltaDizzy committed Mar 26, 2024
1 parent 7c66b10 commit f0f5495
Showing 1 changed file with 10 additions and 0 deletions.
10 changes: 10 additions & 0 deletions sysid/src/main/native/cpp/analysis/FeedbackAnalysis.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

#include "sysid/analysis/FeedbackAnalysis.h"

#include <cmath>

#include <frc/controller/LinearQuadraticRegulator.h>
#include <frc/system/LinearSystem.h>
#include <frc/system/plant/LinearSystemId.h>
Expand All @@ -21,6 +23,10 @@ using Ka_t = decltype(1_V / 1_mps_sq);
FeedbackGains sysid::CalculatePositionFeedbackGains(
const FeedbackControllerPreset& preset, const LQRParameters& params,
double Kv, double Ka) {
if (!std::isfinite(Kv) || !std::isfinite(Ka)) {
return {0.0, 0.0};
}

// If acceleration requires no effort, velocity becomes an input for position
// control. We choose an appropriate model in this case to avoid numerical
// instabilities in the LQR.
Expand Down Expand Up @@ -56,6 +62,10 @@ FeedbackGains sysid::CalculatePositionFeedbackGains(
FeedbackGains sysid::CalculateVelocityFeedbackGains(
const FeedbackControllerPreset& preset, const LQRParameters& params,
double Kv, double Ka, double encFactor) {
if (!std::isfinite(Kv) || !std::isfinite(Ka)) {
return {0.0, 0.0};
}

// If acceleration for velocity control requires no effort, the feedback
// control gains approach zero. We special-case it here because numerical
// instabilities arise in LQR otherwise.
Expand Down

0 comments on commit f0f5495

Please sign in to comment.