SCARA机器人手眼标定之目标抓取的例子:

显示如何基于由SCARA手眼校准确定的校准信息,使用SCARA机器人执行拾取和放置应用程序。 在第一步骤中,根据模型图像定义形状模型。 然后,基于该形状模型,在每个图像中搜索对象。 对于一个选定的对象,计算可用于掌握该对象的机器人坐标。 为了使该示例适用于实际应用,必须从相机获取图像(而不是从文件读取),并且必须实施机器人的控制(而不是在本示例中被注释掉的相应行)。 通常,图像必须在匹配之前校正。 如果摄像机完全正交于测量平面,则此步骤可以仅被省略。 要使用提供的示例图像运行示例程序,RectifyImages必须设置为true。

RectifyImages := true

*使用实例图像

RectifyImages := true

***********读取手眼标定结果***********************************

try

* 读取机器人坐标系下摄像机位姿

read_pose ('cam_in_base_pose.dat', CamInBasePose)

*读取摄像机内参

read_cam_par ('camera_parameters.dat', CameraParam)

*读取摄像机坐标系下测量平面位姿

read_pose ('measurement_plane_in_cam_pose.dat', MPInCamPose)

catch (Exception)

*当没有找到时,可以通过SCARA机械手有眼标定来获取位姿和摄像机内参

CamInBasePose := [0.05592166548,0.19497621789,0.48025117245,180.09816119,29.85593363,179.94389014,0]

CameraParam := [0.0165251,-642.277,4.65521e-006,4.65e-006,595.817,521.75,1280,1024]

MPInCamPose := [0.0045679683065,-0.0028695297318,0.4088853425,359.78658429,29.732027579,0.22946472765,0]

endtry

if (RectifyImages)

*获取摄像机坐标系下测量平面位姿校正后的映射关系

prepare_rectification_map (Map, CameraParam, MPInCamPose, MappingScale, MPInCamPoseMapping)

*将图像坐标系下圆点[0,0]坐标转换为世界坐标系下MapUpperLeftX, MapUpperLeftY坐标

image_points_to_world_plane (CameraParam, MPInCamPoseMapping, \

0, 0, 'm', MapUpperLeftX, MapUpperLeftY)

endif

*

dev_update_off ()

*该参数确定使用find_shape_model查找的形状模型可以部分在图像外面,允许

set_system ('border_shape_models', 'true')

***************对含标定板图像进行校正********************

//这里,应该建立与机器人的连接,并且机器人应该移动到一个定义的待机姿态,允许获取测量平面的未被遮挡的图像

//定义要抓取的对象形状模型

//获取模型的图像

* 读取图像模板

read_image (Image, '3d_machine_vision/handeye/scara_stationary_cam_setup_01_metal_parts_01')

if (RectifyImages)

*通过映射投影图对图像进行校正

map_image (Image, Map, ModelImage)

else

copy_image (Image, ModelImage)

endif

*关闭打开的窗口

dev_close_window ()

*打开一个新窗口

dev_open_window_fit_image (ModelImage, 0, 0, 600, 600, WindowHandle)

*设置字体信息:字体大小14,字体类型:mono,粗体

set_display_font (WindowHandle, 16, 'mono', 'true', 'false')

*清除窗口内容

dev_clear_window ()

*显示变换后的图像

dev_display (ModelImage)

*设置字宽度

dev_set_line_width (2)

********创建形状模板*********************************

*产生一个标准矩形

gen_rectangle1 (ModelROI, 400, 500, 1100, 1300)

*对图像进行高斯滤波

gauss_filter (ModelImage, ImageGauss, 5)

*剪切矩形里图像

reduce_domain (ImageGauss, ModelROI, ImageReduced)

*用剪切图像创建形状模板

create_shape_model (ImageReduced, 'auto', rad(0), rad(360), 'auto',\

'auto', 'use_polarity', [10,50], 'auto', ModelID)

*获取模板矩形区域的面积,中心坐标;

area_center (ModelROI, ModelROIArea, ModelROIRow, ModelROIColumn)

*显示模板轮廓

dev_display_shape_matching_results (ModelID, 'green', ModelROIRow, ModelROIColumn, 0, 1, 1, 0)

*通过记录相应的机器人姿势来定义物体上的抓取点

DefineGraspingPointByRobot := true

//指定对象的抓取点

//它要在图像中(只有当对象可以由工具以任何方向拾取时)

//或者通过用机器人抓取它并记录相应的机器人姿态

if (DefineGraspingPointByRobot)

dev_set_colored (12)

*机器人坐标系下模板抓取点位姿

GraspingPointModelInBasePose := [0.2592,0.1997,0.1224,0,0,1.2572,0]

*位姿反转,获取摄像机坐标系下机器人位姿

pose_invert (CamInBasePose, BaseInCamPose)

*将摄像机坐标系下机器人位姿转换为其次变换矩阵

pose_to_hom_mat3d (BaseInCamPose, BaseInCamHomMat3D)

*将仿射三维变换应用于点【GraspingPointModelInBasePose[0], \

*GraspingPointModelInBasePose[1], GraspingPointModelInBasePose[2]】

affine_trans_point_3d (BaseInCamHomMat3D, GraspingPointModelInBasePose[0], \

GraspingPointModelInBasePose[1], GraspingPointModelInBasePose[2], Qx, Qy, Qz)

*把点【Qx, Qy, Qz】投影到图像坐标系

project_3d_point (Qx, Qy, Qz, CameraParam, GraspingPointModelRow, GraspingPointModelColumn)

*抓取模板角度,位姿格式:[TransX; TransY ; TransZ; RotX; RotY; RotZ]

GraspingPointModelAngle := GraspingPointModelInBasePose[5]

*将图像坐标系下抓取位置点转换为世界坐标下,参数Scale可以缩放得到的三维坐标

image_points_to_world_plane (CameraParam, MPInCamPoseMapping, GraspingPointModelRow,\

GraspingPointModelColumn, MappingScale, GraspingPointModelXMP, GraspingPointModelYMP)

*当前抓取坐标减去原点坐标

GraspingPointModelRow := GraspingPointModelYMP - MapUpperLeftY / MappingScale

GraspingPointModelColumn := GraspingPointModelXMP - MapUpperLeftX / MappingScale

endif

*显示模板矩形的面积和中心坐标

area_center (ModelROI, ModelROIArea, ModelROIRow, ModelROIColumn)

*设置模板原点坐标,该原点相对于形状模板重心的位置[GraspingPointModelRow - ModelROIRow,

* GraspingPointModelColumn - ModelROIColumn]

*设置手眼抓取零件位置与零件重心偏移量

set_shape_model_origin (ModelID, GraspingPointModelRow - ModelROIRow, \

GraspingPointModelColumn - ModelROIColumn)

disp_continue_message (WindowHandle, 'black', 'true')

stop ()

*******循环读取机器人要抓取的物体的图像*********************

*将摄像机坐标系下测量平面位姿转换为其次变换矩阵

pose_to_hom_mat3d (MPInCamPoseMapping, MPInCamHomMat3DMapping)

//在下列图像中找被抓取的物体

for ImageIdx := 2 to 6 by 1

* 获取图像

read_image (Image,\

'3d_machine_vision/handeye/scara_stationary_cam_setup_01_metal_parts_'+ ImageIdx$'02d')

*校正图像

if (RectifyImages)

map_image (Image, Map, SearchImage)

else

copy_image (Image, SearchImage)

endif

dev_clear_window ()

dev_display (SearchImage)

*在校正图像中寻找工件模板

find_shape_model (SearchImage, ModelID, rad(0), rad(360), 0.5, 0, 0.5,\

'least_squares', [0,3], 0.9, Row, Column, Angle, Score)

if (|Row|

disp_message (WindowHandle,'No objects found', 'window', 12, 12, 'black', 'true')

continue

endif

*

* 获取最左边工件的抓取坐标和角度

LeftmostIdx := sort_index(Column)[0]

GraspingPointRow := Row[LeftmostIdx]

GraspingPointColumn := Column[LeftmostIdx]

GraspingPointAngle := Angle[LeftmostIdx]

*

* 显示匹配结果和待抓取的零件

dev_display_shape_matching_results (ModelID, 'blue', Row, Column, Angle, 1, 1, 0)

dev_display_shape_matching_results (ModelID, 'green', GraspingPointRow,\

GraspingPointColumn, GraspingPointAngle, 1, 1, 0)

disp_message (WindowHandle, |Row| + ' objects found (Green: Object to be grasped)',\

'window', 12, 12, 'black', 'true')

disp_continue_message (WindowHandle, 'black', 'true')

*

* 计算出机器人坐标系下校正对象的位姿

calculate_point_to_approach_scara_stationary (GraspingPointRow, GraspingPointColumn, \

GraspingPointAngle + rad(GraspingPointModelAngle), RectifyImages, \

MapUpperLeftX, MapUpperLeftY,\

MappingScale, MPInCamHomMat3DMapping, CameraParam, MPInCamPose, \

CamInBasePose, ObjInBasePose)

*

*将摄像机坐标系下校正对象位姿中X,Y,Z偏移量转换为mm

ToolInBasePoseMM := [ObjInBasePose[0:2] * 1000,ObjInBasePose[3:6]]

* Pick and place the object

*在这里,机器人应该移动到上面确定的对象的位置(ToolInBasePoseMM),在那里对象应该被拾取,

*然后放置在某个预定位置(像PlacePositionInBasePoseMM)。

*最后,机器人应该再次移动到备用姿势,以便拍摄测量平面的未被遮挡的图像。

stop ()

endfor

//这儿机器人连接被关闭

*清除形状模板

clear_shape_model (ModelID)

**该参数确定使用find_shape_model查找的形状模型可以部分在图像外面,禁止

set_system ('border_shape_models', 'false')

dev_clear_window ()

#转载请注明出处 www.skcircle.com 《少有人走的路》勇哥的工业自动化技术网站。如果需要本贴图片源码等资源,请向勇哥索取。

scare机器人如何手眼标定_SCARA机器人手眼标定之目标抓取相关推荐

  1. scara机器人dh参数表_SCARA机器人技术参数.docx

    更多相关参考论文设计文档资源请访问/lzj781219 本毕业论文包含包含项目源代码,项目设计说明书.任务书.报告书以及文献参考翻译.CAD设计文件以及仿真建模文件,资料请联要 SCARA机器人技术参 ...

  2. 基于视觉的机器人抓取:从物体定位、物体姿态估计到平行抓取器抓取估计

    编者荐语 抓取综合方法是机器人抓取问题的核心,本文从抓取检测.视觉伺服和动态抓取等角度进行讨论,提出了多种抓取方法. 转载自丨3D视觉开发者社区 目 录 / contents 1. 引言 1.1  抓 ...

  3. 机器人Get抓取新技能,轻松帮你整理混乱桌面(IROS2021)

    作者 | 李一鸣 编辑 | 杨怡(AI科技评论) 抓取是人类和物体最基础的交互方式,机器人和物体之间的关系也是一样.然而,让机器人具有比肩人类的抓取能力并非易事,尤其是杂乱场景下对通用物体的抓取能力, ...

  4. 机器人识别抓取笔记(基于视觉的机器人抓取——从物体定位、物体姿态估计到平行抓取器抓取估计:综述)

    Real-Time Deep Learning Approach to Visual Servo Control and Grasp Detection for Autonomous Robotic ...

  5. 【机器人识别抓取】基于视觉的机器人抓取——从物体定位、物体姿态估计到平行抓取器抓取估计

    目录 导读 1 引言 1.1 抓取综合方法 1.2 基于视觉的机器人抓取系统 2 抓取检测.视觉伺服和动态抓取 2.1抓取检测 2.2 视觉伺服控制 2.3 动态抓取 3 本文实现的方法 3.1 网络 ...

  6. 数量级提升!深度学习让机器人抓取更高效

    作者 | Jeffrey Ichnowski等 译者 | 凌霄 出品 | AI科技大本营(ID:rgznai100) 摘要 电子商务仓库中的拣选机器人需要快速计算各种配置之间有效且平稳的机器人手臂运动 ...

  7. 基于视觉的机器人抓取: 论文及代码(Vision-based Robotic Grasping: Papers and Codes)

    本文同步于微信公众号:3D视觉前沿,欢迎大家关注. 本文总结了基于视觉的机器人抓取的相关论文及代码,同步于 GitHub. 机器人抓取必需的信息是相机系下抓取器的6DoF位姿,包括抓取器的3D位置和抓 ...

  8. 标定板标定和九点标定的区别_标定系列一 | 机器人手眼标定的基础理论分析

    旷视MegMaster机器人系列是旷视自主研发的一系列AI智能机器人硬件设备,基于旷视全球领先的人工智能算法及机器人技术,可实现搬运.分拣.托举.存储等功能,被广泛应用于物流仓储.工厂制造等场景.旷视 ...

  9. matlab tsai手眼标定程序代码_标定系列一 | 机器人手眼标定的基础理论分析

    旷视MegMaster机器人系列是旷视自主研发的一系列AI智能机器人硬件设备,基于旷视全球领先的人工智能算法及机器人技术,可实现搬运.分拣.托举.存储等功能,被广泛应用于物流仓储.工厂制造等场景.旷视 ...

  10. 干货 | 相机标定:机器人手眼标定

    作者丨张贶恩@知乎 来源丨https://zhuanlan.zhihu.com/p/76578691 编辑丨OpenCV与AI深度学习 相机标定是机器人视觉中非常重要的一步,可以帮助机器人转换识别到的 ...

最新文章

  1. 我偷偷监听了他们的通信流量......
  2. Android UI开发第五篇——自定义列表
  3. FPGA之道(44)HDL中的隐患写法
  4. c的按位取反运算符(~) 与逻辑逻辑(!)
  5. 在字符串中查找指定的字符串--strstr
  6. Python爬虫之旅_TWO
  7. 推荐系统的封闭和禁锢问题
  8. python 杀死子进程_Python:当父异常终止时,如何杀死子进程?
  9. thinkphp无法登陆,session跨页后值为空
  10. java用链表做学生系统_C语言链表实现学生管理系统
  11. [Unity脚本运行时更新]C#5新特性
  12. 用python写个电子钟_[TPYBoard - Micropython之会python就能做硬件 3] 制作电子时钟
  13. DirectX9.03D Direct3D初始化
  14. 通向云帝国的铁王座:卖书的贝佐斯和卖软件的纳德拉
  15. 2021年幼儿园教师招聘:小班梳子画《小草》
  16. bzoj 1208 宠物收养所 Splay入门
  17. 分享陌陌怎么站街引流附近如何不屏蔽
  18. 裸金属服务器是什么?有什么特点?
  19. java百钱百鸡算法
  20. Paying More Attention to Self-attention: Improving Pre-trained Language Models via Attention Guiding

热门文章

  1. Python 实现最简单的元胞自动机
  2. 批量生成PDF417码
  3. 加密日记 android,Lifeograph加密日记应用程序
  4. win10 升级出现0x80004002
  5. Android、Java超详细的身份证验证工具
  6. c语言程序设计新教材,《C语言程序设计》教学大纲(新)教材.doc
  7. ubuntu安装微信
  8. 三菱plc可以用c语言编程吗,三菱PLC六种常用编程语言讲解
  9. 【Android 四大组件之Content Provider】一文吃透 BroadcastReceiver 广播接收器
  10. 10分钟教你从零开始python_10分钟教你从零开始学python入门