Skip to content

Commit c03cba4

Browse files
fixing Transcription
1 parent 50a9df8 commit c03cba4

File tree

1 file changed

+27
-19
lines changed

1 file changed

+27
-19
lines changed

ocs2_oc/src/multiple_shooting/Transcription.cpp

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)