slam第四讲

一、解决的问题

如前所述,相机的位姿由6个自由度来表示,转换成数学描述就是由旋转矩阵和变换矩阵 R , t {R,t} R,t描述,在SLAM中位姿是未知的,我们需要解决形如“什么样的相机位姿最符合当前观测数据”,即一种典型的方式是把它构建成一个优化问题,求解最优的 R , t {R,t} R,t,使得误差最小化,即对位姿进行估计和优化。这里之所以引入李群和李代数是因为旋转矩阵自身是带有约束的(正交且行列式为1),它们作为优化变量时会引入额外的约束,使优化变得困难,通过李群和李代数间的转换关系,我们可以把位姿估计变成无约束优化问题。

二、李群和李代数

简单来说我们希望用李群和李代数的方法来优化位姿问题。

2.1 李群和李代数的基础

如前所述我们用旋转矩阵和变换矩阵来描述位姿,三维旋转矩阵构成了特殊正交群 S O ( 3 ) {SO(3)} SO(3),而变换矩阵构成了特殊欧式群 S E 3 {SE3} SE3,如下:
在这里插入图片描述
但他们对加法不封闭,对乘法封闭即:
在这里插入图片描述
在这里插入图片描述


  • 群是一种集合加上一种运算的代数结构,满足以下条件:
    在这里插入图片描述
    而李群是指具有连续光滑性质的群,而 S O ( n ) {SO(n)} SO(n) S E ( n ) {SE(n)} SE(n)在实数空间上是连续的,我们能够直观地想象一个刚体能够连续地在空间中运动,所以它们都是李群。
  • 李代数
    每个李群都有与之对应的李代数,李代数描述了李群的局部性质,李代数定义如下:
    在这里插入图片描述
    s o ( 3 ) {so(3)} so(3) s e ( 3 ) {se(3)} se(3)上的李代数为:
    在这里插入图片描述
    在这里插入图片描述
    综上李代数的定义与相互转换关系如下:
    在这里插入图片描述
  • 李代数求导与扰动模型
    迄今为止我们采用李代数的主要原因是为了优化,通常求导是优化时的必要手段,我们来看下李代数的求导。
    S O ( 3 ) {SO(3)} SO(3)上的李代数求导,通常李代数解决求导问题的思路分为两种:
    1. 用李代数表示姿态,然后根据李代数加法对李代数求导。
    2. 对李群左乘或右乘微小扰动,然后对该扰动求导,称为左扰动和右扰动
    • 李代数求导
      在这里插入图片描述

    • 扰动模型(左乘)
      在这里插入图片描述

  • S E ( 3 ) {SE(3)} SE(3)上的李代数求导
    在这里插入图片描述

三、评估轨迹误差

在实际工程中,我们经常需要评估算法的估计轨迹与真实轨迹的差异来评价算法的精度。真实轨迹往往通过某些更高精度的系统获得,而估计轨迹是由待评价的算法计算得到的。常见的误差指标有绝对轨迹误差(Absolute Trajectory Error,ATE),形如:
在这里插入图片描述
这实际上是每个位姿李代数的均方根误差。这种误差可以刻画两条轨迹的旋转和平移误差。

总结

本讲引入了李群 S O ( 3 ) {SO(3)} SO(3) S E ( 3 ) {SE(3)} SE(3),以及它们对应的李代数 s o ( 3 ) so(3) so(3) s e ( 3 ) se(3) se(3)。我们介绍了位姿在他们上面的表达和转换,然后通过BCH的线性近似,就可以对位姿进行燃动并求导。这给之后讲解位姿的优化打下了理论基础,因为们需要经常对某一个位姿的估计值进行调整,使它对应的误差减小。只有在弄清楚如何对位姿进行调整和更新之后,我们才能继续下一步的内容。

### 关于视觉SLAM十四第三的内容 #### 3.1 SLAM问题的形式化描述 在讨论具体的算法之前,理解SLAM问题的形式化描述至关重要。SLAM的目标是在未知环境中构建地图的同时估计自身的位姿。这一过程可以通过贝叶斯滤波器实现,具体来说就是利用机器人运动模型和观测模型来更新状态估计。 对于离散时间下的SLAM问题,假设系统的动态方程如下: \[ \mathbf{x}_k = f(\mathbf{x}_{k-1},\mathbf{u}_k,\mathbf{w}_k) \] 这里 \( \mathbf{x}_k \) 表示时刻\( k \)的状态向量;\( \mathbf{u}_k \) 是控制输入或动作命令;而 \( \mathbf{w}_k \) 则代表过程中的随机扰动[^4]。 #### 3.2 EKF-SLAM简介 扩展卡尔曼滤波(EKF)是一种常用的解决非线性系统状态估计的方法,在早期的视觉SLAM研究中被广泛应用。EKF-SLAM通过在线修正预测的地图特征位置以及机器人的姿态参数,从而达到同步定位与建图的目的。其核心在于对不确定性的处理方式——即协方差矩阵的维护与更新。 #### 3.3 FAST_SLAM原理介绍 FAST_SLAM采用粒子滤波的思想解决了传统EKF方法中存在的维度灾难问题。该算法将整个SLAM问题分解成两个相对独立的部分:一是针对车辆路径的概率分布采样;二是基于这些样本分别执行局部地标映射。这种方法不仅提高了计算效率,还增强了鲁棒性和适应复杂环境的能力。 ```python import numpy as np def ekf_slam(x, P, u, z): """ A simple implementation of the Extended Kalman Filter (EKF) for SLAM. Parameters: x : array_like State vector [x_pos; y_pos; theta]. P : matrix Covariance matrix. u : array_like Control input vector [v; omega]. z : list of arrays Measurement vectors [[range_0, bearing_0], ... , [range_n, bearing_n]]. Returns: tuple Updated state estimate and covariance. """ # Prediction step... F = ... B = ... Q = ... x_pred = F @ x + B @ u P_pred = F @ P @ F.T + Q # Update step... H = ... R = ... S = H @ P_pred @ H.T + R K = P_pred @ H.T @ np.linalg.inv(S) for i in range(len(z)): innov = z[i] - h_func(x_pred) x_new = x_pred + K @ innov P_new = (np.eye(len(x)) - K @ H) @ P_pred return x_new, P_new ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值