@@ -181,87 +181,5 @@ TEST(DirectOptimize, Box3D) {
181181 mj_deleteModel (model);
182182}
183183
184- TEST (DirectOptimize, Quadruped) {
185- // verbose
186- bool verbose = false ;
187-
188- // load model
189- mjModel* model = LoadTestModel (" estimator/quadruped/task.xml" );
190- mjData* data = mj_makeData (model);
191-
192- // discrete inverse dynamics
193- model->opt .enableflags |= mjENBL_INVDISCRETE;
194-
195- // dimension
196- int nq = model->nq , nv = model->nv , nu = model->nu ;
197- int ns = model->nsensordata ;
198-
199- if (verbose) {
200- printf (" Quadruped dimensions:\n " );
201- printf (" nq: %i\n " , nq);
202- printf (" nv: %i\n " , nv);
203- printf (" nu: %i\n " , nu);
204- printf (" ns: %i\n " , ns);
205- }
206-
207- // ----- simulate ----- //
208- int T = 64 ;
209- if (verbose) printf (" T: %i\n " , T);
210- Simulation sim (model, T);
211- auto controller = [](double * ctrl, double time) {};
212- sim.Rollout (controller);
213-
214- // ----- optimizer ----- //
215-
216- // initialize
217- Direct optimizer (model, T);
218- optimizer.settings .verbose_optimize = verbose;
219- mju_copy (optimizer.configuration .Data (), sim.qpos .Data (), nq * T);
220- mju_copy (optimizer.configuration_previous .Data (), sim.qpos .Data (), nq * T);
221- mju_copy (optimizer.force_measurement .Data (), sim.qfrc_actuator .Data (),
222- nv * T);
223- mju_copy (optimizer.sensor_measurement .Data (), sim.sensor .Data (), ns * T);
224-
225- // ----- random perturbation ----- //
226-
227- // loop over configurations
228- for (int t = 0 ; t < T; t++) {
229- // unpack
230- double * q = optimizer.configuration .Get (t);
231- std::vector<double > noise (nv);
232- // add noise
233- for (int i = 0 ; i < nv; i++) {
234- // absl::BitGen gen_;
235- noise[i] = 0.05 ; // * absl::Gaussian<double>(gen_, 0.0, 1.0);
236- }
237- // integrate configuration
238- mj_integratePos (model, q, noise.data (), 1.0 );
239- }
240-
241- // settings
242- optimizer.settings .max_smoother_iterations = 1 ;
243- optimizer.settings .max_search_iterations = 10 ;
244-
245- // set weights
246- std::fill (optimizer.noise_process .begin (), optimizer.noise_process .end (),
247- 1.0 );
248- std::fill (optimizer.noise_sensor .begin (), optimizer.noise_sensor .end (), 1.0 );
249-
250- // optimize
251- optimizer.Optimize ();
252-
253- // error
254- std::vector<double > configuration_error (nq * T);
255- mju_sub (configuration_error.data (), optimizer.configuration .Data (),
256- sim.qpos .Data (), nq * T);
257-
258- // test cost decrease
259- EXPECT_LE (optimizer.GetCost (), optimizer.GetCostInitial ());
260-
261- // delete data + model
262- mj_deleteData (data);
263- mj_deleteModel (model);
264- }
265-
266184} // namespace
267185} // namespace mjpc
0 commit comments