6.Ceres官方教程-非线性最小二乘~Other Examples
除了之前的示例外,example目录中还包含许多其他示例:
1.bundle_adjuster.cc演示了如何使用Ceres的各种特性来解决bundle adjustment问题。
2.circle_fit.cc如果将数据拟合成圆形
3.ellipse_approximation.cc用近似的线段轮廓拟合随机分布在椭圆上的点。这是通过联合优化线段轮廓的控制点以及数据点的原像位置来实现的。
这个例子的目的是展示一个Solver::Options::dynamic_sparsity的使用示例,以及它如何使数值密集但动态稀疏的问题受益。
4.denoising.cc利用Fields of Experts模型实现图像去噪。
5.nist.cc实施并尝试解决NIST非线性回归问题。
6.more_garbow_hillstrom.cc以下论文中测试问题的子集
Testing Unconstrained Optimization Software Jorge J. More, Burton S. Garbow and Kenneth E. Hillstrom ACM Transactions on Mathematical Software, 7(1), pp. 17-41, 1981
which were augmented with bounds and used for testing bounds constrained optimization algorithms by
A Trust Region Approach to Linearly Constrained Optimization David M. Gay Numerical Analysis (Griffiths, D.F., ed.), pp. 72-105 Lecture Notes in Mathematics 1066, Springer Verlag, 1984.
7.libmv_bundle_adjuster.cc是Blender/libmv使用的bundle adjustment算法。
8.libmv_homography.cc这个文件演示了如何解决两组点之间的单应性,并通过对图像空间错误进行回调检查来使用自定义退出标准。
9.robot_pose_mle.cc这个例子演示了如何使用CostFunction的DynamicAutoDiffCostFunction。DynamicAutoDiffCostFunction用于在编译时不知道参数块的数量或大小的情况。
这个例子模拟了一个机器人沿着一维走廊行走,带有噪音里程计读数和走廊尽头的噪音范围读数。通过融合噪声里程计和传感器读数,本示例演示了如何计算机器人在每个时间步的姿态的最大似然估计(MLE)。
10.slam/pose_graph_2d/pose_graph_2d.cc同步定位和地图构建(SLAM)问题包括建立一个未知环境的地图,同时在该地图中进行定位。这个问题的主要困难在于没有任何额外的外部辅助信息,如GPS。
SLAM一直被认为是机器人技术的基本挑战之一。有许多关于SLAM的资源。位姿图优化问题是SLAM问题的一个例子。下面解释了如何在具有相对位姿约束的二维空间中构建基于SLAM问题的位姿图。
考虑一个在二维平面上移动的机器人。机器人可以使用一组传感器,如车轮里程计或激光测距扫描仪。从这些原始的测量,我们想要估计机器人的轨迹以及建立环境的地图。为了降低问题的计算复杂度,位姿图方法抽象了原始测量值。具体来说,它创建了一个表示机器人姿态的节点图,以及表示两个节点之间相对变换(delta位置和方向)的边缘。边缘是来自原始传感器测量的虚拟测量,例如通过集成原始车轮里程计或对准从机器人获得的激光距离扫描。结果图的可视化如下所示
图中用三角形描述了机器人的姿态,连接线表示了测量值,虚线表示了闭环的测量值。循环闭环是在非顺序机器人状态之间的测量,它们减少了随时间累积的错误。下面将描述位姿图问题的数学公式。
在时间戳t时,机器人的状态为,其中p是二维向量,表示平面上的位置,ψ是弧度方向。
测量机器人在两个时间戳a和b之间的相对转换为
计算测量与预测测量之间误差的Ceres成本函数中实现的残差为:
其中Normalize()对范围[−π,π]的角度进行归一化,R是旋转矩阵,由以下公式得出:
...TODO