Commit Graph

962 Commits

Author SHA1 Message Date
Alex Stewart 16ecd40523 Fix bug in gflags' <= 2.1.2 exported CMake configuration.
- gflags <= 2.1.2 has a bug in its exported gflags-config.cmake:
  https://github.com/gflags/gflags/issues/110 whereby it sets
  gflags_LIBRARIES to a non-existent 'gflags' target.
- This causes linker errors if gflags is installed in a non-standard
  location (as otherwise CMake resolves gflags to -lgflags which
  links if gflags is installed somewhere on the current path).
- We now check for this case, and search for the correct gflags imported
  target and update gflags_LIBRARIES to reference it if found, otherwise
  proceed on to the original manual search to try to find gflags.

Change-Id: Iceccc3ee53c7c2010e41cc45255f966e7b13d526
2015-08-08 17:32:31 +01:00
Alex Stewart 56be8de007 Add docs for new CXX11 option & mask option for Windows.
- The CXX11 option has no effect on Windows, as there, any new C++11
  features are enabled by default, as such to avoid confusion we only
  present the option for non-Windows.

Change-Id: I38925ae3bb8c16682d404468ba95c611a519b9b9
2015-08-07 20:15:34 +01:00
Sameer Agarwal cf863b6415 Remove the spec file needed for generating RPMs.
Now that ceres is part of RawHide, there is no need to carry
this spec file with the ceres distribution.

Change-Id: Icc400b9874ba05ba05b353e2658f1de94c72299e
2015-08-06 23:27:39 +00:00
Sameer Agarwal 560940fa27 A refactor of the cubic interpolation code
1. Push the boundary handling logic into the underlying array
object. This has two very significant impacts:

a. The interpolation code becomes extremely simple to write
and to test.

b. The user has more flexibility in implementing how out of bounds
values are handled. We provide one default implementation.

Change-Id: Ic2f6cf9257ce7110c62e492688e5a6c8be1e7df2
2015-08-06 14:49:55 -07:00
Sameer Agarwal dfdf19e111 Lint cleanup from Jim Roseborough
Change-Id: Id6845c85644d40e635ed196ca74fc51a387aade4
2015-08-05 15:20:57 -07:00
Sameer Agarwal 7444f23ae2 Fix a typo in small_blas.h
The reason this rather serious looking typo has not
caused any problems uptil now is because NUM_ROW_B is
computed but never actually used.

Thanks to Werner Trobin for pointing this out.

Change-Id: Id2b4d9326ec21baec8a85423e3270aefbafb611e
2015-08-03 12:24:25 -07:00
Alex Stewart 5a48b92123 Export Ceres build directory into local CMake package registry.
- Optionally use CMake's export() functionality to export the Ceres
  build directory as a package into the local CMake package registry.
- This enables the detection & use of Ceres from CMake *without*
  requiring that Ceres be installed.

Change-Id: Ib5a7588446f490e1b405878475b6b1dd13accd1f
2015-08-03 16:46:05 +00:00
Sameer Agarwal d9790e7789 Add ProductParameterization
Often a parameter block is the Cartesian product of a number of
manifolds. For example, a rigid transformation SE(3) = SO(3) x R^3
In such cases, where you have the local parameterization
of the individual manifolds available,
ProductParameterization can be used to construct a local
parameterization of the cartesian product.

Change-Id: I4b5bcbd2407a38739c7725b129789db5c3d65a20
2015-07-27 13:37:10 -07:00
Alex Stewart 7b4fb69dad Cleanup FindGflags & use installed gflags CMake config if present.
- Split out gflags namespace detection methods:
  check_cxx_source_compiles() & regex, into separate functions.
- Use installed/exported gflags CMake configuration (present for
  versions >= 2.1) if available, unless user expresses a preference not
  to, or specifies search directories, in which case fall back to manual
  search for components.
-- Prefer installed gflags CMake configurations over exported gflags
   build directories on all OSs.
- Remove custom version of check_cxx_source_compiles() that attempted
  to force the build type of the test project.  This only worked for
  NMake on Windows, not MSVC as msbuild ignored our attempts to force
  the build type.  Now we always use the regex method on Windows if
  we cannot find an installed gflags CMake configuration which works
  even on MSVC by bypassing msbuild.
- Add default search paths for gflags on Windows.

Change-Id: I083b267d97a7a5838a1314f3d41a61ae48d5a2d7
2015-07-15 22:12:44 +00:00
Alex Stewart b3063c0479 Add default glog install location on Windows to search paths.
Change-Id: I083d368be48986e6780c11460f5a07b2f3b6c900
2015-07-15 20:56:56 +01:00
Alex Stewart 4e84d86dcb Add default Eigen install location on Windows to search paths.
Change-Id: If2e9999b04550269c94a86b8512d9dcc2842b91d
2015-07-15 19:07:52 +00:00
Alex Stewart e9420e7a0e Fix explanation of config.h generation in bare config.h.
Change-Id: I66488dc09670c4b178db7a3ae21b93fcc84ca051
2015-07-12 19:26:59 +01:00
Alex Stewart c80ce3525d Fix unused parameter compiler warnings in numeric_diff.h
Change-Id: I2b35babba17229387c6d346c46a2c6960db96e47
2015-07-11 18:27:00 +01:00
Sameer Agarwal cbdecc588a Actually fix the rawhide tolerance bug.
And undo the last two botched CLs.

Thanks to Chris Sweeney and Taylor Braun Jones for saving my bacon.
I will do appropriate penance to repend for my sins.

Change-Id: I14de958e651f85e4c1741fba2cb46ffe7e873346
2015-07-09 21:20:40 -07:00
Sameer Agarwal 3efa55c60f Fix the build
The last patch introduced a typo in the test.

Thanks to Chris Sweeney for pointing this out.

Change-Id: I1de2dba895de2d40f20d661524b57b821fb2d443
2015-07-08 14:44:58 -07:00
Sameer Agarwal 368fa5dc8f Increase tolerance for a test in polynomial_test
This test is failing on RawHide due to some compiler
changes.

https://bugzilla.redhat.com/attachment.cgi?id=1046512

Change-Id: I242314a3804b2888f06e5df0a0ea5d3bf057d5df
2015-07-08 12:32:59 -07:00
Alex Stewart b0696f6269 Fix addition of Gerrit commit hook when Ceres is a git submodule.
- Also split out addition of Gerrit commit hook into its own function.

Change-Id: I28ed048c5a094c5c9c0246cdabf67833583d66fb
2015-07-06 20:12:49 +01:00
Alex Stewart 29aff99b6f Fix missing EIGEN_VERSION expansion typo.
Change-Id: I1f481f5cb618f1c4dfe48e2bf4607f7801f65991
2015-07-02 09:27:20 +01:00
Alex Stewart bae78c88c7 Fix links to SuiteSparse & CXSparse.
- Thanks to Henrique Mendonça for reporting this.

Change-Id: I590f6138177b2e608eca9726f556d2f92d00d4d7
2015-06-28 14:02:10 +01:00
Alex Stewart b7e9a5762b Ensure Eigen is at least 3.1.0 for Eigen/SparseCore.
- Eigen/SparseCore is required by covariance_impl, this was added in
  v 3.1.0 of Eigen, and thus without at least this version Ceres will
  not compile.
- Note that Ubuntu 12.04 provides only version 3.0.5 in the mainline
  repository.
- Update docs to match CMake check for Eigen >= 3.2.2 to avoid warning
  about reduced sparse performance.

Change-Id: I291bb185d1c76e1e1422429169a76e3f1b828163
2015-06-27 16:03:41 +00:00
Alex Stewart 6414bd0279 Add option to use C++11 (not TR1) shared_ptr & unordered_map.
- On at least some compilers, -std=c++11 is required in order to compile
  against std::shared_ptr & std::unordered_map, which resulted in our
  checks failing to find them and using the TR1 versions instead, which
  causes conflicts for users using C++11.
- Now, if the compiler supports it and the user enables the CXX11
  option, we explicitly enable C++11 before searching for shared_ptr &
  unordered_map, which means we should always find the C++11 versions
  if they are available.
- As use of CXX11 results in a version of Ceres that must be used with
  -std=c++11 for GCC & Clang, we roll this into the Ceres target when
  the version of CMake supports this, otherwise we warn the user they
  will have to do this themselves.
- CXX11 is OFF by default, to ensure that the behaviour of Ceres is
  unchanged from before.

Change-Id: I157ea7a4fadc6bc02da176b8e771f1f327ccaf78
2015-06-22 08:54:40 +00:00
David Gossow 2a1dfd2b71 Add DynamicCostFunctionToFunctor.
This adds a new wrapper class called DynamicCostFunctionToFunctor
that closes a gap in the current API: the existing
CostFunctionToFunctor can only be used with a SizedCostFunction, where
the number and sizes of all parameter vectors are known at compile-time.
The DynamicCostFunctionToFunctor allows you to wrap a generic
CostFunction into a templated functor which can then be used in a
DynamicAutoDiffCostFunction.

Also updates the existing CostFunctionToFunctor class to internally use
DynamicCostFunctionToFunctor.

Change-Id: I088adc3271c58d2519126c27037c3576965a36d6
2015-06-18 16:01:15 -07:00
Sameer Agarwal 6d1dedad50 Fix an incorrect usage message in bundle_adjuster.cc
Change-Id: I66889ac8e52dd3baaee9e80cb04b7a8575537249
2015-06-10 09:26:31 -04:00
Alex Stewart 51f4b44fcd Gracefully disable docs if Sphinx is not found.
- Also fixes a typo in the search paths in FindSphinx.cmake.

Change-Id: I8da50ffd85358f7e67445b02eabfc9cf57c97935
2015-05-30 15:31:32 +00:00
Alex Stewart 2edcd9ee0c Explicitly use (new) default OS X rpath policy if present.
- CMake 3.0+ prefers the use of @rpath, and CMake 3.2+ produces a
  developer warning if this policy is not set, thus if present we
  explicitly specify the new default behaviour.
- http://www.cmake.org/cmake/help/v3.2/policy/CMP0042.html
- Also remove unnecessary check for presence of cmake_policy(), as it
  exists in all versions of CMake >= 2.8 (our minimum required version).

Change-Id: Iacbf8186bee4bf07d8a53068fd528cd6237c5efb
2015-05-30 15:51:04 +01:00
pmoulon 5a5526e1d8 Typo fix.
Change-Id: I7c59f92f8691beb2a0b999c1f93e31a099bbdb9d
2015-05-27 09:07:33 +02:00
pmoulon e210bbee19 Add support of EIGEN_SPARSE type in IsSparseLinearAlgebraLibraryTypeAvailable function.
Change-Id: I53f1a245509a216f31e1824486a13c4bac548a7f
2015-05-26 17:29:17 +02:00
Simon Rutishauser 1e241b7cc3 Allow the LossFunction contained in a LossFunctionWrapper to be NULL.
This is consistent with how NULL LossFunctions are treated everywhere
else.

Change-Id: Ic91e39ccb13137fcad7f85e78613a29ecde30d67
2015-05-19 17:13:57 +02:00
Sameer Agarwal 9064b4ed27 Improve numeric differentation near zero.
Before this change, the default step size
for a function F(x) at x was

step_size = |x| * relative_step_size

if step_size was exactly zero, then to prevent
division by zero we would fall back to relative_step_size.

This however is not good enough, as values of x say 1e-64
would lead to step sizes ~ 1e-70 and dividing by such numbers
leads to inaccurate results. For even smaller numbers, like
1e-300, which I have observed can occur as the optimization
algorithm makes progress, this leads to NaNs.

The key change in this CL is to change the fallback mechanism
to be

step_size = max(|x| * relative_step_size, min_step_size)

where

min_step_size = sqrt(DBL_EPSILON)

This is the recommended minimum value for the step size
for double precision arithmetic on the interwebs.

This results in a small loss of precision in the transcendental
functions test, but that is unavoidable as we are not taking
sufficiently small steps anymore.

On the whole though this will improve the numerical performance
of the algorithm.

To validate this approach, one of the parameter values for the
EasyFunctorTest has been set to 1e-64, which causes the test
to start failing without the corrected fallback logic.

This change should also address some if not all of

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

Change-Id: I4a9013ef358626c1ba7b8abad60b3904163d63f6
2015-05-13 21:37:15 -07:00
Chris Sweeney 967122def6 Add Theia to users.
Change-Id: Ic112d31e2b8d7ecd28816fdc76e27adb1da27ac5
2015-05-13 12:11:14 -07:00
Tal Ben-Nun b2dcef36e7 Refactored DynamicNumericDiffCostFunction to use NumericDiff
Change-Id: I2fc4b203e984beaa7af96fb3cbe8ce14e5bca614
2015-05-07 01:48:27 +03:00
Alex Stewart 4707eb22e9 Remove use of :caption tag in Sphinx.
Change-Id: I1fb5f2504424506e1bba244bcb8efb25329564d1
2015-05-06 20:56:08 +01:00
Sameer Agarwal 3c52ef2fab More lint changes from William Rucklidge.
Change-Id: I3594ed46e78243034389cad158243e11dd1dc2b0
2015-05-05 11:34:05 -07:00
Sameer Agarwal 5c0954438f Lint changes from William Rucklidge.
Change-Id: I6592b61451ead8f0407bec134fcf4b56ba22ffb9
2015-05-05 11:25:42 -07:00
Petter Strandmark e059a7d39e Add a small test to make sure GradientProblemSolver works correctly.
The test makes sure the Rosenbrock function is correctly minimized from the
canonical starting point using the default settings.

Change-Id: Iea820f976707bde37162981c5db87fac5167ba9e
2015-05-04 16:11:35 +02:00
Petter Strandmark 733a20a9fc Add simple unit tests for GradientProblem.
Change-Id: Id3b25a177aa92032f7f99b0a381c4f97d07d73b2
2015-05-04 09:21:33 +02:00
Russell Smith 77e80aecf7 Additional special cases in the handling of pow(Jet,Jet).
I think this is all of the cases. These cases arise because pow(a,b) is limited
to real valued results, if the argument and result were complex valued then
these cases would disappear.

NOTE: Since there is so much special casing here, it is worth checking to see
if cpow() is implemented in terms of pow(), and what might be the consequences
of using cpow() on the type std::complex<Jet<double, N> >. It is *possible*
that a separate implementation of cpow might be required also.

Also some comment fixes.

Change-Id: Ia1e38df4cdcb548f778304c2854cacba6e1556ff
2015-04-29 12:38:04 +00:00
Sameer Agarwal 2175d025a6 Make the robust curve fitting example robust.
Change-Id: Iffcde8f168b7cd68e56f351c43088d7aef1e5e2f
2015-04-27 06:54:12 -07:00
Johannes Schönberger 239dd59ea5 Homogenize convergence operators in docs and code
Change-Id: Iec7c12e971b331d1847f9aa91349317eb6524856
2015-04-16 16:01:18 -04:00
Sameer Agarwal 365084f976 Lint changes from William Rucklidge.
Change-Id: I5a9683333fbab189058076cb2053f8f7afc7096a
2015-04-16 12:35:51 -07:00
Johannes Schönberger 4eb3b8f34e Add parameter_tolerance convergence to line search minimizer
Change-Id: Id3bd3c7490d679b87259bb0fbf0b2dbc7e831a07
2015-04-16 19:09:12 +00:00
Russell Smith a6f39a939d Fix bug where pow(JetA,JetB) returned wrong result for JetA==0.
Change-Id: Ife7f6f3aca06322fa414ef747008d2b4dc468a57
2015-04-16 18:21:21 +00:00
Johannes Schönberger e00f78edc2 Remove duplicate step norm computation
Change-Id: I58685b81e119360a5b9085bb44efc55131ec9117
2015-04-15 17:03:56 -04:00
Keir Mierle 3527c0e324 Enhance usability when encountering Eigen version mismatches
Change-Id: I78fae5be517e3ee4756ea3ce448c1173c39857d6
2015-04-14 21:57:51 -07:00
pmoulon 0b9147692d Fix typo Matlab->Meshlab.
Change-Id: If64a1e2bd10637eac8ed74a5c43cfa133c7aa575
2015-04-14 14:51:42 +02:00
pmoulon 9536c967a0 Add PLY file logger before and after BA in order to ease visual comparison.
Change-Id: Ib14e8f4b2de686ab6494de270458392f81a0b946
2015-04-14 12:12:21 +00:00
Alex Stewart 08f3861b43 Fix CMake config file docs to include 2.8.x & 3.x styles.
- Include example use of new find_dependency() macro in CMake 3.x to
  find dependencies in <Project>Config.cmake files.
- Also fix typo in NNLS modeling docs.

Change-Id: Ie9862b69c0451ee8775826f2957f5e182d937439
2015-04-11 14:53:52 +01:00
Mark Moll 1c3d85b0ba Python3 fixes
Change-Id: I5ba9d264cce7b9a986b28fb24f27200d5c5f328d
2015-04-10 22:28:06 -05:00
Sameer Agarwal d500caaceb Remove confusing code from DenseJacobianWriter
The code seemed to imply that its possible to call the Write
method with a null pointer which is never the case. There would
be no point to calling Write.

Thanks to Michael Vitus for pointing this out.

Change-Id: Ic9a276856d0a7e65d53a1cc8742d4831c1a52615
2015-04-09 21:05:22 -07:00
Sameer Agarwal e712ce1810 Revert 81219ff.
Eigen upstream was broken a little while ago, and it seemed to be
the case that we needed a fix for using the LLT factorization on
ARM.

This has been fixed and AFAIK there are no stable eigen releases
with this bug in it.

For full gore, see

http://eigen.tuxfamily.org/bz/show_bug.cgi?id=992

In light of the fix, the extra layer of indirection introduced earlier
is not needed and we are reverting to normal programming.

Change-Id: I16929d2145253b38339b573b27b6b8fabd523704
2015-04-07 14:13:25 -07:00