17 const std::vector<VectorXs> &lams,
18 const std::vector<VectorXs> &vs,
19 std::vector<VectorXs> &Lxs, std::vector<VectorXs> &Lus) {
20 using ConstraintStack = ConstraintStackTpl<Scalar>;
21 using StageFunctionData = StageFunctionDataTpl<Scalar>;
22 using CostData = CostDataAbstractTpl<Scalar>;
23 using StageModel = StageModelTpl<Scalar>;
24 using StageData = StageDataTpl<Scalar>;
25 const std::size_t nsteps = problem.numSteps();
27 ZoneScopedN(
"LagrangianDerivatives::compute");
34 const StageFunctionData &init_cond = *pd.init_data;
35 Lxs[0].noalias() = init_cond.Jx_.transpose() * lams[0];
37 for (std::size_t i = 0; i < nsteps; i++) {
38 const StageModel &sm = *problem.stages_[i];
39 const StageData &sd = *pd.stage_data[i];
40 const ConstraintStack &stack = sm.constraints_;
41 const StageFunctionData &dd = *sd.dynamics_data;
43 sd.cost_data->Lx_ + dd.Jx_.transpose() * lams[i + 1];
45 sd.cost_data->Lu_ + dd.Ju_.transpose() * lams[i + 1];
47 BlkView v_(vs[i], stack.dims());
48 for (std::size_t j = 0; j < stack.size(); j++) {
49 const StageFunctionData &cd = *sd.constraint_data[j];
50 Lxs[i].noalias() += cd.Jx_.transpose() * v_[j];
51 Lus[i].noalias() += cd.Ju_.transpose() * v_[j];
54 Lxs[i + 1].noalias() = dd.Jy_.transpose() * lams[i + 1];
59 const CostData &cdterm = *pd.term_cost_data;
60 Lxs[nsteps] += cdterm.Lx_;
61 const ConstraintStack &stack = problem.term_cstrs_;
62 BlkView vN(vs[nsteps], stack.dims());
63 for (std::size_t j = 0; j < stack.size(); j++) {
64 const StageFunctionData &cd = *pd.term_cstr_data[j];
65 Lxs[nsteps].noalias() += cd.Jx_.transpose() * vN[j];