summaryrefslogtreecommitdiffstats
path: root/templates/lqr_maxPI.m
blob: 86d838e170770ba95052658fedb080b8fdcdc11b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Copyright (c) 2023, Amon Lahr, Simon Muntwiler, Antoine Leeman & Fabian Flürenbrock Institute for Dynamic Systems and Control, ETH Zurich.
%
% All rights reserved.
%
% Please see the LICENSE file that has been included as part of this package.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


function [H, h] = lqr_maxPI(Q, R, params)
    % Define the linear system
    A = params.model.A;
    B = params.model.B;
    nx=params.model.nx;
    nu=params.model.nu;
    
    s_max= params.constraints.MaxAbsPositionXZ;
    y_max= params.constraints.MaxAbsPositionY;
    u_max = params.constraints.MaxAbsThrust;
    
    K = -dlqr(A, B, Q, R);
    systemLQR = LTISystem('A', A+B*K);
%     absxmax = ones(nx,1)*s_max;
%     absumax = ones(nu,1)*u_max;
%     Xp = Polyhedron('A',[eye(nx); -eye(nx); K; -K], 'b', [absxmax;absxmax; absumax;absumax]);
    Hx=params.constraints.StateMatrix;
    hx=params.constraints.StateRHS;
    Hu=params.constraints.InputMatrix;
    hu=params.constraints.InputRHS;
    Xp = Polyhedron('A',[Hx;Hu*K], 'b', [hx;hu]);
    
    figure(1);
    systemLQR.x.with('setConstraint');
    systemLQR.x.setConstraint = Xp;
    InvSetLQR = systemLQR.invariantSet();
    InvSetLQR.plot(), alpha(0.25), title('Invariant Set for Triple Integrator under LQR Control'), xlabel('x_1'), ylabel('x_2'), zlabel('x_3');

    H=InvSetLQR.A;
    h=InvSetLQR.b;


end