每日学习笔记

222-11-3

1
2
Q: 关于slam重定位的讨论
A: 使用粒子滤波时通过增加历史权重的方式获得一定scan的历史信息,当信息量达到一定程度时,开始做匹配重定位,最后留下一个pose作为最终定位pose,但实际上这种通过增加历史权重的方式获得历史信息的方式依旧会损失很多scan信息,所以可以通过scan叠加图后通过叠成更大图的方式最后进行匹配,尽可能保留scan数据
1
2
3
4
5
6
7
问题起因: 当厂家给我们传感器误差时的意思实际上就是说他们的传感器可以近似拟合高斯分布
Q1: 为什么可以拟合成高斯分布?
A1: 因为没有办法,只有高斯分布可以在传播过程中依然保持高斯分布,这种特性是其他分布所没有的,只能如此,所以这也就导致了这样一个问题,我们虽然拟合成高斯分布,但实际上传感器误差不可能仅仅遵循高斯分布,因此可以短期相信高斯分布的结果,但不可能完全相信它
Q2: 考虑amcl中观测模型求解权重的情况,为什么其似然域模型可以包含随机误差与最大误差的影响
A2: 因为这里的权重模型仅考虑单次本轮内比较,并不存在与下一轮或者上一轮比较的情况,因此可以用
Q3: 为什么似然域模型需要将p *= p; 换成 p += qz*qz*qz; ?
A3: 因为发现原有公式算出来的差距过于大,对于计算机并不友好,所以换种方式降低这种差距

2022-11-4

1
2
3
4
5
Q:关于长走廊与隧道问题
A:
1. 其观测协方差矩阵并不会发生变化,原因由于,特征匹配出现的问题,拿icp举例,两个在长走廊上的icp匹配可能得到的d_pose非常小,原因实际上就是选取的特征点存在问题,比如将其换成带信息的二维码则不会存在这样的问题
2. 为此可以判断处于长走廊,比如,通过法向量或者提线判断,最终决定于你对于长走廊的定义
3. 为弥补这种特征退化造成的影响,可能需要其他传感器的辅助(odom, imu)
1
2
Q: 关于法向量的思考
A: 可以通过scan.points[i]左右两个点进行叠加选择计算我的切线方向(甚至与可以通过所有的点进行拟合),从而求出相对于我车体的法向量
1
2
Q: 对于scantomap中map的理解
A: 实际上就是所有scan的信息整合,不过这里的map相当于所有scan进行了一次降采样,一方面过滤掉了一部分scan坏的点另一部分也减少了总体scan的信息量
1
2
Q: 简述说明icp过程?
A: 1. 搜索最近点 2. 获得点对 3. 最小二乘迭代 4. 评估icp匹配质量(这里通过匹配点对/scan.size, 但实际上这只是一种无奈操作,我无法判断是80/100更好, 还是160/200更好)
1
2
3
4
Q1: 简述ndt过程?
A1: 1. 构建ndt栅格 2. 计算每一个ndt栅格左边与协方差 3. 通过协方差加权最小二乘迭代 4. 评估匹配质量
Q2: 思考ndt与icp区别?
A2: ndt本质上是从icp衍生而来,只不过为了简化计算量,将前一个scan做了预处理,然后通过加权最小二乘实现迭代
1
2
Q: 思考GPS,反光板,二维码与land_mark在图优化中的作用
A: 提供绝对约束,或者一元边
1
2
Q: 思考图优化中滑窗与边缘化
A: 边缘化的概念是希望删除一些不需要的关键帧,但保留其约束,这样就可以与滑窗联系起来,通过滑窗将不需要的关键帧删除,这就势必舒尔补导致将原有的稀疏矩阵变为稠密矩阵,而vins的做法是保持信息矩阵维持在比较合理的尺寸

2022-11-5

1
2
3
4
5
6
Q: 关于重定位与slam关系思考
A: 可以将slam想成前端重定位作为后端两个线程
--------------->slam线程---------->重定位线程(类似于后端优化线程)------------------->ret(pose, map)
pose|map
SmallRelocate|FastRelocate|DynamicRelocate|Mapping
slam
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Q: 多线程数据传输
A: 可以通过跨线程类传输数据,比如

class Map2d
{
public:
GetCellValue()
{
lock(m_lock);
// do something.....
unlock(m_lock);
}

SetCellValue()
{
lock(m_lock);
// do something.....
unlock(m_lock);
}
private:
mutex m_lock;
};

int main()
{
Map2D map;
slam Thread(&map);
Relocate Thread(&map);
}

2022-11-9

1
2
3
4
5
6
7
8
Q1: 在做最小二乘时,error做损失函数的目的是?
A1: 为了让训练模型的特征更容易达到我们所期望的效果,具体可参考:
https://www.bilibili.com/video/BV1vg411172u/?spm_id_from=333.337.search-card.all.click&vd_source=745fd1b1f3e42bb544237f6d0bf78bb2

Q2: g2o文件中信息矩阵为何要开方处理
A2: 由于g2o默认为符合高斯分布,因此可以通过高斯分布的损失函数求解,这里的开方的目的是方便处理,具体参考
https://github.com/alademm/micro-graph-optimizer
https://github.com/dongjing3309/minisam

2022-11-10

1
2
Q: 对于vector等STL与智能指针来讲,对于内存消耗与运行速度思考
A: 相较于最简单的数组,使用STL势必会占用更多的内存与时间,所有如果是非常频繁的使用尽量使用最简单表达

2022-11-11

1
2
3
4
5
Q1: 在进行QR稀疏矩阵求解或者Cholesky分解前由于矩阵为稠密矩阵,消耗非常大怎么办?
A1: 先通过近似最小度排序将稠密矩阵转为稀疏矩阵.

Q2: 为什么矩阵会变为稠密矩阵?
A2: 因为在回环检测后如果依旧在原有的路径上行走,会出现很多回环点,导致矩阵越来越稠密.
1
2
3
4
5
6
7
Q: Chou_Liu Tree理解?(可以理解为将稠密矩阵转化为稀疏矩阵的一种方式)
A: 目的是将联合概率分布转化为二维分布连乘形式(近似):
寻找一棵以互信息为权值、变量为节点的最大生成树作为依赖树
参考: http://www.bewindoweb.com/232.html
https://zhuanlan.zhihu.com/p/437028454
https://blog.csdn.net/qq_38023849/article/details/110306178?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166555644916782425127805%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=166555644916782425127805&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-3-110306178-null-null.142^v53^control_1,201^v3^control&utm_term=chow-liu%E6%A0%91&spm=1018.2226.3001.4187
https://blog.csdn.net/qq_35201208/article/details/126289355?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166555644916782425157603%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=166555644916782425157603&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-126289355-null-null.142^v53^control_1,201^v3^control&utm_term=chow-liu%E6%A0%91&spm=1018.2226.3001.4187

2022-11-16

1
2
Q: 对于map更新思考
A: 由于map整体上占用比较大,一般使用增量式更新,一方面便于自己使用,另一方面便于给显示使用
1
2
Q: 关于二维地图修正
A: 常规思路是提线,不过由于只是为了将地图摆正,所以只需要在地图范围下对其进行矫正(数格子,连在一块最多的格子,则认为是墙壁)
1
2
3
Q: 关于Eigen库稀疏矩阵使用
A: 一般操作是先将其储存在三角矩阵中最后通过稀疏化提取放入到我的稀疏矩阵中,具体可参考:
https://github.com/qixianyu-buaa/EigenChineseDocument/blob/master/Eigen/Chapter3_SparseLinearAlgebra/Section1_SparseMatrixManipulations.hpp

2022-11-17

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Q1: 关于单层神经网络流程理解
A1: 总体上分为前向传播(输出分析结果)与后向传播(更新神经网络权重)
前向传播:
1. 与权重点乘获得结果
2. 归一化用于传播
后向传播:
1. 计算误差
2. 计算学习率(根据激活函数)
3. 更新网络权重

Q1: 关于多层神经网络流程理解
A1: 总体上分为前向传播(输出分析结果)与后向传播(更新神经网络权重)
前向传播:
1. 与权重点乘获得下层结果
2. 归一化用于传播
后向传播:
1. 计算上层误差
2. 计算学习率(根据激活函数)
3. 更新网络权重
1
2
Q: 数值最小二乘与最大似然估计相关性
A: 由于一般联合概率分布为多概率乘积形式,因此会先通过ln转换为连加,而根据正太分布可知,这两者本质上是相同的(最优化理论与基础)

zexLpq.png

1
2
3
Q: 对数几率回归应用
A: 又称sigmoid函数,主要是在slam的mapping中使用,目的是将每个栅格值做归一化处理
由于sigmiod的分布在0.5附近变化很大,所以也可以很快区分占用与空闲栅格