关于机器视觉机械手与相机标定走位点位的计算模块
首先标定要确定机械手和相机的安装方式选择平台属性。
一:眼在手上即标定的对象是相机
二:眼在手外即标定的对象是平台
输入原点坐标即机械手拍照点位置(X,Y,C,R)
选择X,Y,R轴方向及运动步长(写入整形)
点击【点位生成】输出数据表报。
附上界面效果展示
//加密狗访问private void button1_Click(object sender, EventArgs e){System.Diagnostics.Process.Start("Explorer.exe", "http://localhost:1947/");}//退出事件private void button2_Click(object sender, EventArgs e){Process[] pc=Process.GetProcesses();foreach (var item in pc)//{try{if (item.ProcessName =="iexplore"){item.Kill();}}catch (System.Exception ex){Console.WriteLine( ex.Message );}}this.Close();}//生成文件private void button3_Click(object sender, EventArgs e){string path=@"D:\Luster";string files=textBox2.Text;if(files==""){files="1.工程;2.软件;3.数据;4.图片;5.文档;6.标定;7.其他";textBox2.Text=files;}textBox1.Text = Directory.Exists(path).ToString();if (textBox1.Text=="False"){string[] filepaths=files.Split(';');for (int i = 0; i < filepaths.Length; i++){Directory.CreateDirectory(path + "\\" + filepaths[i]);}textBox2.Text = files;MessageBox.Show("文件创建完成!!");}else{MessageBox.Show("文件已创建!!");}}//点击按钮生成标定坐标//需要 原点坐标 轴方向 步长 输出文件位置 private void button4_Click(object sender, EventArgs e){if (Reasult()){StringBuilder sb = new StringBuilder();int stepX=int.Parse(textBox5.Text);int stepY=int.Parse(textBox8.Text);int stepR=int.Parse(textBox6.Text);int selectnum=SelcetNums();List<List<double>> A = CalibrationPointList(stepX, stepY, stepR, selectnum);for (int i = 0; i < A.Count; i++){for (int j = 0; j < A[i].Count; j++){sb.Append(A[i][j]);sb.Append(",");}sb.Append("\r\n");}textBox7.Text=sb.ToString();string fileName = @"C:\Users\至尊宝\Desktop\标定文件.csv";using (FileStream fsw = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Write)){byte[] buffer = Encoding.Default.GetBytes(textBox7.Text);fsw.Write(buffer,0, buffer.Length);} }else{MessageBox.Show("请填入正确的参数信息!");}}//判断条件符合要求private bool Reasult(){if (textBox3.Text.Count() > 4 && (comboBox4.Text == "顺时针" || comboBox4.Text == "逆时针") && (comboBox3.Text == "平台" || comboBox3.Text == "相机") && (comboBox1.Text == "向左" || comboBox1.Text == "向右") && (comboBox2.Text == "向上" || comboBox2.Text == "向下") && Regex.IsMatch(textBox5.Text, @"^\d+$") && Regex.IsMatch(textBox6.Text, @"^\d+$")){return true;}else{return false;}}private List<List<double>> CalibrationPointList(int X,int Y,int R,int SelcectNum){double X1=0;double Y1=0;double C1=0;double R1=0;List<List<double>> L = new List<List<double>>();string[] ArrayPoint = textBox3.Text.Split(',');double XPoint =Convert.ToDouble(ArrayPoint[0]); //Xdouble Ypoint = Convert.ToDouble(ArrayPoint[1]); //Ydouble Cpoint = Convert.ToDouble(ArrayPoint[2]);double Rpoint = Convert.ToDouble(ArrayPoint[3]); //Rint Num = SelcectNum > 0 ? 1 : -1;SelcectNum = Math.Abs(SelcectNum);if (SelcectNum == 1 ){for (int i = 0; i < 8; i++){if (i ==0){X1 = XPoint;Y1 = Ypoint;C1 = Cpoint;R1 = Rpoint;}if (i == 1){X1 = XPoint+X;Y1 = Ypoint+Y;C1 = Cpoint;R1 = Rpoint;}if (i == 2){X1 = XPoint - X;Y1 = Ypoint - Y;C1 = Cpoint;R1 = Rpoint;}if (i == 3){X1 = XPoint - X;Y1 = Ypoint + Y;C1 = Cpoint;R1 = Rpoint;}if (i == 4){X1 = XPoint + X;Y1 = Ypoint - Y;C1 = Cpoint;R1 = Rpoint;}if (i == 5){X1 = XPoint;Y1 = Ypoint;C1 = Cpoint;R1 = Rpoint;}if (i == 6){X1 = XPoint;Y1 = Ypoint;C1 = Cpoint;R1 = Rpoint + R * Num;}if (i == 7){X1 = XPoint;Y1 = Ypoint;C1 = Cpoint;R1 = Rpoint - R * Num;}L.Add(Rownums(X1, Y1, C1, R1));}}if (SelcectNum == 2){for (int i = 0; i < 8; i++){if (i == 0){X1 = XPoint;Y1 = Ypoint;C1 = Cpoint;R1 = Rpoint;}if (i == 1){X1 = XPoint + X;Y1 = Ypoint - Y;C1 = Cpoint;R1 = Rpoint;}if (i == 2){X1 = XPoint - X;Y1 = Ypoint + Y;C1 = Cpoint;R1 = Rpoint;}if (i == 3){X1 = XPoint - X;Y1 = Ypoint - Y;C1 = Cpoint;R1 = Rpoint;}if (i == 4){X1 = XPoint + X;Y1 = Ypoint + Y;C1 = Cpoint;R1 = Rpoint;}if (i == 5){X1 = XPoint;Y1 = Ypoint;C1 = Cpoint;R1 = Rpoint;}if (i == 6){X1 = XPoint;Y1 = Ypoint;C1 = Cpoint;R1 = Rpoint + R * Num;}if (i == 7){X1 = XPoint;Y1 = Ypoint;C1 = Cpoint;R1 = Rpoint - R * Num;}L.Add(Rownums(X1, Y1, C1, R1));}}if (SelcectNum == 3){for (int i = 0; i < 8; i++){if (i == 0){X1 = XPoint;Y1 = Ypoint;C1 = Cpoint;R1 = Rpoint;}if (i == 1){X1 = XPoint - X;Y1 = Ypoint + Y;C1 = Cpoint;R1 = Rpoint;}if (i == 2){X1 = XPoint + X;Y1 = Ypoint - Y;C1 = Cpoint;R1 = Rpoint;}if (i == 3){X1 = XPoint + X;Y1 = Ypoint + Y;C1 = Cpoint;R1 = Rpoint;}if (i == 4){X1 = XPoint - X;Y1 = Ypoint - Y;C1 = Cpoint;R1 = Rpoint;}if (i == 5){X1 = XPoint;Y1 = Ypoint;C1 = Cpoint;R1 = Rpoint;}if (i == 6){X1 = XPoint;Y1 = Ypoint;C1 = Cpoint;R1 = Rpoint + R * Num;}if (i == 7){X1 = XPoint;Y1 = Ypoint;C1 = Cpoint;R1 = Rpoint - R * Num;}L.Add(Rownums(X1, Y1, C1, R1));}}if (SelcectNum == 4){for (int i = 0; i < 8; i++){if (i == 0){X1 = XPoint;Y1 = Ypoint;C1 = Cpoint;R1 = Rpoint;}if (i == 1){X1 = XPoint - X;Y1 = Ypoint - Y;C1 = Cpoint;R1 = Rpoint;}if (i == 2){X1 = XPoint + X;Y1 = Ypoint + Y;C1 = Cpoint;R1 = Rpoint;}if (i == 3){X1 = XPoint + X;Y1 = Ypoint - Y;C1 = Cpoint;R1 = Rpoint;}if (i == 4){X1 = XPoint - X;Y1 = Ypoint + Y;C1 = Cpoint;R1 = Rpoint;}if (i == 5){X1 = XPoint;Y1 = Ypoint;C1 = Cpoint;R1 = Rpoint;}if (i == 6){X1 = XPoint;Y1 = Ypoint;C1 = Cpoint;R1 = Rpoint + R * Num;}if (i == 7){X1 = XPoint;Y1 = Ypoint;C1 = Cpoint;R1 = Rpoint - R * Num;}L.Add(Rownums(X1, Y1, C1, R1));}}if (SelcectNum == 5){for (int i = 0; i < 8; i++){if (i == 0){X1 = XPoint;Y1 = Ypoint;C1 = Cpoint;R1 = Rpoint;}if (i == 1){X1 = XPoint - X;Y1 = Ypoint - Y;C1 = Cpoint;R1 = Rpoint;}if (i == 2){X1 = XPoint + X;Y1 = Ypoint + Y;C1 = Cpoint;R1 = Rpoint;}if (i == 3){X1 = XPoint + X;Y1 = Ypoint - Y;C1 = Cpoint;R1 = Rpoint;}if (i == 4){X1 = XPoint - X;Y1 = Ypoint + Y;C1 = Cpoint;R1 = Rpoint;}if (i == 5){X1 = XPoint;Y1 = Ypoint;C1 = Cpoint;R1 = Rpoint;}if (i == 6){X1 = XPoint;Y1 = Ypoint;C1 = Cpoint;R1 = Rpoint - R * Num;}if (i == 7){X1 = XPoint;Y1 = Ypoint;C1 = Cpoint;R1 = Rpoint + R * Num;}L.Add(Rownums(X1, Y1, C1, R1));}}if (SelcectNum == 6){for (int i = 0; i < 8; i++){if (i == 0){X1 = XPoint;Y1 = Ypoint;C1 = Cpoint;R1 = Rpoint;}if (i == 1){X1 = XPoint - X;Y1 = Ypoint + Y;C1 = Cpoint;R1 = Rpoint;}if (i == 2){X1 = XPoint + X;Y1 = Ypoint - Y;C1 = Cpoint;R1 = Rpoint;}if (i == 3){X1 = XPoint + X;Y1 = Ypoint + Y;C1 = Cpoint;R1 = Rpoint;}if (i == 4){X1 = XPoint - X;Y1 = Ypoint - Y;C1 = Cpoint;R1 = Rpoint;}if (i == 5){X1 = XPoint;Y1 = Ypoint;C1 = Cpoint;R1 = Rpoint;}if (i == 6){X1 = XPoint;Y1 = Ypoint;C1 = Cpoint;R1 = Rpoint - R * Num;}if (i == 7){X1 = XPoint;Y1 = Ypoint;C1 = Cpoint;R1 = Rpoint + R * Num;}L.Add(Rownums(X1, Y1, C1, R1));}}if (SelcectNum == 7){for (int i = 0; i < 8; i++){if (i == 0){X1 = XPoint;Y1 = Ypoint;C1 = Cpoint;R1 = Rpoint;}if (i == 1){X1 = XPoint + X;Y1 = Ypoint - Y;C1 = Cpoint;R1 = Rpoint;}if (i == 2){X1 = XPoint - X;Y1 = Ypoint + Y;C1 = Cpoint;R1 = Rpoint;}if (i == 3){X1 = XPoint - X;Y1 = Ypoint - Y;C1 = Cpoint;R1 = Rpoint;}if (i == 4){X1 = XPoint + X;Y1 = Ypoint + Y;C1 = Cpoint;R1 = Rpoint;}if (i == 5){X1 = XPoint;Y1 = Ypoint;C1 = Cpoint;R1 = Rpoint;}if (i == 6){X1 = XPoint;Y1 = Ypoint;C1 = Cpoint;R1 = Rpoint - R * Num;}if (i == 7){X1 = XPoint;Y1 = Ypoint;C1 = Cpoint;R1 = Rpoint + R * Num;}L.Add(Rownums(X1, Y1, C1, R1));}}if (SelcectNum == 8){for (int i = 0; i < 8; i++){if (i == 0){X1 = XPoint;Y1 = Ypoint;C1 = Cpoint;R1 = Rpoint;}if (i == 1){X1 = XPoint + X;Y1 = Ypoint + Y;C1 = Cpoint;R1 = Rpoint;}if (i == 2){X1 = XPoint - X;Y1 = Ypoint - Y;C1 = Cpoint;R1 = Rpoint;}if (i == 3){X1 = XPoint - X;Y1 = Ypoint + Y;C1 = Cpoint;R1 = Rpoint;}if (i == 4){X1 = XPoint + X;Y1 = Ypoint - Y;C1 = Cpoint;R1 = Rpoint;}if (i == 5){X1 = XPoint;Y1 = Ypoint;C1 = Cpoint;R1 = Rpoint;}if (i == 6){X1 = XPoint;Y1 = Ypoint;C1 = Cpoint;R1 = Rpoint - R * Num;}if (i == 7){X1 = XPoint;Y1 = Ypoint;C1 = Cpoint;R1 = Rpoint + R * Num;}L.Add(Rownums(X1, Y1, C1, R1));}}return L;}private List<double> Rownums(double X,double Y,double C,double R){List<double> a = new List<double>();a.Add(X);a.Add(Y);a.Add(C);a.Add(R);return a;}//返回指定类型private int SelcetNums(){int index = 0;string attribute = comboBox3.Text;string Xattribute = comboBox1.Text;string Yattribute = comboBox2.Text;string Rattribute = comboBox4.Text;if (attribute=="平台"){if (Rattribute=="顺时针"){if (Xattribute == "向右" && Yattribute == "向下"){index=1;}else if (Xattribute == "向右" && Yattribute == "向上"){index = 2;}else if (Xattribute == "向左" && Yattribute == "向下"){index = 3;}else if (Xattribute == "向左" && Yattribute == "向上"){index = 4;}}else{if (Xattribute == "向右" && Yattribute == "向下"){index = -1;}else if (Xattribute == "向右" && Yattribute == "向上"){index = -2;}else if (Xattribute == "向左" && Yattribute == "向下"){index = -3;}else if (Xattribute == "向左" && Yattribute == "向上"){index = -4;}}}else{if (Rattribute == "顺时针"){if (Xattribute == "向右" && Yattribute == "向下"){index = 5;}else if (Xattribute == "向右" && Yattribute == "向上"){index = 6;}else if (Xattribute == "向左" && Yattribute == "向下"){index = 7;}else if (Xattribute == "向左" && Yattribute == "向上"){index = 8;}}else{if (Xattribute == "向右" && Yattribute == "向下"){index = -5;}else if (Xattribute == "向右" && Yattribute == "向上"){index = -6;}else if (Xattribute == "向左" && Yattribute == "向下"){index = -7;}else if (Xattribute == "向左" && Yattribute == "向上"){index = -8;}}}return index;}private void Form1_Load(object sender, EventArgs e){}//实时显示世间private void timer1_Tick(object sender, EventArgs e){label9.Text = DateTime.Now.ToString();}private void groupBox1_Enter(object sender, EventArgs e){}
关于机器视觉机械手与相机标定走位点位的计算模块相关推荐
- 机器视觉篇之相机标定
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|新机器视觉 在图像测量过程以及机器视觉应用中,为确定空间 ...
- 《机器视觉算法与应用》第3章 机器视觉算法之相机标定——学习笔记
文章目录 3.9 相机标定 3.9.1 面阵相机的摄像机模型 针孔摄像机模型的透视投影关系 3.9.2 线阵相机的相机模型 3.9.3 标定过程 第一个需求 第二个需求 3.9.4 从单幅图像中提取世 ...
- OpenCV-Python相机标定
OpenCV-Python相机标定--张正友标定法为例(待更新) 写在前面 数学/物理原理(不更新) 编程实现 参考与致谢 写在前面 为什么机器视觉要用相机标定:直接目的是求出相机的内.外参数,以及畸 ...
- 立体视觉入门指南:相机标定之Zhang式标定法
作者丨李迎松@知乎 来源丨https://zhuanlan.zhihu.com/p/378819083 编辑丨3D视觉工坊 亲爱的同学们,我们的世界是3D世界,我们的双眼能够观测三维信息,帮助我们感知 ...
- 立体视觉入门指南(3):相机标定之张式标定法【超详细值得收藏】
亲爱的同学们,我们的世界是3D世界,我们的双眼能够观测三维信息,帮助我们感知距离,导航避障,从而翱翔于天地之间.而当今世界是智能化的世界,我们的科学家们探索各种机器智能技术,让机器能够拥有人类的三维感 ...
- 机器视觉的相机标定到底是什么?
转载:https://www.zhihu.com/question/29448299 之前做识别算法现在开始学习标定.用matlab. 刚开始看标定,先从单个相机开始看.标定板为何需要在不同角度拍20 ...
- 机器视觉-相机标定及畸变矫正
摘要:本文首先介绍了针孔相机模型(线性模型),然后推导四个坐标轴变换的关系,引出R.T.K.D中包含相机的5个内参,6个外参.然后介绍相机畸变的原因以及畸变模型(非线性模型),引出相机的5个畸变参数. ...
- Halcon学习笔记——机器视觉应用工程开发思路及相机标定
机器视觉应用工程开发思路 机器视觉应用工程主要可划分为两大部分,硬件部分和软件部分. 1.硬件部分,硬件的选型至关重要,决定了后续工作是否可以正常开展,其中关键硬件部分包括:光源,相机以及镜头. 2. ...
- 工业现场相机坐标系和机械手坐标系的标定
原文:https://blog.csdn.net/kaychangeek/article/details/73878994 参考:https://blog.csdn.net/qq_16481211/a ...
最新文章
- WCF 4.0 进阶系列 – 第十二章 实现单向操作和异步操作(中)
- caffe-cuda测试
- 更新ubuntu软件源
- (转载)Android性能优化典范
- Sdk Manager.exe 闪退问题的解决
- harbor镜像清理:使用registry:2.6.2-photon garbage-collect
- jenkins搭建_自动化测试系列之jenkins配置搭建环境
- python弹出窗口 闪烁_Python。得到闪烁/闪烁的窗口
- puppet变量、数据类型及类(03)
- android 音乐播放器----歌词在线下载
- powerpoint 2016表格中添加行
- distcp集群迁移问题总结
- 为什么开发环境如此之乱
- kubernetes Container、Pod、Replicaset、Service、Deployment、Lable、Statefulset关系和区别
- vs 执行单个文件,如cpp
- 邮件客户端 gmail hotmail
- 华东师范大学计算机考研专业,2017年华东师范大学计算机科学与软件工程学院考研专业目录...
- ssm+Vue计算机毕业设计益学(程序+LW文档)
- Angular2属性绑定
- sklearn代码11 1-熵