@@ -217,6 +217,44 @@ class OptimizerTester : public Optimizer
217217 {
218218 return integrateStateVelocities (traj, state);
219219 }
220+
221+ void testCloseLoop ()
222+ {
223+ settings_.open_loop = false ;
224+
225+ mppi::models::State s;
226+ s.reset (1000 ,50 );
227+ s.speed .linear .x = 0.25 ;
228+ s.speed .angular .z = -0.7 ;
229+ s.speed .linear .y = 0.1 ;
230+
231+ updateInitialStateVelocities (s);
232+
233+ EXPECT_FLOAT_EQ (s.vx (0 ,0 ), 0 .25f );
234+ EXPECT_FLOAT_EQ (s.wz (0 ,0 ), -0 .7f );
235+ EXPECT_FLOAT_EQ (s.vy (0 ,0 ), 0 .1f );
236+ }
237+
238+ void testOpenLoop ()
239+ {
240+ settings_.open_loop = true ;
241+
242+ last_command_vel_.linear .x = 0.6 ;
243+ last_command_vel_.angular .z = 0.3 ;
244+ last_command_vel_.linear .y = 0.1 ;
245+
246+ mppi::models::State s;
247+ s.reset (1000 , 50 );
248+ s.speed .linear .x = 0.11 ;
249+ s.speed .angular .z = -0.22 ;
250+ s.speed .linear .y = -0.05 ;
251+
252+ updateInitialStateVelocities (s);
253+
254+ EXPECT_FLOAT_EQ (s.vx (0 ,0 ), 0 .6f );
255+ EXPECT_FLOAT_EQ (s.wz (0 ,0 ), 0 .3f );
256+ EXPECT_FLOAT_EQ (s.vy (0 ,0 ), 0 .1f );
257+ }
220258};
221259
222260TEST (OptimizerTests, BasicInitializedFunctions)
@@ -697,6 +735,20 @@ TEST(OptimizerTests, TestGetters)
697735 EXPECT_EQ (optimizer_tester.getSettings ().model_dt , 0 .05f );
698736}
699737
738+ TEST (OptimizerTests, DiffDrive_ClosedLoop_usesStateSpeed)
739+ {
740+ OptimizerTester optimizer_tester;
741+ optimizer_tester.testSetOmniModel ();
742+ optimizer_tester.testCloseLoop ();
743+ }
744+
745+ TEST (OptimizerTests, DiffDrive_OpenLoop_usesLastCmd)
746+ {
747+ OptimizerTester optimizer_tester;
748+ optimizer_tester.testSetOmniModel ();
749+ optimizer_tester.testOpenLoop ();
750+ }
751+
700752int main (int argc, char **argv)
701753{
702754 ::testing::InitGoogleTest (&argc, argv);
0 commit comments