1
1
#include " aligator/core/traj-opt-problem.hpp"
2
2
#include " aligator/core/traj-opt-data.hpp"
3
- #include " aligator/core/cost-abstract.hpp"
4
- #include " aligator/core/stage-data.hpp"
5
- #include " aligator/utils/mpc-util.hpp"
6
3
#include " aligator/solvers/proxddp/solver-proxddp.hpp"
7
4
#include " aligator/modelling/dynamics/multibody-constraint-fwd.hpp"
8
5
#include " aligator/modelling/dynamics/integrator-semi-euler.hpp"
9
- #include " aligator/modelling/dynamics/integrator-rk2.hpp"
10
- #include " aligator/modelling/multibody/frame-velocity.hpp"
11
6
#include " aligator/modelling/multibody/frame-placement.hpp"
12
7
#include " aligator/modelling/costs/sum-of-costs.hpp"
13
8
#include " aligator/modelling/costs/quad-state-cost.hpp"
14
- #include " aligator/modelling/costs/constant-cost.hpp"
15
9
16
10
#include < pinocchio/multibody/model.hpp>
17
11
#include < pinocchio/algorithm/joint-configuration.hpp>
@@ -26,9 +20,9 @@ namespace {
26
20
pinocchio::Model SimpleModel () {
27
21
pinocchio::Model model;
28
22
29
- auto const joint_id = model.addJoint (0 , pinocchio::JointModelPZ (),
23
+ const auto joint_id = model.addJoint (0 , pinocchio::JointModelPZ (),
30
24
pinocchio::SE3::Identity (), " joint" );
31
- auto const frame_id = model.addJointFrame (joint_id, -1 );
25
+ const auto frame_id = model.addJointFrame (joint_id, -1 );
32
26
model.addBodyFrame (" link" , joint_id, pinocchio::SE3::Identity (),
33
27
static_cast <int >(frame_id));
34
28
@@ -43,7 +37,7 @@ pinocchio::Model SimpleModel() {
43
37
44
38
using StageSpace = proxsuite::nlp::MultibodyPhaseSpace<double >;
45
39
46
- auto height ( double t) -> std::tuple<pinocchio::SE3, bool> {
40
+ std::tuple<pinocchio::SE3, bool > height ( double t) {
47
41
double const t0 = std::floor (t);
48
42
bool const support = static_cast <int >(t0) % 2 == 0 ;
49
43
@@ -70,7 +64,7 @@ auto makeCost(double t, pinocchio::Model const &model) {
70
64
int const nv = model.nv ;
71
65
int const nx = nq + nv;
72
66
int const nu = nv;
73
- auto const stage_space = StageSpace (model);
67
+ const auto stage_space = StageSpace (model);
74
68
auto rcost = CostStackTpl<double >(stage_space, nu);
75
69
76
70
Eigen::VectorXd const x0 = Eigen::VectorXd::Zero (nx);
@@ -85,11 +79,11 @@ auto makeCost(double t, pinocchio::Model const &model) {
85
79
rcost.addCost (" quad_control" ,
86
80
QuadraticControlCostTpl<double >(stage_space, u0, w_u));
87
81
88
- auto const [placement, support] = height (t);
82
+ const auto [placement, support] = height (t);
89
83
90
84
if (!support) {
91
85
Eigen::MatrixXd const w_height = 5000 . * Eigen::MatrixXd::Identity (6 , 6 );
92
- auto const frame_fn = makePositionResidual (model, placement);
86
+ const auto frame_fn = makePositionResidual (model, placement);
93
87
rcost.addCost (" frame_fn" , QuadraticResidualCostTpl<double >(
94
88
stage_space, frame_fn, w_height));
95
89
}
@@ -98,8 +92,8 @@ auto makeCost(double t, pinocchio::Model const &model) {
98
92
}
99
93
100
94
auto makeConstraint (pinocchio::Model const &model) {
101
- auto const &frame_id = model.getFrameId (" link" );
102
- auto const &frame = model.frames [frame_id];
95
+ const auto &frame_id = model.getFrameId (" link" );
96
+ const auto &frame = model.frames [frame_id];
103
97
auto constraint = pinocchio::RigidConstraintModel (
104
98
pinocchio::ContactType::CONTACT_6D, model, frame.parentJoint ,
105
99
frame.placement , pinocchio::LOCAL_WORLD_ALIGNED);
@@ -113,26 +107,26 @@ auto makeConstraint(pinocchio::Model const &model) {
113
107
auto makeDynamicsModel (double t, double dt, pinocchio::Model const &model) {
114
108
auto constraint_models = typename dynamics::MultibodyConstraintFwdDynamicsTpl<
115
109
double >::RigidConstraintModelVector ();
116
- auto const [placement, support] = height (t);
110
+ const auto [placement, support] = height (t);
117
111
118
112
if (support)
119
113
constraint_models.emplace_back (makeConstraint (model)).joint2_placement =
120
114
placement;
121
115
122
- auto const stage_space = StageSpace (model);
123
- auto const proximal_settings = pinocchio::ProximalSettings (1e-9 , 1e-10 , 10 );
116
+ const StageSpace stage_space (model);
117
+ const pinocchio::ProximalSettings proximal_settings (1e-9 , 1e-10 , 10 );
124
118
Eigen::MatrixXd actuation_matrix =
125
119
Eigen::MatrixXd::Zero (model.nv , model.nv ).eval ();
126
120
actuation_matrix.bottomRows (model.nv ).setIdentity ();
127
121
128
- auto const ode = dynamics::MultibodyConstraintFwdDynamicsTpl<double >(
122
+ const dynamics::MultibodyConstraintFwdDynamicsTpl<double > ode (
129
123
stage_space, actuation_matrix, constraint_models, proximal_settings);
130
124
return dynamics::IntegratorSemiImplEulerTpl<double >(ode, dt);
131
125
}
132
126
133
127
auto makeStage (double t, double dt, pinocchio::Model const &model) {
134
- auto const rcost = makeCost (t, model);
135
- auto const dynModel = makeDynamicsModel (t, dt, model);
128
+ const auto rcost = makeCost (t, model);
129
+ const auto dynModel = makeDynamicsModel (t, dt, model);
136
130
137
131
return StageModelTpl<double >(rcost, dynModel);
138
132
}
@@ -141,15 +135,15 @@ auto makeStage(double t, double dt, pinocchio::Model const &model) {
141
135
142
136
BOOST_AUTO_TEST_CASE (test_simple_mpc) {
143
137
144
- auto const model = SimpleModel ();
138
+ const auto model = SimpleModel ();
145
139
auto data = pinocchio::Data (model);
146
140
147
- int const nq = model.nq ;
148
- int const nv = model.nv ;
149
- int const nx = nq + nv;
150
- int const nu = model.nv ;
151
- int constexpr nsteps = 10 ;
152
- double constexpr dt = 0.02 ;
141
+ const int nq = model.nq ;
142
+ const int nv = model.nv ;
143
+ const int nx = nq + nv;
144
+ const int nu = model.nv ;
145
+ constexpr int nsteps = 10 ;
146
+ constexpr double dt = 0.02 ;
153
147
154
148
fmt::print (" nq: {:d}, nv: {:d}, nx: {:d}, nu: {:d}\n " , nq, nv, nx, nu);
155
149
@@ -161,7 +155,7 @@ BOOST_AUTO_TEST_CASE(test_simple_mpc) {
161
155
pinocchio::computeAllTerms (model, data, q, vq);
162
156
pinocchio::updateFramePlacements (model, data);
163
157
164
- auto const term_cost = makeCost (0 ., model);
158
+ const auto term_cost = makeCost (0 ., model);
165
159
auto problem = TrajOptProblemTpl<double >(x, nu, StageSpace (model), term_cost);
166
160
167
161
for (auto i = 0 ; i < nsteps; ++i)
@@ -170,7 +164,7 @@ BOOST_AUTO_TEST_CASE(test_simple_mpc) {
170
164
double constexpr TOL = 1e-7 ;
171
165
unsigned int constexpr max_iters = 100u ;
172
166
double constexpr mu_init = 1e-8 ;
173
- VerboseLevel constexpr verbosity = QUIET;
167
+ constexpr VerboseLevel verbosity = QUIET;
174
168
175
169
auto ddp = SolverProxDDPTpl<double >(TOL, mu_init, max_iters, verbosity);
176
170
ddp.rollout_type_ = RolloutType::LINEAR;
@@ -186,14 +180,14 @@ BOOST_AUTO_TEST_CASE(test_simple_mpc) {
186
180
BOOST_CHECK (converged);
187
181
188
182
for (auto t = 0 .; t < 5 .; t += dt) {
189
- auto const t0 = std::chrono::steady_clock::now ();
190
- auto const x = ddp.results_ .xs [1 ];
183
+ const auto t0 = std::chrono::steady_clock::now ();
184
+ const auto x = ddp.results_ .xs [1 ];
191
185
q = x.head (nq);
192
186
vq = x.tail (nv);
193
187
pinocchio::computeAllTerms (model, data, q, vq);
194
188
pinocchio::updateFramePlacements (model, data);
195
189
196
- auto const stage = makeStage (t, dt, model);
190
+ const auto stage = makeStage (t, dt, model);
197
191
problem.replaceStageCircular (stage);
198
192
ddp.cycleProblem (problem, stage.createData ());
199
193
problem.term_cost_ = makeCost (t + dt, model);
@@ -203,15 +197,15 @@ BOOST_AUTO_TEST_CASE(test_simple_mpc) {
203
197
204
198
bool converged = ddp.run (problem);
205
199
BOOST_CHECK (converged);
206
- auto const [expected, support] =
200
+ const auto [expected, support] =
207
201
height (std::max (0 ., t - (nsteps - 1 ) * dt));
208
- auto const &actual = data.oMf [model.getFrameId (" link" )];
202
+ const auto &actual = data.oMf [model.getFrameId (" link" )];
209
203
BOOST_CHECK ((actual.inverse () * expected).isIdentity (2e-3 ));
210
204
BOOST_CHECK_SMALL (actual.translation ()[2 ] - expected.translation ()[2 ],
211
205
2e-3 );
212
206
213
- auto const tf = std::chrono::steady_clock::now ();
214
- auto const time = std::chrono::duration<double , std::milli>(tf - t0);
207
+ const auto tf = std::chrono::steady_clock::now ();
208
+ const auto time = std::chrono::duration<double , std::milli>(tf - t0);
215
209
fmt::print (" Elapsed time: {} ms\n " , time .count ());
216
210
}
217
211
}
0 commit comments