少有人走的路

勇哥的工业自动化技术网站

来料发生位移旋转的解决方案----一个mark点的定位

在二维平面中,相同的来料都有它关于来料相同的平面矩阵,因此在初始来料上规划好路径后只要得到二次来料它发生的位移以及旋转角度就能很容易得到这次来料上的规划路径关系,从而控制机械手准确走完规划路径。


但当来料过大超出相机抓图的视野就可以通过mark点来获得这两个关系,mark点可以是一个、两个或者三个,分别取决于不同的场合。关于一个mark点的定位就非常简单了,但有个局限就是这个mark点必要很容确定旋转度数。


测试代码:

*来料发生位移+旋转
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
dev_set_draw ('margin')
*模拟来料,这是一个正常的来料
gen_rectangle1 (ROI_0, 162.5, 111.5, 250.5, 364.5)
gen_rectangle1 (ROI_Mark, 169, 119, 186, 144)
concat_obj (ROI_0, ROI_Mark, ObjectsConcat)
*我们以这个区域的  中心点为基准点
area_center (ROI_Mark, Area, Row, Column)
gen_cross_contour_xld (Cross, Row, Column, 16, 0)
disp_message (WindowHandle, '用鼠标在图像上确定一个点来模拟抓取点', 'window', 12, 12, 'white', 'false')
draw_point (WindowHandle, pRow, pColumn)
dev_set_color ('green')
gen_cross_contour_xld (pCross, pRow, pColumn, 26, 0)
disp_message (WindowHandle,'('+pRow+','+pColumn+')', 'window', pRow, pColumn, 'green', 'false')
****************************************************
*第二次来料发生位移+旋转
dev_open_window (0, 512, 512, 512, 'black', WindowHandle1)
disp_message (WindowHandle1, '这是第二次来料模拟', 'window', 12, 12, 'white', 'false')
dev_set_color ('red')
*得到二次来料mark点旋转角度和坐标
Phi:=rad(60)
moveR:=200
moveC:=300
*创建变换模型
vector_angle_to_rigid (Row, Column, 0, moveR, moveC, Phi, HomMat2D)
*区域变换
affine_trans_region (ObjectsConcat, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
 
****************************************************
*点的仿射变换,拿到最终结果
affine_trans_point_2d (HomMat2D, pRow, pColumn, Qx, Qy)
dev_set_color ('green')
gen_cross_contour_xld (pCross1, Qx, Qy, 26, Phi)
disp_message (WindowHandle1,'('+Qx+','+Qy+')', 'window', Qx, Qy, 'green', 'false')

其中绿色十字即是变换前后测试的点

image.png


发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2025年12月    »
1234567
891011121314
15161718192021
22232425262728
293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
文章归档
网站收藏
友情链接

Powered By Z-BlogPHP 1.7.3

Copyright www.skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864