39 #include <gtest/gtest.h>
42 TEST(OmniTest, MecanumKinematics)
44 const auto wheel_radius = 0.1;
45 const auto wheel_base_x = 0.5;
46 const auto wheel_base_y = 0.5;
51 const arma::vec x = { 1.0, 2.0, 0.707 };
52 const arma::vec u = { 0.5, 0.4, 0.6, 0.3 };
53 const arma::vec xdot = mecanum(x, u);
55 ASSERT_NEAR(xdot(0), 0.040709, 1e-6);
56 ASSERT_NEAR(xdot(1), 0.021626, 1e-6);
57 ASSERT_NEAR(xdot(2), 0.005, 1e-6);
60 TEST(OmniTest, MecanumJacobianState)
62 const auto wheel_radius = 0.1;
63 const auto wheel_base_x = 0.5;
64 const auto wheel_base_y = 0.5;
69 const arma::vec x = { 1.0, 2.0, 0.707 };
70 const arma::vec u = { 0.5, 0.4, 0.6, 0.3 };
71 const arma::mat
A = mecanum.
fdx(x, u);
73 ASSERT_NEAR(
A(0, 2), -0.021626, 1e-6);
74 ASSERT_NEAR(
A(1, 2), 0.040709, 1e-6);
77 TEST(OmniTest, MecanumJacobianControl)
79 const auto wheel_radius = 0.1;
80 const auto wheel_base_x = 0.5;
81 const auto wheel_base_y = 0.5;
86 const arma::vec x = { 1.0, 2.0, 0.707 };
87 const arma::vec u = { 0.5, 0.4, 0.6, 0.3 };
88 const arma::mat B = mecanum.
fdu(x);
90 ASSERT_NEAR(B(0, 0), 0.035246, 1e-6);
91 ASSERT_NEAR(B(0, 1), 0.002768, 1e-6);
92 ASSERT_NEAR(B(0, 2), 0.035246, 1e-6);
93 ASSERT_NEAR(B(0, 3), 0.002768, 1e-6);
95 ASSERT_NEAR(B(1, 0), -0.002768, 1e-6);
96 ASSERT_NEAR(B(1, 1), 0.035246, 1e-6);
97 ASSERT_NEAR(B(1, 2), -0.002768, 1e-6);
98 ASSERT_NEAR(B(1, 3), 0.035246, 1e-6);
100 ASSERT_NEAR(B(2, 0), -0.025, 1e-6);
101 ASSERT_NEAR(B(2, 1), 0.025, 1e-6);
102 ASSERT_NEAR(B(2, 2), 0.025, 1e-6);
103 ASSERT_NEAR(B(2, 3), -0.025, 1e-6);