dellaert
439f51ec7f
test out invoke
2014-10-22 10:10:58 +02:00
dellaert
1eb5e185e5
New numericalDerivatives with traits an Charts - still some segfaults, *and* there should be no need for (a) multiple prototypes to match against c++ pointers, (b) the use of explicit template arguments. A task for someone...
2014-10-21 18:50:52 +02:00
dellaert
224b71d696
Created testManifold
2014-10-21 12:54:28 +02:00
dellaert
0acffe5ae9
Fixed bug in DefaultChart: keeping a reference s never a good idea.
2014-10-21 11:13:14 +02:00
dellaert
25ad9ade05
Moved AdaptAutoDiff into its own test
2014-10-21 10:42:30 +02:00
dellaert
bf16446f92
Deal with traits changes
2014-10-21 01:26:17 +02:00
dellaert
e0841fb3e6
No more Ceres dependecy, copied relevant Ceres files here (for now)
2014-10-20 23:53:56 +02:00
dellaert
bce84ca4db
Successfully created Expression from AutoDiff function!
2014-10-20 15:38:27 +02:00
dellaert
bf5580d518
AdaptAutoDiff now works with RowMajor Eigen matrices
2014-10-20 14:39:28 +02:00
dellaert
df5e584412
Compiles, but Jacobains not correct yet
2014-10-20 14:32:20 +02:00
dellaert
a423f284e9
Canonical coordinates prototype, works for Snavely
2014-10-20 14:23:08 +02:00
dellaert
821f776118
Wrapper works to some extent
2014-10-20 09:43:32 +02:00
dellaert
7ebc8e969f
Charts with default constructors
2014-10-20 09:29:45 +02:00
dellaert
63ae33088e
Some success on the way to autodiff
2014-10-19 23:47:59 +02:00
dellaert
8ee16c9018
Comments for Paul
2014-10-19 11:19:09 +02:00
dellaert
eac76cd0f0
Some progress on defining interface
2014-10-19 11:18:36 +02:00
dellaert
6e142184cc
Implemented is_manifold and dimension for all types in testExpressionFactor
2014-10-19 00:35:25 +02:00
dellaert
c32d2bb3b2
Fixed comments
2014-10-18 23:48:51 +02:00
dellaert
d436d99146
Moved stuff to Manifold.h
2014-10-18 23:25:25 +02:00
dellaert
fcda501ee2
double as manifold. No more LieScalar !
2014-10-18 18:13:33 +02:00
dellaert
ed6a2b6eff
Charts !!!!
2014-10-18 17:11:28 +02:00
dellaert
9c97b1d8a0
Some more refactoring
2014-10-18 16:45:04 +02:00
dellaert
66b3081603
localCoordinates and retract
2014-10-18 15:02:22 +02:00
dellaert
10cfd47404
TangentVector meta-function
2014-10-18 14:29:40 +02:00
dellaert
ec69949f43
Point2 specialized
2014-10-18 14:22:01 +02:00
dellaert
f08dc6c031
More boost-style traits
2014-10-18 14:16:24 +02:00
dellaert
4c33444415
Snavely tested
2014-10-18 13:16:44 +02:00
dellaert
bdf12b14b9
Add Snavely cost function
2014-10-18 12:35:02 +02:00
dellaert
7018afdd58
Slight refactor of numerical derivatives
2014-10-18 12:34:05 +02:00
dellaert
2972671064
Use boost::bind to avoid code duplication
2014-10-18 12:29:14 +02:00
dellaert
db037c96c5
Implemented manifold_traits to allow numerical derivatives wrpt Matrix arguments
2014-10-18 12:12:25 +02:00
dellaert
2cbba15573
ceres style functor
2014-10-18 00:29:18 +02:00
dellaert
02d25f6658
New tests on traceSize
2014-10-16 15:07:05 +02:00
dellaert
0bcca2c386
Drastic reduction in allocations at ExpressionFactor construction by having dims constructed imperatively, and using it for both keys_ and dimensions_
2014-10-16 14:16:58 +02:00
dellaert
944422e295
Only ExpressionFactor needs dimensions! Also, add dimensions at construction -> speeds up linearize.
2014-10-16 11:15:47 +02:00
dellaert
3413b98331
New storage sizes
2014-10-15 14:30:36 +02:00
dellaert
79ff0c54f9
createUnknowns
2014-10-15 10:38:54 +02:00
dellaert
649478f186
Should work but seg-faults
2014-10-15 01:19:14 +02:00
dellaert
9b1c9bbf37
Allocate temporary matrix on the stack rather tahn on heap, and give VerticalBlockMatrix a view on it.
2014-10-15 00:56:06 +02:00
dellaert
c88b2a5902
Fixed bizarre link erro as well as off-by-1 bug
2014-10-15 00:34:28 +02:00
dellaert
0f055f7910
Pass matrix to VerticalBlockMatrix constructor
2014-10-15 00:28:53 +02:00
dellaert
625b939b66
Another very significant speed-up of reverseAD pipeline, by template specialization of the leaf case for fixed matrices. Unfortunately, while this sped up reverse AD for our SFM kernel by 300%, reverseAD was only 6%, and is now 2% of total time. So, time to look elsewhere.
...
Oh, and, it is clear that the Identity matrix for Leaf only expressions is completely known at compile time: Eigen::Matrix<double, T::dimension, T::dimension>::Identity(). That should nicely speed up many a PriorFactor (replacement).
2014-10-14 23:40:21 +02:00
dellaert
baaeaacabe
Made dimensions constant property. Now performance is ***blazing***, way past custom factors.
2014-10-14 17:46:57 +02:00
dellaert
c971207abf
Switched to vector for dimensions
2014-10-14 17:16:31 +02:00
dellaert
1c3f328fb2
Successful switch to Blocks !
2014-10-14 15:43:41 +02:00
dellaert
f3e1561105
Prepare VerticalBlockMatrix for filling
2014-10-14 11:13:49 +02:00
dellaert
4c76f39009
Now uses dimensions
2014-10-14 09:55:34 +02:00
dellaert
d8d94d0c34
dimensions implemented and tested
2014-10-14 09:53:47 +02:00
dellaert
781cc6daa9
keys now from expression_
2014-10-14 08:59:01 +02:00
dellaert
0a41b0a027
Moved meta-programming tests to testExpressionMeta.cpp
2014-10-14 08:53:16 +02:00
dellaert
ef5bf03c81
Clean up
2014-10-13 23:04:30 +02:00
dellaert
70f0caf0e3
Experimenting w Fusion
2014-10-13 22:50:47 +02:00
dellaert
dda91df6e1
On the way to full fusion: Optional meta-function now separate from Jacobian.
2014-10-13 18:32:58 +02:00
dellaert
ba0b68110f
Boost Fusion needed to access values :-(
2014-10-13 13:56:51 +02:00
dellaert
a52ff52941
Try some meta-transforms
2014-10-13 13:34:00 +02:00
dellaert
1c1695353e
Now we can apply ExecutionTrace and Expression as meta-functions
2014-10-13 13:04:37 +02:00
dellaert
c11d7885e1
Comments
2014-10-13 11:55:16 +02:00
dellaert
74269902d7
Big collapse now realized all the way through
2014-10-13 11:37:47 +02:00
dellaert
da0e5fe52f
The great collapse: instead of two recursively defined classes, there is now only one. The Record class is now a (recursive) inner class.
2014-10-13 10:50:05 +02:00
dellaert
bc9e11f43c
Pre-big collapse: prototype recursively defined inner Record2 type
2014-10-13 10:10:46 +02:00
dellaert
7fde47c48b
No more JacobianTA typedefs -> all use Jacobian<T,A> now.
2014-10-13 09:25:06 +02:00
dellaert
7848d74928
Detailed explanation of recursive class composition pattern.
...
Jacobian type now defined in argument.
2014-10-13 08:49:12 +02:00
dellaert
7f621af54a
Fixed bug
2014-10-13 00:57:11 +02:00
dellaert
2e8d868cd2
keys have been implemented
2014-10-13 00:37:46 +02:00
dellaert
a9d9fcd241
FunctionalNode inherited for all three functional ExpressionNode sub-classes
2014-10-13 00:31:03 +02:00
dellaert
8100d89094
So much better as methods
2014-10-12 23:57:08 +02:00
dellaert
55cc4ba56c
Switched names of fold result and meta-function that is folded over
2014-10-12 23:31:58 +02:00
dellaert
ef21a4ba4a
Major re-org in preparation of recursive Functional nodes
2014-10-12 23:03:33 +02:00
dellaert
408be628d2
Small change in meta-programming, big improvement in clarity
2014-10-12 22:17:21 +02:00
dellaert
107bcd8bb4
Going forwards, we default to reverse :-)
2014-10-12 22:04:40 +02:00
dellaert
4d1eb05c7d
Passing JacobianMap as an argument now..
2014-10-12 20:16:08 +02:00
dellaert
dc541f1051
made traceSize an instance variable
2014-10-12 18:52:12 +02:00
dellaert
7a5f48f6dd
Fixed typo in assert
2014-10-12 12:20:12 +02:00
dellaert
fea2eb0b5f
Inlined VerticalBlockMatrix construction
2014-10-12 11:05:43 +02:00
dellaert
ed62271f81
Dealing with constrained noise model
2014-10-12 10:52:07 +02:00
dellaert
86d3e559e6
Merge branch 'feature/BAD' into feature/BAD_linearize
2014-10-11 23:07:40 +02:00
dellaert
c9f80536c0
Added a constraint model
2014-10-11 23:07:23 +02:00
dellaert
3c6f7a42e6
Merge branch 'feature/BAD' into feature/BAD_linearize: easier trace/dTdA access
2014-10-11 22:31:43 +02:00
dellaert
c776e87f78
Refactoring for readability/sanity
2014-10-11 21:33:07 +02:00
dellaert
0c7ea68f2f
Now overwriting linearize as preparation for direct VericalBlockMatrix
2014-10-11 17:05:53 +02:00
dellaert
1bac83381f
Merge remote-tracking branch 'origin/feature/BAD_meta' into feature/BAD: Now the Record structures are recursively generated using template meta-programming, basically mpl::fold
...
Conflicts:
gtsam_unstable/nonlinear/Expression-inl.h
2014-10-11 15:20:12 +02:00
dellaert
88f9a423c5
Numbered types avoid ambiguity
2014-10-11 14:19:39 +02:00
dellaert
ecf6462a25
Victory!! Unit tests work!
2014-10-11 13:07:58 +02:00
dellaert
599e232d1d
traceSize, two tests work
2014-10-11 12:11:22 +02:00
dellaert
9585823d5d
...but works with correct size !
2014-10-11 11:32:52 +02:00
dellaert
deed7b8018
Unary prints, but still-faults downstream
2014-10-11 11:30:06 +02:00
dellaert
05f78b6dca
Re-factor, allow traceExecution
2014-10-11 11:29:42 +02:00
dellaert
1f692638f5
Accessing matrices works
2014-10-11 11:04:39 +02:00
dellaert
69b69a0bc8
placement new works! And sophisticated Trace::print
2014-10-11 11:03:35 +02:00
dellaert
eef2d49e8d
First prototype, segfaults
2014-10-11 10:27:30 +02:00
dellaert
e09e24964a
No need to have all of T as template parameter
2014-10-11 09:00:03 +02:00
dellaert
820988b04e
Do casting inside Trace
2014-10-11 08:52:24 +02:00
dellaert
52fc6f2db4
Testing old trace
2014-10-11 08:41:39 +02:00
dellaert
820e9553ee
TestBinaryExpression friend
2014-10-11 08:17:46 +02:00
dellaert
a2d2d82e0e
some namespace management
2014-10-11 07:39:13 +02:00
dellaert
23485a0e71
New and consistent naming: ExecutionTrace = whole tree, CallRecord = local information left by the function.
2014-10-10 17:45:39 +02:00
dellaert
ae93dd9869
Commented out repeated arguments
2014-10-10 13:57:37 +02:00
dellaert
58bbce482d
Ternary works, same caveat
2014-10-10 13:33:13 +02:00
dellaert
406467e341
Binary works, but it's ugly and does not work for repeated types
2014-10-10 13:29:56 +02:00
dellaert
24714e48c5
Works for Unary !
2014-10-10 12:38:26 +02:00
dellaert
f8468bd596
Recursion done
2014-10-10 12:31:40 +02:00
dellaert
40fc6f5c03
Working prototype
2014-10-10 12:29:01 +02:00
dellaert
dd1b931802
Successfully defined Jacobian
2014-10-10 12:03:13 +02:00
dellaert
732ff54b83
More experiments
2014-10-10 11:41:01 +02:00
dellaert
8e264f4289
Attempt at defining Trace recursively
2014-10-09 14:38:16 +02:00
dellaert
5e5457b390
Renamed entry point to startReverseAD to emphasize it is only called once
2014-10-09 13:42:43 +02:00
dellaert
563c4d214c
Renamed BADFactor -> ExpressionFactor
2014-10-09 13:00:56 +02:00
dellaert
7e069191e5
Slight refactor
2014-10-09 10:58:46 +02:00
dellaert
a38a0ae9e1
Some comments
2014-10-09 00:21:10 +02:00
dellaert
9ebe1e6d10
Super-speedup by specializing to 2-dimensional output (for now). Using some template magic.
2014-10-08 23:50:17 +02:00
dellaert
abb92632b8
Empty derived destructors are not needed
2014-10-08 17:32:46 +02:00
dellaert
6a1bc6e242
Documentation
2014-10-08 17:28:33 +02:00
dellaert
ce2dcaeb3b
Tagged union, lightweight
2014-10-08 15:39:59 +02:00
dellaert
390842e1f7
Put Trace in front
2014-10-08 13:58:15 +02:00
dellaert
ba9faa68b6
New Leaf/noise tests
2014-10-08 13:56:54 +02:00
dellaert
c4a92acde1
Avoid argument temporaries
2014-10-07 19:35:44 +02:00
dellaert
3c1c9c6d12
Switch to pointers - nice improvement
2014-10-07 18:11:12 +02:00
dellaert
e4392c0a3b
JacobianTrace no longer templated
2014-10-07 16:11:55 +02:00
dellaert
83d77271d9
Ternary now fixed
2014-10-07 13:04:04 +02:00
dellaert
613cb0bb12
Binary functions now take fixed Jacobians
2014-10-07 01:01:46 +02:00
dellaert
e48b38ca21
Fixing uncalibrate (does not yet compile)
2014-10-06 15:45:26 +02:00
dellaert
e5c3f4228a
Some fixed size in UnaryExpression
2014-10-06 14:22:18 +02:00
dellaert
5c96b7f38d
Made naming more suggestive of AD process rather than generic H1,H2...
2014-10-06 13:19:01 +02:00
dellaert
0ed96dda33
Avoid alloc and copy
2014-10-06 12:14:15 +02:00
dellaert
c748fdb404
Re-did with move semantics. Dangerously imperative.
2014-10-06 12:13:52 +02:00
Sungtae An
69f74014aa
add traceExecution in TernaryExpression
2014-10-05 17:40:11 -04:00
Sungtae An
cc3c0fcfec
add trace structure for reverse AD in TernaryExpression
2014-10-05 17:38:09 -04:00
Sungtae An
0421d05d44
add forward() in TernaryExpression
2014-10-05 17:36:53 -04:00
Sungtae An
0a7db2d252
Merge remote-tracking branch 'origin/feature/BAD' into feature/BAD
2014-10-05 16:16:19 -04:00
Sungtae An
40565564f5
TernaryExpression is added
2014-10-05 16:09:24 -04:00
dellaert
632810ff9a
Now only inline add, for performance
2014-10-05 21:53:40 +02:00
dellaert
33c1d072a4
Add switch between inline add and JacobianMap as a new class.
2014-10-05 21:49:30 +02:00
dellaert
5b13306104
Split out starting the AD process vs. propagating it, is more efficient than starting with a useless identity matrix
2014-10-05 19:27:52 +02:00
dellaert
ff9dd8eb8d
Removed some obsolete code
2014-10-05 19:09:16 +02:00
dellaert
caf742d5e1
Better names
2014-10-05 17:20:55 +02:00
dellaert
001504a432
JacobianTrace base, and avoid copying JacobianMaps.
2014-10-05 17:12:38 +02:00
dellaert
2718662467
Removed debug printing
2014-10-05 15:01:36 +02:00
dellaert
fdf9c10b42
Implemented value and now testBADFactor also runs
2014-10-05 15:00:10 +02:00
dellaert
8db2cd17fc
Finished constant Trace and *everything* just works!!! Amazing :-)
2014-10-05 13:41:20 +02:00
dellaert
7c19542245
Leaf Trace compiles
2014-10-05 13:37:51 +02:00
dellaert
75445307b2
Unary Trace done
2014-10-05 13:33:23 +02:00
dellaert
8e527a2251
Binary Trace compiles, runs
2014-10-05 13:27:41 +02:00
dellaert
303d37a716
Separate hierarchy
2014-10-05 11:22:14 +02:00
dellaert
6fb10a5de9
Rename, emphasizing is forward AD
2014-10-03 21:13:34 +02:00
dellaert
a5b92f0342
MUCH simpler by just using boost::bind to turn methods into functions
2014-10-03 13:18:25 +02:00
dellaert
bdf5451565
Typedefs
2014-10-03 12:52:35 +02:00
dellaert
c8dd361080
Common base class BinaryExpression
2014-10-03 12:48:28 +02:00
dellaert
987b123ec9
NullaryMethodExpression and UnaryFunctionExpression, derived from UnaryExpression
2014-10-03 12:40:26 +02:00
dellaert
aefad1e548
MAJOR refactor: I now use separate functions for value (only) and "augmented", for combined value-derivatives. The latter returns a new templated class, Augmented<T>.
2014-10-03 10:25:02 +02:00
dellaert
da4cfe6fdc
ternary test
2014-10-02 23:39:17 +02:00