@@ -9,7 +9,7 @@ import ModelPredictiveControl: isblockdiag
99
1010function 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