update 更新一键投料,优化设置文字,添加平滑,假装解决闪退
This commit is contained in:
@ -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):
|
||||
|
||||
@ -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)
|
||||
|
||||
Reference in New Issue
Block a user