mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-22 01:11:42 +00:00
[wpimath] Add dynamic size support for numerical jacobian computation (#7959)
This commit is contained in:
@@ -28,6 +28,25 @@ TEST(NumericalJacobianTest, Bu) {
|
||||
EXPECT_TRUE(newB.isApprox(B));
|
||||
}
|
||||
|
||||
Eigen::VectorXd AxBuFn_DynamicSize(const Eigen::VectorXd& x,
|
||||
const Eigen::VectorXd& u) {
|
||||
return A * x + B * u;
|
||||
}
|
||||
|
||||
// Test that we can recover A from AxBuFn() pretty accurately
|
||||
TEST(NumericalJacobianTest, Ax_DynamicSize) {
|
||||
Eigen::MatrixXd newA = frc::NumericalJacobianX(
|
||||
AxBuFn_DynamicSize, frc::Vectord<4>::Zero(), frc::Vectord<2>::Zero());
|
||||
EXPECT_TRUE(newA.isApprox(A));
|
||||
}
|
||||
|
||||
// Test that we can recover B from AxBuFn() pretty accurately
|
||||
TEST(NumericalJacobianTest, Bu_DynamicSize) {
|
||||
Eigen::MatrixXd newB = frc::NumericalJacobianU(
|
||||
AxBuFn_DynamicSize, frc::Vectord<4>::Zero(), frc::Vectord<2>::Zero());
|
||||
EXPECT_TRUE(newB.isApprox(B));
|
||||
}
|
||||
|
||||
frc::Matrixd<3, 4> C{{1, 2, 4, 1}, {5, 2, 3, 4}, {5, 1, 3, 2}};
|
||||
frc::Matrixd<3, 2> D{{1, 1}, {2, 1}, {3, 2}};
|
||||
|
||||
@@ -49,3 +68,20 @@ TEST(NumericalJacobianTest, Du) {
|
||||
CxDuFn, frc::Vectord<4>::Zero(), frc::Vectord<2>::Zero());
|
||||
EXPECT_TRUE(newD.isApprox(D));
|
||||
}
|
||||
|
||||
Eigen::VectorXd CxDuFn_DynamicSize(const Eigen::VectorXd& x,
|
||||
const Eigen::VectorXd& u) {
|
||||
return C * x + D * u;
|
||||
}
|
||||
|
||||
TEST(NumericalJacobianTest, Cx_DynamicSize) {
|
||||
Eigen::MatrixXd newC = frc::NumericalJacobianX(
|
||||
CxDuFn_DynamicSize, Eigen::VectorXd::Zero(4), Eigen::VectorXd::Zero(2));
|
||||
EXPECT_TRUE(newC.isApprox(C));
|
||||
}
|
||||
|
||||
TEST(NumericalJacobianTest, Du_DynamicSize) {
|
||||
Eigen::MatrixXd newD = frc::NumericalJacobianU(
|
||||
CxDuFn_DynamicSize, Eigen::VectorXd::Zero(4), Eigen::VectorXd::Zero(2));
|
||||
EXPECT_TRUE(newD.isApprox(D));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user