计算点云拟合出的两个平面之间的距离

       在点云应用的过程中,有时候需要知道两个平面之间的距离,比如桌面离地面的距离、箱子到托盘的距离等。

1、计算平面间的夹角

       计算两个平面之间的距离首先要计算两个平面之间的夹角,两个平面必须平行或者近似平行。下面的代码是计算两个平面之间的夹角。

pcl::PointXYZ n1(mdelCoefficients_plane->values[0], mdelCoefficients_plane->values[1], mdelCoefficients_plane->values[2]), 
		      n2(mdelCoefficients_plane1->values[0], mdelCoefficients_plane1->values[1], mdelCoefficients_plane1->values[2]);
double angle = get_angle(n1,n2);
cout << "平面间夹角:" << angle << endl;

double get_angle(pcl::PointXYZ n1, pcl::PointXYZ n2) {
	double cosθ = abs(n1.x * n2.x + n1.y * n2.y + n1.z * n2.z) /(sqrt(n1.x * n1.x + n1.y * n1.y + n1.z * n1.z) * sqrt(n2.x * n2.x + n2.y * n2.y + n2.z * n2.z));
	double angle = std::acos(cosθ);
	angle = angle * 180 / 3.14;
	return angle;
}

2、计算平面之间的距离

       在实际应用中考虑到点云拟合的两个平面很可能不是完全平行的,因此这里通过计算一个点云平面上所有点到另一个平面的距离,然后求平均值来作为该平面到另一个平面的距离。

       在PCL库中可以使用pcl::pointToPlaneDistance来计算点到平面的距离。

Eigen::Vector4f plane_coefficients(mdelCoefficients_plane->values[0], mdelCoefficients_plane->values[1], mdelCoefficients_plane->values[2],
		mdelCoefficients_plane->values[3]);// 平面系数
	double distance = 0;
//遍历点云中的所有点
	for (pcl::PointCloud<pcl::PointXYZ>::iterator it = cloud_p1->begin(); it != cloud_p1->end(); ++it)
	{	
		pcl::PointXYZ n(it->x, it->y, it->z);
		distance += pcl::pointToPlaneDistance(n, plane_coefficients);
	}
	distance /= cloud_p1->size();
	cout << "平面间距离:" << distance << endl;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值