【发布时间】:2015-11-26 09:34:25
【问题描述】:
我正在使用点云库并尝试将两个点云匹配在一起 ICP(迭代最近点)算法。我收到的数据集带有来自 IMU 传感器的 X Y Z 方向值。
我将这些附加到点云对象的 sensor_orientation_ 属性以帮助匹配过程。查看 PCL 文档,它被指定为:传感器采集姿势(云数据坐标系中的旋转)。 注意:数据以(w, x, y, z)格式存储。
那么,从IMU数据转换我正在使用下面的这个函数,我想问它是否正确?
Eigen::Quaterniond euler2Quaternion(const double roll, const double pitch, const double yaw)
{
Eigen::AngleAxisd rollAngle(roll, Eigen::Vector3d::UnitZ());
Eigen::AngleAxisd yawAngle(yaw, Eigen::Vector3d::UnitY());
Eigen::AngleAxisd pitchAngle(pitch, Eigen::Vector3d::UnitX());
Eigen::Quaterniond q = rollAngle * yawAngle * pitchAngle;
return q;
}
然后方法被调用:
inCloud->sensor_orientation_ = Eigen::Quaternionf(euler2Quaternion(orientX, orientY, orientZ));
【问题讨论】:
-
顺便说一句,你为什么这样做,我的意思是:
rollUnitZ(),yawUnitY()&pitchUnitX()?不应该是rollUnitX(),pitchUnitY(), &yawUnitZ()吗?在我的应用程序中,我有旋转 w.r.t. x、y 和 z 轴并在addCube的pcl::visualization::PCLVisualizer方法中使用这些角度,我必须将它们转换为四元数。所以,如果我像你一样关联我的旋转,那么我不会得到正确的结果!
标签: c++ math rotation eigen point-cloud-library