update 更新一键投料,优化设置文字,添加平滑,假装解决闪退

This commit is contained in:
FrankCV2048
2024-12-19 23:29:35 +08:00
parent da31ce91b6
commit cd7e354cbd
10 changed files with 15194 additions and 2121 deletions

View File

@ -1,9 +1,11 @@
from enum import Enum
import numpy as np
from PySide6.QtCore import Signal
import Constant
from Model.Position import Real_Position
from Trace.handeye_calibration import getPosition
from Util.util_time import CClockPulse, CTon
from Vision.camera_coordinate_dete import Detection
class DetectStatus(Enum):
@ -12,8 +14,9 @@ class DetectStatus(Enum):
DOk = 2
class Detect:
def __init__(self,detection):
self.detection = detection
update_detect_image = Signal(np.ndarray)
def __init__(self):
self.detection = Detection(alignmentType='depth2color')
self.detect_status = DetectStatus.DNone
self.detect_position = None
def run(self):

View File

@ -4,8 +4,10 @@ import threading
import time
import cv2
import numpy as np
from PyQt5.QtWidgets import QMessageBox
from PySide6.QtCore import Signal, QObject
from PySide6.QtGui import QPixmap
import Constant
import Expection
@ -129,8 +131,25 @@ class FeedLine:
def set_take_position(self,position:Real_Position):
for i in range(len(self.feeding_to_end)):
if self.feeding_to_end[i].status == FeedStatus.FTake.value:
if position != None:
befor_take_position = Real_Position().init_position(position.X,
position.Y,
position.Z,
position.U,
position.V,
position.W)
after_take_position = Real_Position().init_position(position.X,
position.Y,
position.Z,
position.U,
position.V,
position.W)
self.feeding_to_end[i - 1].set_position(befor_take_position)
self.feeding_to_end[i + 1].set_position(after_take_position)
self.feeding_to_end[i].set_position(position)
def get_position_list(self):
index_start = -1
for i in range(len(self.feed_positions)):
@ -145,6 +164,17 @@ class FeedLine:
self.start_to_take = self.feed_positions[index_start:index_take+1]
self.feeding_to_end = self.feed_positions[index_take:]
for i in range(len(self.feeding_to_end)): #插入动态中间点
if self.feeding_to_end[i].status == FeedStatus.FTake.value:
befor_position_model = PositionModel()
befor_position_model.init_position(None)
after_position_model = PositionModel()
after_position_model.init_position(None)
self.feeding_to_end.insert(i, befor_position_model)
self.feeding_to_end.insert(i+2, after_position_model)
break
class FeedingConfig:
@ -164,13 +194,14 @@ class FeedingConfig:
class Feeding(QObject):
need_origin_signal = Signal(str)
take_no_photo_sigal = Signal(str)
def __init__(self, robotClient: RobotClient, detection: Detection):
take_no_photo_sigal = Signal()
update_detect_image = Signal(np.ndarray)
def __init__(self, robotClient: RobotClient):
super().__init__()
self.feedConfig = None
self.feedStatus = FeedStatus.FNone
self.robotClient = robotClient
self.detection = detection
self.detection_image = None
self.init_detection_image()
self.pause = False
@ -187,14 +218,21 @@ class Feeding(QObject):
self.pos_index = -1
self.pos_near_index = -1
self.catch = Catch(self.robotClient)
self.detect = Detect(self.detection)
self.detect = Detect()
self.is_detected = True
self.detect_thread = threading.Thread(target=self.run_detect)
self.detect_thread.start()
self.onekey = False
pass
def close_feed(self):
self.is_detected = False
self.detect_thread.join()
self.detect.detection.release()
def init_detection_image(self):
self.detection_image = cv2.imread(Constant.feed_sign_path)
detection_image = cv2.imread(Constant.feed_sign_path)
self.update_detect_image.emit(detection_image)
def run_detect(self):
while self.is_detected:
@ -271,12 +309,6 @@ class Feeding(QObject):
self.feedConfig.feedLine.get_position_list()
self.detect.detect_status = DetectStatus.DNone
# = self.detection.get_position(Point_isVision=False, Box_isPoint=True, First_Depth=True, Iter_Max_Pixel=30,
# # save_img_point=0, Height_reduce=30, width_reduce=30)
# TODO 获取目标位置
#
self.feed_Mid_Status = FeedMidStatus.FMid_Start
self.next_position(self.is_reverse)
@ -298,6 +330,7 @@ class Feeding(QObject):
self.feedConfig.feedLine.start2take_pos_index = len(self.feedConfig.feedLine.start_to_take) -2
self.feedConfig.feedLine.origin2start_pos_index = len(self.feedConfig.feedLine.origin_to_start) - 2
self.next_position(self.is_reverse)
self.init_detection_image()
return
if self.robotClient.type_detection == DetectType.EyeOutHand:
@ -306,19 +339,28 @@ class Feeding(QObject):
self.detect.detect_status = DetectStatus.DDetect
elif self.detect.detect_status == DetectStatus.DOk:
if Constant.Debug:
if self.feedConfig.num == 990 and self.onekey:
self.feedConfig.num = 0
log.log_message(logging.ERROR, Constant.str_feed_finish)
return
self.detect.detect_status = DetectStatus.DNone
self.feedConfig.feedLine.set_take_position(real_position)
self.next_position()
return
if self.detect.detect_position != None:
log.log_message(logging.INFO, Constant.str_feed_takePhoto_success)
self.feedConfig.feedLine.set_take_position(self.detect.detect_position)
self.detection_image = self.detect.detection_image
self.update_detect_image.emit(self.detect.detection_image)
self.next_position()
self.detect.detect_status = DetectStatus.DNone
else:
log.log_message(logging.ERROR, Constant.str_feed_takePhoto_fail)
self.take_no_photo_sigal.emit()
if self.onekey:
self.feedConfig.num = 0
log.log_message(logging.ERROR, Constant.str_feed_finish)
else:
log.log_message(logging.ERROR, Constant.str_feed_takePhoto_fail)
self.take_no_photo_sigal.emit()
return
detect_pos_list = []
if not Constant.Debug:
@ -391,7 +433,7 @@ class Feeding(QObject):
log.log_message(logging.INFO, Constant.str_feed_take)
if self.feedConfig.feedLine.get_take_position().get_position() != None:
# self.take_no_photo = False
if self.feedConfig.feedLine.get_take_position().get_position().compare(real_position):
if self.feedConfig.feedLine.get_take_position().get_position().compare(real_position, is_action=True):
# 打开吸嘴并返回
# self.sendIOControl(self.robotClient.con_ios[0], 1)
# self.sendIOControl(self.robotClient.con_ios[1], 1)
@ -405,7 +447,7 @@ class Feeding(QObject):
return
if self.catch.catch_status == CatchStatus.COk :
self.catch.catch_status = CatchStatus.CNone
self.feedConfig.feedLine.set_take_position(None)
#self.feedConfig.feedLine.set_take_position(None)
time.sleep(self.robotClient.time_delay_take)
log.log_message(logging.INFO, Constant.str_feed_take_success)
self.next_position()
@ -434,7 +476,7 @@ class Feeding(QObject):
elif self.feedStatus == FeedStatus.FShake:
log.log_message(logging.INFO, Constant.str_feed_shake)
if self.get_current_position().get_position().compare(real_position):
if self.get_current_position().get_position().compare(real_position,is_action=True):
# TODO 震动方案
@ -451,7 +493,7 @@ class Feeding(QObject):
elif self.feedStatus == FeedStatus.FDropBag:
log.log_message(logging.INFO, Constant.str_feed_drop)
if self.get_current_position().get_position().compare(real_position):
if self.get_current_position().get_position().compare(real_position,is_action=True):
# self.sendIOControl(self.robotClient.con_ios[0], 0)
# self.sendIOControl(self.robotClient.con_ios[1], 0)
# self.sendIOControl(self.robotClient.con_ios[2], 0)