Files
AutoControlSystem-git/CU/Feeding.py
2024-09-03 23:28:16 +08:00

135 lines
5.5 KiB
Python

from Model.Position import Real_Position, Detection_Position
from enum import Enum
from COM.COM_Robot import RobotClient
from Model.RobotModel import CMDInstructRequest
from Vision.camera_coordinate_dete import Detection
class FeedStatus(Enum):
FNone = 0
FStart = 1
FSafeP = 2
FPhoto = 3
FTake = 4
FSafeF = 5
FFeedP = 6
FFinished = 7
class FeedLine:
def __init__(self,safe_position:Real_Position,photo_position:Real_Position,feed_position:Real_Position):
self.safe_position = safe_position
self.photo_position = photo_position
self.feed_position = feed_position
self.take_position = None
class FeedingConfig:
def __init__(self, num:int, feedLine:FeedLine):
self.num = num
self.feedLine = feedLine
def get_line_info(self):
pass
class Feeding():
def __init__(self,robotClient:RobotClient,detection: Detection):
self.feedConfig = None
self.feedStatus = FeedStatus.FNone
self.robotClient = robotClient
pass
def run(self):
# 获取事件坐标
real_position = Real_Position()
# real_position.init_position(self.robotClient.status_model.world_n[0],
# self.robotClient.status_model.world_n[1],
# self.robotClient.status_model.world_n[2],
# self.robotClient.status_model.world_n[3],
# self.robotClient.status_model.world_n[4],
# self.robotClient.status_model.world_n[5],
# self.robotClient.status_model.world_n[6]);
real_position.init_position(0,
0,
0,
0,
0,
0);
if self.feedStatus==FeedStatus.FNone:
pass
elif self.feedStatus==FeedStatus.FStart:
if self.feedConfig.num != 0:
self.feedStatus = FeedStatus.FSafeP
self.sendTargPosition(self.feedConfig.safe_position)
#print(request_command)
pass
elif self.feedStatus==FeedStatus.FSafeP:
if self.feedConfig.safe_position.compare(real_position):
self.feedStatus = FeedStatus.FPhoto
self.sendTargPosition(self.feedConfig.photo_position)
elif self.feedStatus == FeedStatus.FPhoto:
if self.feedConfig.photo_position.compare(real_position):
_, _, xyz, uvw = self.detection.get_position() #检测结果
if xyz!=None:
self.feedStatus = FeedStatus.FTake
#dp = Detection_Position().init_position(*xyz, *uvw)
from Trace.handeye_calibration import R_matrix,getPosition
rotation = R_matrix(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)
# 黄老师给我的xyz和法向量
target_position, noraml_base = getPosition(*xyz, *uvw,rotation)
self.feedConfig.take_position = Real_Position().init_position(*target_position,*noraml_base)
else:
print("打印日志,保存失败图像")
pass # 发送拍照获取坐标 并 开始移动
elif self.feedStatus == FeedStatus.FTake:
if self.feedConfig.take_position != None and self.feedConfig.take_position.compare(real_position):
self.feedStatus = FeedStatus.FSafeF
pass #打开吸嘴并返回
elif self.feedStatus == FeedStatus.FSafeF:
if self.feedConfig.safe_position.compare(real_position):
self.feedStatus = FeedStatus.FFeedP
self.sendTargPosition(self.feedConfig.feed_position)
pass #吸嘴开始
elif self.feedStatus==FeedStatus.FFeedP:
if self.feedConfig.feed_position.compare(real_position):
self.feedConfig.num = self.feedConfig.num-1
if self.feedConfig.num == 0:
self.feedStatus=FeedStatus.FNone
else:
self.feedStatus = FeedStatus.FSafeP
self.sendTargPosition(self.feedConfig.safe_position)
pass
def sendTargPosition(self,real_position):
from Model.RobotModel import Instruction
position_instruction = Instruction()
position_instruction.m0 = self.feedConfig.safe_position.X
position_instruction.m1 = self.feedConfig.safe_position.Y
position_instruction.m2 = self.feedConfig.safe_position.Z
position_instruction.m3 = self.feedConfig.safe_position.U
position_instruction.m4 = self.feedConfig.safe_position.V
position_instruction.m5 = self.feedConfig.safe_position.W
instruction_command = CMDInstructRequest()
instruction_command.instructions.append(vars(position_instruction))
request_command = vars(instruction_command)
self.robotClient.add_sendQuene(request_command)
pass