当前位置: 首页 > news >正文

机械臂只有位置信息是否可以进行手眼标定?

平常我在做手眼标定时,一般都是通过OpenCV的cv::calibrateHandEye函数进行求解,需要输入多组不同的机械臂位姿。今天遇到了一款舵机机器人,只能获取位置,得不到姿态信息,想着那就把姿态都设为0,结果求不出来。。。

目录

  • 1.cv::calibrateHandEye函数说明
  • 2.只给出位置信息的测试结果
  • 3.问题原因排查

1.cv::calibrateHandEye函数说明

CV_EXPORTS_W void calibrateHandEye( InputArrayOfArrays R_gripper2base, InputArrayOfArrays t_gripper2base,
                                    InputArrayOfArrays R_target2cam, InputArrayOfArrays t_target2cam,
                                    OutputArray R_cam2gripper, OutputArray t_cam2gripper,
                                    HandEyeCalibrationMethod method=CALIB_HAND_EYE_TSAI );
  • 输入参数:
    R_gripper2base:从将夹爪坐标系下的点转换到机器人基坐标系(robot base frame)的齐次矩阵中提取的旋转部分,是一个vector类型,包含所有从夹爪坐标系到机器人基坐标系变换的(3x3)旋转矩阵或(3x1)旋转向量。
    t_gripper2base:从上述齐次矩阵中提取的平移部分,是vector类型,包含所有从夹爪坐标系到机器人基坐标系变换的(3x1)平移向量。
    R_target2cam:从将目标坐标系(target frame)下的点转换到相机坐标系的齐次矩阵中提取的旋转部分,是vector类型,包含所有从标定目标坐标系到相机坐标系变换的(3x3)旋转矩阵或(3x1)旋转向量。
    t_target2cam:从上述齐次矩阵中提取的平移部分,是vector类型,包含所有从标定目标坐标系到相机坐标系变换的(3x1)平移向量。
    method:指定使用的手眼标定方法,可选择的方法包括先估计旋转再估计平移的可分离解法(如 Tsai 和 Lenz 的方法、Park 和 Martin 的方法、Horaud 和 Dornaika 的方法),以及同时估计旋转和平移的联立解法(如 Andreff、Horaud 和 Espiau 的在线手眼标定方法,Daniilidis 使用对偶四元数的手眼标定方法)。
  • 输出参数:
    R_cam2gripper:估计得到的从相机坐标系到夹爪坐标系的齐次变换矩阵中的(3x3)旋转部分。
    t_cam2gripper:估计得到的从相机坐标系到夹爪坐标系的齐次变换矩阵中的(3x1)平移部分。

2.只给出位置信息的测试结果

  • 1.因为cv::calibrateHandEye函数需要R_gripper2baseR_target2cam,考虑到只有机械臂的位置信息,最终需要求得的也是t_cam2gripper,那就默认旋转矩阵都是单位矩阵,即没有姿态偏差,欧拉角都是0(rx,ry,ry都是0)。
  • 2.结果输入实际得到的R_cam2grippert_cam2gripper如下:
    在这里插入图片描述

3.问题原因排查

主要与手眼标定的原理和算法的数学特性有关,下面详细分析其原因:

  • 手眼标定的原理:
    在这里插入图片描述

  • 1. 缺乏运动信息
    在这里插入图片描述

  • 2. 方程求解的奇异性
    在这里插入图片描述
    矩阵的奇异性通常是指矩阵不可逆的性质,也就是说矩阵没有逆矩阵。

奇异矩阵是行列式为零的矩阵,即不可逆矩阵。
奇异矩阵不能用于求解唯一解的线性方程组,会导致数值不稳定性。

  • 3. 平移部分的影响
    对于平移部分,由于旋转部分无法正确求解,导致整个变换矩阵的求解缺乏有效的约束。在没有足够旋转信息的情况下,算法无法准确地确定相机和夹爪之间的相对平移关系,因此通常会将平移部分的解置为 0。

  • 总结
    手眼标定需要机械臂的不同姿态来提供足够的运动信息,以确保方程有唯一解,当R_gripper2base全为单位矩阵时,缺乏旋转运动信息,导致方程求解出现奇异性,无法得到有效的旋转和平移变换矩阵,最终得到R_cam2gripper为nan,t_cam2gripper为 0 的结果。为了得到准确的手眼标定结果,需要确保机械臂有足够的不同姿态变化。

根据上面总结可知如果通过OpenCV的cv::calibrateHandEye函数进行求解,需要机械臂的不同姿态来提供足够的运动信息,以确保方程有唯一解。


在这里插入图片描述

那对于只有位置信息的机械臂,还有别的方法标定相机和机械臂的位置关系吗?
如有大佬知道请指导解答。

相关文章:

  • HDF5文件格式:数据类型与读写功能详解
  • asm汇编源代码之CPU型号检测
  • Axure中继器(Repeater): 列表多选和 列表查询
  • Python 数据分析01 环境搭建教程
  • SpringBoot项目如何用ServiceLocatorFactoryBean优雅切换支付渠道?
  • FreeRTOS使任务处于运行态的API ?
  • IDEA遇到问题汇总
  • kernel32!GetQueuedCompletionStatus函数分析之返回值得有效性
  • 2025蓝桥杯算法竞赛深度突破:创新题型与高阶策略全解析
  • 【2025年泰迪杯数据挖掘挑战赛】B题 详细解题思路+数据预处理+代码分享
  • AI 谄媚式回应 | 善用成器,滥用成殇
  • Linux基础2
  • MCU刷写——S19(S-Record)文件格式详解及Python代码
  • 图像前后处理代码
  • Web信息收集
  • 【STM32】ST7789屏幕驱动
  • Windows中xxx.dll动态链接库文件转xxx.a静态库文件
  • Python Cookbook-5.15 根据姓的首字母将人名排序和分组
  • 深入解析 Spring AI Alibaba 多模态对话模型:构建下一代智能应用的实践指南
  • QML 中的 QVariantMap
  • 有网站怎么做seo推广/百度入口网站
  • 龙华新区网站制作/拍照搜索百度识图
  • 建筑公司网站 新闻/关键洞察力
  • 网站商品展示设计/网站出租三级域名费用
  • 大作业做网站/推广app网站
  • 十大免费ppt网站流氓下载/注册网站怎么注册