2025-09-02 18:26:43 +08:00
|
|
|
|
from ...view.mi_an_main_window import Window as MainWindow
|
|
|
|
|
|
from ...view.cood_forms_interface import CoordinateFormsWidget
|
2025-09-28 17:55:32 +08:00
|
|
|
|
from ...view.cood_forms_interface import CoordinateTableWidget
|
2025-09-02 18:26:43 +08:00
|
|
|
|
|
|
|
|
|
|
from typing import TypedDict
|
|
|
|
|
|
|
2025-09-28 17:55:32 +08:00
|
|
|
|
from ...service.robot_service import RobotService
|
|
|
|
|
|
|
|
|
|
|
|
# 法奥机器人
|
|
|
|
|
|
from fairino import Robot
|
|
|
|
|
|
|
2025-09-02 18:26:43 +08:00
|
|
|
|
|
|
|
|
|
|
# 子界面管理
|
|
|
|
|
|
class SubViewsDict(TypedDict):
|
|
|
|
|
|
position: CoordinateFormsWidget
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class MainController:
|
|
|
|
|
|
def __init__(self):
|
|
|
|
|
|
# 主界面
|
|
|
|
|
|
self.main_window = MainWindow()
|
|
|
|
|
|
|
|
|
|
|
|
# 初始化子界面
|
|
|
|
|
|
self._initSubViews()
|
|
|
|
|
|
|
|
|
|
|
|
# 初始化子控制器
|
|
|
|
|
|
self._initSubControllers()
|
|
|
|
|
|
|
2025-09-28 17:55:32 +08:00
|
|
|
|
# 机器人实例
|
|
|
|
|
|
self.robot_client = Robot.RPC("192.168.58.2")
|
|
|
|
|
|
|
|
|
|
|
|
self.robot_service = RobotService(self.robot_client)
|
|
|
|
|
|
|
2025-09-02 18:26:43 +08:00
|
|
|
|
self.__connectSignals()
|
|
|
|
|
|
|
|
|
|
|
|
def _initSubViews(self):
|
|
|
|
|
|
self.sub_views: SubViewsDict = {
|
|
|
|
|
|
"system": self.main_window.system, # 系统设置
|
|
|
|
|
|
"product": self.main_window.product, # 生产界面
|
|
|
|
|
|
"robot": self.main_window.robot, # 机器臂基础设置
|
|
|
|
|
|
"io": self.main_window.io, # io面板
|
|
|
|
|
|
"position": self.main_window.position.formsWidget, # 点位设置
|
|
|
|
|
|
"basic": self.main_window.basic, # 基础设置
|
|
|
|
|
|
"point": self.main_window.point, # 点位调试
|
|
|
|
|
|
"other": self.main_window.other, # 其他设置
|
|
|
|
|
|
"data": self.main_window.data, # 数据采集
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
def _initSubControllers(self):
|
|
|
|
|
|
# self.sub_controllers = {
|
|
|
|
|
|
# "system": SystemController(self.sub_views["system"]),
|
|
|
|
|
|
# "produce": ProduceController(self.sub_views["produce"]),
|
|
|
|
|
|
# }
|
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
def showMainWindow(self):
|
|
|
|
|
|
self.main_window.show()
|
|
|
|
|
|
|
|
|
|
|
|
def __connectSignals(self):
|
|
|
|
|
|
self.sub_views["position"].form_move_signal.connect(self.handleMove)
|
2025-09-28 17:55:32 +08:00
|
|
|
|
self.sub_views["position"].form_update_signal.connect(self.handleGetPosition)
|
|
|
|
|
|
self.sub_views["position"].form_machine_stop_signal.connect(self.handleMachineStop)
|
|
|
|
|
|
|
|
|
|
|
|
# 机器臂停止移动
|
|
|
|
|
|
def handleMachineStop(self):
|
|
|
|
|
|
self.robot_service.stop_moves()
|
|
|
|
|
|
|
|
|
|
|
|
# 设置点位
|
|
|
|
|
|
def handleGetPosition(self, form_obj: CoordinateTableWidget):
|
|
|
|
|
|
result = self.robot_client.GetActualTCPPose() # 获取 工具坐标
|
|
|
|
|
|
if isinstance(result, tuple) and len(result) == 2:
|
|
|
|
|
|
# 成功:解包错误码和位姿
|
|
|
|
|
|
error, tcp_pos = result
|
|
|
|
|
|
# print(f"成功,位姿:{tcp_pos}")
|
|
|
|
|
|
|
|
|
|
|
|
# 保留三位小数
|
|
|
|
|
|
tcp_pos_rounded = [round(pos, 3) for pos in tcp_pos]
|
|
|
|
|
|
# print(f"保留三位小数后:{tcp_pos_rounded}")
|
|
|
|
|
|
else:
|
|
|
|
|
|
# 失败:result 即为错误码
|
|
|
|
|
|
print(f"设置位置失败,错误码:{result}")
|
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
|
|
form_obj.update_table_data(tcp_pos_rounded)
|
|
|
|
|
|
|
|
|
|
|
|
# 机器臂移动
|
|
|
|
|
|
# pos_list 中一定是合法坐标
|
|
|
|
|
|
def handleMove(self, pos_list: list, name_list: list):
|
|
|
|
|
|
# print("handleMove 移动 pos_list: ", pos_list)
|
|
|
|
|
|
# print("handleMove 移动 pos_list: ", name_list)
|
|
|
|
|
|
# 后续需要根据状态来设置
|
|
|
|
|
|
tool_id = 1 # 当前 1为吸盘
|
|
|
|
|
|
vel = 20.0
|
|
|
|
|
|
|
|
|
|
|
|
# self.robot_service.start_moves(pos_list, name_list, tool_id=tool_id, vel=vel)
|
|
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
|
self.robot_service.start_moves(
|
|
|
|
|
|
pos_list=pos_list,
|
|
|
|
|
|
name_list=name_list,
|
|
|
|
|
|
tool_id=tool_id,
|
|
|
|
|
|
vel=vel
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
except ValueError as e:
|
|
|
|
|
|
# 处理“坐标列表与名称列表长度不一致”的错误
|
|
|
|
|
|
print(f"❌ 移动任务提交失败(参数错误):{str(e)}")
|
2025-09-02 18:26:43 +08:00
|
|
|
|
|
2025-09-28 17:55:32 +08:00
|
|
|
|
# for desc_pos in pos_list:
|
|
|
|
|
|
# print("handleMove 移动 desc_pos: ", pos_list)
|
|
|
|
|
|
# error_code = self.robot_client.MoveCart(desc_pos=desc_pos, tool=tool_id, user=0,vel=vel)
|
|
|
|
|
|
# if error_code == 0:
|
|
|
|
|
|
# print("运动成功")
|
|
|
|
|
|
# else:
|
|
|
|
|
|
# print(f"运动失败,错误码: {error_code}")
|
|
|
|
|
|
|