- 博客(318)
- 资源 (3)
- 收藏
- 关注
原创 高翔【自动驾驶与机器人中的SLAM技术】学习笔记(十二)拓展图优化库g2o(三)边edge
小白:前面你介绍了g2o中边的基本类型、重要的成员变量和成员函数,那么如果我们要定义边的话,具体如何编程呢?public:myEdge(){}// ...// .../*...*/private:// data我们可以发现,最重要的就是(),()两个函数了小白:嗯,看起来好像也不难啊师兄:我们先来看一个简单例子,地址在这个是个一元边,主要是定义误差函数了,如下所示,你可以发现这个例子基本就是上面例子的一丢丢扩展,是不是感觉so easy?
2024-10-29 16:49:19 735
原创 高翔【自动驾驶与机器人中的SLAM技术】学习笔记(十二)拓展图优化库g2o(二)顶点vertex
小白:师兄,我们是不是可以开始写顶点定义了?师兄:嗯,我们知道了顶点的基本类型是 BaseVertex,那么下一步关心的就是如何使用了,因为在不同的应用场景(二维空间,三维空间),有不同的待优化变量(位姿,空间点),还涉及不同的优化类型(李代数位姿、李群位姿)小白:这么多啊,那要自己根据 BaseVertex 一个个实现吗?师兄:那不需要!小白:好全啊,我们可以直接用啦!师兄:当然我们可以直接用这些,但是有时候我们需要的顶点类型这里面没有,就得自己定义了。
2024-10-29 10:26:12 900
原创 高翔【自动驾驶与机器人中的SLAM技术】学习笔记(十二)拓展图优化库g2o(一)框架
BlockSolver 内部包含 LinearSolver,用上面我们定义的线性求解器LinearSolver来初始化。g2og2ocore你点进去会发现 BlockSolver有两种定义方式一种是指定的固定变量的solver,我们来看一下定义其中p代表pose的维度(注意一定是流形manifold下的最小表示),l表示landmark的维度另一种是可变尺寸的solver,定义如下小白:为何会有可变尺寸的solver呢?
2024-10-24 18:16:51 975
原创 高翔【自动驾驶与机器人中的SLAM技术】学习笔记(十一)ESKF中融合速度观测量;发散的原因;如何解决发散;以及对slam的理解
1、slam发散的原因?2、如何解决/限制发散?3、如何在已经有观察值和预测值的ESKF中,再引入一个其他其他观察量?
2024-10-14 18:08:51 1155
原创 高翔【自动驾驶与机器人中的SLAM技术】学习笔记(九)imu运动学;lambda表达式;bind;function;std::move()
常用六轴IMU是由和两部分组成。安装要尽量保证IMU的安装位置在车辆中心。避免由IMU与载体系不重合引来的问题。
2024-08-28 17:50:36 1067
原创 高翔【自动驾驶与机器人中的SLAM技术】学习笔记(八)卡尔曼滤波器四:一文理清卡尔曼滤波,从传感器数据融合开始谈起【转载】
在正式讨论卡尔曼滤波前,我们先讨论对。我们会发现是和卡尔曼滤波紧密相关的。我们知道,如果需要对自然界的某个物理量,比如温度,气压,速度等进行测量,我们需要用各种传感器进行测量。但是,因为器件的工艺不可能达到完美,或者其他不能被人为预测到或者控制到的因素和噪声等存在,传感器对物理量的预测。因此,我们,不如把它看成是一个其均值和方差分别为μσ2,既是v∼Pμσ2,,这两个描述了。μσ2(暂且假设传感器的测量均值是和真实值无偏的。
2024-08-12 22:11:49 931
原创 高翔【自动驾驶与机器人中的SLAM技术】学习笔记(七)卡尔曼滤波器三:卡尔曼滤波器公式推导【转载】
转载来源:卡尔曼滤波:从入门到精通考虑一个SLAM 问题,它由一个运动方程:xt=f(xt−1,ut)+ωt(1)\mathbf{x}_{t}=f(\mathbf{x}_{t-1},\mathbf{u}_{t}) + \omega_t \tag 1xt=f(xt−1,ut)+ωt(1)和一个观测方程组成:zt,j=h(yj,xt)+vt,j(2)\mathbf{z}_{t,j} = h( \mathbf{y}_{j},\mathbf{x}_{t} ) + v_{t,j} \tag 2z
2024-08-09 20:30:15 993
原创 高翔【自动驾驶与机器人中的SLAM技术】学习笔记(四)高斯牛顿法详解
还是那句话:高斯牛顿法是对:最小二乘法展开的是后面的函数部分。将f(x)一阶泰勒展开(一阶就要带雅可比矩阵)。这个自变量增量都是可求的。因此为了简化有了下面的高斯牛顿法。不过只适用于最小二乘法。最小二乘法展开的是后面的函数部分。将f(x)一阶泰勒展开(一阶就要带雅可比矩阵)。通过使用不含有二阶导数的矩阵U代替牛顿法中的H,根据矩阵U构造的不同,具有不同的拟牛顿法。所以为了使增量的更加稳定可靠,对其做了限制,增加了置信域。无论一阶泰勒展开,还是二阶泰勒展开都是关于增量。缺点:雅可比矩阵有时是。
2024-07-26 17:10:31 1351
原创 高翔【自动驾驶与机器人中的SLAM技术】学习笔记(三)基变换与坐标变换;微分方程;李群和李代数;雅可比矩阵
雅可比矩阵加微分方程:一阶泰勒展开近似表示。如果一篇介绍这个概念的文章读不懂,那就多搜几篇,总有一篇符合你的胃口,直到弄懂为止。雅可比矩阵配合微分方程:完成了对逼近局部值的一阶泰勒展开的近似。为何要局部近似?因为这种多元向量值函数是一种隐函数,我们没法描述他的具体函数。只好做线性近似。是一种无奈之举。但是只要足够逼近,那么就足够精确。可微的意义:如果陡变,这种近似没有意义,不成立。所以这就是可微可导的实际物理意义。或者说几何意义。可以用雅可比矩阵刻画一个多元向量值函数的局部,从而简化分析。
2024-07-22 23:22:26 1161 1
原创 高翔【自动驾驶与机器人中的SLAM技术】学习笔记(二)——带着问题的学习;一刷感受;环境搭建
按照作者在读者寄语中的说法:我们得榨干这本书的知识。
2024-07-16 11:21:34 1718
原创 解决:undefined reference to `pcl::PCLBase<pcl::PointXYZ>::setInp
因为我在新建这个package包时,错将pcl_ros写成了rospcl。导致依赖包没有加载上。修改这个包的这个部分就好了。
2024-07-03 00:42:11 451
原创 error: ‘LocalParameterization’ is not a member of ‘ceres
error: ‘LocalParameterization’ is not a member of ‘ceres’
2024-06-19 20:36:18 901
原创 return pt.array().template round().template cast<int>();
观察最后一个3,4,6,发现是取整四舍五入。
2024-04-01 17:34:51 267
原创 命名空间 “Eigen“ 没有成员 “SelfAdjointEigenSolver“
结果报错:报错实在windows10条件下发生的。转发请备注来源于:xiaoyaolangwj。查找资料,最后还是要定位到官方文档。这是在特征值模块中定义的。
2024-01-15 15:49:58 829
原创 编译报错 undefined reference to `google::kLogSiteUninitialized‘ 的参考解决方法
完事在自己的CMakeLists.txt文件中,添加上这一句话:编译通过了。我试了很多种方法:包括重新编译安装gflags和glog等方法;1、重新安装gflags。2、重新安装glog。
2023-11-23 14:55:23 1360
原创 Ubuntu18.04安装pcl-1.12.1,make时报错:/usr/bin/ld: cannot find -lvtkIOMPIImage
然后勾选上VTK_Group_MPI和VTK_Group_Imaging。然后重新回到pcl安装目录的build下,将所有东西删除,重新编译。在vtk安装包中,重新打开。
2023-11-07 10:26:02 627
原创 Ubuntu系统配置;换源;
1 将系统自带的该文件做个备份: sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup。系统不是18.04,可以打开下面的地址,选择你的Ubuntu版本,复制里面的链接到文本中。将下面的内容粘贴到打开文件的最前面,全部粘贴过去,保存,并关闭。更新软件: sudo apt-get upgrade。更新源: sudo apt-get update。打开终端(Open Terminal)如果你对上面的地址有疑惑,或者你的。
2023-07-25 09:46:29 642
原创 C/C++ 中 volatile 关键字详解
而且读取的数据立刻被保存。在此段代码中,nMyCounter 的拷贝可能存放到某个寄存器中(循环中,对 nMyCounter 的测试及操作总是对此寄存器中的值进行),但是另外又有段代码执行了这样的操作:nMyCounter -= 1;//等待上面的线程终止,如果bStop不使用volatile申明,那么这个循环将是一个死循环,因为bStop已经读取到了寄存器中,寄存器中bStop的值永远不会变成FALSE,加上volatile,程序在执行时,每次均从内存中读出bStop的值,就不会死循环了。
2023-06-26 14:49:54 688
原创 CloudCompare
分割点云:选中要分割的点云文件–>Segment–>左键框出要分割的点或者区域–>Segment Out–>Comfirm Segmentation,原点云文件被分割成两个结构,选中分割出来的remaining,右键delete即可。qSRA (Surface of Revolution Analysis):计算一个点云和一个假定旋转平面之间的距离(旋转平面用2D轮廓定义),距离计算好后,用户可以创建一个偏差的2D图或者圆柱或圆锥的投影。②表现为同样的对象或者至少有同样的形状。
2023-06-25 11:16:45 2996
原创 C++笔记:虚继承
Animal下派生出Sheep和Tuo类。动物基类下,有两个派生类,一个是羊类,一个是驼类。这两个类都继承了Animal的一个属性,比如m_age。这样就导致资源的浪费,同时sheepTuo二义性。通过VS开发者工具中的工具,我们可以查看类的结构。解决方案:虚继承virtual。
2023-03-22 12:01:41 154 1
原创 C++笔记:指针转向(重新赋值)时的问题;重复释放;原地址遗漏释放;赋值运算符重载operator=;
指针转向时原空间内存释放。指针指向的地址,存在二次释放的风险,所以需要深拷贝。在堆中重新开辟一块空间,将指向的内容传入进去。
2023-03-19 23:59:11 700
原创 C/C++面试可能会问五:malloc、free和new、delete可以混搭使用吗?也就是说malloc分配的内存,可以调用delete吗?通过new创建的对象,可以调用free来释放吗?
如果直接用free释放new对象,那么会导致析构函数不被调用。new是一个运算符,malloc是一个函数。所有new出来的对象,都返回该类型的。而且malloc不会去调用构造函数。释放堆区空间要用delete。但是new会调用构造函数。而malloc则返回。
2023-03-17 10:21:32 1008 1
原创 C语言数据结构七:二叉树非递归遍历
因为引入bool量,所以引用:<stdbool.h>必须采用栈的这种先进后出的特性。初始化根节点:返回根节点,然后输入为。我们继续采用前面是用的栈的代码。节点结构体:除了节点,还需要一个。二叉树的非递归遍历,必须借助。
2023-03-14 16:08:04 884
原创 C语言数据结构六:树。二叉树遍历。先序遍历,中序遍历,后序遍历。二叉树叶节点数,二叉树高度,二叉树拷贝;二叉树释放。
(二叉)树中,一个节点,你也要把他看做成树。子树。一个节点都没有叫做空树。所以说:树具有递归性。树是非线性结构,有一个,但是可能有很多。树中,应用最多的还是二叉树。
2023-03-14 14:38:50 429
GitHub - soumith_ganhacks_ starter from _How to Train a GAN__ at NIPS2016.pdf
2021-05-21
GANs-in-Action.pdf
2021-05-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人