예제 #1
0
def fuzzyZ(ex, v):
    # regulator wysokosci

    # x - blad w danej osi
    # v - predkosc

    ## przynaleznosci blad wysokosci
    R = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
    uz = [0, 0, 0]
    x = ex

    # zero
    a = -30
    b = 0
    c = 30
    uz[1] = liczu(x, a, b, c, 2)

    # bardzo nisko
    a = 0
    b = 30
    uz[2] = liczu(x, a, b, c, 3)

    # bardzo wysoko
    b = -30
    c = 0
    uz[0] = liczu(x, a, b, c, 1)

    ## przynaleznosci predkosci

    uv = [0, 0, 0]
    x = v

    # zero
    a = -1
    b = 0
    c = 1
    uv[1] = liczu(x, a, b, c, 2)

    # w gore
    a = 0
    b = 1
    uv[2] = liczu(x, a, b, c, 3)

    # w dol
    b = -1
    c = 0
    uv[0] = liczu(x, a, b, c, 1)

    ## sterowanie
    # sterX = [55, 60, 65, 70, 80]; #DRON 40/2M
    # sterX = [55, 60, 65, 70, 80];
    sterX = [55, 60, 68, 70, 80]

    for i in range(len(uz)):
        for j in range(len(uv)):
            R[i][j] = uz[i] * uv[j]

    uy = [0, 0, 0, 0, 0]

    uy[0] = R[0][2]
    uy[1] = max(R[0][1], R[1][2])
    uy[2] = max([R[0][0], R[1][1], R[2][2]])
    uy[3] = max(R[1][0], R[2][1])
    uy[4] = R[2][0]

    num = 0
    for i in range(len(uy)):
        num = num + uy[i] * sterX[i]

    Sterowanie = num / sum(uy)
    return Sterowanie
예제 #2
0
def fuzzyX(ex, v):
    # regulator wysokosci

    # x - blad w danej osi
    # v - predkosc

    ## przynaleznosci blad wysokosci
    R = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
    uz = [0, 0, 0]
    x = ex

    # zero
    a = -20
    b = 0
    c = 20
    uz[1] = liczu(x, a, b, c, 2)

    # bardzo nisko
    a = 0
    b = 20
    uz[2] = liczu(x, a, b, c, 3)

    # bardzo wysoko
    b = -20
    c = 0
    uz[0] = liczu(x, a, b, c, 1)

    ## przynaleznosci predkosci

    uv = [0, 0, 0]
    x = v

    # zero
    a = -0.2
    b = 0
    c = 0.2
    uv[1] = liczu(x, a, b, c, 2)

    # w gore
    a = 0
    b = 0.2
    uv[2] = liczu(x, a, b, c, 3)

    # w dol
    b = -0.2
    c = 0
    uv[0] = liczu(x, a, b, c, 1)

    ## sterowanie
    sterX = [-10, -5, 0, 5, 10]

    for i in range(len(uz)):
        for j in range(len(uv)):
            R[i][j] = uz[i] * uv[j]

    uy = [0, 0, 0, 0, 0]

    uy[0] = R[0][2]
    uy[1] = max(R[0][1], R[1][2])
    uy[2] = max([R[0][0], R[1][1], R[2][2]])
    uy[3] = max(R[1][0], R[2][1])
    uy[4] = R[2][0]

    num = 0
    for i in range(len(uy)):
        num = num + uy[i] * sterX[i]

    Sterowanie = num / sum(uy)
    return Sterowanie
예제 #3
0
def fuzzyX(ex, v):
    # regulator wysokosci

    # x - blad w danej osi
    # v - predkosc

    ## przynaleznosci blad wysokosci
    R=[[0,0,0],[0,0,0],[0,0,0]]
    uz = [0, 0, 0];
    x = ex;

    # zero
    a = -20;
    b = 0;
    c = 20;
    uz[1] = liczu(x,a,b,c,2);

    # bardzo nisko
    a = 0;
    b = 20;
    uz[2] = liczu(x,a,b,c,3);

    # bardzo wysoko
    b = -20;
    c = 0;
    uz[0] = liczu(x,a,b,c,1);

    ## przynaleznosci predkosci

    uv = [0, 0, 0];
    x = v;

    # zero
    a = -0.2;
    b = 0;
    c = 0.2;
    uv[1] = liczu(x,a,b,c,2);

    # w gore
    a = 0;
    b = 0.2;
    uv[2] = liczu(x,a,b,c,3);

    # w dol
    b = -0.2;
    c = 0;
    uv[0] = liczu(x,a,b,c,1);

    ## sterowanie
    sterX = [-10, -5, 0, 5, 10];

    for i in range(len(uz)):
        for j in range(len(uv)):
            R[i][j] = uz[i] * uv[j];

    uy=[0,0,0,0,0]

    uy[0] = R[0][2];
    uy[1] = max(R[0][1], R[1][2]);
    uy[2] = max([R[0][0], R[1][1], R[2][2]]);
    uy[3] = max(R[1][0], R[2][1]);
    uy[4] = R[2][0];

    num = 0;
    for i in range(len(uy)):
        num = num + uy[i]* sterX[i];


    Sterowanie = num/ sum(uy);
    return Sterowanie