Skip to content
Snippets Groups Projects
Commit 9ed8f6aa authored by Midras Lappe's avatar Midras Lappe
Browse files

Commented on client from Midras Lappe

Changed File Name from ClienV7 to Agent_Midras_Lappe
parent 1f85cb44
No related branches found
No related tags found
No related merge requests found
# -*- coding: utf-8 -*-
"""
Created on Tue Jan 12 17:17:49 2021
@author: theob
"""
import asyncio
import Gym_new
import time
import nest_asyncio
import numpy as np
import random
async def main():
# Erstellen einer neuen Gym und Verbinden mit dem Server
env = Gym_new.Gym()
await env.connect_websocket()
step_width = 0.02
# Zufällige Anzahl an Stepss machen um zufällige Zeit in Simulation
# verstreichen zu lassen anschließend reset der Simulation
command = ""
for i in range(random.randrange(0, 50)):
observationO, rewardO, doneO, infoO = await env.step(command, 0.2)
observation, reward, done, info = await env.reset(step_width)
# Setzen der initialwerte und erstellen von Benötigten Arrays
sensorsO = np.array(observationO[2])
sensors_dir = []
for i in range(len(sensorsO)):
x = (-np.sin(-i*2*np.pi/len(sensorsO)))
y = (np.cos(-i*2*np.pi/len(sensorsO)))
sensors_dir.append([x, y])
sensors_dir = np.array(sensors_dir)
sensors_dir_len = sensors_dir*sensorsO[:, np.newaxis]
sollwinkel = 0
sollgeschwindigkeit = 0
sensors_old = np.zeros([len(sensorsO), 5])
speed_old = np.zeros([1, 5])
sensors_old[:, 0] = sensorsO
sensors_old = np.roll(sensors_old, 1)
zubringer = True
abstand_rechts = 2
aufgefahren = False
# Erstellen eines Log arrays und Zeitloggs
# zur Dokumentation des Sensorveränderung
change_speed_log = np.array([[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0]])
timeg = 0
# Zählvariable Falls bestimmte Anzahl an Simulationen
# durchlaufen werden soll
i = 1
durchlaeufe = 100
while(True):
# Senden des Stepps an den Server
observation, reward, done, info = await env.step(command, step_width)
# Zurücksetzen von Command für den nächsten Step
command = ""
# Speichern der Zurückgegebenen Werte
speed = observation[0]
steering_angle = observation[1]
sensors = np.array(observation[2])
# Verarbeitung der Zurückgegebenen Werte
sensors_old = np.roll(sensors_old, 1)
sensors_old[:, 0] = sensors
speed_old = np.roll(speed_old, 1)
speed_old[:, 0] = speed
speed_mean = np.mean(speed_old)
sensor_change_speed = ((sensors_old[:, 4]-sensors_old[:, 0])
/ (5*step_width))
sensors_dir_len = sensors_dir*sensors[:, np.newaxis]
sensors_dir_speed = sensors_dir*sensor_change_speed[:, np.newaxis]
sensors_dir_speed[:, 0] -= speed_mean/3.6
dir_sum = np.sum(sensors_dir_len, axis=0)
# Speichern der Änderungsgeschwindigkeit der Sensoren im Log
change_speed_log = np.append(change_speed_log, ([np.append(
timeg, sensor_change_speed)]), axis=0)
timeg = timeg+step_width
# Steuerung für die Auffahrt
if(zubringer):
sollgeschwindigkeit = 16*(sensors[0]-2.3)
try:
sollwinkel = 3.7*((dir_sum[0])/13+(
(sensors[1]+sensors[5])-(sensors[3]+sensors[7]))/13)*(
speed/abs(speed))
except Exception:
sollwinkel = 3.7*((dir_sum[0])/13+((sensors[1]+sensors[5])-(
sensors[3]+sensors[7]))/13)
# Erkennen ob der Zubringer verlassen wurde
if((sensor_change_speed[7] < -13) & (reward[0] < 247)):
zubringer = False
# Steuerung für den Beschleunigungsstreifen und die Autobahn
if(not zubringer):
weight_s1_s3 = 1
weight_s2 = 1
sollgeschwindigkeit = 8.5*(sensors[0]-2.3)
# Abstand Rechts erhöhen um auf zu fahren wenn frei
if((not aufgefahren) & (sensors[7] > 3.5) & (sensors[6] > 3) &
(sensors[5] > 2) & (abstand_rechts < 6)):
abstand_rechts += 0.1
# Steuerung der geschwindigkeit auf dem Beschleunigungsstreifen
elif(not aufgefahren):
sollgeschwindigkeit = 80 + (sensors[7]-sensors[5])*5
# Abstand rechts auf festen Wert setzen wenn Aufgefahren wurde
if((sensors[2] > 5) & (abstand_rechts > 5)):
abstand_rechts = 5.5
aufgefahren = True
# Abstand rechts und Ausrichtung am Ende des
# Beschleunigungsstreifens anpasen
if(aufgefahren & (abs(sensor_change_speed[1]) > 8)):
abstand_rechts = 1
weight_s1_s3 = 0
weight_s2 = 0
# Sollwinkel Berechnen wenn speed == 0 ==> Exception
# Speed wird dann nicht berücksichtigt
try:
sollwinkel = 3.3*(weight_s1_s3*(sensors[1]-sensors[3])/3 +
weight_s2*(sensors[2]-abstand_rechts)/3)*(
speed/abs(speed))
except Exception:
sollwinkel = 3.3*(weight_s1_s3*(sensors[1]-sensors[3])/3 +
weight_s2*(sensors[2]-abstand_rechts)/3)
# Hinzufügen von Commands in abhängigkeit der errechneten Sollwerte
if(sollwinkel > steering_angle):
command += ("steer_right")
elif(sollwinkel < steering_angle):
command += ("steer_left")
if(sollgeschwindigkeit > speed):
command += ("accelerate")
elif((speed > 0) & (sollgeschwindigkeit < speed)):
command += ("brake")
elif(sollgeschwindigkeit < speed):
command += ("reverse")
# Warten damit der Server die gesendeten Daten verarbeiten kann
# ermöglicht außerdem beobachten des Agenten
# Server könnte auch schneller
time.sleep(0.05)
# Erkennen ob die Simulation abgebrochen werden muss oder
# das Ziel erreicht wurde
if(done or (reward[1] > 50) or (reward[0] < 170)):
# Einkommentieren um sich den Verlauf des Sensor Change speed von
# Sensor 1 und 7 nach der Simulation an zu schauen.
# Dabei sollte i auf 1 gesetzt werden
# plt.plot(change_speed_log[:,0],change_speed_log[:,[2,8]])
# plt.legend(['Sensor 1','Sensor 7'])
# plt.xlabel('t in Sekunden')
# plt.ylabel('ds/dt')
# plt.xlim(0.01,12)
# plt.show()
# Einkommentieren um die Ergenisse der Simulation zu speichern
# f=open('Client_Test_Done.csv','ab')
# np.savetxt(f,[np.append(done,reward[0])])
# print(np.append(done,reward[0]))
# f.close()
# Zurücksetzen der Simulation
aufgefahren = False
zubringer = True
observation, reward, done, info = await env.reset(step_width)
# Abbruch wenn die gewünschte Anzahl an durchläufen erreicht wurde
if i == durchlaeufe:
break
i += 1
# Starten der Anwendung wenn das Skript als Hauptprogramm ausgeführt wird
# jedoch nicht beim Import
if __name__ == "__main__":
nest_asyncio.apply()
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
# -*- coding: utf-8 -*-
"""
Created on Tue Jan 12 17:17:49 2021
@author: theob
"""
import asyncio
import Gym_new
import time
import nest_asyncio
import numpy as np
import random
import math
import matplotlib.pyplot as plt
async def main():
env = Gym_new.Gym()
await env.connect_websocket()
command = ""
#observation, reward, done, info = await env.reset(0.017)
# observation, reward, done, info = await env.step("accelerate,steer_right", 0.17)
# #actionen sind accelerate, steer_left, steer_right, brake, reverse
# print(observation)
# print(reward)
# print(done)
for i in range(random.randrange(0, 50)):
#print(i)
observationO, rewardO, doneO, infoO = await env.step(command, 0.2)
step_width = 0.02
#observationO, rewardO, doneO, infoO = await env.step(command, 0.02)
observation, reward, done, info = await env.reset(step_width)
speedO = observationO[0]
steering_angleO = observationO[1]
sensorsO = np.array(observationO[2])
sensors_dir = []
for i in range(len(sensorsO)):
x = (-np.sin(-i*2*np.pi/len(sensorsO)))
y = (np.cos(-i*2*np.pi/len(sensorsO)))
sensors_dir.append([x,y])
sensors_dir =np.array(sensors_dir)
sensors_dir_len=sensors_dir*sensorsO[:,np.newaxis]
#print(sensors_dir_len)
sollwinkel=0
sollgeschwindigkeit = 0
sensors_old =np.zeros([len(sensorsO), 5])
speed_old = np.zeros([1,5])
#print(sensors_old)
sensors_old[:,0]=sensorsO
sensors_old = np.roll(sensors_old,1)
#print(sensors_old)
zubringer = True
abstand_rechts = 2
aufgefahren = False
change_speed_log = np.array([[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0]])
timeg = 0;
i=1
while(True):
observation, reward, done, info = await env.step(command, step_width)
command = ""
speed = observation[0]
steering_angle = observation[1]
sensors = np.array(observation[2])
sensors_old = np.roll(sensors_old,1)
sensors_old[:,0]=sensors
speed_old = np.roll(speed_old,1)
speed_old[:,0]=speed
speed_mean = np.mean(speed_old)
#print("Durchschnittsgeschwindigkeit"+str(speed_mean))
sensor_change_speed = (sensors_old[:,4]-sensors_old[:,0])/(5*step_width)
change_speed_log = np.append(change_speed_log,([np.append(timeg,sensor_change_speed)]),axis = 0)
timeg = timeg+step_width
#print("Change Speed" + str(sensor_change_speed))
#print(sensors_old)
sensors_sum = np.sum(np.absolute(sensors))
# print("Summe der Sensoren"+str(sensors_sum))
sensors_dir_len=sensors_dir*sensors[:,np.newaxis]
sensors_dir_speed = sensors_dir*sensor_change_speed[:,np.newaxis]
sensors_dir_speed[:,0]-=speed_mean/3.6
#print("Sensors Speed mit x Y"+str(sensors_dir_speed))
#print(sensors_dir_len)
dir_sum = np.sum(sensors_dir_len,axis=0)
#print(dir_sum)
#aufgefahren = False
#print("Sensors Sum = "+str(sensors_sum))
if(zubringer): #Steuerung für die Auffahrt (sensors_sum < 90) &
#sollgeschwindigkeit = 90*(2.2*sensors[0]-sensors[4])/13 #1.9 1.7
#sollgeschwindigkeit = 90*(2.2*sensors[0]-5)/13
sollgeschwindigkeit = 16*(sensors[0]-2.3)
try:
sollwinkel = 3.7*((dir_sum[0])/13+((sensors[1]+sensors[5])-(sensors[3]+sensors[7]))/13)*(speed/abs(speed))#3.3 3.7
except Exception as e:
sollwinkel = 3.7*((dir_sum[0])/13+((sensors[1]+sensors[5])-(sensors[3]+sensors[7]))/13)
#print("Sollwinkel auffahrt "+str(sollwinkel))
#print('Sensor Change speed'+ str( sensor_change_speed[7]))
#if((sensors_sum>=90)):
if((sensor_change_speed[7]<-13)&(reward[0]<247)): #&(sensors_sum>=90)
zubringer = False
if(not zubringer):
weight_s1_s3 = 1
weight_s2 = 1
#if()
#sollgeschwindigkeit = (50*(2.2*sensors[0]-5)/13)
sollgeschwindigkeit = 8.5*(sensors[0]-2.3)
if((not aufgefahren)&(sensors[7]>3.5)&(sensors[6]>3)&(sensors[5]>2)&(abstand_rechts<6)):
abstand_rechts += 0.1#0.06
elif(not aufgefahren):
#sollgeschwindigkeit=130*(1-np.exp(-sensors[0]/5))
sollgeschwindigkeit = 80 + (sensors[7]-sensors[5])*5
if((sensors[2]>5)&(abstand_rechts>5)):#sensor[2]>5.5 #not aufgefahren & (abs(sensor_change_speed[1])<10)
abstand_rechts = 5.5
aufgefahren = True
#print("Sensor 3 change_spped"+str(abs(sensor_change_speed[1])))
if(aufgefahren&(abs(sensor_change_speed[1])>8)):#&(abstand_rechts>4.5)): #&
abstand_rechts = 1#1.5 #0.3*sensor_change_speed[1]/60
weight_s1_s3 = 0
weight_s2 = 0
#time.sleep(1)
#time.sleep(0.5)
#sollwinkel = 1.3*(dir_sum[0]+16)/13
#print("Abstand rechts soll "+str(abstand_rechts))
try:
sollwinkel = 3.3*(weight_s1_s3*(sensors[1]-sensors[3])/3+weight_s2*(sensors[2]-abstand_rechts)/3)*(speed/abs(speed))#(sensors[7]-sensors[5])/13)
except Exception as e:
sollwinkel = 3.3*(weight_s1_s3*(sensors[1]-sensors[3])/3+weight_s2*(sensors[2]-abstand_rechts)/3)
# print("Sensor 1 "+str(sensors[1]))
# print("Sensor 3 "+str(sensors[3]))
#print("Sensor 2 "+str(sensors[2]))
#print("Sensor 7 "+str(sensors[7]))
#print("Sollwinkel"+str(sollwinkel))
if(sollwinkel>steering_angle):
# print("steer_right")
command +=("steer_right")
elif(sollwinkel<steering_angle):
# print("steer_left")
command +=("steer_left")
#print("Sollgeschwindigkeit"+str(sollgeschwindigkeit))
if(sollgeschwindigkeit>speed):
command += ("accelerate")
elif((speed>0) & (sollgeschwindigkeit<speed)):
command +=("brake")
elif(sollgeschwindigkeit<speed):
command +=("reverse")
if(sensors_sum==0):
command +=("reset")
# if reward[1] < 0:
# env.reset(0.01)
#if speed < 50 :
# command += ("accelerate")
# if(sensorsO[1]-sensors[1]>0 ):
# command += (",steer_left" )
# elif(sensorsO[7]-sensors[7]>0):
# command +=("steer_right")
# elif ( (sensors[1] + 2 < sensors[7])&(abs(steering_angle)<3) ): #
# command += (",steer_left" )
# elif ( (sensors[1] > sensors[7]+2)&(abs(steering_angle)<3)): #(sensors[1] > sensors[7]+1)&
# command +=("steer_right")
# else:
# if ((sensors[4]-sensorsO[4]>0) & (steering_angle != 0) & (sensors[6] > 2.5) & (sensors[0]>10)):
# command +=("steer_left")
# elif ((sensors[5]-sensorsO[5]>0) & (steering_angle != 0) & (sensors[2] > 2.5)& (sensors[0]>10)):
# command +=("steer_right")
#observation, reward, done, info = await env.reset(0.017)
observationO, rewardO, doneO, infoO = observation, reward, done, info
#print(observation)
#print(reward)
#print(done)
time.sleep(0.05)
if(done or (reward[1]>50)or (reward[0]<170)):
# print(change_speed_log)
# print(change_speed_log[:,0])
# print(change_speed_log[:,1])
# for i in range(1,8):
# plt.plot(change_speed_log[:,0],change_speed_log[:,i]) # plotting by columns
# plt.plot(change_speed_log[:,0],change_speed_log[:,[2,8]])
# plt.legend(['Sensor 1','Sensor 7'])
# plt.xlabel('t in Sekunden')
# plt.ylabel('ds/dt')
# plt.xlim(0.01,12)
# plt.show()
# f=open('ClientV4Changespeed.csv','ab')
# np.savetxt(f,change_speed_log)
# f.close()
#break
# f=open('ClientV7TestDone_all_maps.csv','ab')
# np.savetxt(f,[np.append(done,reward[0])])
# print(np.append(done,reward[0]))
# f.close()
aufgefahren = False
zubringer = True
observation, reward, done, info = await env.reset(step_width)
observation, reward, done, info = await env.reset(step_width)
if i == 100:
break
i+=1
if __name__ == "__main__":
nest_asyncio.apply()
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment