Skip to content

Commit fd0bc1a

Browse files
committed
revert changes commited to full_condensing.cpp
file contained wrong changes, was commited by mistake ; add change Ts in InvertedPendulum.cpp to allow more shooting points
1 parent bf190f5 commit fd0bc1a

2 files changed

Lines changed: 37 additions & 32 deletions

File tree

examples/InvertedPendulum.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ int main()
5656

5757
// prepare the closed-loop simulation
5858
rti_work.sample = 0;
59-
double Tf=4, Ts=0.05,t=0;
59+
double Tf=4, Ts=0.025,t=0;
6060

6161
double *simu_in[3];
6262
double *simu_out[1];

src/full_condensing.cpp

Lines changed: 36 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
#include "mpc_common.hpp"
2-
#include "qp_problem.hpp"
31
#include "full_condensing.hpp"
42

53
full_condensing_workspace& full_condensing_workspace::init(model_size& size)
@@ -36,19 +34,22 @@ full_condensing_workspace& full_condensing_workspace::full_condensing(model_size
3634

3735
int idx = N*nbg+nbgN;
3836

39-
int i,j;
37+
int i, j;
4038

4139
/* compute G */
42-
for(i=0;i<N;i++){
40+
for (i=0; i<N; i++)
41+
{
4342
G.block(i*nx,i*nu,nx,nu) = qp.data.B.block(0,i*nu,nx,nu);
44-
for(j=i+1;j<N;j++)
43+
for (j=i+1; j<N; j++)
4544
G.block(j*nx,i*nu,nx,nu) = qp.data.A.block(0,j*nx,nx,nx) * G.block((j-1)*nx,i*nu,nx,nu);
4645
}
4746

4847
/* Compute Hc */
49-
for(i=0;i<N;i++){
48+
for (i=0; i<N; i++)
49+
{
5050
W = qp.data.Q.block(0,N*nx,nx,nx) * G.block((N-1)*nx,i*nu,nx,nu);
51-
for(j=N-1;j>i;j--){
51+
for (j=N-1; j>i; j--)
52+
{
5253
Hc.block(j*nu,i*nu,nu,nu) = qp.data.S.block(0,j*nu,nx,nu).transpose() * G.block((j-1)*nx,i*nu,nx,nu) + qp.data.B.block(0,j*nu,nx,nu).transpose() * W;
5354
W = qp.data.Q.block(0,j*nx,nx,nx) * G.block((j-1)*nx,i*nu,nx,nu) + qp.data.A.block(0,j*nx,nx,nx).transpose() * W;
5455
Hc.block(i*nu,j*nu,nu,nu) = Hc.block(j*nu,i*nu,nu,nu).transpose();
@@ -57,66 +58,70 @@ full_condensing_workspace& full_condensing_workspace::full_condensing(model_size
5758
}
5859

5960
/* Compute Ccg */
60-
if (nbg>0){
61-
for(i=0;i<N;i++){
61+
if (nbg > 0)
62+
for (i=0; i<N; i++)
63+
{
6264
Cc.block(i*nbg,i*nu,nbg,nu) = qp.data.Cgu.block(0,i*nu,nbg,nu);
63-
for(j=i+1;j<N;j++){
65+
for (j=i+1; j<N; j++)
6466
Cc.block(j*nbg,i*nu,nbg,nu) = qp.data.Cgx.block(0,j*nx,nbg,nx)*G.block((j-1)*nx,i*nu,nx,nu);
65-
}
6667
}
67-
}
68+
6869
/* Compute CcN */
69-
if (nbgN>0){
70-
for(i=0;i<N;i++){
70+
if (nbgN > 0)
71+
for (i=0; i<N; i++)
72+
{
7173
Cc.block(N*nbg,i*nu,nbgN,nu) = qp.data.CgN * G.block((N-1)*nx,i*nu,nx,nu);
7274
}
73-
}
7475

7576
/* Compute Ccx */
76-
if (nbx>0){
77-
for(i=0;i<N;i++){
77+
if (nbx > 0)
78+
for (i=0; i<N; i++)
79+
{
7880
for(j=i+1;j<=N;j++)
7981
Cc.block(idx+(j-1)*nbx,i*nu,nbx,nu) = qp.data.Cx * G.block((j-1)*nx,i*nu,nx,nu);
8082

8183
}
82-
}
8384

8485
/* compute L */
8586
L.head(nx) = x0 - qp.in.x.col(0);
86-
for(i=0;i<N;i++){
87+
for (i=0; i<N; i++)
88+
{
8789
L.segment((i+1)*nx,nx) = qp.data.A.block(0,i*nx,nx,nx)*L.segment(i*nx,nx) + qp.data.a.col(i);
8890
}
8991

9092
/* compute gc */
9193
w = qp.data.gx.col(N) + qp.data.Q.block(0,N*nx,nx,nx) * L.tail(nx);
92-
for(i=N-1;i>0;i--){
94+
for (i=N-1; i>0; i--)
95+
{
9396
gc.segment(i*nu,nu) = qp.data.gu.col(i) + qp.data.S.block(0,i*nu,nx,nu).transpose()*L.segment(i*nx,nx) + qp.data.B.block(0,i*nu,nx,nu).transpose()*w;
9497
w = qp.data.gx.col(i) + qp.data.Q.block(0,i*nx,nx,nx)*L.segment(i*nx,nx) + qp.data.A.block(0,i*nx,nx,nx).transpose()*w;
9598
}
9699
gc.head(nu) = qp.data.gu.col(0) + qp.data.S.leftCols(nu).transpose()*L.head(nx) + qp.data.B.leftCols(nu).transpose()*w;
97100

98101
/* Compute cc */
99-
if (nbg>0){
100-
for(i=0;i<N;i++){
102+
if (nbg > 0)
103+
for (i=0; i<N; i++)
104+
{
101105
lcc.segment(i*nbg,nbg) = qp.data.Cgx.block(0,i*nx,nbg,nx)*L.segment(i*nx,nx);
102106
ucc.segment(i*nbg,nbg) = qp.data.ub_g.segment(i*nbg,nbg) - lcc.segment(i*nbg,nbg);
103-
lcc.segment(i*nbg,nbg) = qp.data.lb_u.segment(i*nbg,nbg) - lcc.segment(i*nbg,nbg);
107+
lcc.segment(i*nbg,nbg) = qp.data.lb_g.segment(i*nbg,nbg) - lcc.segment(i*nbg,nbg);
104108
}
105-
}
109+
106110
/* Compute ccN */
107-
if (nbgN>0){
111+
if (nbgN > 0)
112+
{
108113
lcc.segment(N*nbg,nbgN) = qp.data.CgN * L.tail(nx);
109-
ucc.segment(N*nbg,nbgN) = qp.data.ub_u.segment(N*nbg,nbgN) - lcc.segment(N*nbg,nbgN);
110-
lcc.segment(N*nbg,nbgN) = qp.data.lb_u.segment(N*nbg,nbgN) - lcc.segment(N*nbg,nbgN);
114+
ucc.segment(N*nbg,nbgN) = qp.data.ub_g.segment(N*nbg,nbgN) - lcc.segment(N*nbg,nbgN);
115+
lcc.segment(N*nbg,nbgN) = qp.data.lb_g.segment(N*nbg,nbgN) - lcc.segment(N*nbg,nbgN);
111116
}
112-
/* Compute ccx */
113-
if (nbx>0){
114-
for(i=0;i<N;i++){
117+
118+
if (nbx > 0)
119+
for (i=0; i<N; i++)
120+
{
115121
lcc.segment(idx+i*nbx,nbx) = qp.data.Cx * L.segment((i+1)*nx,nx);
116122
ucc.segment(idx+i*nbx,nbx) = qp.data.ub_x.segment(i*nbx,nbx) - lcc.segment(idx+i*nbx,nbx);
117123
lcc.segment(idx+i*nbx,nbx) = qp.data.lb_x.segment(i*nbx,nbx) - lcc.segment(idx+i*nbx,nbx);
118124
}
119-
}
120125

121126
return *this;
122127
}

0 commit comments

Comments
 (0)