update 修改复位,清除报警,识别等信息

This commit is contained in:
Gogs
2024-12-09 14:03:53 +08:00
parent f9b338f901
commit e43859b522
3 changed files with 139 additions and 27 deletions

View File

@ -4,20 +4,27 @@ import time
import cv2 import cv2
from PyQt5.QtWidgets import QMessageBox from PyQt5.QtWidgets import QMessageBox
from jedi.debug import speed from jedi.debug import speed
from tifffile.tifffile import read_lsm_positions
import Constant import Constant
import Expection import Expection
from Model.FeedModel import PositionModel
from Model.Position import Real_Position, Detection_Position from Model.Position import Real_Position, Detection_Position
from enum import Enum, IntEnum from enum import Enum, IntEnum
from COM.COM_Robot import RobotClient, DetectType from COM.COM_Robot import RobotClient, DetectType
from Model.RobotModel import CMDInstructRequest, MoveType from Model.RobotModel import CMDInstructRequest, MoveType
from Trace.handeye_calibration import getPosition
from Util.util_math import get_distance from Util.util_math import get_distance
from Util.util_time import CRisOrFall from Util.util_time import CRisOrFall
from Vision.camera_coordinate_dete import Detection from Vision.camera_coordinate_dete import Detection
from Util.util_log import log from Util.util_log import log
from Model.RobotModel import Instruction from Model.RobotModel import Instruction
class ResetStatus(Enum):
RNone = 0
RStart = 1
RRunging = 2
ROk =3
class FeedStatus(IntEnum): class FeedStatus(IntEnum):
@ -163,8 +170,15 @@ class Feeding:
self.cRis_photo = CRisOrFall() self.cRis_photo = CRisOrFall()
self.feed_Mid_Status = FeedMidStatus.FMid_Start self.feed_Mid_Status = FeedMidStatus.FMid_Start
self.is_reverse = False self.is_reverse = False
# 复位集合
self.run_reverse = False self.run_reverse = False
self.take_no_photo = False self.take_no_photo = False
self.reset_status = ResetStatus.RNone
self.reversed_positions = []
self.current_position = None
self.pos_index = -1
self.pos_near_index = -1
pass pass
def init_detection_image(self): def init_detection_image(self):
@ -220,7 +234,7 @@ class Feeding:
elif self.feedStatus == FeedStatus.FStart: elif self.feedStatus == FeedStatus.FStart:
log.log_message(logging.INFO, Constant.str_feed_start) log.log_message(logging.INFO, Constant.str_feed_start)
if not self.robotClient.origin_position.compare(real_position) and not self.is_reverse: if not self.robotClient.origin_position.compare(real_position) and not self.is_reverse:
QMessageBox.information(None, "提示", Constant.str_feed_start_error) # QMessageBox.information(None, "提示", Constant.str_feed_start_error) # Fuck 引起异常
self.feedStatus = FeedStatus.FNone self.feedStatus = FeedStatus.FNone
return return
if self.is_reverse: if self.is_reverse:
@ -230,10 +244,13 @@ class Feeding:
self.feedConfig.feedLine.get_position_list() self.feedConfig.feedLine.get_position_list()
self.feedConfig.feedLine.set_take_position(real_position) # = 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)
self.feedConfig.feedLine.set_take_position(self.get_take_position())
# TODO 获取目标位置 # TODO 获取目标位置
# 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)
self.feed_Mid_Status = FeedMidStatus.FMid_Start self.feed_Mid_Status = FeedMidStatus.FMid_Start
self.next_position(self.is_reverse) self.next_position(self.is_reverse)
@ -382,12 +399,87 @@ class Feeding:
time.sleep(self.robotClient.time_delay_put) time.sleep(self.robotClient.time_delay_put)
# TODO 获取目标位置 # TODO 获取目标位置
# 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) # 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)
self.feedConfig.feedLine.set_take_position(real_position) self.feedConfig.feedLine.set_take_position(self.get_take_position())
self.feedConfig.num = self.feedConfig.num - 1 self.feedConfig.num = self.feedConfig.num - 1
log.log_message(logging.INFO, f'{Constant.str_feed_feed_num}{self.feedConfig.num}') log.log_message(logging.INFO, f'{Constant.str_feed_feed_num}{self.feedConfig.num}')
self.next_position() self.next_position()
def run_reseet(self):
real_position = Real_Position()
real_position.init_position(self.robotClient.status_model.world_0,
self.robotClient.status_model.world_1,
self.robotClient.status_model.world_2,
self.robotClient.status_model.world_3,
self.robotClient.status_model.world_4,
self.robotClient.status_model.world_5)
if self.reset_status == ResetStatus.RNone:
return
if self.reset_status == ResetStatus.RStart:
if self.feedConfig == None: return
# for index in range(len(self.feedConfig.feedLine.positions)):
# if self.feedConfig.feedLine.positions[index].status == 2:
# start_index = index
self.pos_index = -1
self.pos_near_index = -1
self.reversed_positions = []
for index, pos_model in enumerate(self.feedConfig.feedLine.feed_positions):
if pos_model.get_position().compare(real_position):
self.pos_index = index
break
if self.pos_index == -1:
log.log_message(logging.ERROR, Constant.str_feed_return_original_position_fail)
min_distance = 99999999
for index, pos_model in enumerate(self.feedConfig.feedLine.feed_positions):
if get_distance(pos_model.get_position(), real_position) < min_distance:
min_distance = get_distance(pos_model.get_position(), real_position)
self.pos_near_index = index
if self.pos_near_index != -1:
self.reversed_positions = self.feedConfig.feedLine.feed_positions[:self.pos_near_index + 1]
else:
return False
else:
self.reversed_positions = self.feedConfig.feedLine.feed_positions[:self.pos_index]
self.reversed_positions = list(reversed(self.reversed_positions))
self.reverse_index = 0
self.send_emergency_sound()
self.current_position = PositionModel()
self.current_position.init_position(real_position)
self.reset_status = ResetStatus.RRunging
if self.reset_status == ResetStatus.RRunging:
if not real_position.compare(self.current_position.get_position()):
return
pos_model = self.reversed_positions[self.reverse_index]
if pos_model.status == FeedStatus.FTake.value: # 跳过取袋节点
print('跳过抓袋点位')
pos_model = self.reversed_positions[self.reverse_index + 1]
self.reverse_index = self.reverse_index+1
if pos_model.lineType == LineType.CureMid.value:
pos_model1 = self.reversed_positions[self.reverse_index + 1]
self.sendTargPosition(real_position=pos_model.get_position(), move_type=MoveType.Cure,
real_position1=pos_model1.get_position(), speed=self.robotClient.reset_speed)
self.current_position = pos_model1
self.reverse_index = self.reverse_index + 2
else:
self.sendTargPosition(real_position=pos_model.get_position(), speed=self.robotClient.reset_speed)
self.current_position = pos_model
self.reverse_index = self.reverse_index + 1
if self.reverse_index == len(self.reversed_positions):
self.reset_status = ResetStatus.ROk
if self.reset_status == ResetStatus.ROk:
self.reset_status = ResetStatus.RNone
self.send_emergency_stop()
def return_original_position(self): def return_original_position(self):
self.run_reverse = True self.run_reverse = True
real_position = Real_Position() real_position = Real_Position()
real_position.init_position(self.robotClient.status_model.world_0, real_position.init_position(self.robotClient.status_model.world_0,
@ -425,8 +517,10 @@ class Feeding:
reversed_positions = list(reversed(reversed_positions)) reversed_positions = list(reversed(reversed_positions))
self.reverse_index = 0 self.reverse_index = 0
self.send_emergency_sound() self.send_emergency_sound()
current_position = PositionModel()
current_position.init_position(real_position)
while self.run_reverse and self.reverse_index!=len(reversed_positions): while self.run_reverse and self.reverse_index!=len(reversed_positions):
if self.reverse_index!=0 and not real_position.compare(reversed_positions[self.reverse_index-1]): if self.reverse_index!=0 and not real_position.compare(current_position.get_position()):
continue continue
print(f'复位第{self.reverse_index}') #todo 缺少比对 print(f'复位第{self.reverse_index}') #todo 缺少比对
pos_model = reversed_positions[self.reverse_index] pos_model = reversed_positions[self.reverse_index]
@ -439,9 +533,11 @@ class Feeding:
pos_model1 = reversed_positions[self.reverse_index + 1] pos_model1 = reversed_positions[self.reverse_index + 1]
self.sendTargPosition(real_position=pos_model.get_position(), move_type=MoveType.Cure, self.sendTargPosition(real_position=pos_model.get_position(), move_type=MoveType.Cure,
real_position1=pos_model1.get_position(),speed= self.robotClient.reset_speed) real_position1=pos_model1.get_position(),speed= self.robotClient.reset_speed)
current_position = pos_model1
self.reverse_index = self.reverse_index+2 self.reverse_index = self.reverse_index+2
else: else:
self.sendTargPosition(real_position=pos_model.get_position(),speed=self.robotClient.reset_speed) self.sendTargPosition(real_position=pos_model.get_position(),speed=self.robotClient.reset_speed)
current_position = pos_model
self.reverse_index = self.reverse_index + 1 self.reverse_index = self.reverse_index + 1
self.send_emergency_stop() self.send_emergency_stop()
return True return True
@ -502,8 +598,12 @@ class Feeding:
self.robotClient.add_sendQuene(request_command) self.robotClient.add_sendQuene(request_command)
pass pass
def get_take_position(self):
_, img, xyz, uvw, points = 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)
self.detection_image = img
target_position,noraml_base = getPosition(*xyz,*uvw,None,points)
position = Real_Position().init_position(*target_position[:3],*noraml_base[:3])
return position
def next_start(self,reverse=False): def next_start(self,reverse=False):
print(f'原点到初始位置的第{self.feedConfig.feedLine.origin2start_pos_index}') print(f'原点到初始位置的第{self.feedConfig.feedLine.origin2start_pos_index}')
start_pos = self.feedConfig.feedLine.get_next_start_position(reverse) start_pos = self.feedConfig.feedLine.get_next_start_position(reverse)

View File

@ -1,7 +1,7 @@
[Main] [Main]
[Robot_Feed] [Robot_Feed]
ipaddress = 192.168.20.4 ipaddress = 127.0.0.1
port = 502 port = 502
j1_min = -150 j1_min = -150
j1_max = +150 j1_max = +150
@ -47,7 +47,7 @@ photo_v5 = 0.0
photo_w5 = 1.0 photo_w5 = 1.0
linecount = 2 linecount = 2
remain_linename = 1 remain_linename = 1
remain_count = 0 remain_count = 1
solenoid_valve1_addr = 3 solenoid_valve1_addr = 3
solenoid_valve2_addr = 2 solenoid_valve2_addr = 2
solenoid_valve3_addr = 10 solenoid_valve3_addr = 10

44
main.py
View File

@ -23,7 +23,7 @@ from Model.FeedModel import LineModel, PositionModel
from Util.util_ini import writeFeedLine_to_ini from Util.util_ini import writeFeedLine_to_ini
import Constant import Constant
from CU.Command import FeedCommand from CU.Command import FeedCommand
from CU.Feeding import FeedLine, FeedingConfig, Feeding, FeedStatus, FeedMidStatus from CU.Feeding import FeedLine, FeedingConfig, Feeding, FeedStatus, FeedMidStatus, ResetStatus
from Util.util_log import QTextEditLogger from Util.util_log import QTextEditLogger
from Util.util_time import CRisOrFall from Util.util_time import CRisOrFall
from Vision.camera_coordinate_dete import Detection from Vision.camera_coordinate_dete import Detection
@ -39,6 +39,9 @@ from CU.Command import Status
from Util.util_log import log from Util.util_log import log
from Vision.detect_person import DetectionPerson from Vision.detect_person import DetectionPerson
from ui_MainWin import Ui_MainWindow from ui_MainWin import Ui_MainWindow
from view.ResetView import StopDialog
#from view.ResetView import StopDialog #from view.ResetView import StopDialog
@ -542,13 +545,13 @@ class MainWindow(QMainWindow, Ui_MainWindow):
def init_Run(self): def init_Run(self):
self.robotClient = None self.robotClient = None
self.configReader = configparser.ConfigParser() self.configReader = configparser.ConfigParser()
self.detection = None # Detection() #TODO 关闭图像 self.detection =Detection() #TODO 关闭图像
self.command_position_quene = Queue() self.command_position_quene = Queue()
self.status_address = DataAddress() self.status_address = DataAddress()
self.feedLine_dict = {} self.feedLine_dict = {}
self.command_quene = Queue() self.command_quene = Queue()
self.main_threading = None self.main_threading = None
self.detection_person = None #DetectionPerson() self.detection_person = None # DetectionPerson()
self.cton_take_no_photo = CRisOrFall() self.cton_take_no_photo = CRisOrFall()
self.configReader.read(Constant.set_ini) self.configReader.read(Constant.set_ini)
@ -1133,6 +1136,9 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.send_start_tool_command() self.send_start_tool_command()
def send_reset_button_click(self): def send_reset_button_click(self):
# TODO 清楚痕迹
# TODO 开启自动
line_head = self.comboBox_lineIndex.currentData() line_head = self.comboBox_lineIndex.currentData()
#safe_position = self.feedLine_dict[line_head].safe_position #safe_position = self.feedLine_dict[line_head].safe_position
# self.send_position_command(safe_position.X, safe_position.Y, safe_position.Z, safe_position.U, safe_position.V, safe_position.W,move_type=MoveType.WORLD) # self.send_position_command(safe_position.X, safe_position.Y, safe_position.Z, safe_position.U, safe_position.V, safe_position.W,move_type=MoveType.WORLD)
@ -1149,16 +1155,18 @@ class MainWindow(QMainWindow, Ui_MainWindow):
else: else:
log.log_message(logging.ERROR, Constant.str_feed_reset_no_line_error) log.log_message(logging.ERROR, Constant.str_feed_reset_no_line_error)
return return
self.feeding.reset_status = ResetStatus.RStart
dialog_reset = StopDialog()
dialog_reset.stop_thread_signal.connect(self.stop_reset_thread)
else: else:
log.log_message(logging.ERROR, Constant.str_feed_reset_no_line_error) log.log_message(logging.ERROR, Constant.str_feed_reset_no_line_error)
return return
thread = threading.Thread(target=self.feeding.return_original_position()) # thread = threading.Thread(target=self.feeding.return_original_position())
thread.start() # thread.start()
# dialog_reset = StopDialog()
# dialog_reset.stop_thread_signal.connect(self.stop_reset_thread)
def stop_reset_thread(self): def stop_reset_thread(self):
self.feeding.run_reverse = False self.feeding.reset_status = ResetStatus.ROk
self.send_clear_auto_command() self.send_clear_auto_command()
self.send_emergency_alarm_command() self.send_emergency_alarm_command()
@ -1256,6 +1264,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
try: try:
self.feeding.run() self.feeding.run()
self.feeding.run_reseet()
except: except:
print(Error_Code.SYS_NONEPoint) print(Error_Code.SYS_NONEPoint)
@ -1277,7 +1286,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
# return # return
log.log_message(logging.ERROR, '人员进入安全区') log.log_message(logging.ERROR, '人员进入安全区')
time.sleep(3) time.sleep(1)
pass pass
def updateUI(self): def updateUI(self):
@ -1305,12 +1314,15 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.label_date.setText(datetime.now().strftime("%Y-%m-%d")) self.label_date.setText(datetime.now().strftime("%Y-%m-%d"))
self.label_time.setText(datetime.now().strftime("%H:%M:%S")) self.label_time.setText(datetime.now().strftime("%H:%M:%S"))
self.updateUI_Position() # self.updateUI_Position()
self.updateUI_label_detection() # self.updateUI_label_detection()
self.updateUI_label_status() # self.updateUI_label_status()
self.updateUI_frame_sign(self.feeding.feedStatus) # self.updateUI_frame_sign(self.feeding.feedStatus)
self.updateUI_IOPanel() # self.updateUI_IOPanel()
self.updateUI_InfoMB() # self.updateUI_InfoMB()
def updateUI_InfoMB(self): def updateUI_InfoMB(self):
if self.cton_take_no_photo.Q(self.feeding.take_no_photo,True): if self.cton_take_no_photo.Q(self.feeding.take_no_photo,True):
self.show_infomessage_box("未识别到料袋报警,请重新放料后,点击继续") self.show_infomessage_box("未识别到料袋报警,请重新放料后,点击继续")
@ -1533,7 +1545,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
def send_clear_alarm_command(self, pause: bool): def send_clear_alarm_command(self, pause: bool):
self.send_start_tool_command() self.send_start_tool_command()
pause_command = CMDRequest() pause_command = CMDRequest()
pause_command.cmdData.append("clearAlarmContinue") pause_command.cmdData.append("StopButton")
pause_command.cmdData.append("1") pause_command.cmdData.append("1")
request_command = pause_command.toString() request_command = pause_command.toString()
print(request_command) print(request_command)