使用ICP得到的变换矩阵更新相机位置

大多数关于ICP的介绍都是介绍了ICP算法如何配准两个点云,但是没有介绍如何更新相机位置,本文将对此进行介绍。

已知:

点云X0和X1,点云X0对应的相机外参矩阵M0。

待求:

点云M1对应的相机外参矩阵M1。

过程:

  1. 将点云X0作为目标点云,使用PCL的ICP算法计算出:点云X1配准到点云X0的变换矩阵M。
  2. 根据下图的推导过程,计算出M1=M0*M.inverse()。
注:世界坐标系下坐标=相机姿态矩阵*相机坐标系下坐标,这种情况才适用下图中的推导。


部分代码如下:

// ICP 参数设置
pcl::IterativeClosestPointWithNormals<pcl::PointNormal, pcl::PointNormal> icp;
icp.setInputSource(X1);
icp.setInputTarget(X0);
icp.setMaxCorrespondenceDistance(500);
icp.setTransformationEpsilon(1e-10);
icp.setEuclideanFitnessEpsilon(0.0001);
icp.setMaximumIterations(600);

// ICP 迭代
pcl::PointCloud<pcl::PointNormal>::Ptr out(new pcl::PointCloud<pcl::PointNormal>(DEPTH_IMAGE_WIDTH, DEPTH_IMAGE_HEIGHT));
icp.align(*out);

// 取出变换矩阵M
Eigen::Matrix4f transformation = icp.getFinalTransformation();
Eigen::Matrix4d trans_d;
trans_d(0, 0) = transformation(0, 0); trans_d(0, 1) = transformation(0, 1); trans_d(0, 2) = transformation(0, 2); trans_d(0, 3) = transformation(0, 3);
trans_d(1, 0) = transformation(1, 0); trans_d(1, 1) = transformation(1, 1); trans_d(1, 2) = transformation(1, 2); trans_d(1, 3) = transformation(1, 3);
trans_d(2, 0) = transformation(2, 0); trans_d(2, 1) = transformation(2, 1); trans_d(2, 2) = transformation(2, 2); trans_d(2, 3) = transformation(2, 3);
trans_d(3, 0) = transformation(3, 0); trans_d(3, 1) = transformation(3, 1); trans_d(3, 2) = transformation(3, 2); trans_d(3, 3) = transformation(3, 3);

// 更新矩阵M1
m_mLastCameraTransRotate = m_mCurCameraTransRotate;
m_mCurCameraTransRotate = m_mCurCameraTransRotate * trans_d.inverse();


确定机械臂与相机之间的变换关系,即相机坐标系到机械臂坐标系的变换矩阵需要进行相机和机械臂的标定。具体步骤如下: 1. 相机标定:通过拍摄不同位置的标定板或者标定物体,获取相机的内参矩阵和畸变参数。内参矩阵包括焦距、主点位置和像素尺寸等参数,畸变参数则用于校正相机镜头的畸变。 2. 机械臂标定:通过移动机械臂的关节或者末端执行器,测量机械臂各个部分的长度和相对位置,计算机械臂的运动学模型。运动学模型可以描述机械臂的末端执行器位姿与关节角度之间的关系。 3. 相机和机械臂的外部标定:将相机和机械臂固定在同一个平面上,通过拍摄相同的标定物体或者标定板,获取相机坐标系下标定点和机械臂坐标系下标定点之间的对应关系。对应关系可以使用PnP算法计算出相机坐标系到机械臂坐标系的变换矩阵。 4. 相机和机械臂的内部标定:通过对机械臂进行运动,控制相机拍摄不同角度和位置的物体或者场景,获取相机坐标系下的三维点云和机械臂坐标系下的姿态信息,使用ICP算法或者其他配准算法计算相机坐标系和机械臂坐标系之间的变换关系。 通过以上标定方法,可以计算出相机坐标系到机械臂坐标系的变换矩阵,从而实现将相机坐标系下的三维坐标转化为机械臂坐标系下的三维坐标。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值