39 #include <gtest/gtest.h>
42 TEST(CartTest, CartKinematics)
44 const auto wheel_radius = 0.033;
45 const auto wheel_base = 0.08;
48 const arma::vec x = { 1.0, 2.0, 0.707 };
49 const arma::vec u = { 0.1, 0.2 };
50 const arma::vec xdot = cart(x, u);
52 ASSERT_NEAR(xdot(0), 0.003763, 1e-6);
53 ASSERT_NEAR(xdot(1), 0.003215, 1e-6);
54 ASSERT_NEAR(xdot(2), 0.020625, 1e-6);
57 TEST(CartTest, CartJacobianState)
59 const auto wheel_radius = 0.033;
60 const auto wheel_base = 0.08;
63 const arma::vec x = { 1.0, 2.0, 0.707 };
64 const arma::vec u = { 0.1, 0.2 };
65 const arma::mat
A = cart.
fdx(x, u);
67 ASSERT_NEAR(
A(0, 2), -0.003215, 1e-6);
68 ASSERT_NEAR(
A(1, 2), 0.003763, 1e-6);
71 TEST(CartTest, CartJacobianControl)
73 const auto wheel_radius = 0.033;
74 const auto wheel_base = 0.08;
77 const arma::vec x = { 1.0, 2.0, 0.707 };
78 const arma::mat B = cart.
fdu(x);
80 ASSERT_NEAR(B(0, 0), 0.012545, 1e-6);
81 ASSERT_NEAR(B(0, 1), 0.012545, 1e-6);
83 ASSERT_NEAR(B(1, 0), 0.010717, 1e-6);
84 ASSERT_NEAR(B(1, 1), 0.010717, 1e-6);
86 ASSERT_NEAR(B(2, 0), -0.20625, 1e-6);
87 ASSERT_NEAR(B(2, 1), 0.20625, 1e-6);
90 TEST(CartTest, CartWheels2TwistStraight)
92 const auto wheel_radius = 0.033;
93 const auto wheel_base = 0.08;
96 const arma::vec u = { 1.0, 1.0 };
99 ASSERT_NEAR(vb(0), 0.033, 1e-6);
100 ASSERT_NEAR(vb(1), 0.0, 1e-6);
101 ASSERT_NEAR(vb(2), 0.0, 1e-6);
104 TEST(CartTest, CartWheels2LeftTurn)
106 const auto wheel_radius = 0.033;
107 const auto wheel_base = 0.08;
110 const arma::vec u = { -1.0, 1.0 };
113 ASSERT_NEAR(vb(0), 0.0, 1e-6);
114 ASSERT_NEAR(vb(1), 0.0, 1e-6);
115 ASSERT_NEAR(vb(2), 0.4125, 1e-6);
118 TEST(CartTest, CartWheels2RightTurn)
120 const auto wheel_radius = 0.033;
121 const auto wheel_base = 0.08;
124 const arma::vec u = { 1.0, -1.0 };
127 ASSERT_NEAR(vb(0), 0.0, 1e-6);
128 ASSERT_NEAR(vb(1), 0.0, 1e-6);
129 ASSERT_NEAR(vb(2), -0.4125, 1e-6);
132 TEST(CartTest, SimpleCartKinematics)
136 const arma::vec x = { 1.0, 2.0, 0.707 };
137 const arma::vec u = { 0.5, 0.0, 0.01 };
138 const arma::vec xdot = cart(x, u);
140 ASSERT_NEAR(xdot(0), 0.380156, 1e-6);
141 ASSERT_NEAR(xdot(1), 0.324777, 1e-6);
142 ASSERT_NEAR(xdot(2), 0.01, 1e-6);
145 TEST(CartTest, SimpleCartJacobianState)
149 const arma::vec x = { 1.0, 2.0, 0.707 };
150 const arma::vec u = { 0.5, 0.0, 0.01 };
151 const arma::mat
A = cart.
fdx(x, u);
153 ASSERT_NEAR(
A(0, 2), -0.324777, 1e-6);
154 ASSERT_NEAR(
A(1, 2), 0.380156, 1e-6);
157 TEST(CartTest, SimpleCartJacobianControl)
161 const arma::vec x = { 1.0, 2.0, 0.707 };
162 const arma::vec u = { 0.5, 0.01 };
163 const arma::mat B = cart.
fdu(x);
165 ASSERT_NEAR(B(0, 0), 0.760313, 1e-6);
166 ASSERT_NEAR(B(1, 0), 0.649555, 1e-6);