物体位姿估计精度验证实验(涉及位姿估计,手眼标定,机械臂运动)

  • 1.位姿估计
  • 2.手眼标定
    • Opencv 手眼标定函数calibrateHandEye()
      • (1)Eye in Hand
      • (1)Eye to Hand
    • halcon 手眼标定
    • 其他标定函数
  • 3.机械臂运动
    • 实验方案:
    • 机器人位姿校正推导:

1.位姿估计

简单介绍,采用双目结构光相机,利用拍摄的点云数据和CAD模型点云进行ICP配准,获取物体在相机坐标系下的位姿(R,t)

2.手眼标定

本文采用的是Eye to Hand 方式,与opencv中讲解的Eye in Hand方式不同;因此花了点时间,首先还是先来看Opencv官方的手眼标定函数

Opencv 手眼标定函数calibrateHandEye()

先贴一个包含棋盘格检测的c++代码 github

(1)Eye in Hand

在opencv 3.4版本以上,提供了手眼标定函数,本文采用的是4.4版本,贴一个官方文档

基本输入输出描述:


看着这个旋转矩阵,有点迷,来看一下官方的图


可以看出,官方求解的是相机到夹爪的变换矩阵:gTc;
其两个输入:

  • 夹爪到机器人基座变换矩阵bTg
  • 目标物体(一般是棋盘格)到相机的变换矩阵cTt

这就感觉很反人类,机器人每次运动读出来的坑定是基座到机械臂末端的变换矩阵,按照opencv的表示方法应该是gTb;然后pnp算法可以获取得到相机每次拍照相对于棋盘格的外参cTt(这个参数和opencv的是相符的);

  • 所以Eye in Hand相机标定使用opencv的标定函数,应该是要把机器人的位姿估计去逆????
  • 那为啥广大csdn朋友都是直接用的???纳闷 (看到最后)

(1)Eye to Hand

这里我们还是按照opencv的定义吧;
根据target到base从红色路径走和蓝色路径走,一次拍摄可以获得一个等式
bTg · gTt = bTc · cTt

两次拍摄,有
bTg1 · gTt = bTc · cTt1 (1)
bTg2 · gTt = bTc · cTt2 (2)

用(1)消去(2)中的 gTt,有
bTg2 · inv(bTg1 ) · bTc · cTt1 = bTc · cTt2

挪一挪,成AX=XB的形式:
bTg2 · inv(bTg1 ) · bTc = bTc · cTt2 · inv(cTt1)

对比一下eye in hand:好像bTg逆了一下???
那根据opencv变换矩阵的定义,是不是对于eye to hand直接可以用机器人读出的基座到末端的矩阵???

我怀着好奇试了一下,发现。。。。嘤嘤嘤,错了;
几种情况都试了几下,发现需要求逆的是eye to hand中的bTg,也就是机器人末端位姿取个逆,或许这里能解释广大的csdn友eye in hand中机器人末端矩阵不取逆的原因???

所以我感觉opencv的矩阵定义很迷。。。。。。。。不过反正是可以用了

halcon 手眼标定

由于上述方式计算出的手眼标定矩阵没有评价指标,然后看到51halcon上有人晒出具有评价指标的手眼标定,实验室有halcon的标定板,因此尝试了一下

步骤:

  1. 下载halcon hdevelop软件,安装后使用试用许可证
  2. 官网看到eye to hand 手眼标定例程,原来csdn上抄的是halcon的图

  1. 打开对应标定的示例程序

    代码里注释都很清楚了,主要是读取四部分数据:
  • 标定板描述文件
    CalTabFile := ‘caltab_100mm.descr’(包含圆形标定板尺寸信息);

  • 机械臂末端位姿文件
    这里例程一个pose一个.dat文件,

    这里涉及到halcon的位姿表示类型,一般是采用2对应上面:f=2,zyx欧拉角方式,按照要求写之

  • 图片文件
    读取的时候不用后缀,但是有可能检测不到标定板外框,圆形,需要调节算子find_calib_object [‘alpha’], [0.2]

  • 相机内参文件
    两种方式生成相机内参
    一个是读文件
    read_cam_par (DataNameStart + ‘start_campar.dat’, StartCamParam)
    一个是硬编码,有很多种参数类型,具体看文档
    gen_cam_par_area_scan_division (1.17685423e-002, -2.54169782e+003, 7.32908724e-006, 7.40000000e-006, 1.2433252307808543e+03, 1.0420874394843283e+03, 2448, 2048, StartCamParam)

  1. 根据程序提示运行就完事了:
    求解完了之后,可以用算子,pose_to_hom_mat3d把pose转mat;手眼标矩阵和opencv差不太多,但是实验中感觉精度也有问题


其他标定函数

我自己用的是网上网友把opencv中的代码自己实现了一下

另外还有一个github的matlab版本,这个没试过

总之原理就这样

3.机械臂运动

我们设想的是去验证整个位姿估计框架的精度:
包含了物体到相机,相机到机器人基座两部分变换关系

实验方案:

大概就这样,实际中B是一个框,A是中间那部分,初始状态就是A放在B中

机器人位姿校正推导:

这里的坐标系我喜欢用自己的定义,不用opencv那里 的反人类定义


那么就有:

然后实验就是完事了

物体位姿估计精度验证实验(涉及位姿估计,手眼标定,机械臂运动)相关推荐

  1. 机器人手眼标定快速精度验证方法

    一.原理及流程 机器人的手眼标定原理在本文中不再过多描述,基本流程都是先标定相机的内外参数,然后标定两台相机之间的位置关系,如果相机是可以转动的话,还要标定转台与机械臂之间的关系. 在手眼标定完成后, ...

  2. 相机位姿估计2:[应用]实时位姿估计与三维重建相机姿态

    关键词:相机位姿估计 OpenCV::solvePnP labview三维图片 文章类型:应用展示+Demo演示 @Author:VShawn(singlex@foxmail.com) @Date:2 ...

  3. ZYNQ之高速AD/DA验证实验

    文章目录 前言 一.ADDA模块介绍 二.添加ROM IP核 三.添加ILA IP核 四.编写测试程序 五.管脚分配 六.连接开发板测试 总结 前言 本实验是高速AD/DA验证实验,将使用高速DA芯片 ...

  4. Psins代码解析之线性误差模型精度验证(test_SINS_error_model_verify.m)

    捷联惯导误差方程的推导前提是: 惯性传感器误差模型 前提是:IMU设备经过出厂标定之后,对所谓IMU传感器存在的"残差"的考虑:主要是:失准角.非正交角.零偏.刻度系数.二次项误差 ...

  5. 图像分类中混淆矩阵精度验证法中的几个指标说明

    ToolBox->Classification->PostClassification->Confusion Matrix->Using Ground Truth ROIs,可 ...

  6. 计算机基本网络测试命令实验报告,网络连通性测试与网络命令验证实验报告

    网络连通性测试与网络命令验证实验报告 西工大计算机网络原理实验报告 网络原理实验报告 实验名称: 网络连通性测试与网络命令验证 日期: 2015.11.09 班级: 学号: 姓名: [一] 预习内容 ...

  7. 基于Domoticz智能家居系统(十七)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(三)一个简单MySensors客户端的验证实验

    DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(三)一个简单MySensors客户端的验证实验 一个简单MySensors客户端的验证实验 一. ...

  8. Carsim和simulink联合仿真轮胎力估计 基于滑模观测器SMO估计轮胎的纵向力和侧向力 模型估计的精度很高,测试的工况为双移线工况

    Carsim和simulink联合仿真轮胎力估计 基于滑模观测器SMO估计轮胎的纵向力和侧向力 模型估计的精度很高,测试的工况为双移线工况 基于SMO滑模观测器的轮胎力估计方法省去了轮胎模型的使用,避 ...

  9. Nature:清华唐传祥团队成功进行“稳态微聚束”首个原理验证实验

    来源:探臻科技评论本文约2500字,建议阅读5分钟本文为你介绍清华唐传祥团队"稳态微聚束"首个原理验证实验. 图片来源|视频<为什么欧美能造出EUV光刻机?国产EUV设备何时 ...

最新文章

  1. DCM、PLL、PMCD、MMCM的区别与联系?
  2. python虚拟环境 windows环境搭建_windows 下搭建python虚拟环境(示例代码)
  3. tensorflow 之tensorboard 对比不同超参数训练结果
  4. Codechef Chef Cuts Tree
  5. angular模块库开发实例
  6. 创建简单的Flex组件
  7. python 数学公式显示_ipython jupyter notebook中显示图像和数学公式实例
  8. 设计师中国风作品必备汉字毛笔字偏旁部首大集合
  9. 在Linux系统中应用su和sudo
  10. Firefox-常用扩展
  11. windows系统上安装与使用Android NDK r8d(二)
  12. pandas——pd.DataFrame.iloc()
  13. java便利店库存管理系统_便利店库存管理系统可以做什么?
  14. 精心整理的10套最美Web前端新年特效--提前祝大家新年快乐
  15. rovio环境配置与测试笔记
  16. 生物信息学之抗癌药物反应论文阅读六:DNN整合基因组谱
  17. 每一个圣人都有一个过去
  18. [附源码]Java计算机毕业设计SSM鞍山丘比特房屋租赁管理系统
  19. 数据可视化之中国足球队在国际足联及亚洲的历史排名看这儿
  20. 《成为沃伦·巴菲特》笔记与感想

热门文章

  1. 印孚瑟斯被 IDC MarketScape 报告评为领导者
  2. 通过文献计量学助您发表高影响因子论文—基于Citespace和vosviewer文献计量学可视化SCI论文高效写作方法
  3. (姊妹仨)BlazePalm: 先检手掌再检骨架,虚拟合成数据助力 2.5D 信息输出
  4. 不可随便给一个人说晚安『你知道它的真正意义吗?不想以后后悔就进来看看吧』
  5. 修改C盘下用户的文件名的一些坑!!!
  6. 生产者消费者问题:管程法
  7. 五种经典卷积神经网络
  8. win ce车载系统刷机包_华为EMUI系统手机密码忘记了怎么办,
  9. 萌新成长计划(开篇章)
  10. C语言结构体实现简单通讯录管理系统