DEVICE_FLOW.md 8.1 KB

设备交互与标定体系(对照 TeamAAS-2.0 生产版)

依据:对 D:\Team\Program\TeamAAS-2.0(在产程序)与 D:\Program\TeamAAS(本程序)的逐文件源码核对。 结论先行:机器人/相机/Feeder/吸气 的协议与流程已同源移植,标定向导结构与 2.0 对齐; 遗留问题 = VppCalibrationPage 游离计算器 + 2.0 已有的 Feeder 背光联动/畸变校正未移植。


一、机器人 TCP 协议(逐条核对 ✅ 全部实现)

文件:TeamAAS.Core\TeamAAS.Robot\Core\Robots\EpsonRobot.cs(同步 + Async 双版本) 连接层:RobotTcpClient.cs——客户端/服务端双角色、结束符(CR/LF/CRLF)分帧、断线重连; 配置存 Config\Robots.json(IP/Port/ConnectType/Terminator/Encoding)。 应答确认模式:发送后等待回显(rev.Contains("命令字") 即成功,5s 超时)。

上位机发送 机器人回显 实现状态 备注
Motor,1 Motor 使能
Power,1 Power 伺服上电
Reset Reset 复位报警
Speed,100 Speed PTP 速度
Accel,100,100 Accels PTP 加速度(双参数)
Speeds,100 Speeds 直线速度
Accels,100,100 Accels 直线加速度
Speedfactor,100 Speedfactor 全局速度倍率
Go,X,Y,Z,U,V,W,0,0,0 Go PTP 点位(Hand,Local,Tool 九段)
Jump,X,...,LimZ Jump 门型拾放(末尾多 LimZ)
Move,X,... Move 直线插补
SFree / SLock 同名 刹车释放/锁定
Jog,axis,d Jog 点动
Joint,joint,d ✅(表外补充) 关节点动
SetTool,i,x,y SetTool 设置工具坐标
SelectTool,i ✅(表外补充) 切换工具号
CalibParame,0,0,0,0,0,0,0,0 CalibParame 8 参数:{夹爪类型(Suction/Clamp)},{吸气IO},{吹气IO},{Speed},{Accel},{Power},{吸真空延时},{破真空延时}
CalibMotion,X,Y,Z,U,V,W,0,0,0 CalibMotion 标定点位动作(末尾多 LimZ)
CalibOutIO,1 CalibOutIO 控制夹爪/吸嘴(吸气=1,放开=0)
GetRobotPos GetRobotPos,X,Y,Z,U,V,W,Hand,Local,Tool 回包解析为 RPoint 坐标对象

吸气/真空设计:由机器人侧程序执行 IO,上位机只下发 IO 位号与延时(CalibParame)+ 开关指令(CalibOutIO)。 流程画布层暂无"机器人指令"节点(指令调用集中在标定向导)——需要时按通讯节点模式补一个。


二、相机安装方式(CameraMount)与交互差异

文件依据:2.0 Enums\CameraMount.csServices\CameraCalibrationService.cs(九点循环 L1116-1240)、 Services\CalibrationService.cs\ConvertPixelToPosition(L224-312)。我们的 CameraCalibrationService / CalibrationStore 已移植同款分支。

安装方式 物理含义 标定取点动作 运行时像素→机器人换算 工具坐标步骤
FixedDown 固定向下 相机架工位上方不动,机械手吸标定块在下方走位 防遮挡舞蹈(每点):走到点 i → 关吸气放下块 → 退回待机点让出视野 → 拍照 → 走回点 i → 开吸气吸回;九点后回待机 仿射矩阵直出机器人坐标 → ComputeTool 转工具坐标;角度符号取反 需要(FixedDownCameraTool 分支)
FixedUp 固定向上 相机朝上(供料背光板下),机械手举块到相机上方 走到点 i(带 Z)→ 直接拍照 仿射直出 → 转工具坐标 需要(FixedUpCameraTool 分支)
MobileJ2 相机装 J2 臂随臂下移 走到点 i → 拍照 仿射直出 → 转工具坐标,角度取反 需要
MobileJ4 相机装末端腕(眼在手,随 U 轴转) 先走中心点记 Mark 点(工具坐标系);九点矩阵 = Mark点 − (点i − 点1 位移)(把 Mark 拉回相机中心) 仿射偏移 + 按机器人当前 U 轴构造旋转矩阵修正 + 当前位姿叠加 需要(J4MovingDownCameraTool 分支)
MobileDown_XYPlatform 相机装 XY 龙门模组下移 同 J4 偏移换算(Mark=中心点) 同 J4 但旋转角恒 0(模组不旋转) 跳过
None 独立相机 手动示意的独立相机 手动 手动 不适用

共同前置(旋转预备标定):机械手走 P0、P0+X、P0+Y 三点各拍一张 → Gram-Schmidt 求图像系↔机器人系 旋转矩阵 + mm/像素比例;九点机器人坐标先经该矩阵逆变换对齐坐标轴,再进仿射求解 (2.0 用 OpenCvSharp EstimateAffine2D;我们用正规方程+高斯消元,数学等价)。 运行时通用入口:CalibrationStore.ConvertPixelToPosition(pixel, robotCur, calib, brand);Schneider 品牌 U 轴取反。


三、相机 / Feeder / 通讯交互流程对照


四、标定体系评估(双轨问题)

正式路径(唯一消费方):标定向导(7 步:基础设置→视觉与相机→示教点位→工具坐标TCP→九点标定→验证→完成,XY 模组跳第 3 步) → CameraCalibrationServiceCalibrationStoreCalibration\<名称>.json,运行时 ConvertPixelToPosition 消费)。✅ 与 2.0 对齐。

游离路径(问题所在)Plugins.Vpp\Views\VppCalibrationPage——引擎嵌入向导第 1 步右侧的 "标定图像操作区",实为手动计算器(载本机图片、手填九点表、自算仿射),结果只进文本框、不落盘、不进 CalibrationStore。 → 这就是用户困惑的"视觉与相机右边为什么有九点标定"。

改造决定:VppCalibrationPage 重构为向导的实时取图面板(相机画面 + Mark 点叠加), 删除独立九点表/计算逻辑——标定计算只走 CalibrationStore 单一路径。

对标 2.0 尚缺:① 标定拍照前 Feeder 开背光联动;② 棋盘格畸变校正(CogCalibCheckerboardTool); ③ 相机曝光/增益在标定流程内的下发页(部分已有)。


五、待办(按优先级)

  1. VppCalibrationPage → 实时取图面板改造(删双轨);
  2. 标定向导补 Feeder 背光联动 + 畸变校正;
  3. 移植 2.0 的设置页添加对话框(AddRobot/AddCamera/AddFeeder 样式)补齐设备管理 UI;
  4. 流程画布补"机器人指令"节点(指令下拉 + 参数公式绑定,按通讯节点模式);
  5. 实施类任务批量派发高级工程师 agent,本侧做架构与验收。
主题 TeamAAS-2.0(生产) 本程序 兼容结论
相机 7 品牌(海康 MVS 为主/Basler/大恒/大华/OPT/Cognex/UVC),软触发+连续采集(无硬触发),全链路 ICogImage,CameraConfiguration.cfg 同款海康/大华已移植(MvCamCtrl.Net 原生),Basler/大恒/OPT/UVC 在列;图像用自研 GenImage 统一载体(含 Metadata),Config\Cameras.json 同源;GenImage 经 GenImageConverter 转各平台,载体设计更通用
Feeder 独立类库 Team.FFFeederService:TEAM(TCP {K1} 背光/{UV1} 振动/{HC} 停止/方向 {CA~CI}ms)+ Afag aflex;自带环形背光,标定拍照前开灯 TeamFeeder 同款 TCP ASCII 命令 + FeederPlugin 流程节点(配方 Config\Feeder_recipes.json 同源;缺标定向导的开背光联动
吸气/真空 机器人侧执行:CalibParame 下发 IO 位+延时,CalibOutIO 开关 同(PickInfo:Inhal/Blow + WaitSuction/WaitBlow) ✅ 一致
通讯 每类设备独立 .cfg(JSON)+ 设置页对话框(AddRobot/AddCamera…)+ Service 工厂(Dictionary)+ SendThenResponse/事件;另硬编码 BgCommunicate/BgModbusTcp 后台通道;PLC 三菱/OPC UA [Communication] 特性扫描(TcpClient/TcpServer/Serial/Udp/Web + HslCommunication PLC),统一 Config\Communications.jsonCommunicationManager.GetByName,流程节点批量读取/批量写入(公式绑定),FlowRunner 订阅 DataReceivedEvent 心跳触发产品 我们的模式更可扩展(加协议=加一个类);2.0 的 Settings 添加对话框值得移植