点云cell的特征向量和特征值分析

在NDT(Normal Distributions Transform)中,每个NDT cell的尺寸计算均值和方差。特征向量和特征值用于表示旋转和轴的分布。然而,直接从协方差矩阵得到的3x3特征向量可能不是旋转矩阵,且转换为四元数时不归一化。解决方案包括重新定义右手坐标系的z轴和调整特征向量与特征值的对应关系,以满足右手定律。
摘要由CSDN通过智能技术生成

在ndt中会定义一个ndtcell的尺寸,初始化时会计算每个cell的中的均值mean和方差cov。

有了均值和方差以后就可以计算特征向量和特征值。

这儿获得的33的特征向量和31的特征值,分别代表旋转和每个轴的分布离散情况。

错!
这儿的3*3的特征向量很有可能不是旋转矩阵。因为是直接通过对cov进行分解得到。
例如
0 0 1
0 1 0
1 0 0

虽然它乘以他的转置是单位阵,但是他不是右手坐标系下的旋转矩阵。将它转化为四元数是 0 0 0 0.707 不是归一化的!

其中特征向量的每一列和特征值是一一对应的,每一列代表过零点和该点的连线所指的方向(问题所在,这这儿可以是相反的方向。)

解决思路:
1.将特征向量的第一列叉乘第二列,获得右手坐标系下的z轴,重新赋值。

      Eigen::Matrix3d evecs_;
      Eigen::Vector3d evals_;
      evecs_ = leaf.getEvecs();
      evals_ = leaf.getEvals();

      Eigen::Matrix3d evecs_reset;
      Eigen::Vector3d evals_reset = evals_;

      Eigen::Vector3d tempCross = evecs_.block<3,1>(0,0).cross(evecs_.block<3,1>(0,1));
      evecs_reset.block<3,2>(0,0) = evecs_.block<3,2>(0,0);
      evecs_reset.block<3,1>(0,2) = tempCross;


      E
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值