- A lot of users find the CMake package installation process confusing,
particularly the use of imported targets when exporting their own
projects which use Ceres.
- This patch adds a brief description of the overall process and the
main bear-trap users are ensnared by.
Change-Id: I44c022bbd18a393868bf88ea9ddd807c5e08abc9
The call to llt in backsubstitute seems to be using one
of the fixed size specializations which is best done with
an inline call to llt/ldlt rather than introducing yet another
variant of the SolverUpperTriangularUsingCholesky and calling it.
Also change the way SolverUpperTriangularUsingCholesky handles
error. It always computes the solution even if it is garbage
and then returns the error code.
This ensures that the previous code that depends on unconditional
computation still works.
Change-Id: Idb1e6efdae9a3775a072e3b87cde02e0bbddb319
When solving a linear system using Eigen's dense Cholesky factorization
if the right hand side of the linear system is the same vector
that will store the solution, call solveInPlace instead of solve.
Change-Id: I3e6d2f21ff420c25217cd87ee5d269fdfabbf19a
CERES_EIGEN_VERSION was being defined by the CMakeList.txt file
but it is needed by the android build too. So this change
directly constructs the CERES_EIGEN_VERSION string out of the
raw Eigen version numbers.
Change-Id: I65309805a59076c3082141d9042ab7e0e1b972bc
It seems that Eigen's LLT factorization is broken on ARM.
This patch enables the use of LDLT factorization instead of LLT
factorization. The switch is controlled at compile time using a
preprocessor define - CERES_USE_EIGEN_LDLT.
By default we continue to use LLT factorization though.
To make the switching easier without introducing the Cholesky factorization
based inversion and linear system solve routines have been abstracted into
two new functions.
Android.mk has been updated to enable the LDLT factorization, but
the cmake file has not been updated as I will leave it to Alex's
capable hands to do proper detection of ARM as a target platform.
Change-Id: Iffe3abd2ce894de2a388b454df3da909b482d5e5
- Previously, if Ceres was already installed to the same location as one
of the depenedencies (e.g. /usr/local) then as the BUILD_DIR/config
path was necessarily added to the include_directories() list *after*
the INCLUDE_DIRS for the dependencies, the config.h for the
*installed* version of Ceres would be used instead of the locally
configured version, as it would appear first on the path.
- Forcing the location of the locally configured config.h to the front
of the include_directories() list ensures that it is found first
(and is thus used) even if an installed version of Ceres also exists
on the path.
Change-Id: I7b4f97a3ad0120bd11551f9b8eb6bffc66966eb4
- On MSVC, a Ceres dependency such as glog, may be named glog.lib, or
libglog.lib. By default, CMake assumes no prefix for libraries on
MSVC when using find_library(), thus find_library(glog) would fail
if glog was named libglog.lib.
- This patch caches & updates CMAKE_FIND_LIBRARY_PREFIXES in all of
Ceres' find_package scripts to include lib & "" (no prefix) on MSVC
and then returns CMAKE_FIND_LIBRARY_PREFIXES to its original state
before returning.
Change-Id: Ic82799e3b786cfb7228a51183bc189578b072bbe
- MinGW produces code that segfaults when performing matrix
multiplications in Eigen when compiled with -O3 (see below), as such
force the use of -O2 which works.
- http://eigen.tuxfamily.org/bz/show_bug.cgi?id=556
Change-Id: I420e965d5033944374a5cc93490546c25e46bce5
- Previous tolerance of 2.0 * std::numeric_limits<double>::epsilon()
was too tight for Cygwin, worked on all other known platforms.
Change-Id: Ia79ad8961272dbb608d8e8ddd3f6d52e5f0735f4
In cmake 3.0, it is required to use full path for compilers. And it
seems like there's no need to force the compiler. Instead we can just
use set(CMAKE_C_COMPIER clang) so that we don't need to specify full
path of clang and clang++.
Change-Id: I9f6a625068e9d37a4bf5a595bafd82cbc13fdde4
- Add missing gflags threading dependency.
- Also add optional gflags Shlwapi dependency on Windows.
- Add check_cxx_source_compiles() with CMAKE_BUILD_TYPE to fix
namespace test builds on Windows with NMake generators.
- Add namespace regex on gflags.h when check_cxx_source_compiles()
fails on Windows using Visual Studio generator.
Change-Id: I6570c566e5a29c665d621a54935c16d16bac7117
1. Add documentation for cubic_interpolation.h
2. Remove the list of publications. It is an incomplete list which is
a pain to maintain.
3. Add a note about the interaction between manifolds and
NumericDiffCostFunction.
4. Fix some of the comments in cubic_interpolation.h to better reflect reality.
5. Updated the version history.
Change-Id: I0b4a5a6f3361d3fc85f1b4aec685cd80540934f1
Since Ceres is moving to using GitHub for issues, and the Google
Code URL in the current copyright header will soon become invalid,
update all the headers.
Change-Id: I1fce70375d1bcf098591f07b4d8f01a5c1e0789c
Apple annoyingly claims that dsyrk_ is a private API, and rejects
submissions to the Apple Store that include this symbol.
Also change ifdef -> ifndef in blas.cc
Change-Id: I432e9519cfe661fc96a58f36a86389a916b6a8b6
- Ensure that, as in the preprocessor, we force num_threads to be 1
if Ceres was compiled without OpenMP to prevent a CHECK() failure
in internal code.
Change-Id: I49d7bdeff81e5bb24aaaa3945018d9d012cd9df9
This CL is required to build Tango.
Inspired by this commit in RedwoodInternal repository:
commit 09dde53c248e04f432b5eccceea5daeedb706aea
Author: Mike Vitus <mike@hidof.com>
Date: Wed Apr 23 11:05:17 2014 -0700
Change-Id: I328b6634969de4ccdd71947945aa67a49ee9073f
MSVC 2013 compiler crashed when not specifying the
template parameter of CubicHermiteSpline explicitly.
Change-Id: I6ab79aea47f55373df5cb7b89e38f8b326ff21c9
This has a measurable impact on interpolation performance.
Also remove an accidentally named enum with an anonymous enum.
Change-Id: Ied6a4b2b06bb27a7f004bd0e01353742e1f84034
The key change is that there is a new layer of abstract,
a Array object that the interpolator depends on.
The Array provides a one dimension or two dimensional
array like interface independent of the underlying representation
of the data.
Also included here is support for vector valued functions.
Change-Id: Ica68f03778cf0d84192db00cd55653f8b4124d51
Make the definition of CERES_NO_THREADS conditional on the presence
of the CERES_HAVE_PTHREADS define.
This allows the user to enable threading in ceres using a combination
of CERES_EXTRA_DEFINES and linker flags which they need to do in
their app.
Change-Id: I43b99fc829001166e2f6dfb0a770768e61470591
Delete code needed by old versions of the NDK. We do not build
with these versions of the NDK and do not use STLPort anymore.
Change-Id: I61092db0aa3980cfae6ff57f3f318482027e627f
Due to floating point and conditioning issues, a system
matrix which is guaranteed to be PSD in exact arithmetic
can appear indefinite to the ConjugateGradientsSolver.
Previously, x'Ax <= 0, the solver returned with numerical
failure. Which the trust region solver will treat as a failed
solve.
But, more general truncated Newton when they encounter indefiniteness
use the step computed till that point instead of declaring failure.
This changes does this and adds a bit more logging.
Change-Id: I0e0cc56ef7d856f1c54ac6d638327b8353039f70
The example code for DynamicNumericDiffCostFunction and
DynamicAutoDiffCostFunction in the documentation was
allocating the cost function objects on the stack rather
than the heap.
Thanks to Rodney Hoskinson for reporting this.
Change-Id: I217aee02d1e2c1e9c25b8197451e9f9e0482915d