Skip to content

Commit f5baa5f

Browse files
committed
wip: idem
1 parent b264e0a commit f5baa5f

1 file changed

Lines changed: 19 additions & 4 deletions

File tree

ext/LinearMPCext.jl

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import ModelPredictiveControl: isblockdiag
99

1010
function Base.convert(::Type{LinearMPC.MPC}, mpc::ModelPredictiveControl.LinMPC)
1111
model, estim, weights = mpc.estim.model, mpc.estim, mpc.weights
12-
nu, ny, nx̂, nw = model.nu, model.ny, estim.nx̂, mpc.con.nw
12+
nu, ny, nd, nx̂, nw = model.nu, model.ny, model.nd, estim.nx̂, mpc.con.nw
1313
Hp, Hc = mpc.Hp, mpc.Hc
1414
nΔU = Hc * nu
1515
validate_compatibility(mpc)
@@ -121,16 +121,31 @@ function Base.convert(::Type{LinearMPC.MPC}, mpc::ModelPredictiveControl.LinMPC)
121121
end
122122
# --- Custom linear constraints ---
123123
Wmin, Wmax = mpc.con.Wmin, mpc.con.Wmax
124+
Wy = mpc.con.W̄y[1:nw, 1:ny]
125+
Wu = mpc.con.W̄u[1:nw, 1:nu]
126+
Wd = mpc.con.W̄d[1:nw, 1:nd]
127+
Wr = mpc.con.W̄r[1:nw, 1:ny]
124128
for k in 1:Hp+1
125129
wmin_k, wmax_k = Wmin[(k-1)*nw+1:k*nw], Wmax[(k-1)*nw+1:k*nw]
126130
c_w_k = C_w[(k-1)*nw+1:k*nw]
127131
ks = [k + 1]
128132
for i in 1:nw
129-
lb = isfinite(wmin_k[i]) ? [wmin_k[i]] : zeros(0)
130-
ub = isfinite(wmax_k[i]) ? [wmax_k[i]] : zeros(0)
133+
Wy_i, Wu_i, Wd_i, Wr_i = Wy[i:i, :], Wu[i:i, :], Wd[i:i, :], Wr[i:i, :]
134+
135+
lb_k_i = wmin_k[i:i] - Wy_i*yoff
136+
ub_k_i = wmax_k[i:i] - Wy_i*yoff
137+
@show lb_k_i
138+
@show ub_k_i
139+
lb = isfinite(lb_k_i[]) ? lb_k_i : zeros(0)
140+
ub = isfinite(ub_k_i[]) ? ub_k_i : zeros(0)
131141
soft = !only_hard && c_w_k[i] > 0
142+
Ax = Wy_i*C
143+
Ad = Wy_i*Dd
144+
@show Ax
145+
@show Ad
146+
LinearMPC.add_constraint!(newmpc; Ax, Ad, lb, ub, ks, soft)
132147

133-
148+
end
134149
end
135150
# --- Terminal constraints ---
136151
x̂0min, x̂0max = mpc.con.x̂0min, mpc.con.x̂0max

0 commit comments

Comments
 (0)