
问题和解决
问题
定位问题稀疏矩阵,用处理器浪费计算资源。
通常使用加速器堆叠算法,芯片面积很大。
先前工作
1. 定位
P-BA : 针对 ORB-based SLAM 系统,将计算密集型的Bundle Adjustment (BA) 任务的核心部分(Jacobian 计算和 Schur 消元)放在 FPGA 上加速,其余在软件中实现。
BAX : 完整的 BA 硬件加速器,使用通用向量单元,但它只针对 BA 这一特定子任务。
2. 规划
BLITZCRANK: 利用因子图 抽象来减少优化问题的规模。通过优化因子图的推理顺序**,它相比 CPU 软件实现,实现了 7.4 倍加速和 29.7 倍能耗降低。
3. 控制
Lin et al. : 开发了一种基于采样的运动控制加速器,旨在最大化控制率和轨迹时间步数量,相比现有技术 [38] 实现了 22 倍和 26 倍的提升。
后面都可以看看
解决
提出新型位姿表示法,结合因子图抽象,为定位、规划与控制算法构建了统一的因子计算模型
针对系数矩阵J提出高效稀疏数据压缩格式,有效减少索引信息存储量,并优化矩阵访问与更新效率
设计高速高能效因子图加速器,支持因子图计算模型与稀疏格式。
前置知识


因子图计算
线性代数快忘完了,QR分解是将将矩阵分解为一个正交矩阵Q和一个上三角矩阵R的乘积
姿态表示方法
不同的姿态表示方法
| 算法 |
表示方法 |
核心操作 |
| 运动规划 |
特殊欧几里得群 SE(3) 和 李代数 se(3) |
旋转通过乘法运算实现(群乘法)。 |
| 定位 |
四元数 q 和 位置向量 T(3) |
旋转通过加法运算实现。 |
数学,已畏惧,下面是查了下的快乐数学补课部分
SE(3)
在三维空间中,一个点的姿态有六个自由度,包括三个平移自由度(位置)和三个旋转自由度(方向)。
- 表示方式: 姿态变换可以用一个 4×4 的齐次坐标变换矩阵 T 来描述,该矩阵属于特殊欧几里得群 SE(3)。
- 矩阵结构: T 矩阵由两部分组成:
- 方向 (Orientation): 一个 3×3 的旋转矩阵 R,属于特殊正交群 SO(3) (R∈SO(3)∈R3×3)。
- 位置 (Position): 一个 3×1 的平移向量 t (t∈T(3)∈R3)。
T=(R0Tt1)
冗余性
旋转矩阵 R 的冗余: 旋转本身只有 3 个自由度,但却使用一个包含 9 个变量的 R 矩阵来表示。(原因:这 9 个变量之间存在 6 个约束条件(正交性 RTR=I 和行列式 det(R)=1)。
变换矩阵 T 的冗余: 完整的姿态只有 6 个自由度,却使用一个 4×4 矩阵,即 16 个变量来表示。(原因:除了旋转矩阵本身的 6 个约束外,底部一行(0T 和 1)是固定的。)
se(3)
李代数 se(3) 的元素由一个六维向量 ξ 确定,这个向量精确地包含了姿态的所有 6 个独立自由度。
ξ=(ρϕ)∈R6
其中 ρ∈R3 表示平移分量,ϕ∈R3 表示旋转轴角分量。
这个六维向量 ξ 被映射为一个 4×4 的反对称矩阵 Φ,即李代数 se(3) 的元素:
Φ=ξ∧=(ϕ∧0Tρ0)∈se(3)⊂R4×4
其中 ϕ∧∈R3×3 是由 ϕ 向量构造的反对称矩阵。
需要涉及复杂扰动导数模型的变换:
T=exp(Φ)=exp(ξ∧)
∂ξ∂f=∂T∂f⋅∂ξ∂T
∂ξ∂T 中T 是 ξ 的非线性指数函数。

新姿态表示 <so(n),T(n)>
姿态结构: 姿态 ξ 被表示为一个二元组 <ϕ,t>。
旋转部分 (ϕ): 使用李代数 so(n) 的元素,即 旋转向量 ϕ。它通过 Ri=Exp(ϕi) 映射到旋转矩阵 Ri。
平移部分 (t): 使用一个简单的 平移向量 t。
广义运算:

计算模型

Lidar因子误差
e(ξi,ξj)=(ξi⊖ξj)⊖Δξobs(3)
到
e(ξi,ξj)=<Log(ΔRobsTRjTRi),ΔRobsT(RjT(ti−tj)−Δtobs)>(4)

被数学轰炸了,还是有点一知半解,但这样看的话确实避免了冗余和太复杂的计算
稀疏矩阵存储
稀疏矩阵压缩格式
线性二次调节器 (LQR):

稀疏,分块,连续
| 特征 |
**传统的 CSR 格式 ** |
基于连续性优化的新格式 |
非零块数据 (VAL) |
大小:NZ 块 (存储所有非零块) |
大小:NZ 块 (存储所有非零块) |
列索引 (COL_IND) |
大小:NZ (存储每个非零块的列索引) |
大小:M (只存储每行第一个非零块的列索引) |
| 行信息数组 |
ROW_PTR (大小:M+1),记录每行起始位置 |
NUM_NZ (大小:M),记录每行非零块数量/跨度 |
消元更新

使用了一种滑动窗口方法,只比较 COL_IND 数组中窗口内的元素与 xi 的列索引。窗口大小被确定为 ⌈M/2⌉(在定位、规划和控制算法中的变量消除过程中,每个变量节点连接的因子节点数量最多为 ⌈M/2⌉)
上三角矩阵可以用回代法快速求解矩阵(线代老师要跳起来打我了)
硬件结构

因子计算单元

MO-DFG 中的每个节点(一个基本矩阵操作)都会被直接映射到硬件上的一个基本计算单元。被分配到特定的时钟周期 执行。
这种硬件的论文能看到比较细节底层的计算,不像纯软的论文直接摆个模型完事,可能这就是硬件的魅力吧
因子图推理单元
用来解线性方程组
消元模块
部分QR分解

电路图

u开根得到v没有对上,推测应当是转化为:
Hˉ=Iˉ−2uˉTuˉuˉuˉT
这样就省了一个开根器
猜的是a输入的是再构造两个u,乘一下得到$${\bar{u}\bar{u}^T}$$,为什么不复用u
回代计算

从上到下一层层向下算,求解到上一层的根,经过PE更新解向量下一层的值
大脑在颤抖
流水线
因子计算和变量消除可以流水线化,当因子计算模块计算下一批数据时,变量消除模块可以同时处理上一批数据。
变量消除(QR 分解)是从左上到右下(沿对角线正向)进行的。回代是从右下到左上(沿对角线逆向)进行的。由于严格的数据依赖性和相反的计算方向,变量消除和回代不能进行流水线处理。
每次回代单元更新一个位姿向量时,因子计算单元就可以立即开始下一轮的求解迭代。

评估



