From e4d7f6e37d9b1ef2d4c6c64f167b89b09037c2dc Mon Sep 17 00:00:00 2001 From: Woj Date: Sun, 18 Jun 2023 22:47:28 +0200 Subject: [PATCH] wozek works autonomously and reacts to new orders --- ekran.py | 6 ++- main.py | 148 ++++++++++++++++++++++++++++++++++--------------------- 2 files changed, 97 insertions(+), 57 deletions(-) diff --git a/ekran.py b/ekran.py index 58ec201..34e463b 100644 --- a/ekran.py +++ b/ekran.py @@ -108,4 +108,8 @@ def dodaj_na_rampe(p1, p2, l1, l2): p1.update_position(plansza.a_pix, plansza.b_pix) p2.update_position(plansza.a_pix, plansza.b_pix) l1.update_position(plansza.a_pix, plansza.b_pix) - l2.update_position(plansza.a_pix, plansza.b_pix) \ No newline at end of file + l2.update_position(plansza.a_pix, plansza.b_pix) + +def dodaj_na_rampe_jedno(order): + lista_itemow.append(order) + order.update_position(plansza.a_pix, plansza.b_pix) \ No newline at end of file diff --git a/main.py b/main.py index b8a3a00..c1b6740 100644 --- a/main.py +++ b/main.py @@ -1,4 +1,5 @@ import sys +import random import joblib import pygame @@ -19,8 +20,10 @@ pygame.init() def main(): wozek = Wozek() pred_list = prediction.prediction_keys() - p1 = Paczka('duzy', 12, 'narzedzia', False, True, False, any, any, any, any, any, pred_list[3]) - p2 = Paczka('maly', 1, 'ogród', False, True, False, any, any, any, any, any, pred_list[1]) + p1 = Paczka('duzy', 12, 'narzedzia', False, True, False, + any, any, any, any, any, pred_list[3]) + p2 = Paczka('maly', 1, 'ogród', False, True, False, + any, any, any, any, any, pred_list[1]) l1 = Letter(pred_list[0]) l2 = Letter(pred_list[2]) ekran.dodaj_na_rampe(p2, l1, p1, l2) @@ -35,61 +38,18 @@ def main(): sys.exit(0) if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE: sys.exit(0) + if event.type == pygame.KEYDOWN: if event.key == pygame.K_SPACE: - - ## wozek jedzie po itemy - wiersz = ekran.sprawdz_ktory_wiersz(a_pix) - kolumna = ekran.sprawdz_ktora_kolumna(b_pix) - docelowy_stan = wyszukiwanie.Stan(wiersz * 70, kolumna * 70, 1) - - #wezel = wyszukiwanie.wyszukiwanie_bfs(wozek.obecnyStan, docelowy_stan, grid_points) - wezel = wyszukiwanie.wyszukiwanie_a_star(wozek.obecnyStan, docelowy_stan, grid_points) - sciezka = wyszukiwanie.znajdz_sciezke(wezel) - wozek.przemiesc_wozek_po_sciezce(sciezka) + while len(ekran.lista_itemow) > 0: + wozek_serves_orders(wozek, grid_points, drzewo) - ## sprawdzenie czy lista itemow nie jest pusta - if ekran.lista_itemow: - if grid_points.grid[(wiersz, kolumna)] is GridCellType.PLACE: #picks up item - if wozek.ln == 0: - wozek.picks_up_item() - wozek.dynamic_wozek_picture() - - przenoszony_item = wozek.storage[-1] - if (prediction.predict_one(przenoszony_item.img_path)=='package'): - ## wozek jedzie odlozyc paczke na regal - przenoszona_paczka = przenoszony_item - - array, reg = przenoszona_paczka.tablica_do_drzewa(przenoszona_paczka.kategoria) - - predictions = drzewo.predict([array]) - - if predictions == 0: - print('odklada na dolna polke!') - else: - print('odklada na gorna polke!') - - docelowy_stan = wyszukiwanie.Stan(reg.numerWiersza * 70, reg.numerKolumny * 70, 1) - wezel = wyszukiwanie.wyszukiwanie_a_star(wozek.obecnyStan, docelowy_stan, grid_points) - sciezka = wyszukiwanie.znajdz_sciezke(wezel) - wozek.przemiesc_wozek_po_sciezce(sciezka) - - if wozek.ln != 0: # drops package - wozek.drops_package(przenoszona_paczka, reg, predictions) - wozek.dynamic_wozek_picture() - else: - #list przenoszony do skrzynki - docelowy_stan = wyszukiwanie.Stan(plansza.c_pix, plansza.d_pix, 1) - wezel = wyszukiwanie.wyszukiwanie_a_star(wozek.obecnyStan, docelowy_stan, grid_points) - sciezka = wyszukiwanie.znajdz_sciezke(wezel) - wozek.przemiesc_wozek_po_sciezce(sciezka) - - if wozek.ln != 0: # drops letter - wozek.drops_letter(przenoszony_item) - wozek.dynamic_wozek_picture() + if event.key == pygame.K_n: + add_another_order(ekran, pred_list) + wozek_serves_orders(wozek, grid_points, drzewo) - if event.type == pygame.MOUSEBUTTONDOWN: + if event.type == pygame.MOUSEBUTTONDOWN: # lewy przycisk myszy if event.button == 1: x = pygame.mouse.get_pos()[0] @@ -97,15 +57,91 @@ def main(): wiersz = ekran.sprawdz_ktory_wiersz(x) kolumna = ekran.sprawdz_ktora_kolumna(y) - docelowy_stan = wyszukiwanie.Stan(wiersz * 70, kolumna * 70, 1) - - #wezel = wyszukiwanie.wyszukiwanie_bfs(wozek.obecnyStan, docelowy_stan, grid_points) - wezel = wyszukiwanie.wyszukiwanie_a_star(wozek.obecnyStan, docelowy_stan, grid_points) + docelowy_stan = wyszukiwanie.Stan( + wiersz * 70, kolumna * 70, 1) + + # wezel = wyszukiwanie.wyszukiwanie_bfs(wozek.obecnyStan, docelowy_stan, grid_points) + wezel = wyszukiwanie.wyszukiwanie_a_star( + wozek.obecnyStan, docelowy_stan, grid_points) sciezka = wyszukiwanie.znajdz_sciezke(wezel) wozek.przemiesc_wozek_po_sciezce(sciezka) ekran.odswiez_ekran(wozek) + + +def wozek_serves_orders(wozek, grid_points, drzewo): + # wozek jedzie po itemy + wiersz = ekran.sprawdz_ktory_wiersz(a_pix) + kolumna = ekran.sprawdz_ktora_kolumna(b_pix) + docelowy_stan = wyszukiwanie.Stan(wiersz * 70, kolumna * 70, 1) + + # wezel = wyszukiwanie.wyszukiwanie_bfs(wozek.obecnyStan, docelowy_stan, grid_points) + wezel = wyszukiwanie.wyszukiwanie_a_star( + wozek.obecnyStan, docelowy_stan, grid_points) + sciezka = wyszukiwanie.znajdz_sciezke(wezel) + wozek.przemiesc_wozek_po_sciezce(sciezka) + + # sprawdzenie czy lista itemow nie jest pusta + if ekran.lista_itemow: + if grid_points.grid[(wiersz, kolumna)] is GridCellType.PLACE: # picks up item + if wozek.ln == 0: + wozek.picks_up_item() + wozek.dynamic_wozek_picture() + + przenoszony_item = wozek.storage[-1] + if (prediction.predict_one(przenoszony_item.img_path) == 'package'): + # wozek jedzie odlozyc paczke na regal + przenoszona_paczka = przenoszony_item + + array, reg = przenoszona_paczka.tablica_do_drzewa( + przenoszona_paczka.kategoria) + + predictions = drzewo.predict([array]) + + if predictions == 0: + print('odklada na dolna polke!') + else: + print('odklada na gorna polke!') + + docelowy_stan = wyszukiwanie.Stan( + reg.numerWiersza * 70, reg.numerKolumny * 70, 1) + wezel = wyszukiwanie.wyszukiwanie_a_star( + wozek.obecnyStan, docelowy_stan, grid_points) + sciezka = wyszukiwanie.znajdz_sciezke(wezel) + wozek.przemiesc_wozek_po_sciezce(sciezka) + + if wozek.ln != 0: # drops package + wozek.drops_package( + przenoszona_paczka, reg, predictions) + wozek.dynamic_wozek_picture() + else: + # list przenoszony do skrzynki + docelowy_stan = wyszukiwanie.Stan( + plansza.c_pix, plansza.d_pix, 1) + wezel = wyszukiwanie.wyszukiwanie_a_star( + wozek.obecnyStan, docelowy_stan, grid_points) + sciezka = wyszukiwanie.znajdz_sciezke(wezel) + wozek.przemiesc_wozek_po_sciezce(sciezka) + + if wozek.ln != 0: # drops letter + wozek.drops_letter(przenoszony_item) + wozek.dynamic_wozek_picture() + +def add_another_order(ekran, pred_list): + if random.random() < 0.5: + if random.random() < 0.5: + order = Paczka('duzy', 12, 'narzedzia', False, True, False, + any, any, any, any, any, pred_list[3]) + else: + order = Paczka('maly', 1, 'ogród', False, True, False, + any, any, any, any, any, pred_list[1]) + else: + order = Letter(pred_list[2]) + + ekran.dodaj_na_rampe_jedno(order) + + if __name__ == "__main__": main()