diff --git a/gipps/gipps.py b/gipps/gipps.py new file mode 100644 index 0000000..0a53a42 --- /dev/null +++ b/gipps/gipps.py @@ -0,0 +1,122 @@ +import numpy as np +import matplotlib.pyplot as plt +import time +from colour import Color + +# =========== +t0 = 0 +tf = 30 +dt = 1 +t = t0 +# =========== +nbv = 2 + +"""# =========== VARIABBLES +Xn(t) # position au temps t +Vn(t) # vitesse au temps t +An(t+Tr) # accel au temps t + Tr +ln # ? +k # ? +m # ? +""" + +# =========== CONSTANTES +An = 1.7 # accel max sampled from a normal distribution. N(1.7,0.3²) m/s² +Bn = -2 * An # frein max equated to - 2An +Sn = 6.5 # taille de la voiture plus marge sampled from a normal distribution. N(6.5,0.3²) m +Vd = 20.0 # vitesse désirée sampled from a normal distribution. N(20.0,3.2²) m/sec +# X*n # position fin de freinage (calculable) +Tr = 2/3 + (2/3)/2 # temps de réaction + sûreté (= tau + θ = 2/3 + tau/2) +# B supposé égal à Bn-1 (si pas égal alors amplifications ??) + + +def rainbow_gradient(num_colors): + colors = [] + base_color = Color("violet") + gradient = list(base_color.range_to(Color("red"), num_colors)) + for color in gradient: + hex_code = color.hex_l + colors.append(hex_code) + return colors +colors = rainbow_gradient(nbv) + +def px(xx): # Avance au cours du temps + xx += 1 + return xx + +def vitesseatt(t, yy): # Vitesse qu'il peut réellement atteindre d'un point de vue dynamique + + + + Vnt = yy[-1] + + value = Vnt + 2.5 * An * Tr * ( 1 - (Vnt/Vd) ) * np.sqrt( ( 0.025 + (Vnt/Vd) )) + print('value: ', value) + + yy[0] = value + newyy = yy + print('newyy: ', newyy) + return newyy + + +def vitesseadop(t, yy): # Vitesse qu'il est possible d'adopter en connaissant les contraintes de sécurité liées à la présence du véhicule leader + t = t + Tr + pass + +def vitessereelle(t, yyold): # Vitesse du véhicule + print(len(yy)) + t = t + Tr + if (t>= 0) and (t<=10): + yy[-1] = 0 # Arrêt du leader + elif (t>= 15) and (t<=20): + + else: + yy[-1] = Vd # Leader avance normalement + + +# a = np.where(t <= 10, (Umax - Umin) / 10, - (Umax - Umin) / 10) +# vt = np.where(t <= 10, Umin + a * t, Umax + 2 * a * (t - 10)) + + + + + vatt = vitesseatt(t, yyold) + vadop = vitesseadop(t, yyold) + # return min(vatt, vadop) + return vatt + + +xxbase = np.linspace(-nbv, -1, nbv) +yybase = np.linspace(0, 0, nbv) + +xxold = xxbase.copy() +yyold = yybase.copy() + +while(t= Wm)* PHI # retourne la vitesse du véhicule @@ -39,10 +51,10 @@ while(t= 50) and (t<=60) : + dist[arr] = 0 newdist = np.insert(dist, len(dist), inter) return newdist @@ -75,20 +60,13 @@ while(t < tf): plt.polar(theta, r, alpha=0) dst = distances(xxold) - statusc = status(dst) - print(dst) - print(statusc) - vt = phi(dst) xx = position(xxold, vt) plt.scatter(xx/10 * np.pi, y, c=colors) - # for i in range(len(xx)-1): - # plt.plot([xx[i]/10 * np.pi, xx[i+1]/10 * np.pi], [y[i], y[i+1]], color=statusc[i]) - - plt.title('Vitesse maximale : ' + str(U) + ' m/s\ndistance minimale entre deux voitures : ' + str(Wm) + ' m\nnombre de voitures : ' + str(nbv)) + plt.title('Vitesse maximale : ' + str(U) + ' m/s\ndistance minimale entre deux voitures : ' + str(Wm) + ' m\nnombre de voitures : ' + str(nbv) + '\n temps : ' + str(t)+ '\n la voiture qui va freiner est la ' + str(arr) + ' ème (à 50s)') plt.draw() plt.pause(0.00001) t += dt - xxold = xx.copy() + xxold = xx.copy() \ No newline at end of file diff --git a/test/phi(ww).py b/test/phi(ww).py index 63b52ba..b3a258e 100644 --- a/test/phi(ww).py +++ b/test/phi(ww).py @@ -14,5 +14,6 @@ plt.figure(figsize=[16,9]) plt.xlabel('distance w en m') plt.ylabel('vitesse en m.s-¹') plt.plot(ww, phi(ww)) -plt.savefig('phi(ww).png', dpi=300) -plt.show() \ No newline at end of file +plt.savefig('test/phi(www).png') +plt.draw() +plt.pause(4) \ No newline at end of file