用于验证手眼标定算法的仿真随机数据

由于近期一个项目需要做机器人相机手眼标定,找到一些基于c++ / opencv的demo代码,见(OpenCV手眼标定(calibrateHandeye()))但是输入项目测量的数据后怎么都不对,为了验证到底是demo代码问题,还是实际测量数据问题,只得先产生一组随机仿真数据,用来验证。这组随机数据的产生过程和结果贡献给大家。

一  图示 

图1

 

图2

二  生成数据的思路

  1. base和target在世界坐标固定,且关系已知, 即生成 R_target2base, T_target2base

  2. gripper和cam可以移动,但互相之间关系已知且固定,即生成 R_cam2gripper, T_cam2gripper

  3. 每次移动gripper到一个随机位置,该位置相对base已知,即生成R_gripper2base, T_gripper2base

  4. 由已知关系,计算出cam相对base的关系,即计算R_cam2base, T_cam2base
  5. 因为target到base已知,cam到base已知,计算出每次移动gripper时,target到cam的关系(target在相机中的位姿读数),即计算出R_target2cam, T_target2cam

  6. 重复上述3-5步骤,计算出一组对应数据,则最终得到一组已知的,{base}, {gripper}, {cam}, {target},四个坐标系之间的所有关系。

三 具体生成的过程和方法,利用matlab

1. 生成一个简单直观的base和target关系假设两个坐标系z轴均向上,x y轴共面,target相对于base只是沿着z轴(右手)旋转了90°(如图2所示),假设target原点位移相对于base在y轴正向距离1m,则有T_target2base = [0, 1, 0],那么轴角表示 pi/2 * [0, 0, 1],  或者乘进去用旋转向量表示[0 , 0, 1.5708]

 换成四元数表示 (q0, q1, q2,q3)

2. 生成gripper和cam关系,这里可以稍微随机一点,表示一般性。

假设随机生成轴角的轴为 [0.1817,  0.6198,  -0.7634]   (已经验证为单位向量)

假设轴角的角为30°,即pi/6

该图表示旋转矩阵,轴角,四元数三种表示均已知

假设位移为 T_cam2gripper = [0.1, 0.2, 0.3]

 3. 生成随机的gripper位姿(方法同1) 2))

位姿1: 轴角: pi/5 * [0.5394,  0.1994,   -0.8181]

随机T_gripper2base = [0.15,  0.32,   0.88]

位姿2:

 

随机T_gripper2base = [0.27,  0.56,   0.76]

位姿3

随机T_gripper2base = [0.11,  0.24,   1.2]

位姿4

 

T_gripper2base = [0.26,  0.65,   0.89]

4. 根据上步生成的4组gripper在base中的读数,利用已知的target2base和cam2gripper这2组固定关系,可以计算出对应的target在cam中的读数,关系如下(见图2,蓝色路线等于黄色路线)

Homo_target2base  =   Homo_gripper2base x Homo_cam2gripper x Homo_target2cam

式中除了 Homo_target2cam待求,其他均已知,则有

Homo_target2cam = Homo_cam2gripper -1  x  Homo_gripper2base -1  x  Homo_target2base

对应位姿1

 

 

由此得到第一个位置对应的Homo_target2cam

由此类推计算出其他三组如下

 对应位姿2

对应位姿3

 

对应位姿4

 

至此所有4组仿真的测量数据已得,下面我们通过第4组数据验算一下是否正确。验算思路为(图2的蓝色和黄色路线是否相等)

已知 Homo_target2base关系且恒定不变(蓝色路线)

 

现在通过黄色路线计算  

Homo_gripper2base x Homo_cam2gripper x Homo_target2cam

 

完美匹配,验证通过。说明制造的仿真数据是正确的。可以用来做测试用。 

 

 

 

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值