From 1c4426810c71eead57084be8a18ade8d314dd8c4 Mon Sep 17 00:00:00 2001 From: patrick <patrick.xu@broconcentric.com> Date: 星期二, 10 十二月 2019 14:24:31 +0800 Subject: [PATCH] 1. 重构项目 --- src/A032.Process/ProcessControl_Calibration.cs | 184 +++------------------------------------------ 1 files changed, 15 insertions(+), 169 deletions(-) diff --git a/src/A032.Process/ProcessControl_Calibration.cs b/src/A032.Process/ProcessControl_Calibration.cs index 44a19ea..6c8770e 100644 --- a/src/A032.Process/ProcessControl_Calibration.cs +++ b/src/A032.Process/ProcessControl_Calibration.cs @@ -1,23 +1,18 @@ 锘縰sing A032.Process.Calibration; -using Bro.Common.Base; using Bro.Common.Helper; using Bro.Common.Interface; using Bro.Common.Model; +using Bro.Device.AuboRobot; using HalconDotNet; using System; using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading; -using System.Threading.Tasks; using static Bro.Common.Helper.EnumHelper; namespace A032.Process { public partial class ProcessControl { - CalibReplyMsg _calibReply = new CalibReplyMsg(); - [ProcessMethod("CalibrationCollection", "RobotCalibration", "鏈哄櫒浜�9鐐规爣瀹�", true)] public ProcessResponse RobotCalibration(IOperationConfig config, IDevice device) { @@ -29,7 +24,7 @@ throw new ProcessException("鏈兘鑾峰彇缁戝畾璁惧淇℃伅"); } - PathPosition position = Config.PositionCollection.FirstOrDefault(u => u.PositionNo == calibConfig.PositionNo); + PathPosition position = Config.PositionCollection.FirstOrDefault(u => u.PositionCode == calibConfig.PositionCode); if (position == null) { throw new ProcessException("鏈兘鑾峰彇姝g‘浣嶇疆淇℃伅"); @@ -42,64 +37,15 @@ if (calibConfig.IsStartedFromUI) { - FrmCalib9PDynamic frm = new FrmCalib9PDynamic(this, calibConfig, bind, position, SendMessageToRobot_Calibration, CalculateMatrix); + FrmCalib9PDynamic frm = new FrmCalib9PDynamic(this, calibConfig, bind, position, CalculateMatrix); frm.ShowDialog(); } else { - MultipleStepsProcess(calibConfig, bind, SendMessageToRobot_Calibration); + MultipleStepsProcess(calibConfig, bind); CalculateMatrix(calibConfig, bind, position); } - - //for (int i = 0; i < calibConfig.Configs.Count; i++) - //{ - // bind.Robot.SendMsg(Bro.Device.AuboRobot.RobotMsgAction.Calibration, Bro.Device.AuboRobot.RobotMsgParas.None, calibConfig.PositionNo, new List<float>() { i + 1 }); - - // _calibReply.CalibHandle.WaitOne(); - - // if (_calibReply.CalibIndex != (i + 1) || _calibReply.CalibPositionNo != calibConfig.PositionNo) - // { - // throw new ProcessException("鏍囧畾鍙嶉鐨勭储寮曟垨浣嶇疆淇℃伅涓嶄竴鑷�"); - // } - - // calibConfig.Configs[i].CurrentPlatPoint = new CustomizedPoint(_calibReply.RobotPosition.X, _calibReply.RobotPosition.Y); - - // using (HObject hImage = CollectHImage(bind.Camera, calibConfig.Configs[i].CameraOpConfig, "RobotCalibration")) - // { - // var tool = _halconToolDict[calibConfig.Configs[i].CameraOpConfig.AlgorithemPath]; - - // tool.SetDictionary(new Dictionary<string, HTuple>() { { "OUTPUT_X", new HTuple() }, { "OUTPUT_Y", new HTuple() }, { "OUTPUT_Angle", new HTuple() } }, new Dictionary<string, HObject>() { { "INPUT_Image", hImage } }); - // tool.RunProcedure(); - - // float x = (float)tool.GetResultTuple("OUTPUT_X").D; - // float y = (float)tool.GetResultTuple("OUTPUT_Y").D; - // float angel = (float)tool.GetResultTuple("OUTPUT_Angle").D; - // if (x < 0 || y < 0) - // { - // throw new ProcessException("鑾峰彇鐐逛綅淇℃伅涓嶆纭�"); - // } - - // calibConfig.Configs[i].ImageMarkPoint = new CustomizedPointWithAngle(x, y, angel); - // } - //} - - //HOperatorSet.VectorToHomMat2d(new HTuple(calibConfig.Configs.Select(u => u.ImageMarkPoint.X).ToArray()), new HTuple(calibConfig.Configs.Select(u => u.ImageMarkPoint.Y).ToArray()), new HTuple(calibConfig.Configs.Select(u => u.CurrentPlatPoint.X).ToArray()), new HTuple(calibConfig.Configs.Select(u => u.CurrentPlatPoint.Y).ToArray()), out HTuple matrix); - - //var visionConfig = Config.VisionConfigCollection.FirstOrDefault(u => u.CameraId == bind.CameraId && u.PositionCode == position.PositionCode); - //if (visionConfig != null) - //{ - // visionConfig.Matrix = new List<double>() { matrix[0], matrix[1], 0, matrix[3], matrix[4], 0 }; - //} - //else - //{ - // Config.VisionConfigCollection.Add(new PositionVisionConfig() - // { - // CameraId = bind.CameraId, - // PositionCode = position.PositionCode, - // Matrix = new List<double>() { matrix[0], matrix[1], 0, matrix[3], matrix[4], 0 }, - // }); - //} return new ProcessResponse(true); } @@ -115,7 +61,7 @@ throw new ProcessException("鏈兘鑾峰彇缁戝畾璁惧淇℃伅"); } - PathPosition position = Config.PositionCollection.FirstOrDefault(u => u.PositionNo == calibConfig.PositionNo); + PathPosition position = Config.PositionCollection.FirstOrDefault(u => u.PositionCode == calibConfig.PositionCode); if (position == null) { throw new ProcessException("鏈兘鑾峰彇姝g‘浣嶇疆淇℃伅"); @@ -128,72 +74,22 @@ if (calibConfig.IsStartedFromUI) { - FrmCalib9PDynamic frm = new FrmCalib9PDynamic(this, calibConfig, bind, position, SendMessageToRobot_Standard, CalculateStandardPoint); + FrmCalib9PDynamic frm = new FrmCalib9PDynamic(this, calibConfig, bind, position, CalculateStandardPoint); frm.ShowDialog(); } else { - MultipleStepsProcess(calibConfig, bind, SendMessageToRobot_Standard); + MultipleStepsProcess(calibConfig, bind); CalculateStandardPoint(calibConfig, bind, position); } - - //for (int i = 0; i < calibConfig.Configs.Count; i++) - //{ - // bind.Robot.SendMsg(Bro.Device.AuboRobot.RobotMsgAction.Calibration, Bro.Device.AuboRobot.RobotMsgParas.None, calibConfig.PositionNo, new List<float>() { i + 1 }); - - // _calibReply.CalibHandle.WaitOne(); - - // if (_calibReply.CalibPositionNo != calibConfig.PositionNo) - // { - // throw new ProcessException("鏍囧畾鍙嶉鐨勪綅缃俊鎭笉涓�鑷�"); - // } - - // calibConfig.Configs[i].CurrentPlatPoint = new CustomizedPoint(_calibReply.RobotPosition.X, _calibReply.RobotPosition.Y); - - // using (HObject hImage = CollectHImage(bind.Camera, calibConfig.Configs[i].CameraOpConfig, "RobotCalibration")) - // { - // var tool = _halconToolDict[calibConfig.Configs[i].CameraOpConfig.AlgorithemPath]; - - // tool.SetDictionary(new Dictionary<string, HTuple>() { { "OUTPUT_X", new HTuple() }, { "OUTPUT_Y", new HTuple() }, { "OUTPUT_Angle", new HTuple() } }, new Dictionary<string, HObject>() { { "INPUT_Image", hImage } }); - // tool.RunProcedure(); - - // float x = (float)tool.GetResultTuple("OUTPUT_X").D; - // float y = (float)tool.GetResultTuple("OUTPUT_Y").D; - // float angel = (float)tool.GetResultTuple("OUTPUT_Angle").D; - // if (x < 0 || y < 0) - // { - // throw new ProcessException("鑾峰彇鐐逛綅淇℃伅涓嶆纭�"); - // } - - // calibConfig.Configs[i].ImageMarkPoint = new CustomizedPointWithAngle(x, y, angel); - // } - //} - - //CustomizedPointWithAngle markPoint = calibConfig.Configs[0].ImageMarkPoint; - //var visionConfig = Config.VisionConfigCollection.FirstOrDefault(u => u.CameraId == bind.CameraId && u.PositionCode == position.PositionCode); - //if (visionConfig != null) - //{ - // visionConfig.StandardPoint = new CustomizedPointWithAngle(markPoint.X, markPoint.Y, markPoint.Angle); - //} - //else - //{ - // Config.VisionConfigCollection.Add(new PositionVisionConfig() - // { - // CameraId = bind.CameraId, - // PositionCode = position.PositionCode, - // StandardPoint = new CustomizedPointWithAngle(markPoint.X, markPoint.Y, markPoint.Angle), - // }); - //} return new ProcessResponse(true); } public void CalculateMatrix(CalibrationConfigCollection calibConfig, AGVBindUnit bind, PathPosition position) { - //HOperatorSet.VectorToHomMat2d(new HTuple(calibConfig.Configs.Select(u => u.ImageMarkPoint.X).ToArray()), new HTuple(calibConfig.Configs.Select(u => u.ImageMarkPoint.Y).ToArray()), new HTuple(calibConfig.Configs.Select(u => u.CurrentPlatPoint.X).ToArray()), new HTuple(calibConfig.Configs.Select(u => u.CurrentPlatPoint.Y).ToArray()), out HTuple matrix); - - List<double> matrix = GetMovementMatrix(calibConfig.Configs.Select(u => u.ImageMarkPoint as CustomizedPoint).ToList(), calibConfig.Configs.Select(u => u.CurrentPlatPoint).ToList(), out string msg); + List<double> matrix = GetMovementMatrix(calibConfig.Configs.Select(u => u.ImageMarkPoint as CustomizedPoint).ToList(), calibConfig.Configs.Select(u => new CustomizedPoint(u.PlatPoint.X, u.PlatPoint.Y)).ToList(), out string msg); var visionConfig = Config.VisionConfigCollection.FirstOrDefault(u => u.CameraId == bind.CameraId && u.PositionCode == position.PositionCode); if (visionConfig != null) @@ -235,7 +131,6 @@ sum += Math.Sqrt((Math.Pow((m.D - platPoints[i].X), 2) + Math.Pow((n.D - platPoints[i].Y), 2))); } - //sum = ((sum / (double)Config.LengthPulseRatio) * 100.0) / ((double)imagePoints.Count); sum = sum / (double)imagePoints.Count; msg = $"鏍囧畾鐐规暟閲�:{imagePoints.Count};鍗曠偣璇樊:{sum.ToString()}鑴夊啿"; @@ -251,18 +146,6 @@ public void CalculateStandardPoint(CalibrationConfigCollection calibConfig, AGVBindUnit bind, PathPosition position) { - //var bind = Config.AGVBindCollection.FirstOrDefault(u => u.CameraId == calibConfig.CameraId); - //if (bind == null) - //{ - // throw new ProcessException("鏈兘鑾峰彇缁戝畾璁惧淇℃伅"); - //} - - //PathPosition position = Config.PositionCollection.FirstOrDefault(u => u.PositionNo == calibConfig.PositionNo); - //if (position == null) - //{ - // throw new ProcessException("鏈兘鑾峰彇姝g‘浣嶇疆淇℃伅"); - //} - CustomizedPointWithAngle markPoint = calibConfig.Configs[0].ImageMarkPoint; var visionConfig = Config.VisionConfigCollection.FirstOrDefault(u => u.CameraId == bind.CameraId && u.PositionCode == position.PositionCode); if (visionConfig != null) @@ -282,51 +165,25 @@ PubSubCenter.Publish(PubTag.CalibAllDone.ToString(), "", $"鏍囧畾瀹屾垚锛屾爣鍑嗙偣:{markPoint.GetDisplayText()}", true); } - public void MultipleStepsProcess(CalibrationConfigCollection calibConfig, AGVBindUnit bind, Action<AGVBindUnit, int, int> sendMessageToRobot) + public void MultipleStepsProcess(CalibrationConfigCollection calibConfig, AGVBindUnit bind) { for (int i = 0; i < calibConfig.Configs.Count; i++) { - SingleStepProcess(calibConfig.Configs[i], sendMessageToRobot, bind, calibConfig.PositionNo, i); + SingleStepProcess(calibConfig.Configs[i], bind, i); } } - public void SendMessageToRobot_Calibration(AGVBindUnit bind, int positionNo, int index) + public void SingleStepProcess(CalibrationConfig config, AGVBindUnit bind, int index) { - bind.Robot.SendMsg(Bro.Device.AuboRobot.RobotMsgAction.Calibration, Bro.Device.AuboRobot.RobotMsgParas.None, positionNo, new List<float>() { index + 1 }); - - _calibReply.CalibHandle.WaitOne(); - - if (_calibReply.CalibIndex != (index + 1) || _calibReply.CalibPositionNo != positionNo) - { - throw new ProcessException("鏍囧畾鍙嶉鐨勭储寮曟垨浣嶇疆淇℃伅涓嶄竴鑷�"); - } - } - - public void SendMessageToRobot_Standard(AGVBindUnit bind, int positionNo, int index) - { - bind.Robot.SendMsg(Bro.Device.AuboRobot.RobotMsgAction.StandardPoint, Bro.Device.AuboRobot.RobotMsgParas.None, positionNo); - - _calibReply.CalibHandle.WaitOne(); - - if (_calibReply.CalibPositionNo != positionNo) - { - throw new ProcessException("鏍囧畾鍙嶉鐨勪綅缃俊鎭笉涓�鑷�"); - } - } - - //PubSubCenter.Subscribe(PubTag.CalibStepDone.ToString(), CalibStepDone); - //PubSubCenter.Subscribe(PubTag.CalibAllDone.ToString(), CalibAllDone); - public void SingleStepProcess(CalibrationConfig config, Action<AGVBindUnit, int, int> sendMessageToRobot, AGVBindUnit bind, int positionNo, int index) - { - sendMessageToRobot.Invoke(bind, positionNo, index); - - config.CurrentPlatPoint = new CustomizedPoint(_calibReply.RobotPosition.X, _calibReply.RobotPosition.Y); + bind.Robot.Move(config.PlatPoint, MoveType.AbsoluteMove, true); using (HObject hImage = CollectHImage(bind.Camera, config.CameraOpConfig, "RobotCalibration")) { var tool = _halconToolDict[config.CameraOpConfig.AlgorithemPath]; - tool.SetDictionary(new Dictionary<string, HTuple>() { { "OUTPUT_X", new HTuple() }, { "OUTPUT_Y", new HTuple() }, { "OUTPUT_Angle", new HTuple() } }, new Dictionary<string, HObject>() { { "INPUT_Image", hImage } }); + tool.InputImageDic.Clear(); + tool.InputImageDic["INPUT_Image"] = hImage; + tool.RunProcedure(); float x = (float)tool.GetResultTuple("OUTPUT_X").D; @@ -342,16 +199,5 @@ PubSubCenter.Publish(PubTag.CalibStepDone.ToString(), index, "", true); } - } - - public class CalibReplyMsg - { - public AutoResetEvent CalibHandle { get; set; } = new AutoResetEvent(false); - - public int CalibIndex { get; set; } = 0; - - public int CalibPositionNo { get; set; } - - public CustomizedPoint RobotPosition { get; set; } = new CustomizedPoint(); } } -- Gitblit v1.8.0