fix random moving tractor

This commit is contained in:
Dominik Cupał 2021-06-02 14:06:02 +02:00
parent 4c3f216c03
commit 8872992b6b
3 changed files with 28 additions and 13 deletions

View File

@ -2,7 +2,7 @@
### 1. Requirements ### 1. Requirements
python version 3.9 or higher python version 3.9 or higher
```bash ```bash
python3 -v python3 --version
``` ```
### 2. Create virtual environments and install libs ### 2. Create virtual environments and install libs
```bash ```bash
@ -35,14 +35,14 @@ VERTICAL_NUM_OF_FIELDS = 3
HORIZONTAL_NUM_OF_FIELDS = 3 HORIZONTAL_NUM_OF_FIELDS = 3
``` ```
\ \
####4.1 Save generated map: #### 4.1 Save generated map:
```bash ```bash
python main.py --save-map python main.py --save-map
``` ```
Map will be saved in maps directory. Map will be saved in maps directory.
Generated filename: map-uuid Generated filename: map-uuid
####4.2 Load map #### 4.2 Load map
```bash ```bash
python main.py --load-map=name_of_map python main.py --load-map=name_of_map
``` ```

View File

@ -28,9 +28,9 @@ class NeuralNetwork:
self.input_shape = (self.img_width, self.img_height, self.img_num_channels) self.input_shape = (self.img_width, self.img_height, self.img_num_channels)
# labels # labels
self.labels = ["cabbage", "carrot", "corn", "lettuce", "paprika", "potato", "sunflower" , "tomato"] self.labels = ["cabbage", "carrot", "corn", "lettuce", "paprika", "potato", "sunflower", "tomato"]
def init_model(self): def init_model(self) -> None:
if not self.model_dir_is_empty(): if not self.model_dir_is_empty():
# Load the model # Load the model
self.model = load_model( self.model = load_model(
@ -60,9 +60,9 @@ class NeuralNetwork:
shuffle=False) shuffle=False)
# Display a model summary # Display a model summary
#self.model.summary() # self.model.summary()
def load_images(self): def load_images(self) -> None:
# Create a generator # Create a generator
self.train_datagen = ImageDataGenerator( self.train_datagen = ImageDataGenerator(
rescale=1. / 255 rescale=1. / 255

View File

@ -210,7 +210,7 @@ class Tractor(BaseField):
time.sleep(TIME_OF_MOVING) time.sleep(TIME_OF_MOVING)
is_running.clear() is_running.clear()
def move_or_rotate(self, movement: str): def move_or_rotate(self, movement: str) -> None:
print(f"Move {movement}") print(f"Move {movement}")
if movement == M_GO_FORWARD: if movement == M_GO_FORWARD:
self.move() self.move()
@ -267,14 +267,25 @@ class Tractor(BaseField):
board.get_fields()[x][y] = obj() board.get_fields()[x][y] = obj()
return obj() return obj()
def harvest_checked_fields_handler(self, is_running: threading.Event): def harvest_checked_fields_handler(self, is_running: threading.Event) -> None:
thread = threading.Thread(target=self.harvest_checked_fields, args=(is_running,), daemon=True) thread = threading.Thread(target=self.harvest_checked_fields, args=(is_running,), daemon=True)
thread.start() thread.start()
def harvest_checked_fields(self, is_running: threading.Event): def go_forward_is_legal_move(self) -> bool:
moves = [M_GO_FORWARD, M_ROTATE_LEFT, M_ROTATE_RIGHT] flag = False
distribution=[0.6,0.2,0.2] if (self.__direction == D_EAST and self.__pos_y - self.__move >= 0) or \
(self.__direction == D_NORTH and self.__pos_y + self.__move + FIELD_SIZE <= HEIGHT) or \
(self.__direction == D_WEST and self.__pos_x - self.__move >= 0) or \
(self.__direction == D_SOUTH and self.__pos_x + self.__move + FIELD_SIZE <= WIDTH):
flag = True
return flag
def harvest_checked_fields(self, is_running: threading.Event) -> None:
while True: while True:
moves = [M_GO_FORWARD, M_ROTATE_LEFT, M_ROTATE_RIGHT]
distribution = [0.6, 0.2, 0.2]
field = self.get_field_from_board() field = self.get_field_from_board()
self.__neural_network = NeuralNetwork() self.__neural_network = NeuralNetwork()
@ -283,8 +294,12 @@ class Tractor(BaseField):
if prediction.capitalize() in CROPS: if prediction.capitalize() in CROPS:
self.harvest() self.harvest()
break break
chosen_move = random.choices(moves,distribution)
if not self.go_forward_is_legal_move():
moves = moves[1:]
distribution = distribution[1:]
chosen_move = random.choices(moves, distribution)
self.move_or_rotate(chosen_move[0]) self.move_or_rotate(chosen_move[0])
time.sleep(1) time.sleep(1)