slam数学补充

协方差矩阵的计算

M=(p̃ − μ)(p̃ − μ) T / (n+1)
μ = Σ p̃ / (n+1)
请添加图片描述

首先需要了解协方差矩阵的特征值和特征向量有什么意义?

对于一个协方差矩阵,其特征值可以告诉我们数据在不同方向上的变化程度。特征值越大,表示数据在对应特征向量方向上的变化程度越大;特征值越小,则表示数据在对应特征向量方向上的变化程度越小。通过分析特征值的大小,我们可以确定数据的主要变化方向和次要变化方向。
若协方差矩阵M为3×3矩阵,
若a11的值大,则表明这些点在x轴上变化大
若a22的值大,则表明这些点在y轴上变化大
若a33的值大,则表明这些点在z轴上变化大
若a12的值大,则表明这些点在x轴和y轴上变化大
若a13的值大,则表明这些点在x轴和z轴上变化大
若a23的值大,则表明这些点在y轴和z轴上变化大
特征值λ1表示了数据在特征向量v1方向上的变化程度,如果λ1较大,说明数据在特征向量v1方向上的变化较大,特征向量v1表示了数据的主要变化方向。

如何根据特征值判断点集收敛为直线

为了判断点集是否为一条线,可通过第一个大的特征值是否大于第二大的特征值几倍,来判断是否为直线

协方差矩阵的意义 以及 特征向量和特征值的关系

从数据表面看:
当M(n,n)过大意味着在数据均值的n维上变化较大,反之M(n,n)过小意味着数据在均值 的n维上变化不大。
当M(n,m)过大意味着数据在均值的n和m维上变化较大,数据在m和n轴的相关性较强。
反之M(n,m)过小意味着数据在均值的n和m维上变化较小,数据在m和n轴的相关性较弱。
从特征向量和特征值看:
M * n = a * n (其中M为协方差矩阵,n为特征向量,a为特征值)
不知道如何表达,有点抽象
协方差矩阵的特征向量意义:样本在均值处拟合(投影?)的直线
协方差矩阵的特征值意义:表示样本拟合直线的程度,越大意味着样本越偏离于特征向量,特征值为1时拟合最好
从迹和行列式看:
迹:所有样本的每个维度和均值的差值平方和
行列式:越大误差越大

点乘

A·B = |A| |B| cosθ
A·B = x1 * x2 + y1 * y2 + z1 * z2

叉乘

A X B = (y1 z2 - y2 z1, x2 z1 - x1 z2, x1 y2 - x2 y1)请添加图片描述叉乘的结果垂直于向量AB,且结果的模长大小等于向量A和B组成的平行四边形面积

RPY转换为旋转矩阵

绕目标姿态xyz方向 rpy角 外旋 左乘 不动坐标轴:
R1 = Rotz(y)× Roty(p) × Rotx(r)
外旋,根据目标姿态的xyz轴进行旋转rpy角度

绕自身zyx方向 ypr角 Euler角 内旋 右乘 动坐标轴:
R2 = Rotz(y)× Roty(p) × Rotx(r)
内旋,根据自身姿态的xyz轴进行旋转rpy角度

注意R1=R2不意味着内旋的旋转矩阵等于外旋的旋转矩阵,而是zyx顺序的内旋等于xyz的外旋
内旋和外旋等价性为:xyz顺序的外旋 RzRyRx 和 zyx顺序的内旋 RzRyRx 之间差一个负号

    Rotx << 1,   0, 0,
          0,  cx, -sx,
          0,  sx, cx;

    Roty << cy, 0, sy,
           0, 1, 0,
         -sy, 0, cy;

    Rotz << cz, -sz, 0,
          sz,  cz, 0,
          0 ,   0, 1;

请添加图片描述

pcl::getTransformation ()

template <typename Scalar> void 
pcl::getTransformation (Scalar x, Scalar y, Scalar z, 
                        Scalar roll, Scalar pitch, Scalar yaw, 
                        Eigen::Transform<Scalar, 3, Eigen::Affine> &t)
{
  Scalar A = cos (yaw),  B = sin (yaw),  C  = cos (pitch), D  = sin (pitch),
         E = cos (roll), F = sin (roll), DE = D*E,         DF = D*F;

  t (0, 0) = A*C;  t (0, 1) = A*DF - B*E;  t (0, 2) = B*F + A*DE;  t (0, 3) = x;
  t (1, 0) = B*C;  t (1, 1) = A*E + B*DF;  t (1, 2) = B*DE - A*F;  t (1, 3) = y;
  t (2, 0) = -D;   t (2, 1) = C*F;         t (2, 2) = C*E;         t (2, 3) = z;
  t (3, 0) = 0;    t (3, 1) = 0;           t (3, 2) = 0;           t (3, 3) = 1;
}
  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值