conv stopped flag

This commit is contained in:
Kseninia Mikhaylova 2024-12-12 12:56:46 +03:00
parent c92b603175
commit d12288edb3
1 changed files with 29 additions and 17 deletions

View File

@ -1,6 +1,7 @@
import pybullet as p import pybullet as p
import time import time
import threading import threading
from logger import logger
class ConveyorBelt: class ConveyorBelt:
@ -8,15 +9,19 @@ class ConveyorBelt:
self.conveyor_size = size self.conveyor_size = size
self.conveyor_position = position self.conveyor_position = position
self.conveyor_id = self.create_conveyor(size, position) self.conveyor_id = self.create_conveyor(size, position)
self.conveyor_stopped = False
self.box_size = box_size self.box_size = box_size
self.box_spacing = box_spacing self.box_spacing = box_spacing
self.box_speed = box_speed self.box_speed = box_speed
self.boxes = [] self.boxes = []
self.create_boxes() self.create_boxes()
self.stop_thread = False self.stop_thread = False
self.thread = threading.Thread(target=self.run) self.thread = threading.Thread(target=self.run)
self.thread.start() self.thread.start()
def create_conveyor(self, size, position): def create_conveyor(self, size, position):
collision_shape_id = p.createCollisionShape( collision_shape_id = p.createCollisionShape(
shapeType=p.GEOM_BOX, shapeType=p.GEOM_BOX,
@ -83,24 +88,25 @@ class ConveyorBelt:
return box_id return box_id
def move_boxes(self): def move_boxes(self):
# Двигаем коробки вдоль конвейера conveyor_stopped = False
for box_id in self.boxes[:]: if not self.conveyor_stopped:
# Получаем текущую позицию коробки for box_id in self.boxes[:]:
pos, orn = p.getBasePositionAndOrientation(box_id) pos, orn = p.getBasePositionAndOrientation(box_id)
if (
pos[0] + self.box_size[0] * 0.5
> self.conveyor_position[0] + self.conveyor_size[0] * 0.5
):
# Если коробка выходит за конец конвейера, она падает вниз (физика продолжает действовать)
# Удаляем коробку с конвейера
self.boxes.remove(box_id)
self.conveyor_stopped = True
self.call_robot()
else:
# Двигаем коробку вдоль конвейера (по оси X)
new_pos = [pos[0] + self.box_speed, pos[1], pos[2]]
p.resetBasePositionAndOrientation(box_id, new_pos, orn)
# Проверяем, если коробка выходит за пределы конвейера по оси X
# Начальное положение коробки + её длина (по оси X)
if (
pos[0] + self.box_size[0] * 0.5
> self.conveyor_position[0] + self.conveyor_size[0] * 0.5
):
# Если коробка выходит за конец конвейера, она падает вниз (физика продолжает действовать)
# Удаляем коробку с конвейера
self.boxes.remove(box_id)
else:
# Двигаем коробку вдоль конвейера (по оси X)
new_pos = [pos[0] + self.box_speed, pos[1], pos[2]]
p.resetBasePositionAndOrientation(box_id, new_pos, orn)
# Добавляем новые коробки, если на конвейере меньше, чем максимально возможное количество # Добавляем новые коробки, если на конвейере меньше, чем максимально возможное количество
if len(self.boxes) < int( if len(self.boxes) < int(
@ -109,6 +115,12 @@ class ConveyorBelt:
new_box = self.create_box(self.box_position()) new_box = self.create_box(self.box_position())
self.boxes.append(new_box) self.boxes.append(new_box)
def call_robot(self):
# Здесь можно вызвать робота для выполнения операции, например:
logger.info("Конвейер остановлен, вызываем робота для работы с коробкой.")
time.sleep(5)
self.conveyor_stopped = False
def run(self): def run(self):
while not self.stop_thread: while not self.stop_thread:
self.move_boxes() self.move_boxes()