目录
- 1.2.1 平移旋转标定:平移旋转标定模块的使用方法
- 1.2.2 旋转标定:旋转标定模块的使用方法
- 1.2.3 单点抓取:单点抓取模块的使用方法
- 1.2.4 单点纠偏:单点纠偏模块的使用方法
- 1.2.5 单点对位:单点映射对位模块的使用方法
- 1.2.6 流程配置:配置流程的输入、输出与显示的方法
- 1.2.7 数据队列:多流程间传图及协作的方法
- 1.2.8 脚本模块:脚本模块保存图像的方法
- 1.2.9 创建基准:全局触发配置模块动作的方法
- 1.2.10 条件检测:条件检测结果显示颜色为模块最终检测状态的方法
1.2.1 平移旋转标定:平移旋转标定模块的使用方法
描述
环境:VM4.2
现象:VM二次开发如何使用平移旋转标定模块?
解答
适用场景:单相机与机构(模组/机械手)的标定场景。
标定方式:单相机与机构做平移标定(9点标定)或平移旋转标定(12点标定)。前者适用于吸嘴与旋转轴共轴的场景,后者适用于吸嘴与旋转轴不共轴的场景)。
限制条件:不支持多相机联立坐标系。
模块界面如下:
(1)标定类型
确定标定类型是平移标定(九点标定)还是平移旋转标定(十二点标定)。平移标定如左下图:只需图像点和物理点;平移旋转标定如右下图:需要图像点、物理点、图像角度和物理角度。
(2)标定点获取
支持触发获取及手动输入两种方式。触发获取:需要订阅图像点和机构物理点作为输入参数;手动输入:手动填写图像点及物理点坐标。其中标定点输入支持按点和按坐标两种方式。
注意:由于手动输入模式缺少图像角度,故无法计算旋转一致性和左右手手性。
(3)相机模式:支持相机静止和相机运动两种模式。自由度:支持三种自由度,默认仿射模式。
(4)平移次数:默认9次可根据实际情况进行调整(4-16)。旋转次数:平移标定自动隐藏;平移旋转标定需手动输入,建议3次,可根据实际情况进行调整(3-16)。
(5)更新文件:默认不更新,开启后若进行一次标定,则会自动更新指定路径下的标定文件。标定文件路径:设置标定文件保存的路径(保存为xml格式)。
(6)示教(选择项,可关闭):开启后,若通讯触发字符与输入的外部触发字符相匹配,则将示教的基准图像坐标,示教点物理坐标,拍照位物理坐标(默认标定中心点坐标,如九点标定则为第五点坐标)保存至标定文件。
问题根因
不熟悉平移旋转标定模块。
1.2.2 旋转标定:旋转标定模块的使用方法
描述
环境:VM4.2
现象:VM二次开发如何使用旋转标定模块?
解答
适用场景:单相机与机构(模组/机械手)的旋转中心标定场景。
标定方式:相机静止时,机构带标定物旋转N次,相机运动时,机构带相机旋转N次,标定机构旋转轴中心坐标。
限制条件:保证运动是纯旋转(无平移),每次旋转角度需严格相等,旋转次数至少为3次。
模块界面如下:
(1)图像点
图像中特征点的像素坐标。输入支持按点和按坐标两种方式。
(2)物理旋转角度
机构每次旋转的角度值。
(3)旋转次数
机构旋转的次数。
(4)标定文件(如未加载平移标定文件,则无法标定旋转中心)
加载平移标定文件,支持.xml和.iwcal格式。刷新信号的填写说明为:空或0时,表示该模块读取标定文件后,便不再更新,一直使用第一次读取的标定文件;非零时,表示该模块运行时会读取该路径下的标定文件,当该路径下的标定文件发生更新时,模块读取的标定文件就是最新的。
(5)模块结果
模块结果包括模块状态、剩余标定次数、旋转轴图像点、旋转中心物理点、旋转像素平均误差、旋转真实平均误差。
模块状态:运行成功为1,运行失败为0
剩余标定次数:该值等于标定总次数减去标定已运行次数,值为0表示旋转标定结束
旋转轴图像点:旋转轴中心的像素坐标值
旋转中心物理点:旋转轴中心的物理坐标值
旋转像素平均误差:旋转标定的拟合平均误差,单位为像素
旋转真实平均误差:旋转标定的拟合平均误差,单位为平移标定的物理运动量(通常为mm)
问题根因
不熟悉旋转标定模块。
1.2.3 单点抓取:单点抓取模块的使用方法
描述
环境:VM4.2
现象:VM二次开发如何使用单点抓取模块?
解答
适用场景:单相机拍物料的抓取场景。
标定方式:单相机与机构做平移标定(9点标定)或平移旋转标定(12点标定)。前者适用于吸嘴与旋转轴共轴的场景,后者适用于吸嘴与旋转轴不共轴的场景)。
限制条件:不支持多相机联立坐标系、分离轴抓取、相机拍照位变化(可后接变量计算模块实现)等场景。
模块界面如下:
(1)输入方式
确定标定类型是平移标定还是平移旋转标定,确定是按点输入还是按坐标输入。可以订阅前序模块的输出结果,也可以手动输入。
(2)像素点
在抓取场景中,需要依次输入图像基准点和图像运行点。
基准像素点的输入步骤如下图所示,输入方式需选择“按坐标”:
基准点创建成功时,弹窗如下图所示:
运行像素点的输入步骤如下图所示:
(3)示教抓取物理点:物料在基准位置时,机构抓取物料的绝对物理坐标
示教拍照物理点:物料在基准位置时,机构携带相机拍照的绝对物理坐标
如无需示教抓取物理点、示教拍照物理点,则手动输入0
(4)标定文件
加载本地标定文件,支持.xml和.iwcal格式。刷新信号的填写说明为:空或0时,表示该模块读取标定文件后,便不再更新,一直使用第一次读取的标定文件;非零时,表示该模块运行时会读取该路径下的标定文件,当该路径下的标定文件发生更新时,模块读取的标定文件就是最新的。
(5)模块结果
模块结果分为相对坐标及绝对坐标,绝对坐标为机构抓取的绝对物理位置。
问题根因
不熟悉单点抓取模块。
1.2.4 单点纠偏:单点纠偏模块的使用方法
描述
环境:VM4.2
现象:VM二次开发如何使用单点纠偏模块?
解答
适用场景:单相机拍物料的纠偏场景。
标定方式:单相机与机构做平移标定(9点标定)或平移旋转标定(12点标定)。前者适用于吸嘴与旋转轴共轴的场景,后者适用于吸嘴与旋转轴不共轴的场景)。
限制条件:不支持多相机联立坐标系、分离轴纠偏、相机拍照位变化(可后接变量计算模块实现)等场景。
模块界面如下:
(1)输入方式
确定标定类型是平移标定还是平移旋转标定,确定是按点输入还是按坐标输入。可以订阅前序模块的输出结果,也可以手动输入。
(2)像素点
在纠偏场景中,需要依次输入图像基准点和图像运行点。
基准像素点的输入步骤如下图所示,输入方式需选择“按坐标”:
基准点创建成功时,弹窗如下图所示:
运行像素点的输入步骤如下图所示:
(3)示教物理点:物料在基准位置时的机构绝对物理坐标
如无需示教物理点,则手动输入0
(4)标定文件
加载本地标定文件,支持.xml和.iwcal格式。刷新信号的填写说明为:空或0时,表示该模块读取标定文件后,便不再更新,一直使用第一次读取的标定文件;非零时,表示该模块运行时会读取该路径下的标定文件,当该路径下的标定文件发生更新时,模块读取的标定文件就是最新的。
(5)模块结果
模块结果分为相对坐标及绝对坐标,绝对坐标为机构纠偏的绝对物理位置。
问题根因
不熟悉单点纠偏模块。
1.2.5 单点对位:单点映射对位模块的使用方法
描述
环境:VM4.2
现象:VM二次开发如何使用单点映射对位模块?
解答
适用场景:上相机拍目标,下相机拍对象的对位贴合场景。
标定方式:上相机到下相机做映射标定,下相机与机构做平移旋转标定(12点标定)。
限制条件:不支持单相机(循环)对位贴合,上、下相机各自基准对位等场景。
模块界面如下:
(1)输入方式
确定是按点输入还是按坐标输入,可以订阅前序模块的输出结果,也可以手动输入。
(2)像素点
在单点映射对位场景中,需要依次输入对象像素点和目标像素点,输入方式选择“按坐标”:
给目标像素直线起点/终点的X、Y坐标订阅数值(映射后夹角会变化,因此需要将目标图像中指定直线映射到对象坐标系再求目标点的角度),输入如下图所示:
(3)示教抓理点:映射标定时机构反向吸取标定板的绝对物理坐标
如无需示教物理点,则手动输入0
(4)标定文件(映射标定文件将上相机中目标像素映射到下相机的像素坐标系中,N点标定文件是将下相机的像素坐标映射到机构的物理坐标系中)
加载本地标定文件,支持.xml和.iwcal格式。刷新信号的填写说明为:空或0时,表示该模块读取标定文件后,便不再更新,一直使用第一次读取的标定文件;非零时,表示该模块运行时会读取该路径下的标定文件,当该路径下的标定文件发生更新时,模块读取的标定文件就是最新的。
(5)模块结果
模块结果分为相对坐标及绝对坐标,绝对坐标为机构对位的绝对物理位置。
问题根因
不熟悉单点映射对位模块。
1.2.6 流程配置:配置流程的输入、输出与显示的方法
描述
环境:VM4.2
现象:如何在VM中给流程配置输入设置、输出设置与显示设置
解答
下面以在流程2订阅流程1中图像为例介绍配置流程输入、流程输出与显示设置
1、如图方案中存在两个流程,流程1与流程2 ,选择流程1前的小扳手
2、如图配置流程1的输出图像为图像源1的图像
3、在点击橘色箭头所指图标,将流程1与流程2连接。
4、再如步骤1将流程2的输入订阅为流程1是输出
5、然后在流程2中的任意模块的模块输入中就可以订阅到流程2的输入图像
6、同理可配置显示设置
问题根因
不熟悉VM配置流程输入、输出与显示的方法
1.2.7 数据队列:多流程间传图及协作的方法
描述
环境:VM4.2
现象:如何两个流程执行得到的图像拼接输出(流程1和流程2都执行完毕后,将两个流程输出的图像传输到流程3中拼接)?
解答
1 首先需要拖拽数据队列模块并配置需要入队的列,数据类型为IMAGE,然后配置触发流程(触发流程逻辑为所有队列都有数据时才会触发列表中的流程)。
2 配置流程1和流程2:流程1和流程2中配置发送数据模块,将图像数据传入数据队列。
3 配置流程3:流程3中配置接收数据模块,取出数据队列中的图像数据并拼接。
问题根因
不熟悉数据队列的使用方法。
1.2.8 脚本模块:脚本模块保存图像的方法
描述
环境:VM4.0及以上
现象:如何使用脚本模块保存前序模块传入的图像?
解答
C#
public bool Process()
{
ImageData DetImg = new ImageData();
GetImageValue("DetImg",ref DetImg);
byte[] bytes = new byte[1024 * 1024];
bytes = DetImg.Buffer;
int wid = DetImg.Width;
int hei = DetImg.Heigth;
Mat src = new Mat();
if (ImagePixelFormate.MONO8 == DetImg.PixelFormat)
{
int dataLen = wid * hei;
src.Create(hei, wid, MatType.CV_8UC1);
Marshal.Copy(DetImg.Buffer, 0, src.Ptr(0), dataLen);
}
else if (ImagePixelFormate.RGB24 == DetImg.PixelFormat)
{
int dataLen = wid * hei * 3;
src.Create(hei, wid, MatType.CV_8UC3);
Marshal.Copy(DetImg.Buffer, 0, src.Ptr(0), dataLen);
Cv2.CvtColor(src, src, ColorConversionCodes.RGB2BGR);
}
string savePath = "E:\\Test"; // 存图路径
string imageName = "1.jpg"; // 存图名称
if (!Directory.Exists(savePath))
{
Directory.CreateDirectory(savePath);
}
Cv2.ImWrite(savePath + "\\" + imageName, src);
src.Release();
return true;
}
问题根因
不熟悉使用脚本模块调用第三方库的方法。
1.2.9 创建基准:全局触发配置模块动作的方法
描述
环境:VM4.2
现象:如何通过全局触发模块动作?例如创建基准。
解答
1.打开单点抓取模块路径下的SinglePointGrabModuAlgorithmTab.xml配置文件,在Item集合下面加上Command节点。
<Command Name="BasicInit" NameSpace="Standard">
<Description> BasicPoitnInit </Description>
<DisplayName> BasicPoitnInit </DisplayName>
<Visibility>Expert</Visibility>
<AccessMode>Rw</AccessMode>
<CustomVisible>False</CustomVisible>
<SupportCommTrigger>True</SupportCommTrigger>
</Command>
2.保存配置文件,重新启动VM
可以在全局触发处配置模块动作处可以看到相应模块的动作,如果需要显示中文,将配置节点中的DisplayName属性的值添加到多语言。
问题根因
不熟悉如何配置从而触发模块动作
1.2.10 条件检测:条件检测结果显示颜色为模块最终检测状态的方法
描述
环境:VM4.2
现象:如何将条件检测结果显示颜色设置为模块最终检测状态?
解答
1.修改条件检测模块结果显示内容为条件检测结果。
2.修改条件检测模块IfModuleDisplay.xml文件的Status节点,将映射改为NIfResult.
问题根因
不熟悉模块xml文件的使用。