we have a track / ready to ML

This commit is contained in:
2019-10-11 16:02:55 +02:00
parent 88df39584f
commit 06c54f50fa
2 changed files with 72 additions and 27 deletions

BIN
car25.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

97
main.py
View File

@@ -7,12 +7,15 @@ from trigo import angle_to_vector, get_line_feats, segments_intersection, distan
FLAGS= HWSURFACE | DOUBLEBUF #| FULLSCREEN FLAGS= HWSURFACE | DOUBLEBUF #| FULLSCREEN
GX = 800 GX = 1000
GY = 800 GY = 1000
CELL_COLOR = (80,80,80) CELL_COLOR = (80,80,80)
CAR_SIZE=50 CAR_SIZE=25
VISION_LENGTH = 50
VISION_SPAN = 25 # degrees
THROTTLE_POWER = 3
pygame.init() pygame.init()
IMG = pygame.image.load("car50.png")#.convert() IMG = pygame.image.load("car25.png")#.convert()
@@ -29,12 +32,12 @@ class Car(pygame.sprite.Sprite):
self.image = self.original_image self.image = self.original_image
self.rect = self.image.get_rect() self.rect = self.image.get_rect()
self.rect.center = (GX / 2, GY / 2) self.rect.center = (75, GY -50)
self.speed = 5 self.speed = 5
self.heading = 0 self.heading = 0
self.heading_change = 0 self.heading_change = 0
self.vision_length = 200 # line liength self.vision_length = VISION_LENGTH # line liength
self.vision_span = 22 # degrees self.vision_span = VISION_SPAN # degrees
self.draw_sensors = True self.draw_sensors = True
# lets add 3 sensors as a start # lets add 3 sensors as a start
@@ -51,6 +54,9 @@ class Car(pygame.sprite.Sprite):
self.sensors = [self.left_sensor, self.center_sensor, self.right_sensor] self.sensors = [self.left_sensor, self.center_sensor, self.right_sensor]
self.probes = [self.vision_length] *3 self.probes = [self.vision_length] *3
self.heading_change = 0
self.throttle = 0
def update_sensors(self): def update_sensors(self):
center = self.rect.center center = self.rect.center
@@ -72,7 +78,6 @@ class Car(pygame.sprite.Sprite):
def update(self): def update(self):
# rotate # rotate
old_center = self.rect.center old_center = self.rect.center
@@ -81,8 +86,17 @@ class Car(pygame.sprite.Sprite):
self.rect.center = old_center self.rect.center = old_center
self.update_position() self.update_position()
self.heading += self.heading_change if self.speed :
self.heading += self.heading_change / self.speed
self.heading = self.heading % 360 self.heading = self.heading % 360
if self.throttle :
self.speed += THROTTLE_POWER
else :
self.speed -= THROTTLE_POWER
self.speed = max(0, self.speed)
super().update() super().update()
@@ -113,6 +127,7 @@ class Car(pygame.sprite.Sprite):
screen = pygame.display.set_mode((GX, GY), FLAGS) screen = pygame.display.set_mode((GX, GY), FLAGS)
screen.set_alpha(None) screen.set_alpha(None)
@@ -121,9 +136,9 @@ all_cars = pygame.sprite.Group()
# car.heading = 0 # car.heading = 0
# all_cars.add(car) # all_cars.add(car)
car2 = Car() car2 = Car()
car2.heading = 270 car2.heading = 0
car2.heading_change = 3 car2.heading_change = 30
car2.speed = 5 car2.speed = 25
all_cars.add(car2) all_cars.add(car2)
ip = segments_intersection(car2.center_sensor, car2.left_sensor) ip = segments_intersection(car2.center_sensor, car2.left_sensor)
@@ -141,23 +156,53 @@ ip = segments_intersection(car2.center_sensor, car2.left_sensor)
# car.speed = int(random.random()*6) # car.speed = int(random.random()*6)
# all_cars.add(car) # all_cars.add(car)
lines = [
[
(
int(random.random()*GX),
int(random.random()*GY)
),(
int(random.random()*GX),
int(random.random()*GY)
)
]
for x in range(10)
]
# lines = [ # lines = [
# [(int(GX/2)+100, int(GY/2+225)), (int(GX/2)+100, int(GY/2-225))] # [
# (
# int(random.random()*GX),
# int(random.random()*GY)
# ),(
# int(random.random()*GX),
# int(random.random()*GY)
# )
# ]
# for x in range(10)
# ] # ]
path = [
(25, int(GY-25)),
(int(GX/2), int(GY-25)),
(int(GX/2 + 75), int(GY-150)),
(int(GX/2 + 150), int(GY-150)),
(int(GX -75), int(GY/2)),
(int(GX/2), int(GY/2 - 75)),
(int(GX/2), int(GY/2 - 150)),
(int(GX -50), int( GY/4 )),
(int(3*GX/4 - 50), int(50)),
(int(50), int(50)),
(int(100), int(GY/2)),
(25, int(GY-25)),
]
path2 = [
(100, int(GY-85)),
(int(GX/2 - 50 ), int(GY-85)),
(int(GX/2 + 50), int(GY-210)),
(int(GX/2 + 110), int(GY-210)),
(int(GX - 170), int(GY/2 + 30)),
(int(GX/2 - 60 ), int(GY/2 - 20)),
(int(GX/2 - 60), int(GY/2 - 200)),
(int(GX -170), int( GY/4 -20)),
(int(3*GX/4 - 100), int(120)),
(int(120), int(120)),
(int(175), int(GY/2)),
(100, int(GY-85)),
]
lines = [[path[i], path[i+1]] for i in range(len(path)-1)]
lines2 = [[path2[i], path2[i+1]] for i in range(len(path2)-1)]
lines = lines + lines2
print(lines) print(lines)