| .. _chapter-introduction: | |
| ============ | |
| Introduction | |
| ============ | |
| What is Ceres Solver? | |
| --------------------- | |
| Ceres is an industrial-grade C++ library for modeling and solving large and | |
| small nonlinear least squares problems of the form | |
| .. math:: \frac{1}{2}\sum_{i} \rho_i\left(\left\|f_i\left(x_{i_1}, ... ,x_{i_k}\right)\right\|^2\right). | |
| For a brief introduction to nonlinear solving in general, see the | |
| :ref:`chapter-tutorial`. | |
| Who uses Ceres Solver? | |
| ---------------------- | |
| * `Google Street View`_ panorama poses are computed with Ceres (`see video`_) | |
| * `Google Photo Tours`_ employ Ceres to pose all the photos | |
| * `Google Maps and Earth`_ imagery spatial alignment and satellite sensor calibration is done with Ceres | |
| * `Project Tango`_ uses Ceres as part of the SLAM pipeline | |
| * `Willow Garage's`_ SLAM pipeline uses Ceres for realtime bundle adjustment | |
| * `Android`_ uses Ceres for image processing and stitching, including for `Photo Sphere`_ | |
| * `Blender's`_ `motion tracking module`_ depends critically on Ceres, using it | |
| for 2D tracking, 3D reconstruction, panorama tracking, plane tracking, and | |
| more; see the results in `Tears of Steel`_ | |
| .. _Google Street View: http://www.google.com/maps/about/behind-the-scenes/streetview/ | |
| .. _see video: https://www.youtube.com/watch?v=z00ORu4bU-A | |
| .. _Google Photo Tours: http://googlesystem.blogspot.com/2012/04/photo-tours-in-google-maps.html | |
| .. _Google Maps and Earth: http://www.google.com/earth/ | |
| .. _Project Tango: https://www.google.com/atap/projecttango/ | |
| .. _Willow Garage's: https://www.willowgarage.com/blog/2013/08/09/enabling-robots-see-better-through-improved-camera-calibration | |
| .. _Android: https://android.googlesource.com/platform/external/ceres-solver/ | |
| .. _Photo Sphere: http://www.google.com/maps/about/contribute/photosphere/ | |
| .. _Blender's: http://blender.org | |
| .. _motion tracking module: http://wiki.blender.org/index.php/Doc:2.6/Manual/Motion_Tracking | |
| .. _Tears of Steel: http://mango.blender.org/ | |
| Why use Ceres Solver? | |
| --------------------- | |
| * Ceres has an **integrated modelling layer**, making it easy and intutive to | |
| model large, complex cost functions with interacting terms, such as a moving | |
| vehicle with multiple sensors and tricky dynamics. | |
| * Ceres has **integrated automatic differentiation**, avoiding the error-prone | |
| task of manually computing derivatives. | |
| * Ceres can model a **wide variety of problems**, beyond simple nonlinear least | |
| squares, thanks to robust loss functions and local parameterizations (e.g. | |
| for quaternions). | |
| * Ceres is **very fast**, thanks to threaded cost function evaluators, threaded linear | |
| solvers, and generous amounts of engineering time spent optimizing. | |
| * Ceres has **multiple nonlinear solvers** including trust region (fast, uses | |
| more memory) and line search (slower, uses less memory). | |
| * Ceres has **multiple linear solvers** for both sparse and dense systems, | |
| leveraging Eigen or MKL for dense solving, CHOLMOD or CXSparse for sparse | |
| solving, and specialized linear solvers for bundle adjustment. | |
| * Ceres has **thorough automated tests** ensuring it is high-quality | |
| * Ceres is **industrial grade** thanks to **many compute-years** spent | |
| running its code, analyzing the results, and improving it. | |
| * Ceres has **world-class solution quality**, with the best known results of | |
| any least squares solver on the `NIST least squares precision benchmark`_. | |
| * Ceres has an **active community** encouraging contributions and mentoring | |
| those starting out. | |
| * Ceres runs on **many platforms** including Linux, Windows, Mac OS X, Android, and | |
| iOS (sort of). | |
| * Ceres is **liberally licensed (BSD)** so that you can use it freely in | |
| commercial applications without releasing your code. | |
| .. _NIST least squares precision benchmark: https://groups.google.com/forum/#!topic/ceres-solver/UcicgMPgbXw |