- 博客(89)
- 收藏
- 关注
原创 对于Jacobian矩阵的理解GVINS
同样能理解:为residual(2维度向量)对待优化变量的求导,其中这个待优化变量选择的是9维度表示——待优化变量中包括velocity(3),bias_gyro(3)bias_acce(3),而对于residual求导也就是velocity会存在数值,我进行求导后,推导出来的结果和J_Vi.bottomLeftCorner()赋值的结果相同为:rcv2sat_unit.transpose() * (-1.0) *上面的图片为根据GNSS的pseudorange待估计的(待优化的变量)
2024-08-26 15:35:00
405
原创 GraphGNSSLib的RTKLIB——gnss_preprocessor.node的理解
整体的逻辑详见资源 ,我承诺这是自己系统分析RTKLIB后,进行的针对于自己对于RTKLib代码逻辑框架的理解。资源免费,欢迎交流以及指出错误,但是勿喷。gnss_preprocessor部分的理解,这是简单的几张流程图截图,自己的分析总结pdf在资源里,免费的,如果不占用大家资源可以下载,交流。
2024-08-02 18:16:42
163
原创 GVINS与VINS-MONO编译安装
如果在clion中实现GVINS的debug,打开工程的时候选择GVINS,前提是:必须要先CATKIN_MAKE后,然后在clion中选择open project 然后。同理,因为VINS-MONO是GVINS的先驱版本,所以,先跑通VINS-MONO,后续只需要在VINS-MONO的依赖基础上添加。如果有朋友也在用CLIONdebug GVINS的话,可以分享下经验,我遇到了一个问题类似这样。右键选择项目的Reload CMake Project 加载项目的依赖项,编译器选项:CLION。
2024-07-22 13:22:19
358
原创 GraphGNSSLib Series[2]:在CLion中不同Node间进行debug
我了解到的node,大多是通过终端运行,但是使用clion不断debug断点进行调试一直使我很苦恼,所以此次记录一下如何通过clion实现node节点之间通过publisher以及subscriber进行节点话题间的发布与通信,实现节点间的话题下的数据共享(我真感觉这是个有趣的东西ROS!ROS中,消息的发布(publish)和订阅(subscribe)是实现节点间通信的重要方式。通过发布和订阅消息,节点可以实现信息的传递和共享。
2024-07-10 21:43:09
280
原创 GraogGNSSLib Series[1]:程序执行ubuntu20.04
程序开源是在ubuntu16.04-kinetic环境跑通的,但是我的环境是UBUNTU20.04,所以,先进行了ROS的安装,因为我的系统是ubuntu20.04所以,安装的ROS版本选择。ceres-solver 使用的版本是GraphGNSSLib里面提供的ceres solver 2.0.0的版本。ROS的一些安装步骤参考的是一个CSDN的大神的博客,遇到的问题,通过自己google得到了解决。命令的时候,我出现了无法定位软件包的问题,我的解决方法是,在ROS官网下载。
2024-06-15 14:27:09
457
原创 Geopandas以及CMakeList程序编写技巧
CMAKE_CXX_FLAGS: set compiler for c++ language 添加C++的标准支持 "-O3:表示用来调节编译时的优化程度的,最高为-O3,最低为-O0"-Ox这个参数只有在CMake -DCMAKE_BUILD_TYPE=Release时有效,因为debug 版的项目生成的可执行文件需要有调试信息并且不需要进行优化,而 release 版的不需要调试信息但需要优化。生成原来的整数索引的形式。#PROJECT_BINARY_DIR:项目输出路径,通常是./build路径。
2024-05-12 18:13:50
1054
2
原创 pragma omp parallel for与pragma omp critical理解
是OpenMP API中的一个编译器指令,用于在C/C++程序中实现并行计算。这个指令告诉编译器下面的for循环应该被并行执行,即循环的迭代被分配到多个线程中,以便同时执行。这样做的目的是为了利用现代多核处理器的并行处理能力,从而加速循环的执行时间。#pragma omp:表示通过指令前缀调用OpenMp指令parallel:告诉编译器要创建一个并行区域,需要执行多线程forr:表示下面的紧随其后的for循环是要执行并行的循环。
2024-05-10 20:03:50
648
原创 对于Main函数的argc以及argv理解
注意:在program arguments配置下面,我输入的是: (这里有一个空格) (这里还有一个空格)…解释一下:第一个空格代表执行的是表示第一个参数传递给:argv[0] 是程序的名称。(默认值),所以不作修改,传入的第一个参数为默认,选择用空格代替。第三个传入的是需要传入的配置文件(yaml文件),这个…/代表父级目录,所以最终argv[1]:…一开始我也不明白如何配置,然后通过GDB端口输出:print argv[1],我就明白自己错在了哪里,哈哈哈,多用GDB调试,好东西!
2024-04-29 18:11:40
199
原创 OB_GINS_day3
这里值的注意的问题在于:此时emplace_back的类是基于PreintegrationEarthOdo的类,所以在下面这个函数中,返回的preintegration最终是PreintegrationEarthOdo类型的变量。最终执行的是PreintegrationEarthOdo——因为之前的preintegration返回的类型是PreintegrationEarthOdo类型的变量。此时的back()是取出preintegrationlist的最后一个元素,然后向这个元素中加入NewImu。
2024-04-25 11:34:04
808
1
原创 针对于OB_GINS的CMakeList文件的深入学习
以上就是CMake的install命令的基本结构和各个参数的含义。——这样使用的优点是在多个执行程序使用同一个库的时候,节省空间的内存,但是,链接操作,往往使得程序的运行速度变慢。configure_file 指令通过读取输入文件中的内容,将 CMakeLists.txt 文件中的变量转变为 C/C++ 中可识别的宏定义,然后存入另一个文件中。,同时,将@CMakeTemplate_VERSION_MAJOR@替换成相应的值(经过CMakeList中的VERSION设置,最终 实现值与变量宏定义的对应)
2024-04-09 20:21:24
919
原创 OB_GINS学习day_01
需要注意的是返回顺序是x、y、z、w,和定义的时候是不一样的(Quaternion的构造是标准Eigen格式,特别需要注意四个数的传入顺序是w、x、y、z,对应w+xi+yj+zk),因此在创建shared_ptr对象的过程中调用了类型T的某一个构造函数。(make_share依据类型,以及传入的参数,调用特定的构造函数,创建对象,并实现构造函数的初始化)explicit关键字:explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换。
2024-03-10 19:59:15
1087
原创 B树的介绍
R-B Tree又称为Red-Black Tree,红黑树。是一种特殊的二叉查找树,红黑树的每个节点上都有存储为表示结点的颜色,可以是红或者黑色。
2024-02-23 20:51:33
1441
1
原创 哈夫曼树的学习以及实践
赫夫曼编码广泛地用于 数据文件压缩。其压缩率通常在 20%~90% 之间。,又称霍夫曼编码,是一种 编码方式,,属于一种 程序算法。赫夫曼编码是 赫哈夫曼树 在电讯通信中的经典的应用之一。(Huffman Tree),还有的叫 霍夫曼树。,构造一颗二叉树,若该树的。
2024-02-13 16:29:33
396
原创 堆的数据结构以及堆的相应操作
二叉树中的堆这里的堆指代的是一种数据结构在一个关键码存在的集合中K = {K1,K2,K3,....,Kn},把它的所有元素按照完全二叉树的顺序存储方式,存储在一个一维数组中,如果根结点的元素值大于其左右孩子的值,并且每个子树都满足这种情况,其对应的堆,我们称为最大堆。
2024-02-08 16:50:13
644
原创 之前看过的前序遍历的线索二叉树感觉写的有点问题 这里更新一下我的思路
【代码】之前看过的前序遍历的线索二叉树感觉写的有点问题 这里更新一下我的思路。
2024-02-07 12:06:59
191
原创 线索二叉树的先序遍历
根据如果结点的左子树为空,那么该结点的左子树的指针,指向该节点的直接前驱,所以在递归调用该结点的左子树的时候,就会发生又回到的B结点的循环造成了。
2024-01-30 14:48:09
229
原创 通俗简单的方式理解线索二叉树
我的理解是:对于每个结点的后继操作也就可以想到是返回了pre =前一个递归的根结点也就是在当前结点的前一个结点,理所应当需要将pre = 前一个递归里面的root ,这样就可以操作使得前面一次递归的root结点的右孩子等于当递归中的root结点。
2024-01-30 11:27:03
159
原创 非递归的先序遍历与非递归的中序遍历
如果结点没有右子树(该结点访问完毕)------>根据栈顶的指示回退,访问栈顶元素(也就是回退到该结点访问之前压入栈的栈顶元素),并访问栈顶元素的右子树,重复步骤一。如果左子树为空(结点访问完毕)------>根据栈顶元素指示回退,返回栈顶元素(也就是回退到该结点访问之前压入栈的栈顶元素),并访问栈顶元素的右子树,重复步骤一。如果该结点没有左子树,那么访问该结点的data。首先访问该结点的数据(非空打印数据)如果结点有左子树,那么该结点入栈;如果该结点有右子树,重复步骤一;如果左子树非空,则重复步骤一。
2024-01-25 21:43:17
190
原创 树的学习day01
根:根结点(没有前驱)叶子:终端结点(没有后继)森林:指的是m棵互不相交的树组成的集合(例如:删除R以后形成的A,B,C子树所形成的集合)有序树:各结点子树从左向右有序,不能交换无序树:各个结点之间可以互换位置双亲:上层的那个结点(直接前驱parrrent)孩子:下层结点的子树(直接后继child)兄弟:同一个双亲下的同层结点(孩子直接互称兄弟)堂兄弟:双亲位于同一层的简单(但是并非属于同一个双亲)祖先:从根到该结点所经历的分支的所有结点子孙:从该结点的下层子树中的任意结点结点:树的数
2024-01-24 21:36:10
972
原创 文章阅读总结:多传感器融合:GNSS微弱信号场景的补救措施
在这里插入图片描述](https://img-blog.csdnimg.cn/direct/bc97f8b9ba1042238eb0e027a4d4bf94.png)因子图存在着:**两类节点: 变量节点和对应的函数节点**变量节点所代表的变量是函数节点的自变量。Factor Graph 是概率图的一种,是对函数因子分解的表示图,一般内含两种节点,变量节点和函数节点。一致性指的是在该框架中能够保持一致性地更新变量的值,使得整个概率图模型中的变量和因子之间的关系是一致的。# 文献阅读笔记[IF 18.6]
2024-01-16 15:46:26
349
原创 论文Renderable Neural Radiance Map for visual navigation
latent code通常指的是一个潜在空间中的向量,它用于表示3D场景的特征或属性,表示了场景中的一个特定视图或对象。在NeRF中,这个潜在的编码被用来生成场景中的3D结构和颜色。通过学习这个潜在空间的编码,NeRF可以在渲染时生成逼真的图像。这种编码的使用允许NeRF模型在训练期间对观察到的视图进行建模,从而使其能够在测试时生成高质量的图像。这些编码可以捕获场景中的几何形状、材质、光照等信息,从而帮助生成高质量的三维重建。latent code的设计对于NeRF模型的性能和生成能力具有重要影响。
2024-01-08 14:37:05
385
原创 【多传感器融合导航论文阅读】
Factor Graph 是概率图的一种,是对函数因子分解的表示图,一般内含两种节点,变量节点和函数节点。两类节点: 变量节点和对应的函数节点变量节点所代表的变量是函数节点的自变量。同类节点之间没有边直接相连。
2023-12-30 16:56:50
409
原创 SLAM PnP问题以及相关基础知识
目标泛函是在优化问题中使用的一种数学工具,目标泛函是一个函数,它将一个或多个函数映射到一个实数。它常用于描述需要最小化或最大化的函数。在优化问题中,我们通常希望找到使得某个特定函数取得最大值或最小值的变量值。目标泛函可以帮助我们形式化地表达这些优化目标,并通过数学方法来寻找最优解。例如,在最小二乘法中,目标泛函是一个关于模型参数的函数,我们希望通过调整参数来最小化目标泛函。在变分问题中,目标泛函是一个关于函数的函数,我们希望找到一个函数,使得目标泛函取得最小值。
2023-12-29 16:18:15
464
这是针对于GraphGNSSLib的RTKLIB部分的代码逻辑流程分析,最终绘制成为流程图的形式,方便思路的联系和构建
2024-08-02
阅读论文-主要方向多传感器融合定位方向
2024-01-29
C++类型转换 涉及static-cast,reinterpret-cast,dynamic-cast,const-Cast
2023-11-22
出租车轨迹数据计算 VS2017
2023-02-18
武汉大学-测绘程序设计上册代码学习 反距离加权插值
2023-02-18
EasyGPS的案例程序二-Matlab
2023-01-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人