![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ceres学习笔记
文章平均质量分 60
Cc1924
这个作者很懒,什么都没留下…
展开
-
ceres学习笔记5——机器人2D/3D位姿图优化pose_graph_2d/3d
1. 2D位姿图优化pose_graph_2d.cc1.1.问题描述注意:上面的图片中官网教程写的没有问题!因为官网的教程写的确实是非常细心!注意公式中是Ra^T,Ra确实是节点坐标系到世界坐标系的旋转矩阵,但是由于pb-pa是世界坐标系下面的位置表示,而hat_pab是在A的坐标系下表示的b相对于a的位姿,所以最后做减法的时候需要全部转换到a的坐标系下表示。由于旋转矩阵是正交矩阵,即 R的逆等于R的转置。所以上面的公式中使用的是R的转置,也就是R的逆,也就是世界坐标系到机器人坐标系之间的变换关系原创 2021-10-12 16:58:32 · 2069 阅读 · 0 评论 -
ceres学习笔记4——Bundle Adujstment光束法平差
1.官网Tutorial官网的教程对应的文件是simple_bundle_adjuser.cc这个文件,并且这个程序中最开始说了,这个程序并没有使用最佳的配置来进行求解,文件内容和十四讲中第9讲的内容是一样的,在slam中已经分析的比较清楚了,看自己的这一篇笔记:视觉SLAM十四讲——第九讲后端12.更复杂的使用2.1.程序说明在bundle_adjuster.cc这个文件中使用更加复杂的方法,文件开头说明了这个程序是使用各种求解器和损失函数解决动态大小问题的示例,并且这个程序必须依赖于gflag原创 2021-10-11 22:33:35 · 503 阅读 · 0 评论 -
ceres学习笔记3——曲线拟合powell.cc
1.官方程序对于曲线拟合问题,对于每个数据都会有一个残差,定义的残差对象中还需要包含观测到的数据,所以相比前面的有一些不同。由于最后是要计算残差的平方和最小,所以说对于每一组观测数据(对应一个残差),都需要添加到Problem的残差块中。这里带估计的变量有两个,分别是m和c,官方程序还是把他们分开来了,每个优化变量都是一维的,实际同上一节的笔记记录,这里也是可以写成一个数组,把多个一维变量变成一个多维变量。struct ExponentialResidual { ExponentialResid.原创 2021-10-09 13:30:55 · 221 阅读 · 0 评论 -
ceres学习笔记2——鲍威尔函数powell.cc
1.官方程序定义如下所示,官方定义的函数内容是把x1-x4分别定义了一个变量,然后对每个残差都定义了一个残差块,这个是正确的,因为最后求得就是残差块的平方和,所以不能把F1-4定义到一起。struct F1 { template <typename T> bool operator()(const T* const x1, const T* const x2, T* residual) const { // f1 = x1 + 10 * x2; residual[0]原创 2021-10-09 13:10:33 · 398 阅读 · 0 评论 -
Ceres学习笔记1——helloworld.cc
1.残差块构造的问题1.使用模板定义的()运算符,可以让Ceres使用自动求导,这里的关键是使用模板。其次这种函数应该是有专门的名字叫做函数对象,也就是tutorial中的functor。对于函数对象返回bool值的又称为谓词,所以这里可能是函数对象或者谓词的使用吗?具体需要好好学学这方面2.下面的定义可以看出,由于要优化的变量是x,但是这里却把x定义成了最严格的const类型,为什么?3.struct CostFunctor { template <typename T> //原创 2021-10-09 12:45:49 · 212 阅读 · 0 评论