Commit Graph

1053 Commits

Author SHA1 Message Date
Sameer Agarwal e1bcc6e0f5 Add additional logging for analyzing orderings
Change-Id: Ic68d2959db35254e2895f11294fb25de4d4b8a81
2016-08-02 10:12:04 -07:00
Mike Vitus 16980b4fec Delete the remove_definitons command from sampled_functions
CMakeLists.txt because it will be inherited from the top level examples
CMakeLists.txt.

Change-Id: I25593587df0ae84fd8ddddc589bc2a13f3777427
2016-07-15 13:44:56 -07:00
Mike Vitus a04490be97 Add readme for the sampled_function example.
Change-Id: I9468b6a7b9f2ffdd2bf9f0dd1f4e1d5f894e540c
2016-07-14 17:06:38 -07:00
Alex Stewart ff11d0e63d Use _j[0,1,n]() Bessel functions on MSVC to avoid deprecation errors.
- Microsoft deprecated the POSIX Bessel functions: j[0,1,n]() in favour
  of _j[0,1,n](), it appears since at least MSVC 2005:
  https://msdn.microsoft.com/en-us/library/ms235384(v=vs.100).aspx.
- As this occurs in jet.h (templated public header), although Ceres
  suppresses the warning when it itself is built (to suppress a warning
  about the insecurity of using std::copy), it will crop up again in
  client code (without this fix) unless it is explicitly suppressed
  there also.
- Raised as Issue #190:
  https://github.com/ceres-solver/ceres-solver/issues/190.

Change-Id: If7ac5dbb856748f9900be93ec0452a40c0b00524
2016-06-29 09:33:45 +01:00
Nicolai Wojke 8ea86e1614 Fix: Copy minimizer option 'is_silent' to LinSearchDirection::Options
Change-Id: I23b4c3383cad30033c539ac93883d77c8dd4ba1a
2016-04-25 14:24:41 +02:00
Sameer Agarwal 080ca4c5f2 Fix typos in users.rst
Change-Id: Ifdc67638a39403354bc9589f42a1b42cb9984dd2
2016-04-24 22:46:54 -07:00
Sameer Agarwal 21ab397dc5 Make some Jet comparisons exact.
Change-Id: Ia08c72f3b8779df96f5c0d5a954b2c0a1dd3a061
2016-04-24 21:13:00 -07:00
Sameer Agarwal ee40f954cf Add colmap to users.rst
Change-Id: I452a8c1dc6a3bc55734b2fc3a4002ff7939ba863
2016-04-24 07:56:12 -07:00
Sameer Agarwal 9665e09902 Fix step norm evaluation in LineSearchMinimizer
TrustRegionMinimizer evaluates the size of the step
taken in the ambient space, where as the LineSearchMinimizer
was using the norm in the tangent space. This change fixes
this discrepancy.

Change-Id: I9fef64cbb5622c9769c0413003cfb1dc6e89cfa3
2016-04-19 00:08:06 +00:00
Alex Stewart 620ca9d066 Remove use of -Werror when compiling Ceres.
- As noted in Issue #193 (in that case for GCC 6), Ceres' use of -Werror
  when compiling on *nix can prevent compilation on new compilers that
  add new warnings and there is an inevitable delay between new compiler
  versions and Ceres versions.
- Removing the explicit use of -Werror, and relying on indirect
  verification by maintainers should fix build issues for Ceres releases
  on newer compilers.

Change-Id: I38e9ade28d4a90e53dcd918a7d470f1a1debd7b4
2016-04-18 15:14:11 +01:00
Mike Vitus 0c63bd3efb Add floor and ceil functions to the Jet implementation.
Change-Id: I72ebfb0e9ade2964dbf3a014225ead345d5ae352
2016-04-15 10:47:22 -07:00
Alex Stewart 9843f32803 Report Ceres compile options as components in find_package().
- Users can now specify particular components from Ceres, such as
  SuiteSparse support) that must be present in a detected version of
  Ceres in order for it to be reported as found by find_package().
- This allows users to specify for example that they require a version
  of Ceres with SuiteSparse support at configure time, rather than
  finding out only at run time that Ceres was not compiled with the
  options they require.
- The list of available components are built directly from the Ceres
  compile options.
- The meta-module SparseLinearAlgebraLibrary is present if at least
  one sparse linear algebra backend is available.

Change-Id: I65f1ddfd7697e6dd25bb4ac7e54f5097d3ca6266
2016-04-10 17:27:26 +00:00
Timer e4d4d88bbe Fix a spelling error in nnls_modeling.rst
Change-Id: I341d901d3df993bc5397ed15e6cb330b0c38fd72
2016-04-08 15:50:52 +08:00
Keir Mierle 5512f58536 Only use collapse() directive with OpenMP 3.0 or higher
Change-Id: Icba544c0494763c57eb6dc61e98379312ca15972
2016-04-07 12:03:16 -07:00
Thomas Schneider d61e94da52 Add IsParameterBlockConstant to the ceres::Problem class.
Change-Id: I7d0e828e81324443209c17fa54dd1d37605e5bfe
2016-04-06 23:52:18 +02:00
Alex Stewart 77d94b3474 Fix install path for CeresConfig.cmake to be architecture-aware.
- Previously we were auto-detecting a "64" suffix for the install path
  for the Ceres library on non-Debian/Arch Linux distributions, but
  we were installing CeresConfig.cmake to an architecture independent
  location.
- We now install CeresConfig.cmake to lib${LIB_SUFFIX}/cmake/Ceres.
- Also make LIB_SUFFIX visible to the user in the CMake GUI s/t they can
  easily override the auto-detected value if desired.
- Reported by jpgr87@gmail.com as Issue #194.

Change-Id: If126260d7af685779487c01220ae178ac31f7aea
2016-03-16 21:20:31 +00:00
Keir Mierle f4ba28d09d Fix double conversion to degrees in rotation_test
Change-Id: I16b6d210cdab94340c001b322916c5b1a3b6a35f
2016-03-16 11:38:05 -07:00
Keir Mierle efe61b089b Make Jet string output more readable
Change-Id: Iebab111ab136c52f88180688ccb684584ab21dea
2016-03-16 11:27:25 -07:00
Keir Mierle 0149ce0e0e Fix rotation_test IsClose() and related tests
Change-Id: I0ff91e2931615babf1dcc9483fac7f4a2fb13726
2016-03-16 11:09:53 -07:00
Sameer Agarwal 0178c7a3e3 Update title in README.md
Change-Id: Iafd66125d9c54a35947a0b4a5eb49bd0e0df00be
2016-03-07 09:33:07 -08:00
Sameer Agarwal d431475437 Update README.md
The README.md was woefully out of date, as it was advertising
Ceres Solver as just a non-linear least squares library.

Change-Id: I9a58fb8b63c08ee3852ffbae955e2ca8c90cd6d9
2016-03-07 09:25:44 -08:00
Sameer Agarwal 2c178ec35f Add more documentation.
Add documentation to the TrustRegionMinimizer and
TrustRegionStepEvaluator.

Change-Id: I3651e41ff37955a0b7044910403630af1a855071
2016-03-06 21:13:42 -08:00
Sameer Agarwal 2ee3e06064 Loosen an exact equality in local_parameterization_test
The norm comparison in QuaternionParameterizationHelper is exact
but that leads to numerical precision problems and test failures
as reported by Nicu Stiurca.

https://github.com/ceres-solver/ceres-solver/issues/198

Change-Id: I45f42f0373770408ddeee0b4c9d162e619f8d445
2016-03-04 22:12:18 -08:00
Niels Ole Salscheider 2ad14b7a61 make_docs: Pass the file encoding to open()
Otherwise, it will fail on Python 3 with:
"UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position
7690: ordinal not in range(128)"

We have to use io.open() instead of open(), because open() does not
accept the encoding on Python 2.

Change-Id: I77b6552491e8de01d79a26d2f146ddbd968cce49
2016-03-02 22:09:24 +01:00
Simon Rutishauser 7d670209a2 Fix error message returned when using SUITE_SPARSE_QR in covariance estimation
on a ceres built without SuiteSparse support.

This is only a minor issue, up until now this case would have been handled by
the "default" case of the switch

Change-Id: Ib4568eb827dbf0e8e8d618a5bc8cd379a3c42c42
2016-02-16 11:53:45 +01:00
Alex Stewart eaa58c5d6e Fix CXX11 option to be available on MinGW & CygWin, but not MSVC.
- Previously we were disabling the CXX11 option when WIN32 was defined,
  which it can be on both MinGW & CygWin, even though the compilers
  there can support the -std=c++11 option.
- Now we disable the CXX11 option only when the compiler used is MSVC.

Change-Id: I68ebcf0a4241afe93892a3c6f79cdd98887e785a
2016-02-07 13:50:48 +00:00
Alex Stewart 562a72ea2b Fix missing early return() in xxx_not_found() dependency macros.
- This could result in potentially confusing output if dependencies
  were found with the QUIET option: "XXX not found due to ...", followed
  by "found <part of> XXX".
- If find_package() was called with REQUIRED, then a FATAL_ERROR was
  triggered in the xxx_not_found() macros, resulting in early
  termination.

Change-Id: Ibf59afd10067b9debd1a5e15f735a41b61bed52e
2016-02-06 15:58:10 +00:00
Sameer Agarwal 982327062e Initialize inner_iterations_were_useful_ correctly.
This variable should be initialized before the decision to
perform inner iterations are performed.

Change-Id: Ic80e2d5284ecc67eaed1859be009b1a4d18bf76b
2016-02-04 11:50:20 -08:00
Sameer Agarwal 8861522fc5 Add trust_region_step_evaluator.cc to Application.mk
Change-Id: I841d889b96cc538ad9e87691a3be31ae71e3ff33
2016-02-04 18:13:23 +00:00
Sameer Agarwal 46ad4699f4 A complete refactoring of TrustRegionMinimizer.
1. Break up the monolithic loop in TrustRegionMinimizer::Minimize
   into a number of more easily described and analyzed subfunctions.
2. Break out the logic for evaluating the quality of a Trust Region
   step into its own object - TrustRegionStepEvaluator.

Change-Id: I08580ecac074cfd74c096cb8e4880cbda3d48296
2016-02-04 10:05:12 -08:00
Sameer Agarwal dec43ae5e0 Add an implementation for GradientProblemSolver::Options::IsValid
Thanks for Francesco Callari for reporting this.

Change-Id: I2b2f4e0e098fbdc914dc7770db1164884ac50e24
2016-02-03 07:24:05 -08:00
Alex Stewart 706a876541 Fix use of va_copy() if compiling with explicit C++ version < C++11.
- va_copy() was defined in the C99 standard, but did not appear in the
  C++ standard until C++11.  If the C++ standard is not specified,
  both GCC & Clang will define va_copy(), even though strictly speaking
  they should not.  However, if the C++ standard is explicitly specified
  to something < C++11 (e.g. -std=c++03) then va_copy() will NOT be
  defined.
- Now, if va_copy() is not defined, we either define our own version
  on non GCC/Clang compilers (as before for MSVC alone), and use the
  internal __va_copy() version on GCC & Clang, which does exist.

Change-Id: I0224f7fa6aae060dee2287782b1cad767c244d3c
2016-01-21 19:30:58 +00:00
Niels Ole Salscheider cb467d83fe Install CMake files to lib/cmake/Ceres
This is the right thing to do since the CMake files contain target
specific information - share is only for target-independent files.
Without this patch, the CMake files will collide on distributions
that allow to install for multiple targets in parallel (e. g. on
Exherbo).

Change-Id: Iac17af63b9f9b25d0ca400c77c2b2e0e8a51196f
2016-01-10 20:39:20 +01:00
Niels Ole Salscheider 1f20b72afd Allow users to override the documentation install directory.
This is needed for multiarch layouts where the prefix is /usr/${host}
but where arch-independent files are installed to /usr/share.

Change-Id: Icec01f8ea927594b4edb26997d6384e478415999
2016-01-10 20:39:12 +01:00
Sameer Agarwal 15587dd1a9 Lint changes from William Rucklidge
Change-Id: If05a774c5e7dd318e6b3ee698e313f0fc58ee922
2016-01-05 11:31:13 -08:00
Wannes Van Loock b0bf9fd2a9 Add covariance matrix for a vector of parameters
Computing the covariance matrix for a number of parameter blocks
previously required adding all parameter blocks to the computation and
subsequently assembling the matrix by concatenating all the blocks.

This patch adds the computation of the covariance matrix for a vector
of parameter blocks. All covariance block pairs are added automatically
and the resulting covariance matrix is assembled in the order the
parameter blocks appear.

Change-Id: I3b70c63f16862adc23a1d7fb7a21dde4e68abe9a
2016-01-04 20:26:40 +00:00
Sameer Agarwal 7ec8ba2a64 Saner tolerances & stricter LRE test.
NIST recommends greater than 4 digits rather than greater than
or equal to 4 digits to declare that the solve was successful.

Change-Id: I5c65e6e791508b95b692c23dafd3833d73cd0487
2016-01-03 22:44:48 -08:00
Sameer Agarwal 52c1bc92c6 Fix a malformed sentence in the tutorial.
Thanks to abrock for pointing this out.

Change-Id: I3fe943dc415dc389396e13dbdd5aec09ee9b76cc
2016-01-03 22:42:04 -08:00
Sameer Agarwal 8ecfb2d705 Fix the build.
Change-Id: I95a62a180a1a21fc379fe27b1309d72f19d9ef29
2015-12-17 13:55:02 -08:00
Sameer Agarwal ed32e6a44a Add logging for sparse Cholesky factorization using Eigen
Print information about the fill-in when using Eigen to perform
Simplicial sparse Cholesky factorization.

Change-Id: I09013b7f4ed2f6c55ae8ce8922447e23d63580a8
2015-12-17 20:22:48 +00:00
Sameer Agarwal a1019f6610 Use std::adjacent_find instead of std::unique
When detecting duplicates, it is more efficient to use std::adjacent_find
than it is to use std::unique.

Change-Id: Ib6b4671c10848bb7dd10aa7a1baeffc8c9c825b5
2015-12-17 20:21:42 +00:00
Sameer Agarwal aaa0e3e4c8 Improve logging in CompressedRowJacobianWriter on crash
Change-Id: Ib56955669279724e7f1dffd9a68b7b2b66b24a85
2015-12-17 11:51:50 -08:00
Andrew Hunter d80c112168 Tweak alignment hint implementation for Jets
I169b637a1e2a106956b536c41d6a514a266e7cc0 marked Jets (in C++11) as
aligned to 16 bytes, and enabled Eigen vectorization.  However, to
implement this, we added Eigen includes to port.h.

Turns out this broke some other tricks Ceres uses (redefining Eigen
constants for better performance), so we don't want to do that. Move
most of the implementation to jet.h where it is safe.

Change-Id: I47c6fc4180db1ff674bc660723dd5a2b84254e0d
2015-12-11 14:50:19 -08:00
Andrew Hunter 5667505f35 Align Jet matrices where supported
We currently don't align the infinitesimal part of a Jet to a 16-byte
boundary (and thus force Eigen to avoid using SSE ops)--as a member of a
larger struct, we couldn't guarantee Jets would be allocated on
appropriately-aligned boundaries.  However, C++11 adds better support
for requesting alignment: we can use it to guarantee the members will be
properly aligned, and tell Eigen to vectorize.

There is a significant gotcha here: the standard gives wide latitude to
implementations as to which alignments they choose to support.  If we
ask for 16 and the system only supports 8, we may have misaligned
Jets. So we test (using alignof(std::max_align_t)) that the current
system supports 16-byte aligned values; if not, we fall back to the
current solution.

Two other small notes:
- This is obviously gated on C++11 support, and
  thus we put the logic in port.h and export some useful #defines.

- GCC 4.8.x has a
  bug (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56019) that has
  max_align_t in the wrong namespace.  This will not be a problem with a
  modern GCC, but add a small workaround since many systems still ship 4.8.

This results (on a x86 workstation) in a 60% speedup in Jacobian
evaluation on bin/simple_bundle_adjuster problem-16-22106-pre.txt.

Change-Id: I169b637a1e2a106956b536c41d6a514a266e7cc0
2015-12-08 01:09:07 +00:00
Sameer Agarwal 6418b33f21 Fix free parameter block handling in covariance computation
Parameter blocks that are not associated with any residual block
lead to structurally zero columns in the Jacobian. The covariance
computation algorithm was only paying attention to structural
sparsity caused by constant parameter blocks but not free parameter
blocks.

This patch fixes this, by iterating over the residual blocks in
the problem and collecting all the parameter blocks in use.

The tests for ComputeCovarianceSparsity are also extended to include
the case where there are constant and free parameter blocks.

Thanks to Wannes Van Loock for reporting this.

Change-Id: Ic298a6e93c53f2f95fb69105397a87200738a2b0
2015-12-04 09:51:57 -08:00
Sameer Agarwal 992ae55e84 Report the number of line search steps in FullReport.
Accumulate the number of steps of the line search algorithm
and report it as part of Summary::FullReport.

Change-Id: I1de12784009a3e08f2a2c2aff5085d57a3c73828
2015-12-01 14:26:13 -08:00
Alex Stewart b5f5100f57 Make CMake read Ceres version directly from include/ceres/version.h.
- Previously we had the Ceres version defined in two places, one in
  include/ceres/version.h, and one in the main CMakeLists.
- Now the main CMakeLists reads the Ceres version directly from
  version.h, as does the make_release script, so that we have a single
  place (version.h) in which the current Ceres version is defined.

Change-Id: Ie80aa7d38f5b576d3ed4d6109dd699f565c91027
2015-12-01 20:50:53 +00:00
Sameer Agarwal f4214e3ecf Lint changes from William Rucklidge.
Change-Id: I34899063edc2fe1f4ed976406448f829a1f210c0
2015-11-19 08:40:08 -08:00
Wannes Van Loock 5a3a23eb39 Fix covariance computation for constant blocks
This commit fixes a bug related to the computation of covariance blocks
in the tangent space for constant parameter blocks, causing out of
bounds memory access.

Change-Id: Iaeee7992405fcaaae6086612798e96f2e10ebc5c
2015-11-13 09:29:05 +01:00
Sameer Agarwal ba67ed1e01 A variety of small updates
1. Add answers to a number of FAQs.
2. Add a note to the documentation for NumericDiffCostFunction that
   NumericDiffOptions needs to be documented and mentioned.
3. Update the docs for Solver::Options::numeric_derivative_relative_step_size
   to indicate that this setting only applies to the gradient checker.
4. Remove deprecated constructors from NumericDiffCostFunction and
   DynamicNumericDiffCostFunction.

Change-Id: If8fc011b2a5996dbc2c51268aa477550ed014a1c
2015-11-08 10:59:42 -08:00