3D相机机器人手眼标定(眼在手上)全过程

简述

目前在机器人高层规划中,机器人越来越依赖于摄像头的反馈信息,比如自动打磨,焊接,喷涂的智能规划,或者一些分拣,码垛的规划. 在项目开始前, 第一步要做的一定是给机器人和摄像头进行标定. 那么如何结合机器人标定摄像头就是本片要讨论的问题. 本片接下来就是记录我自己做的标定全过程.

标定摄像头前一定要先标定机器人

手眼标定非常依赖机器人给出的参数,如果参数不准确,一定会影响到标定结果. 而且还很难察觉. 否则,会浪费大量时间在检查摄像头标定步骤中, 却忽略机器人参数本身.

选取好的标定板

标定板也很重要, 简单的棋盘格标定板可以从opencv官网上链接下载并打印. 如果追求精度,那就要在淘宝上购买更精确的标定板. 为了追求精确度,就不要省钱了.

计算标定板的角点


上图为opencv的棋盘标定板, 角点计算是算这个棋盘的内部角点(也就是正方块的角), 就是说边缘部分的角是不算的. 那么从左往右数,这个棋盘的长中,角点有九个, 宽中角点有6个. 就是说这个棋盘是6*9的

安装好手眼


如图安装好机器人和相机, 该相机安装在机器人的末端,所以就是眼在手上的机器人标定.

开始标定

手眼标定原理

手眼标定的原理我就不在这里探讨了,我贴一段别人的博客,可以去看那里.
https://blog.csdn.net/yaked/article/details/77161160

参数收集

第一步就是先把足够的参数收集起来 然后再统一计算. 那么需要哪些参数呢

  1. 标定棋盘参数, 比如我们的棋盘如上是6*9的, 棋盘的宽度, 我算了下大概是23.8mm
  2. 机器人一个随机位置下的可以拍摄到该标定板的有效图片
    解释起来就是把机器人随机移动,装换相机的一个视角去观察这个标定板, 如果该视角下看不到,或者只
    看到一小部分标定板,那么该图片无效,我们要把有效的图片记录下来,那么尽量让机器人移动到一个位置下, 相机能拍摄到标定板全貌. 然后记录保存该图片
  3. 记录该图片拍摄下的机器人状态(6轴状态)
  4. 重复2和3步骤, 20次.
    解释下,也就是获得20组图片对应机器人状态的数据. 但不一定是20组, 看你自己吧.

计算

用opencv计算出内外参比较简单具体的做法可以直接看官方教程

https://docs.opencv.org/4.4.0/dc/dbb/tutorial_py_calibration.html

具体的方法讲解

  1. 初始化准备参数
 A = n_long * sideB = n_short * side# termination criteriacriteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
  1. 准备好标定板的世界3d坐标
 objp = np.zeros((n_short*n_long,3), np.float32)objp[:,:2] = np.mgrid[0:A:side,0:B:side].T.reshape(-1,2)# Arrays to store object points and image points from all the images.objpoints = [] # 3d point in real world spaceimgpoints = [] # 2d points in image plane.axis = np.float32([[3,0,0], [0,3,0], [0,0,-3]]).reshape(-1,3) * sidervecs = []tvecs = []
  1. 迭代获取的图片参数步骤
    具体的cv函数用法可以看这篇博客
    https://blog.csdn.net/weixin_41695564/article/details/80422329或者看opencv官网
    3.1 获得灰度图
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

3.2 计算棋盘标定板的角点

ret, corners = cv2.findChessboardCorners(gray, (n_long,n_short),None)

3.3 进一步在获得的角点参数下亚像素信息

corners2 = cv2.cornerSubPix(gray,corners,(15,15),(-1,-1),criteria)

3.4 重复上述3.1到3.3的迭代获取多组亚像素信息

3.5 计算相机的内外参

 ret, mtx, disto, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1],intrinsic,disto)

3.6 计算误差

    for i in range(len(images)):imgpoints2, _ = cv2.projectPoints(objpoints[i], rvecs[i], tvecs[i], mtx, disto)error = cv2.norm(imgpoints[i],imgpoints2, cv2.NORM_L2)/len(imgpoints2)mean_error += errorprint("mean error: ", mean_error/len(objpoints))

至此为利用opencv计算内外参的手眼标定全部过程. 当然具体要根据自己的项目情况来优化代码.

3D相机机器人手眼标定(眼在手上)全过程相关推荐

  1. 机器人抓取平台搭建记录(六):手眼标定--眼在手上--Kinova Gen2 JACO2 七自由度机械臂--Realsense D435

    吐槽一,手眼标定两个多月前就做好了,这篇文章也是两个多月前就写了,但当时不知出了什么差错,在我还没有写完想暂时保存一下草稿的时候,写的内容竟然没了小半.于是就拖到现在,拖到忘记了当时写作的思路,操作细 ...

  2. 手眼标定----眼在手上(eye-in-hand)

    @TOC 标定之前你可以先拿个怡宝盖子进行测试. 第一步:打开halcon,采集,然后生成代码,显示十字架 第二步:把怡宝盖子放在十字架中心位置,在图像处理,找到怡宝盖子 第三步:找到怡宝盖子然后进行 ...

  3. 手眼标定—眼在手上(eye-in-hand)基本原理

    基本概念 相机固定在机械臂末端,机械臂移动相机也随之移动.主要标定求解相机坐标系和机械臂末端坐标系之间的转换矩阵. 涉及坐标系 机械臂基坐标系(base).机械臂末端坐标系(gripper).相机坐标 ...

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

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

  5. python如何实现手眼定标_相机标定(一):机器人手眼标定

    相机标定是机器人视觉中非常重要的一步,可以帮助机器人转换识别到的视觉信息,从而完成后续的控制工作,例如视觉抓取等等. 笔者做过一些机器人手眼标定的工作,在此用尽量简单的语言来描述下机器人手眼标定的流程 ...

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

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

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

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

  8. 遨博协作机器人ROS开发 - 机器人手眼标定原理

    目录 一.简介 二.环境版本 三.学习目标 四.知识储备 五.课堂小结 六.课后练习 一.简介 大家好,欢迎关注遨博学院带来的系列技术分享文章(协作机器人ROS开发),在前面课程中我们讲解了Intel ...

  9. scare机器人如何手眼标定_标定系列一 | 机器人手眼标定的基础理论分析

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

最新文章

  1. git 覆盖本地修改_Git拉力–如何使用Git覆盖本地更改
  2. C++ Primer 5th笔记(chap 15 OOP)继承中的类作用域
  3. 什么是 XML Web Service
  4. Django配置开发环境和生产环境以及配置Jinja2模板引擎
  5. 如何做好性能测试_流程篇
  6. 【Tomcat】如何解决catalina.out文件过大的问题
  7. php 正则 尖括号,php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串...
  8. oracle hang analyze,hanganalyze 分析数据库挂起
  9. python web实战视频教程_Python Web开发实战【中级班】
  10. Oracle 测试环境 数据库安装过程
  11. 计算机网络-自顶向下方法 7th 5.4 BGP协议总结
  12. 无敌打印(适用各种浏览器自带打印功能)
  13. 微信订阅号获取openid
  14. 王者荣耀游戏时间计算机制,王者荣耀荣耀战力怎么算,荣耀战力计算机制详解...
  15. k8s gc原理详解
  16. 运动轨迹绘制页面的设计与实现:仿照运动APP的轨迹记录功能将HTML5地理定位技术用于移动设备,实现地图显示与用户打车从起点到终点的运动轨迹绘制效果。
  17. 北斗星通GPS调试记录
  18. Ansys·Icem·T型喷管的网格生成
  19. 2.前端性能优化-web性能指标
  20. 如何利用渠道码活码精准引流

热门文章

  1. PyQt_QMessageBox
  2. 专属程序员的浪漫七夕
  3. 男朋友转行 Java 失败,找不到工作
  4. SIIM-ACR Pneumothorax Segmentation 气胸x光识别比赛数据处理
  5. Windows游戏编程之从零开始d
  6. linux虚拟机网络配置之桥接模式
  7. 谷歌浏览器点击任意部分都会出现黑色光标
  8. 悟透delphi 第二章 DELPHI与WIN32时空
  9. 红帽8搭建httpd
  10. postman打开启动慢,原因:长时间没清理缓存,解决:删除postma缓存重启即可