| 85 | } |
| 86 | |
| 87 | BOOST_AUTO_TEST_CASE(mujoco_humanoid) |
| 88 | { |
| 89 | ModelHandle model_handle(new Model()); |
| 90 | Model & model = ::pinocchio::helper::get_ref(model_handle); |
| 91 | GeometryModelHandle geom_model_handle(new GeometryModel()); |
| 92 | GeometryModel & geom_model = ::pinocchio::helper::get_ref(geom_model_handle); |
| 93 | |
| 94 | const bool verbose = false; |
| 95 | ::pinocchio::mjcf::buildModel(SIMPLE_TEST_DATA_DIR "/mujoco_humanoid.xml", model, verbose); |
| 96 | ::pinocchio::mjcf::buildGeom(model, SIMPLE_TEST_DATA_DIR "/mujoco_humanoid.xml", pinocchio::COLLISION, geom_model); |
| 97 | addFloorToGeomModel(geom_model); |
| 98 | |
| 99 | // sanity checks |
| 100 | assert(model.nv == 27); |
| 101 | assert(geom_model.geometryObjects.size() == 20); |
| 102 | |
| 103 | // initial state |
| 104 | const Eigen::VectorXd q0 = model.referenceConfigurations["qpos0"]; |
| 105 | const Eigen::VectorXd v0 = Eigen::VectorXd::Zero(model.nv); |
| 106 | const Eigen::VectorXd tau0 = Eigen::VectorXd::Zero(model.nv); |
| 107 | |
| 108 | // add collision pairs |
| 109 | addSystemCollisionPairs(model, geom_model, q0); |
| 110 | assert(geom_model.collisionPairs.size() == 175); |
| 111 | |
| 112 | // run simulation |
| 113 | model.lowerPositionLimit.setConstant(-std::numeric_limits<double>::infinity()); |
| 114 | model.upperPositionLimit.setConstant(std::numeric_limits<double>::infinity()); |
| 115 | model.lowerDryFrictionLimit.setZero(); |
| 116 | model.upperDryFrictionLimit.setZero(); |
| 117 | const double dt = 1e-3; |
| 118 | const Eigen::VectorXd zero_torque = Eigen::VectorXd::Zero(model.nv); |
| 119 | |
| 120 | { |
| 121 | Simulator sim(model_handle, geom_model_handle); |
| 122 | Eigen::VectorXd q = q0; |
| 123 | Eigen::VectorXd v = v0; |
| 124 | for (size_t i = 0; i < 100; ++i) |
| 125 | { |
| 126 | BOOST_CHECK_NO_THROW(sim.step<ADMM>(q, v, zero_torque, dt)); |
| 127 | BOOST_CHECK(sim.admm_constraint_solver.getIterationCount() < sim.admm_constraint_solver_settings.max_iter); |
| 128 | BOOST_CHECK(sim.pgs_constraint_solver.getIterationCount() == 0); // make sure pgs didnt run |
| 129 | q = sim.qnew; |
| 130 | v = sim.vnew; |
| 131 | } |
| 132 | } |
| 133 | |
| 134 | { |
| 135 | Simulator sim(model_handle, geom_model_handle); |
| 136 | Eigen::VectorXd q = q0; |
| 137 | Eigen::VectorXd v = v0; |
| 138 | for (size_t i = 0; i < 100; ++i) |
| 139 | { |
| 140 | BOOST_CHECK_NO_THROW(sim.step<PGS>(q, v, zero_torque, dt)); |
| 141 | BOOST_CHECK(sim.pgs_constraint_solver.getIterationCount() < sim.pgs_constraint_solver_settings.max_iter); |
| 142 | BOOST_CHECK(sim.admm_constraint_solver.getIterationCount() == 0); // make sure admm didnt run |
| 143 | q = sim.qnew; |
| 144 | v = sim.vnew; |
nothing calls this directly
no test coverage detected