2013-02-04 19:40:45 -08:00
|
|
|
.. _chapter-introduction:
|
|
|
|
|
|
|
|
|
|
============
|
|
|
|
|
Introduction
|
|
|
|
|
============
|
|
|
|
|
|
2014-04-07 08:36:07 +00:00
|
|
|
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
|
2014-04-07 11:14:51 -07:00
|
|
|
vehicle with multiple sensors and tricky dynamics.
|
2014-04-07 08:36:07 +00:00
|
|
|
* Ceres has **integrated automatic differentiation**, avoiding the error-prone
|
2014-04-07 11:14:51 -07:00
|
|
|
task of manually computing derivatives.
|
2014-04-07 08:36:07 +00:00
|
|
|
* Ceres can model a **wide variety of problems**, beyond simple nonlinear least
|
|
|
|
|
squares, thanks to robust loss functions and local parameterizations (e.g.
|
2014-04-07 11:14:51 -07:00
|
|
|
for quaternions).
|
2014-04-07 08:36:07 +00:00
|
|
|
* Ceres is **very fast**, thanks to threaded cost function evaluators, threaded linear
|
2014-04-07 11:14:51 -07:00
|
|
|
solvers, and generous amounts of engineering time spent optimizing.
|
2014-04-07 08:36:07 +00:00
|
|
|
* Ceres has **multiple nonlinear solvers** including trust region (fast, uses
|
2014-04-07 11:14:51 -07:00
|
|
|
more memory) and line search (slower, uses less memory).
|
2014-04-07 08:36:07 +00:00
|
|
|
* Ceres has **multiple linear solvers** for both sparse and dense systems,
|
|
|
|
|
leveraging Eigen or MKL for dense solving, CHOLMOD or CXSparse for sparse
|
2014-04-07 11:14:51 -07:00
|
|
|
solving, and specialized linear solvers for bundle adjustment.
|
2014-04-07 08:36:07 +00:00
|
|
|
* Ceres has **thorough automated tests** ensuring it is high-quality
|
|
|
|
|
* Ceres is **industrial grade** thanks to **many compute-years** spent
|
2014-04-07 11:14:51 -07:00
|
|
|
running its code, analyzing the results, and improving it.
|
2014-04-07 08:36:07 +00:00
|
|
|
* Ceres has **world-class solution quality**, with the best known results of
|
2014-04-07 11:14:51 -07:00
|
|
|
any least squares solver on the `NIST least squares precision benchmark`_.
|
2014-04-07 08:36:07 +00:00
|
|
|
* Ceres has an **active community** encouraging contributions and mentoring
|
2014-04-07 11:14:51 -07:00
|
|
|
those starting out.
|
2014-04-07 08:36:07 +00:00
|
|
|
* Ceres runs on **many platforms** including Linux, Windows, Mac OS X, Android, and
|
2014-04-07 11:14:51 -07:00
|
|
|
iOS (sort of).
|
2014-04-07 08:36:07 +00:00
|
|
|
* Ceres is **liberally licensed (BSD)** so that you can use it freely in
|
2014-04-07 11:14:51 -07:00
|
|
|
commercial applications without releasing your code.
|
2014-04-07 08:36:07 +00:00
|
|
|
|
|
|
|
|
.. _NIST least squares precision benchmark: https://groups.google.com/forum/#!topic/ceres-solver/UcicgMPgbXw
|