- 博客(181)
- 资源 (1)
- 收藏
- 关注

原创 常用相机投影及畸变模型(针孔|广角|鱼眼)
omnidirectional camera(广角相机):在一个水平面有360°视野的相机,或视野能覆盖半个球或近似整个球的相机。面镜(mirror)与透镜(lens)的区别:广角相机成像步骤与普通相机基本一致,主要的区别在于镜头聚光的部分,广角相机为了获得更大的FOV,有三种镜头聚光方式:设O−x−y−zO-x-y-zO−x−y−z为相机坐标系,习惯上将zzz轴指向相机前方,xxx轴向右,yyy轴向下。OOO为摄像机的光心,也是针孔模型中的针孔。现实世界的空间点P,经过小孔OOO投影之后,落在物理成像平面
2020-08-12 19:46:05
11115
11
原创 Lie theory for the roboticist
什么是群?群是一些元素组成的集合,例如含有元素XYZ\{X,Y,Z\}XYZ的集合GGG,它群通过四个公理定义。这里十四讲讲的完全一样群带有一些运算,被称为封闭性(Composition),即两个元素的组合得出的一个元素也在该群中;存在这样的一个元素-----单位元素(Identity element) ,当我们用任何其他元素与单位元素进行操作时,我们所得到的都是该元素本身;群内有一个逆元素(Inverse element),当我们用其逆元素操作元素时,我们会得到单位元素;
2023-03-22 23:54:08
70
转载 四元数的球面线性插值(slerp)
等份, 可以看出其对应的弧长并不相等。靠近中间位置的弧长较长,而靠近两段处的弧长较短,这就意味着当。通常Slerp会用在SLAM轨迹插值中,设。的表达式如下,即要找到合适的。,即为所求,于是比例系数。按一般的插值公式写出。
2023-03-22 14:20:20
37
原创 PROJ将WGS84转UTM坐标
PROJ是一个通用的坐标转换软件,它将地理空间坐标从一个坐标参考系统(coordinate reference system, CRS)转换到另一个坐标参考系统。这包括地图投影以及大地测量转换。平面直角坐标系是一种直角坐标系,用于在地图上将地球表面的位置表示为平面上的二维坐标,它是一种局部坐标系,适用于较小区域的地图制图和定位。
2023-03-18 14:02:01
388
1
原创 AVP-SLAM 小结: Semantic Visual Mapping and Localization for Autonomous Vehicles in the Parking Lot
由于停车线和停车线角点是从IPM图像(Fig. 4(b) 中的白点和黄线)检测出来的,因此很容易自动检测停车点。比如 Fig. 5(a) 与 Fig. 5(b) 两个 local map 要是直接合并重叠的效果如 Fig. 5© 一样不是太好,但要是用这个值作为初始值优化出一个回环检测的相对位姿,那效果就很 nice 了,如 Fig. 5(d) 所示。如果算力足够,应该将里程计得到的位姿作为初值,如前面得到的本次的local map做个2D的ICP是否更合适?通过这种方式,可以生成全局一致的map。
2023-03-10 23:11:11
111
转载 泰勒展开式
但是上面这公式和对数函数有什么关系?为正整数,就是二项式定理。这里只不过拓展了应用范围而已。也非常常用,可以用欧拉公式推导,但是那反而不利与记忆。记忆方法是两边同时求导,要求两边都不变。的次方数和被她踩在下面的阶乘是一样的。其实公式上和常规版本是一样的,将。是奇函数,只有奇数项,并且。是偶函数,只有偶数项并且。不要急,先来看一下这个函数。那我们来看一下对数函数。用等比数列就和公式证明。
2023-02-16 20:00:26
240
原创 轨迹误差评估指标[APE/RPE]和EVO[TUM/KITTI]
在实际工程中,我们经常需要评估一个算法的估计轨迹与真实轨迹的差异来评价算法的精度。真实轨迹往往通过某些更高精度的系统获得,而估计轨迹则是由待评价的算法计算得到的。考虑一条估计轨迹Testii和真实轨迹Tgti,其中i1⋅⋅⋅N,那么我们可以定义一些误差指标来描述它们之间的差别。
2023-02-15 17:37:45
599
1
原创 多传感器融合定位十五-多传感器时空标定(综述)
以思路讲解为主,并给出参考文献和开源代码,不做过多细节展开;对已有方法做汇总分析,以求能在新的任务中掌握标定方案设计思路。这些方法中,推荐优先级从高到低为:a. 基于共视的标定b. 融合中标定c. 手眼标定建议应在良好环境下标定,尽量避免不分场景的在线标定。良好环境指观测数据优良的场景,例如:a. GNSS 信号良好;b. 点云面特征丰富,没有特征退化;c. 动态物体较少时间差估计,在某些情况下不得已而为之,实际中应尽量创造条件实现硬同步;
2023-02-10 19:58:24
523
原创 多传感器融合定位十四-基于图优化的定位方法
核心思路是把融合方法从滤波换成图优化,其元素不再是简单的惯性解算,而是预积分。一个暴力的模型可以设计为:缺陷:随着时间的进行,图模型会越来越大,导致无法达到实时性。解决方法:不断删除旧的帧,只优化最新的几帧,即维持一个滑动窗口。模型如下:问题:直接从模型中删除,等于损失了信息。解法:通过模型把旧帧的约束传递下来,即边缘化(后面讲具体细节)。整个流程:不断往滑窗里添加新信息,并边缘化旧信息。需要注意的是:优化问题具有如下通用形式:HX=bH X=bHX=b并可拆解成如下形式:[Hmm
2023-02-10 19:57:17
824
1
原创 多传感器融合定位十三-基于图优化的建图方法其二
在融合时,需要给不同信息设置权重,而权重 由方差得来,因此对于IMU积分,也要计算其 方差。方差的计算形式与第四章相同,即Pi,k+1=FkPi,kFk⊤+BkQBk⊤\boldsymbol{P}_{i, k+1}=\mathbf{F}_k \boldsymbol{P}_{i, k} \mathbf{F}_k^{\top}+\mathbf{B}_k \boldsymbol{Q} \mathbf{B}_k^{\top}Pi,k+1=FkPi,kFk⊤+BkQBk⊤但需注意的是,此处 Fk\b
2023-02-10 19:56:19
534
原创 多传感器融合定位十二-基于图优化的建图方法其一
优化问题可以等效为如下形式:三种约束分别通过以下方式获得:问题:位姿每次优化后会发生变化,其后的IMU惯性积分就要重新进行,运算量过大。解决思路:直接计算两帧之间的相对位姿,而不依赖初始值影响,即所谓的预积分。由于此处讨论的优化方案包含组合导航系统,且认为外参已标定,因此会和常见的lio/vio中的方案有所不同,它不包含以下内容:在第6讲中,已知导航的微分方程如下p˙wbt=vtwv˙tw=atwq˙wbt=qwbt⊗[012ωbt]\begin{aligned}& \dot{\mathbf{
2023-02-10 19:55:30
547
原创 多传感器融合定位十一-基于滤波的融合方法Ⅱ
感应轮子的旋转,并在旋转时输出脉冲,脉冲数与转过的角度呈线性比例关系。脉冲对应的是角度增量,有时也用增量除以时间,转成轮子转动的角速度输出。需要注意的是,编码器只是各种转角测量方式中的一种,其他还有轮速计、霍尔传感器等,本课程以编码器为例子讲解模型,但同样适用于其他形式的传感器。编码器安装方式有单轮、双轮、三轮,本课程推导仅围绕双轮差分模型进行展开。该模型中,需要用到以下变量:实际使用时,标定完成后, rL\boldsymbol{r}_LrL、rR\boldsymbol{r}_RrR、d\boldsy
2023-02-10 19:54:05
486
原创 多传感器融合定位十-基于滤波的融合方法Ⅰ其二
实际状态估计任务中,待估计的可以表示为:p(xk∣xˇ0,v1:k,y0:k)p\left(\boldsymbol{x}_k \mid \check{\boldsymbol{x}}_0, \boldsymbol{v}_{1: k}, \boldsymbol{y}_{0: k}\right)p(xk∣xˇ0,v1:k,y0:k)其中:xˇ0\check{\boldsymbol{x}}_0xˇ0 表示的是状态初始值v1:k\boldsymbol{v}_{1: k}v1:k 表示从 111
2023-02-10 19:52:58
506
原创 多传感器融合定位九-基于滤波的融合方法Ⅰ其一
好处就在于下面求逆的时候,公式中 对角阵的逆、上三角及下三角的逆 都是比较好求的,这样上面方差矩阵的逆就更好求出来了。实际中,预测与观测均从传感器而来,因此滤波器的作用便是结合各传感器得到一个最好的融合结果。最后得到两个二次项的和,由于同底数幂相乘后,底数不变,指数相加,且。),而此处联合概率的方差是一个高维矩阵,对它求逆的简洁办法是运用。贝叶斯推断可以理解为贝叶斯公式的运用,它是指,如果已知。把矩阵分解成上三角矩阵、对角阵、 下三角矩阵乘积的形式。, 在实际中指的是观测噪声。求逆,这个是不太好展开的。
2023-02-09 14:49:21
364
原创 多传感器融合定位八-惯性导航解算及误差分析其二
目的: 利用IMU测量的角速度、加速度,根据上一时刻导航信息,推算出当前时刻导航信息,包括姿态解算、速度解算、位置解算。(根据角速度+加速度,推算位姿+速度)方法: 由姿态、速度、位置的微分方程,推导出它们的解,并转变成离散时间下的近似形式,从而可以在离散时间采样下,完成导航信息求解。优点: IMU不受外界信号干扰,可以得到稳定、平滑的导航结果。缺点: 误差随时间累计,一般时间越长,累计误差越大。因此需要融合,而导航解算(本小节)及其误差分析(下一小节),是融合的基础。因此通常用于与其他传感器做一个优势互补
2023-02-07 13:46:10
371
原创 多传感器融合定位七-惯性导航解算及误差分析其一
多传感器融合中三维运动的导航信息包含姿态、速度、位置,其中姿态的处理最为复杂,也最为核心。姿态有三种表示形式:、、,此外还有等效,但它一般在中间计算过程中使用。(等效旋转矢量推导过程中的一些计算,推导会更加简单方便。)注:这里只介绍基于四元数和旋转矩阵的姿态更新,不介绍基于欧拉角的更新。(我们做姿态更新的时候,不会给出欧拉角的姿态更新和误差形式,欧拉角在实际过程中不会参与这种性质的运算,更多的是给人看的,很直观,但是在公式中会非常复杂。)欧拉角等同于把姿态绕三次不同轴旋转。不同的旋转顺序会得到不同的欧
2023-02-04 14:39:06
1080
3
原创 错误日志:symbol lookup error: undefined symbol: _ZN6google21kLogSiteUninitializedE
版本过高导致,重新下了个 0.4.0 版本,修改软链接后,程序正常运行。发现一个个 node 都崩了,可以看到是。
2023-01-29 17:20:04
133
原创 深度学习可视化工具:Netron
是一个用于神经网络、深度学习和机器学习模型的可视化工具。Netron支持 ONNX、TensorFlow Lite、Caffe、Keras、Darknet、PaddlePaddle、ncnn、MNN、Core ML、RKNN、MXNet、MindSpore Lite、TNN、Barracuda、Tengine、CNTK、TensorFlow.js、Caffe2 和 UFF。
2023-01-28 11:46:25
167
原创 错误日志:cmake error while loading shared libraries No such file or directory | ldd =>not found
有一个 C++ 工程,直接使用 CMakeLists.txt 编译出来好好的,可以直接执行;导致的,详细原因请参考第二个参考文献。指令,发现确实动态库没链接上。
2023-01-12 20:02:13
185
原创 多传感器融合定位六-惯性导航原理及误差分析
前面几章讲了怎样用单个传感器把图建出来然后再做定位。接下来就进入了融合的环节,即怎样把图和定位建的更好。1687年,伟大的英国科学家牛顿提出力学三大定律,为惯性导航技术奠定了理论基础。自20世纪60年代起,出现了挠性陀螺仪和动力谐调陀螺仪,同时平台式惯导系统发展迅速,并大量装备各种飞机、舰船、导弹和航天飞行器。Sagnac效应由法国物理学家 Sagnac 于 1913 年发现,其原理是干涉仪相对惯性空间静止时,光路 A 和 B 的光程相等,当有角速度时,光程不相等,便会产生干涉。同样基于Sagnac效
2022-12-31 10:54:39
547
原创 apt-fast 使用
默认的apt-get install,有时下载会非常的慢,尤其是安装的一些ppa包的时候。apt-fast 通过使用多线程下载,来给apt提速,速度有很大改善,尤其对于国内的朋友们。
2022-12-28 15:24:28
536
原创 多传感器融合定位五-点云地图构建及定位
前面做出了一个比较好的里程计,但是在实际项目使用的时候,都是基于地图的。原因如下:建图流程如下:目前比较可靠的方法还是ICP和NDT两个比较基础的方法(小范围可以使用里程计确定是不是在之前帧周边,大范围就需要用到GPS了)。论文:Scan Context: Egocentric Spatial Descriptor for Place Recognition within 3D Point Cloud Map基本思想为,将一圈点云分成很多的扇形,每个扇形在纵向上再切割成小段。三维点云展开,就成了二维
2022-12-20 19:41:12
691
1
原创 多传感器融合定位四-3D激光里程计其四:点云线面特征提取
假如我们求一个点到线的距离的时候,假如这个线上有一百个点,不可能这一百个点都求一个点到线的距离,这个计算量会大到无法接受,这时只能选一部分点来计算点到直线的距离。应该将曲率最大的几个点选出来-----曲率大的点有更大的概率属于一个良好的线特征(错误归进来的点可能并不属于线特征,它们的曲率一般都是比较小的),反之亦然。假设我们有一个残差,我们需要对残差求雅可比,如果将雅可比直接输到代码里,叫做解析求导,就是说已经解析式的,将求导的公式告诉算法了。帧之前的某些帧,共同构建出来了一个特征集合的map。
2022-12-18 15:59:26
336
原创 SLAM 几何基础
内积,又叫数量积,是向量的点乘。a=(x1,y1,z1),b=(x2,y2,z2)a⋅b=x1x2+y1y2+z1z2a=(x1,y1,z1),b=(x2,y2,z2)a⋅b=x1x2+y1y2+z1z2外积,又叫叉积、向量积,是向量的叉乘。
2022-12-17 20:25:26
277
原创 多传感器融合定位三-3D激光里程计其三:点云畸变补偿
时刻,激光雷达的相对旋转和相对平移变化即可。实际上,雷达点云是局部坐标系下的表示,当以0时刻雷达的位姿为基准坐标系时,此时。对每个激光点坐标做补偿,补偿量为激光点原点(即当时雷达坐标)相对于该帧起始时刻的变化。:每个激光点的坐标都是相对于雷达的,雷达运动时,不同激光点的坐标原点会不同。:有足够数量的点云才能进行匹配,且一周正好是周围环境的完整采集。:通常指雷达内部旋转一周扫描得到的点的集合。转一圈是需要时间的,过程中雷达可能是运动的。为当前采集时刻雷达的位置;为一帧点云中激光点的坐标。为激光束打到的位置;
2022-12-17 17:23:13
298
原创 多传感器融合定位二-3D激光里程计其二:NDT
这里的联合概率说的是将 X 划分成栅格(如上图),每个栅格里面都有很多点,这些点可以计算一个 均值/协方差,这是一个概率的概念。而联合概率是:Y 往 X 上旋转的时候,它落在栅格中的哪个格子里知道的。根据落在格子里的点,本身 X 格子已经有了一个 均值/协方差,而 Y 的这些落在格子里的点可以形成一个联合概率。与ICP这里有些区别,ICP的是点到点的距离,这里变成了联合概率。旋转和平移后的点与目标点集中的点在同一坐标系下,此时可计算各点的。目标是让所有点的联合概率最大。目标是让所有点的联合概率最大。
2022-12-17 16:19:56
448
原创 多传感器融合定位一-3D激光里程计其一:ICP
存在问题:在找配准点的时候,找的点是最近的,但是找的这个点不见得是真正在刚体里面匹配的点。这个时候点找错了,那么根据这个点计算出来的 R, t,肯定是不精确的。优化的思想在于让点逐渐收敛,不想做 SVD 分解,就给一初值,让这个初值按照一定策略逐渐搜索,直到搜索到要的 R 和 t 满足一定条件,就认为得到了最终确定的结果。解决思路:如上图所示,从蓝色的点云里面选一些点,根据这些点,在红色的点云里面找离它最近的一些点,根据这些匹配点,可以将 R, t 计算出来。,选取的是两个点集中能够互相关联的那些点,即。
2022-12-17 14:00:55
497
原创 Python dunder/magic 方法
在 Python 中,我们经常会看到被双下划线包围的属性名和方法名,比如 __init__,__repr__,__future__,__all__,__version__,__author__。在发明 dunder 之前, __init__ 要念作 double underscore init,其中的double underscore 有17个单词,发音是6声(嘴或舌头要变换7次动作,你可以以试试),而dunder 只有6个单词,发音是2声。(中文双下划线)的缩写,分别取。但是,object 类提供的。
2022-12-14 15:30:30
219
原创 Python 中如何使用pybind11调用C++
Reference:在实际开发过程中,免不了涉及到混合编程,比如,对于python这种脚本语言,性能还是有限的,在一些对性能要求高的情景下面,还是需要使用c/c++来完成。那怎样做呢?我们能使用pybind11作为桥梁,pybind11的优点是对C++ 11支持很好,API比较简单,现在我们就简单记下Pybind11的入门操作。Pybind11 是一个轻量级只包含头文件的库,用于 Python 和 C++ 之间接口转换,可以为现有的 C++ 代码创建 Python 接口绑定。Pybind11 通过 C++
2022-12-14 10:23:10
414
原创 Pytorch model.apply/net.apply
可以看见的使,不仅仅分别打印两个Linear,还加上父模块自身自己父模块的返回Sequential。想对某些特定的子模块submodule做一些针对性的处理,该怎么做。函数首先对这两个子模块调用。在这个网络示例中,模块。
2022-11-22 16:53:56
522
原创 Linux 命令 —— feh
本教程基于版本 feh 2.23.2.fehfeh是一个基于模式的图像查看器。虽然它也可以由(图形化的)文件管理器启动以查看图像,但它特别针对需要快速图像查看器而不需要大量GUI依赖的命令行用户。默认情况下(除非指定了参数或文件列表),feh显示当前目录中的所有文件。
2022-11-18 16:15:15
567
原创 VSCode解决头文件有红色波浪线
问题就如题目所描述的,所需头文件在以外,因此在#include的时候,会报出检测到 #include 错误。请更新 includePath。的红色波浪线问题。
2022-11-01 16:11:43
3844
1
原创 C++ 并行编程(thread)
进程:指在系统中正在运行的一个应用程序;程序一旦运行就是进程;进程——资源分配的最小单位。线程:系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元执行流。是程序执行的最小单位。
2022-10-31 16:10:21
1152
1
原创 因子图学习笔记其三
还没写完,占个坑。正如我们在之前的章节所看到的那样,在非线性 SLAM 的例子中进行最大后验概率推断,需要迭代求解大型 (但是稀疏) 的线性系统。尽管有一些高效的软件库可用来求解大型稀疏线性系统,但是求解线性系统本身也仅仅是一个更加通用的算法的特例。稀疏线性系统只是线性高斯因子图的一种特殊形式,即所有的先验和观测都被假设是符合高斯分布的,并且只涉及线性观测函数。因子图的稀疏结构是理解这个更加通用的算法的关键因素,也是理解(和改进)稀疏分解方法的关键因素。求解稠密线性系统的方法无法应用于大规模真实 SLAM
2022-10-24 11:21:57
157
原创 C++ 字节对齐
如果 0x02~0x05 存了一个 int ,读取这个 int 就需要先读 0x01~0x04,留下 0x02~0x04 的内容,再读 0x05~0x08,留下 0x05 的内容,两部分拼接起来才能得到那个 int 的值,这样读一个 int 就要两次内存访问,效率就低了。划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是。为什么非对齐访问内存慢?
2022-10-21 18:01:25
560
原创 因子图学习笔记其二
下面我们将讨论算法,这个算法代表了离线批处理 SLAM 方法中最新的技术发展水平。我们将介绍用于求解任意非线性因子图的非线性迭代优化技术。我们在本章中不会过多地涉及稀疏线性代数的细节,而是将其留到第 3 章。对于一个更加真实的 SLAM 问题,而非第 1 章中的小型 SLAM 例子来说,因子图会像下图所示。这个因子图是模拟如下过程得到的:一个机器人在二维平面上运动大概 100 个时间步长,同时观测路标点。为了方便进行可视化,图中每个机器人位姿及路标点都由其在二维空间中的位置真值所提供。从图上可以看到,里程计
2022-10-19 16:35:05
428
Obstacle Detection for Self-Driving Cars
2020-08-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人