echart中拆线点的偏移_双目视觉在机械臂抓取中的应用(3D locate)

本文介绍了如何复现Cognex VisionPro 3D的功能,包括眼在手外、眼在手上的相机标定和手眼标定,以及3D定位计算位移偏差。通过Python和C++实现算法,并封装成dll供C#调用。详细讨论了3D视觉的基础知识,如相机标定、手眼标定、3D定位等步骤和坐标系转换。
摘要由CSDN通过智能技术生成

实现功能

实习公司的项目,复现Cognex VisionPro 3D的大部分内容,涵盖眼在手外、眼在手上,包括相机标定、手眼标定、3D定位计算位移偏差。最后的位移偏差与Cognex的结果在1mm左右。

实施路线

用python实现原型验证算法,再移植成C++编译为dll,供C#调用。python的库主要用到:cv2、numpyC++的库主要用到:OpenCV、Eigen

复现的VisionPro 3D函数

函数语句函数功能camCalRes = camCalibrator.Execute(pelRects, extractedFeatures, calHeights, calPoseTypes);相机标定heCalibs = heCalibrator.Execute(pelRects, intrinsics, extractedFeatures, robotPositions);手眼标定modelPoints = triangulator.Execute(cameraCalibs, pointsRaw2D, isPointValid, out is3DPointValid, out resRaw2D, out resPhys3D);三角测量获得3D点坐标Cog3DPoseEstimatorUsing2DPointsResult res = pParam.Models[model].Execute(camCalibs, features2D, weights2D);通过2D点估计3D姿态

函数功能主体类型返回值类型相机标定Cog3DCameraCalibratorCog3DCameraCalibrationResult手眼标定Cog3DHandEyeCalibratorList三角测量获得3D点坐标Cog3DTriangulatorCog3DVect3Collection通过2D点估计3D姿态ListCog3DPoseEstimatorUsing2DPointsResult

封装成dll的函数接口

函数功能函数名所属dll眼在手外的相机标定、手眼标定void getMatsEth()CalibrateCpp.dll眼在手上的相机标定、手眼标定void getMatsEih()CalibrateCpp.dll3D定位:左右相机的2D点转换为3D点void calc_ImageToWorld()CalcImageToWorldCpp.dll计算偏移void calc_Excursion()CalcExcursionCpp.dll

函数接口:

  1. void getMatsEth(int* other_info, char* point3d_str, char* point2d_str, char* robot_str, double* mtx33_l, double* mtx33_r, double* mtx44_l, double* mtx44_r)
  2. void getMatsEih(int* other_info, char* point3d_str, char* point2d_str, char* robot_str, double* mtx33_l, double* mtx33_r, double* mtx44_l, double* mtx44_r)
  3. void calc_ImageToWorld(double* _mtx44_cam3dToPhy3d_l, double* _mtx33_camIntrin_l, double* _mtx44_cam3dToPhy3d_r, double* _mtx33_camIntrin_r, double* _Point_Cl, double* _Point_Cr, double* params)
  4. void calc_Excursion(int pointNum, double* _Point_Model_3D, double* _Point_Now_3D, double* _res_excursion)

函数名输入输出void getMatsEth()other_info是长度为3的整型一维数组,3个元素分别代表标定图片数量、标定图片宽、标定图片高
point3d_str是字符串数组,为标定板角点在CalPlate3D下的坐标
point2d_str是字符串数组,为标定板角点在Raw2D下的坐标
robot_str是字符串数组,为机械手位姿所代表的4*4的矩阵mtx33_l是浮点型数组,为左相机内参所代表的3*3的矩阵
mtx33_r是浮点型数组,为右相机内参所代表的3*3的矩阵
mtx44_l是浮点型数组,为左相机的手眼矩阵所代表的4*4的矩阵
mtx44_r是浮点型数组,为右相机的手眼矩阵所代表的4*4的矩阵void getMatsEih()同上同上void calc_ImageToWorld()_mtx44_cam3dToPhy3d_l是浮点型数组,为左相机的手眼矩阵所代表的4*4的矩阵
_mtx33_camIntrin_l是浮点型数组,为左相机内参所代表的3*3的矩阵
_mtx44_cam3dToPhy3d_r是浮点型数组,为右相机的手眼矩阵所代表的4*4的矩阵
_mtx33_camIntrin_r是浮点型数组,为右相机内参所代表的3*3的矩阵
_Point_Cl是长度为3的齐次形式的浮点型一位数组,为左相机的特征点在在Raw2D下的坐标
_Point_Cr是长度为3的齐次形式的浮点型一位数组,为右相机的特征点在在Raw2D下的坐标params是长度为3的非齐次形式的浮点型一位数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值