summaryrefslogtreecommitdiffstats
path: root/templates/traj_constraints.m
blob: d5e0c659ce36961c69fe71ddf6b2962daa2546de (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
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 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 [s_max, y_max, u_max, J_u, df_max, vf_max, traj_feas] = traj_constraints(x,u,params)
    % YOUR CODE HERE
    traj_feas = true;
    % timesteps = params.model.TimeStep;
    size_u = size(u);
    timesteps = size_u(end);
    s_max = max(max(abs(x(1,:))),max(abs(x(3,:))));
    y_max = max(abs(x(2,:)));
    u_max = max(abs(u));
    J_u = 0;
    % fprintf("timestep: %s\n\n\n",timesteps);
%     fprintf("u shape: %s\n\n\n",size(u));
    % display(size(x))
    for k = 1:timesteps
        J_u = J_u + u(:,k)'*u(:,k);
    end
    df_max = sqrt(sum(x(1:3,end).^2));
    vf_max = sqrt(sum(x(4:6,end).^2));
    if s_max > params.constraints.MaxAbsPositionXZ
        traj_feas = false;
    end
    if y_max > params.constraints.MaxAbsPositionY
        traj_feas = false;
    end 
    if u_max > params.constraints.MaxAbsThrust
        traj_feas = false;
    end
    if df_max > params.constraints.MaxFinalPosDiff
        traj_feas = false;
    end
    if vf_max > params.constraints.MaxFinalVelDiff
        traj_feas = false;
    end
end