根目录
bal_problem.cc
: 实现了
BALProblem
类,负责加载、解析、归一化和保存BAL(大规模捆绑调整)数据集文件。bal_problem.h
: 声明了
BALProblem
类的接口,该类封装了处理一个BAL数据集问题所需的所有数据和操作。bicubic_interpolation.cc
: 演示了如何在二维数据网格上使用双三次插值来寻找插值曲面的最小值。
bicubic_interpolation_analytic.cc
: 双三次插值示例的一个变体,它使用手动提供的解析导数而非自动微分进行优化。
BUILD
: 一个Bazel构建文件,定义了如何使用Bazel构建系统来编译和链接示例代码。
bundle_adjuster.cc
: 一个更复杂的捆绑调整(Bundle Adjustment)示例,展示了如何使用Ceres解决一个通用的BA问题。
circle_fit.cc
: 一个将二维点集拟合到圆的示例,通过最小化点到圆方程的几何距离来实现。
CMakeLists.txt
: 整个Ceres示例项目的顶层CMake构建脚本,负责查找Ceres库并包含所有子目录中的示例项目。
curve_fitting.c
: 一个使用C语言(而非C++)进行曲线拟合的示例,用于演示Ceres的C语言接口。
curve_fitting.cc
: 经典的曲线拟合问题的C++实现,通过最小化模型函数与观测数据点之间的残差来求解模型参数。
denoising.cc
: 一个图像去噪示例,将问题建模为一个在像素网格上的优化问题(马尔可夫随机场),其中像素值是待优化的变量。
ellipse_approximation.cc
: 一个将二维点集拟合到椭圆的示例。
evaluation_callback_example.cc
: 演示如何使用
EvaluationCallback
回调函数,在求解器每次评估代价函数时执行自定义操作。fields_of_experts.cc
: 实现了Fields of Experts(FoE)图像模型,这是一种用于图像去噪的复杂统计模型。
fields_of_experts.h
: 声明了Fields of Experts示例所需的类和数据结构。
helloworld.cc
: 最简单的“Hello World”级Ceres示例,展示了设置和求解一个基本优化问题的完整流程。
helloworld_analytic_diff.cc
: “Hello World”示例的变体,使用手动编写的解析导数代替自动微分。
helloworld_numeric_diff.cc
: “Hello World”示例的变体,使用数值微分(有限差分)来计算导数。
iteration_callback_example.cc
: 演示如何使用
IterationCallback
回调函数,在求解器的每次迭代结束时监控优化进度或提前终止。libmv_bundle_adjuster.cc
: 展示Ceres如何与libmv计算机视觉库集成的捆绑调整问题示例。
libmv_homography.cc
: 一个使用libmv来估计两组点之间的单应性矩阵的示例。
more_garbow_hillstrom.cc
: 解决一系列来自More、Garbow和Hillstrom集合的非线性优化标准测试问题。
nist.cc
: 解决一系列来自美国国家标准与技术研究院(NIST)的非线性回归标准测试问题。
pgm_image.h
: 一个用于读写PGM(便携式灰度图)格式图像的辅助头文件,供图像去噪等示例使用。
powell.cc
: 实现并求解鲍威尔(Powell)奇异函数,这是一个经典且具有挑战性的优化基准问题。
robot_pose_mle.cc
: 一个使用最大似然估计(MLE)方法进行机器人位姿估计的示例。
robust_curve_fitting.cc
: 曲线拟合的变体,它使用鲁棒损失函数(如Huber或Cauchy)来减轻离群数据点对拟合结果的影响。
rosenbrock.cc
: 实现并求解著名的Rosenbrock“香蕉”函数,这是一个常用于测试优化算法性能的基准问题。
rosenbrock_analytic_diff.cc
: Rosenbrock示例的变体,使用解析导数进行求解。
rosenbrock_numeric_diff.cc
: Rosenbrock示例的变体,使用数值导数进行求解。
simple_bundle_adjuster.cc
: 一个简化的捆绑调整示例,专注于核心概念的实现,避免了完整BA系统的复杂性。
snavely_reprojection_error.h
: 为Snavely风格的捆绑调整问题(如BAL数据集)定义了核心的代价函数,即重投影误差。
sampled_function
目录
CMakeLists.txt
:
sampled_function
示例的CMake构建脚本。README.md
: 解释
sampled_function
示例目的和用法的说明文档。sampled_function.cc
: 演示如何通过插值来优化一个仅通过离散采样点得知的函数的源代码。
slam
目录
CMakeLists.txt
: SLAM示例的顶层CMake构建脚本,负责包含2D和3D姿态图的子项目。
common
子目录read_g2o.h
: 一个通用的、模板化的工具头文件,用于从g2o格式的文件中读取位姿图问题数据。
pose_graph_2d
子目录angle_manifold.h
: 为二维角度定义了一个自定义流形(Manifold),以在优化中正确处理其周期性(环绕)特性。
CMakeLists.txt
: 2D位姿图SLAM示例的CMake构建脚本。
normalize_angle.h
: 一个辅助函数,用于将以弧度为单位的角度归一化到
[-π, π)
区间。plot_results.py
: 一个Python脚本,用于可视化比较优化前后的2D机器人轨迹。
pose_graph_2d.cc
: 2D位姿图SLAM示例的主程序,负责文件读写、优化问题构建和求解。
pose_graph_2d_error_term.h
: 为两个2D位姿之间的约束定义了代价函数(即误差项)。
README.md
: 2D位姿图SLAM示例的说明文档。
types.h
: 为2D位姿图问题定义了核心的数据结构,如位姿
Pose2d
和约束Constraint2d
。
pose_graph_3d
子目录CMakeLists.txt
: 3D位姿图SLAM示例的CMake构建脚本。
plot_results.py
: 一个Python脚本,用于可视化比较优化前后的3D机器人轨迹。
pose_graph_3d.cc
: 3D位姿图SLAM示例的主程序,负责处理整个优化流程。
pose_graph_3d_error_term.h
: 为两个3D位姿之间的约束定义了代价函数,其中使用四元数表示旋转。
README.md
: 3D位姿图SLAM示例的说明文档。
types.h
: 为3D位姿图问题定义了核心的数据结构,如位姿
Pose3d
和约束Constraint3d
,并处理了Eigen库的内存对齐问题。