@@ -44,11 +44,11 @@ Transcription setupIntermediateNode(const OptimalControlProblem& optimalControlP
4444 Transcription transcription;
4545 auto & cost = transcription.cost ;
4646 auto & dynamics = transcription.dynamics ;
47+ auto & constraintsSize = transcription.constraintsSize ;
4748 auto & stateEqConstraints = transcription.stateEqConstraints ;
4849 auto & stateInputEqConstraints = transcription.stateInputEqConstraints ;
4950 auto & stateIneqConstraints = transcription.stateIneqConstraints ;
5051 auto & stateInputIneqConstraints = transcription.stateInputIneqConstraints ;
51- auto & constraintsSize = transcription.constraintsSize ;
5252
5353 // Dynamics
5454 // Discretization returns x_{k+1} = A_{k} * dx_{k} + B_{k} * du_{k} + b_{k}
@@ -65,26 +65,30 @@ Transcription setupIntermediateNode(const OptimalControlProblem& optimalControlP
6565
6666 // State equality constraints
6767 if (!optimalControlProblem.stateEqualityConstraintPtr ->empty ()) {
68- stateEqConstraints = optimalControlProblem.stateEqualityConstraintPtr ->getLinearApproximation (
69- t, x, *optimalControlProblem.preComputationPtr , &constraintsSize.stateEq );
68+ constraintsSize.stateEq = optimalControlProblem.stateEqualityConstraintPtr ->getTermsSize (t);
69+ stateEqConstraints =
70+ optimalControlProblem.stateEqualityConstraintPtr ->getLinearApproximation (t, x, *optimalControlProblem.preComputationPtr );
7071 }
7172
7273 // State-input equality constraints
7374 if (!optimalControlProblem.equalityConstraintPtr ->empty ()) {
74- stateInputEqConstraints = optimalControlProblem.equalityConstraintPtr ->getLinearApproximation (
75- t, x, u, *optimalControlProblem.preComputationPtr , &constraintsSize.stateInputEq );
75+ constraintsSize.stateInputEq = optimalControlProblem.equalityConstraintPtr ->getTermsSize (t);
76+ stateInputEqConstraints =
77+ optimalControlProblem.equalityConstraintPtr ->getLinearApproximation (t, x, u, *optimalControlProblem.preComputationPtr );
7678 }
7779
7880 // State inequality constraints.
7981 if (!optimalControlProblem.stateInequalityConstraintPtr ->empty ()) {
80- stateIneqConstraints = optimalControlProblem.stateInequalityConstraintPtr ->getLinearApproximation (
81- t, x, *optimalControlProblem.preComputationPtr , &constraintsSize.stateIneq );
82+ constraintsSize.stateIneq = optimalControlProblem.stateInequalityConstraintPtr ->getTermsSize (t);
83+ stateIneqConstraints =
84+ optimalControlProblem.stateInequalityConstraintPtr ->getLinearApproximation (t, x, *optimalControlProblem.preComputationPtr );
8285 }
8386
8487 // State-input inequality constraints.
8588 if (!optimalControlProblem.inequalityConstraintPtr ->empty ()) {
86- stateInputIneqConstraints = optimalControlProblem.inequalityConstraintPtr ->getLinearApproximation (
87- t, x, u, *optimalControlProblem.preComputationPtr , &constraintsSize.stateInputIneq );
89+ constraintsSize.stateInputIneq = optimalControlProblem.inequalityConstraintPtr ->getTermsSize (t);
90+ stateInputIneqConstraints =
91+ optimalControlProblem.inequalityConstraintPtr ->getLinearApproximation (t, x, u, *optimalControlProblem.preComputationPtr );
8892 }
8993
9094 return transcription;
@@ -123,9 +127,9 @@ TerminalTranscription setupTerminalNode(const OptimalControlProblem& optimalCont
123127 // Results and short-hand notation
124128 TerminalTranscription transcription;
125129 auto & cost = transcription.cost ;
130+ auto & constraintsSize = transcription.constraintsSize ;
126131 auto & eqConstraints = transcription.eqConstraints ;
127132 auto & ineqConstraints = transcription.ineqConstraints ;
128- auto & constraintsSize = transcription.constraintsSize ;
129133
130134 constexpr auto request = Request::Cost + Request::SoftConstraint + Request::Approximation;
131135 optimalControlProblem.preComputationPtr ->requestFinal (request, t, x);
@@ -135,14 +139,16 @@ TerminalTranscription setupTerminalNode(const OptimalControlProblem& optimalCont
135139
136140 // State equality constraints.
137141 if (!optimalControlProblem.finalEqualityConstraintPtr ->empty ()) {
138- eqConstraints = optimalControlProblem.finalEqualityConstraintPtr ->getLinearApproximation (t, x, *optimalControlProblem.preComputationPtr ,
139- &constraintsSize.stateEq );
142+ constraintsSize.stateEq = optimalControlProblem.finalEqualityConstraintPtr ->getTermsSize (t);
143+ eqConstraints =
144+ optimalControlProblem.finalEqualityConstraintPtr ->getLinearApproximation (t, x, *optimalControlProblem.preComputationPtr );
140145 }
141146
142147 // State inequality constraints.
143148 if (!optimalControlProblem.finalInequalityConstraintPtr ->empty ()) {
144- ineqConstraints = optimalControlProblem.finalInequalityConstraintPtr ->getLinearApproximation (
145- t, x, *optimalControlProblem.preComputationPtr , &constraintsSize.stateIneq );
149+ constraintsSize.stateIneq = optimalControlProblem.finalInequalityConstraintPtr ->getTermsSize (t);
150+ ineqConstraints =
151+ optimalControlProblem.finalInequalityConstraintPtr ->getLinearApproximation (t, x, *optimalControlProblem.preComputationPtr );
146152 }
147153
148154 return transcription;
@@ -154,9 +160,9 @@ EventTranscription setupEventNode(const OptimalControlProblem& optimalControlPro
154160 EventTranscription transcription;
155161 auto & cost = transcription.cost ;
156162 auto & dynamics = transcription.dynamics ;
163+ auto & constraintsSize = transcription.constraintsSize ;
157164 auto & eqConstraints = transcription.eqConstraints ;
158165 auto & ineqConstraints = transcription.ineqConstraints ;
159- auto & constraintsSize = transcription.constraintsSize ;
160166
161167 constexpr auto request = Request::Cost + Request::SoftConstraint + Request::Dynamics + Request::Approximation;
162168 optimalControlProblem.preComputationPtr ->requestPreJump (request, t, x);
@@ -172,14 +178,16 @@ EventTranscription setupEventNode(const OptimalControlProblem& optimalControlPro
172178
173179 // State equality constraints.
174180 if (!optimalControlProblem.preJumpEqualityConstraintPtr ->empty ()) {
175- eqConstraints = optimalControlProblem.preJumpEqualityConstraintPtr ->getLinearApproximation (
176- t, x, *optimalControlProblem.preComputationPtr , &constraintsSize.stateEq );
181+ constraintsSize.stateEq = optimalControlProblem.preJumpEqualityConstraintPtr ->getTermsSize (t);
182+ eqConstraints =
183+ optimalControlProblem.preJumpEqualityConstraintPtr ->getLinearApproximation (t, x, *optimalControlProblem.preComputationPtr );
177184 }
178185
179186 // State inequality constraints.
180187 if (!optimalControlProblem.preJumpInequalityConstraintPtr ->empty ()) {
181- ineqConstraints = optimalControlProblem.preJumpInequalityConstraintPtr ->getLinearApproximation (
182- t, x, *optimalControlProblem.preComputationPtr , &constraintsSize.stateIneq );
188+ constraintsSize.stateIneq = optimalControlProblem.preJumpInequalityConstraintPtr ->getTermsSize (t);
189+ ineqConstraints =
190+ optimalControlProblem.preJumpInequalityConstraintPtr ->getLinearApproximation (t, x, *optimalControlProblem.preComputationPtr );
183191 }
184192
185193 return transcription;
0 commit comments