Releases: borglab/gtsam
Release 4.2
This is the long-awaited release 4.2. Develop has been in pre-4.3 for a while now, but 4.2 kept evolving alongside it (mostly with cherry-picks) as roboticsbook.org uses it and we wanted to wait another semester of teaching it to make sure it was very stable.
The biggest changes are:
- hybrid factor graph inference
- much more extensive python and Matlab wrappers
- Shonan averaging
GTSAM 4.2 can be used from python using pip install gtsam
. All available wheels can be found on pypi.
Detailed changes below:
What's Changed (Since 4.1.1)
- API improvements for discrete by @dellaert in #990
- Finish release branch by @dellaert in #992
- Two small fixes by @dellaert in #996
- Force nonnegative scale for Sim(3) by @johnwlambert in #997
- Moved empty to Factor base class. by @dellaert in #998
- Fix documentation on ProjectionFactorPPPC by @dwisth in #1004
- Minor changes to LocalPlaneFactor by @dwisth in #1003
- DecisionTree Improvements by @varunagrawal in #1002
- Spring cleaning: deprecate -> 4.2 by @dellaert in #999
- DecisionTree refactor by @dellaert in #1000
- render values in markdown by @dellaert in #1001
- More DecisionTree improvements by @dellaert in #1005
What's Changed (Since 4.2a1)
- Remove Potentials by @ProfFan in #1013
- fail fast in linux matrix by @dellaert in #1017
- html renderers in discrete by @dellaert in #1022
What's Changed (Since 4.2a2)
- FG print(): fix empty lines on nullptr; avoid endl by @jlblancoc in #1030
- Fix probPrime by @varunagrawal in #1034
- Add python unit test for triangulation with robust noise model by @johnwlambert in #1031
- Better DiscreteConditional by @dellaert in #1037
- Rename DiscretePrior -> DiscreteDistribution by @dellaert in #1039
What's Changed (Since 4.2a3)
- Robust triangulation by @lucacarlone in #1020
- DiscreteBayesNet sample/optimize variants by @dellaert in #1043
- Added a convenience function for plotting 2D points. by @magicbycalvin in #1042
- Some discrete improvements by @dellaert in #1045
- Subgraph API change by @dellaert in #1010
- Update python install in CI by @varunagrawal in #1054
- Fix DiscreteFactorGraph::optimize to return MPE by @dellaert in #1050
- Changes in gtsam to support hybrid branches by @dellaert in #1055
- Threshold Example + linting by @dellaert in #1056
- Expose GraphvizFormatting and test in python by @senselessDev in #1059
- Add position to Point2 nodes in GraphViz by @senselessDev in #1058
- Fix docs by @dellaert in #1064
- Added sumProduct as a convenient alias by @dellaert in #1066
- Added inference module by @dellaert in #1068
- Added support for positioning in BayesNet plotting by @dellaert in #1070
What's Changed (Since 4.2a4)
- Wrap FindKarcherMean for Rot3 by @johnwlambert in #1069
- Wrapped more things by @dellaert in #1077
- Moved Sfm classes to their own files by @dellaert in #1078
- Expose some iSAM2/FixedLagSmoothing functionality for the bindings by @senselessDev in #1053
- Cleaned up loading SfmData by @dellaert in #1082
- Fixes to get matlab wrapper working properly by @varunagrawal in #1083
- Wrapper Update by @varunagrawal in #1084
- Add default constructor to PoseRotationPrior to fix serialization by @ScottMcMichael in #1086
- Add shared_ptr definition for remainder of camera objects by @dwisth in #1088
- Fix DotWriter wrapping by @dellaert in #1089
- Get Sim2 working by @varunagrawal in #1090
- Improvements in linear by @dellaert in #1091
- Frobenius Factor Eigen Fix by @varunagrawal in #1096
- New functionality in linear by @dellaert in #1095
- EXPORT statements to help Windows build. In Constraint.h, there was a… by @mikesheffler in #1097
What's Changed (Since 4.2a5)
- Fix MSVC / Windows Build of GTSAM_UNSTABLE by @mikesheffler in #1102
- Fix issues with grouped tests by @dellaert in #1107
- Header discipline in base by @dellaert in #1108
- fix: typo by @andre-nguyen in #1111
- correctly parse optimizer params for base optimizer in gnc by @yunzc in #1085
- Add missing header for timing target by @dellaert in #1112
- replace ifndefs with pragma once by @acxz in #1113
- CMake Warning Fixes by @varunagrawal in #1115
- Windows Tests by @varunagrawal in #1109
- Include guards by @acxz in #1116
- filename in repo is w10000 not w10000-odom by @acxz in #1123
- Added more tests for basis by @dellaert in #1121
- Using a random number generator in translation averaging by @akshay-krishnan in #1120
- A bunch of minor fixes by @varunagrawal in #1132
- fix triangulatePoint3 for calibrations with distortion by @thomassm in #1128
- Fix
visitWith
for Pruned Tree by @varunagrawal in #1135 - Wrap ParameterMatrix as argument for Values by @varunagrawal in #1136
- Apply DecisionTree
op
with Assignment by @varunagrawal in #1137 - Various Fixes by @varunagrawal in #1138
- Fix initialization in range iSAM example by @dellaert in #1131
- Fix Matlab Wrapper by @varunagrawal in #1140
- Print parents when printing GaussianConditional by @varunagrawal in #1143
- DecisionTree Improvements by @varunagrawal in #1144
- Fixed custom factors in doc/gtsam.lyx/pdf by @dellaert in #1139
- Fix
python-install
by @varunagrawal in #1145 - Wrapping Updates by @varunagrawal in #1146
- Allow more functionality through system METIS by @acxz in #1117
- Pose3 improvements by @dellaert in #1148
- DecisionTreeFactor
prune
method by @varunagrawal in #1151 - Update Wrapper by @varunagrawal in #1149
- Improve Gaussian Conditional printing by @varunagrawal in #1147
- Pose2::Align by @dellaert in #1150
- Record number of assignments for each leaf by @varunagrawal in #1154
- added wrapper for ProjectionFactorRollingShutter by @shteren1 in #1159
- Fix the race! by @ProfFan in #1158
- InvDepthFactor3: Fix wrong derivative H3 by @d-vo in #1157
- Updated scaling factors for proper geometric representation of uncertainty ellipses by @magicbycalvin in #1067
What's Changed (Since 4.2a6)
- DecisionTree Refactor by @varunagrawal in #1155
- New
maxNrAssignment
scheme for pruning by @varunagrawal in #1156 - Fix slow dynamic cast for Point3 and Point2 by @ProfFan in #1168
- Fix robust deserialization by @ProfFan in #1169
- Add camera and Calibration Jacobians in Python by @ProfFan in #1171
- Regenerate python utils files upon edit by @gchenfc in #1176
- noise models: Add getters for all model parameters by @jlblancoc in https://github.com/borglab/gtsam/pull...
Release 4.2a9
This is hopefully the last 4.2 pre-release. I had planned to cut 4.2 this weekend but there were still apparently some issues with the wrapper when used in Georgia tech's CS 3630 course (325 students using GTSAM) and so I'd rather wait another week for these things to settle down. In the meantime, though, we needed a pre-release so %pip install gtbook
works on Google Colab and installs 4.2a9 in the process. All works now, as evidenced at roboticsbook.org.
The biggest changes are:
- moved away from boost utilities to c++ initializers in all tests and examples.
- a cleaned up and correctly working hybrid inference framework. Thanks @varunagrawal and @ProfFan !
- template-magical NoiseModelFactorN which allows an arbitrary number of variables connected to factors. Thanks @gchenfc !
- several important bug-fixes and edits, by many new contributors, listed below:
New Contributors
- @nkhedekar made their first contribution in #1330
- @MigVega made their first contribution in #1331
- @ulterzlw made their first contribution in #1340
- @jrpowers made their first contribution in #1361
- @stefangachter made their first contribution in #1296
- @njayakumar3 made their first contribution in #789
- @BrettRD made their first contribution in #1376
- @acowley made their first contribution in #1381
Detailed Changes
- Add an expression for normalize() by @nkhedekar in #1330
- Update README.md by @MigVega in #1331
- Hybrid Elimination by @varunagrawal in #1339
- Fixed Jacobian in python CustomFactorExample by @ulterzlw in #1340
- Hybrid Mixture Error by @varunagrawal in #1318
- Hybrid Multifrontal by @varunagrawal in #1323
- NoiseModelFactorN - fixed-number of variables >6 by @gchenfc in #947
- GaussianConditional logDeterminant by @varunagrawal in #1345
- Replace
NoiseModelFactor1
in withNoiseModelFactorN
in pre-made factors by @gchenfc in #1344 - Hybrid Bayes Net sampling by @varunagrawal in #1347
- Fix wrapper warnings by @varunagrawal in #1348
- Update geometry.i : wrap multiplication of Rot3 and Unit3 by @akshay-krishnan in #1302
- Sampling test for Hybrid Posterior by @varunagrawal in #1346
- Some refactoring and new test by @dellaert in #1349
- Add logDensity and evaluate to GaussianBN and HybridBN by @dellaert in #1352
- Added convenience constructors and python wrappers by @dellaert in #1353
- Wrap constructors for PreintegratedAhrsMeasurements by @varunagrawal in #1354
- HybridValues specify continuous then discrete by @varunagrawal in #1355
- Likelihoods and other improvements by @dellaert in #1356
- Proper Hybrid Elimination by @varunagrawal in #1319
- Test on ratio by @dellaert in #1357
- Hybrid Improvements by @varunagrawal in #1343
- Fix HybridGaussianFactorGraph error by @varunagrawal in #1358
- Initializer list and insert/update chaining by @dellaert in #1359
- Slightly expand Python API by @jrpowers in #1361
- Check for native architecture and set GTSAM_COMPILE_OPTIONS_PUBLIC accordingly by @stefangachter in #1296
- Fix hybrid tests by @varunagrawal in #1363
- Fixed a few small issues... by @dellaert in #1367
- Switch to EliminateDiscrete for max-product by @dellaert in #1362
- Hybrid Serialization by @varunagrawal in #1368
- Various fixes for Hybrid by @varunagrawal in #1369
- Hybrid Elimination with Normalization Constant by @varunagrawal in #1360
- Added *.bib file and started adding citations to README.md by @njayakumar3 in #789
- Un-deprecate
NoiseModelFactor1-6
and moveX1
andkey1-6
shortcuts toNoiseModelFactorN
by @gchenfc in #1370 - Two new tests, one with 5 modes by @dellaert in #1371
- Simplified AP for HybridBayesNet by @dellaert in #1372
- DefaultOrderingFunc in EliminationTraits by @varunagrawal in #1373
- Big Re-"Factor" of Hybrid by @dellaert in #1374
- More Expression wrappers by @BrettRD in #1376
- Get rid of boost::assign by @dellaert in #1375
- replace list_of with initializer list in TimeTBB.cpp by @kartikarcot in #1379
- Harmonized error/logProbability in entire Factor/Conditional hierarchy by @dellaert in #1380
- BatchFixedLagSmoother: add ability to limit warning debug prints by @acowley in #1381
- Test and fix all conditionals by @dellaert in #1386
- Some Hybrid Improvements by @varunagrawal in #1387
- Hybrid/simplify by @dellaert in #1388
- Correction to docs and lambdas by @varunagrawal in #1390
- Switch pruning test to probabilities. by @dellaert in #1394
- Deprecate
filter
by @dellaert in #1397 - Fix examples that were using
filter
by @dellaert in #1402 - Deprecated boost transform_iterators by @dellaert in #1407
- Iterator for 4.2 by @dellaert in #1417
- Fix (issue #1336) dangling pointer access violation. by @oicchris in #1423
- Fix version... by @dellaert in #1424
- 4.2 fixes by @varunagrawal in #1425
- Patch ros package (branch: release/4.2) by @jlblancoc in #1427
- Add missing header to fix gtbook by @dellaert in #1429
Full Changelog: 4.2a8...4.2a9
4.2a8
What's Changed
- Lots of development in hybrid, still WIP
- some changes for GTSFM
- Lots of bug fixes, esp. in MATLAB wrapper
- Work on IMU factor
New Contributors
Thanks to our many new contributors!
- @huanglilong made their first contribution in #1206
- @HViktorTsoi made their first contribution in #1219
- @vik748 made their first contribution in #1225
- @agilemapper made their first contribution in #1252
- @amadoantonini made their first contribution in #1239
- @Tobias-Fischer made their first contribution in #1257
- @pglira made their first contribution in #1268
- @xsj01 made their first contribution in #1270
- @OznOg made their first contribution in #1304
- @mauricefallon made their first contribution in #1310
- @Taeyoung96 made their first contribution in #1324
Detailed Changes
- fix typo issue in comment by @huanglilong in #1206
- Fix templated type declaration in geometry.i by @varunagrawal in #1205
- Hybrid Factor Graph Implementation by @ProfFan in #1203
- Fix / Move
Rot3::quaternion
to deprecated block by @HViktorTsoi in #1219 - Add various tests for Hybrid by @varunagrawal in #1220
- Address matplotlib deprecation warnings for fig.gca() and window.set_title() by @vik748 in #1225
- Fix the failure in TA when adding betweenTranslations without any measurements. by @akshay-krishnan in #1224
- Improvements by @varunagrawal in #1217
- FIX: Robust loss error calculation by @ProfFan in #1161
- Add
this->
to fix ROS compile issue by @varunagrawal in #1230 - Replace boost::function with std::function by @varunagrawal in #1232
- Fix CombinedImuFactor by @varunagrawal in #882
- Wrapper Update by @varunagrawal in #1235
- added jacobians for all pose3 methods in python wrappers by @shteren1 in #1234
- Fix/gnc optimizer by @lucacarlone in #1035
- Wrap BearingRange Factors by @varunagrawal in #1240
- Implementation of the LOST triangulation algorithm by @akshay-krishnan in #1241
- Clear ConcurrentMap before loading archive data by @ScottMcMichael in #1248
- Fix Preintegration Covariance of CombinedImuFactor by @varunagrawal in #879
- Fix Python CI: More swap space by @gchenfc in #1250
- Update macos CI env by @varunagrawal in #1251
- replace addtogroup with ingroup for the SLAM group by @agilemapper in #1252
- Break up Python CI steps so reading logs is easier by @varunagrawal in #1254
- Expose GNC params to python by @amadoantonini in #1239
- Fix exports on Windows by @Tobias-Fischer in #1257
- Delete FindBoost.cmake by @Tobias-Fischer in #1260
- Link to interface library in case system metis is used by @Tobias-Fischer in #1258
- Fix matlab toolbox compilation by @varunagrawal in #1262
- Add Zenodo for citations by @varunagrawal in #1265
- Hybrid Incremental Inference by @varunagrawal in #1267
- Update README.md by @pglira in #1268
- Capitalize Identity trait by @varunagrawal in #1238
- Nonlinear Hybrid by @varunagrawal in #1263
- Jose's updates by @varunagrawal in #1237
- CombinedImuFactor: Add bias effect on position jacobian by @varunagrawal in #874
- Linear HybridBayesNet optimization by @xsj01 in #1270
- Hybrid Incremental by @varunagrawal in #1271
- Hybrid ISAM by @varunagrawal in #1273
- Upgrade from ubuntu 18.04 to 20.04 by @varunagrawal in #1276
- Additional Nonlinear Hybrid by @varunagrawal in #1277
- Hybrid Pruning by @varunagrawal in #1215
- HybridFactorGraph base class and other niceties by @varunagrawal in #1221
- Add wrapping for hybrid nonlinear by @ProfFan in #1281
- Hybrid Bayes Net/Tree Optimize by @varunagrawal in #1280
- Hybrid Bayes Tree Optimize by @varunagrawal in #1282
- Various updates for Hybrid by @varunagrawal in #1284
- Hybrid Serialization by @varunagrawal in #1286
- Rewrap KeyVector for Matlab wrapper by @varunagrawal in #1285
- Fix HybridBayesTree Optimize by @varunagrawal in #1287
- Various Fixes by @varunagrawal in #1288
MixtureFactor
continuous keys check by @varunagrawal in #1289- Hybrid Improvements - II by @varunagrawal in #1294
- Hybrid Improvements by @varunagrawal in #1290
- Hybrid Bayes Net pruning by @varunagrawal in #1300
- Hybrid Gaussian Conditional Elimination by @varunagrawal in #1301
- Improved BayesTree pruning by @varunagrawal in #1293
- Hybrid Updates by @varunagrawal in #1306
- Dsf-gtsfm-refactor by @dellaert in #1312
- Use eigen3 config.cmake by @OznOg in #1304
- Fix CMake so that Eigen discovery and linking is consistent by @varunagrawal in #1314
- Hybrid ISAM GetOrdering method by @varunagrawal in #1315
- Doxygen Updates by @varunagrawal in #1255
- fix typo in g2o file format parsing for the information matrix by @mauricefallon in #1310
- Fix for matlab wrapper in sfm.i by @akshay-krishnan in #1316
- Wrapper Update by @varunagrawal in #1317
- Update Switching fixture to be 0 indexed by @varunagrawal in #1311
- Hybrid Pruning by @varunagrawal in #1309
- Housekeeping Updates by @varunagrawal in #1321
- Remove unnecessary functions in ImuFactorsExample.cpp by @Taeyoung96 in #1324
- Fix GaussianBayesTree logDeterminant bug by @varunagrawal in #1327
- add workflow to trigger ubuntu packaging by @berndpfrommer in #1328
- release/4.2a8 to be merged into
master
by @johnwlambert in #1337
Full Changelog: 4.2a7...4.2a8
4.2a7
Many new changes since April 08.
Many thanks to contributors @varunagrawal, @shteren1, @ProfFan, @d-vo, @magicbycalvin, @gchenfc, @jlblancoc, @johnwlambert, @senselessDev, @akshay-krishnan !!!!
What's Changed
- Get Sim2 working by @varunagrawal in #1090
- DecisionTreeFactor
prune
method by @varunagrawal in #1151 - Update Wrapper by @varunagrawal in #1149
- Improve Gaussian Conditional printing by @varunagrawal in #1147
- Pose2::Align by @dellaert in #1150
- Record number of assignments for each leaf by @varunagrawal in #1154
- added wrapper for ProjectionFactorRollingShutter by @shteren1 in #1159
- Fix the race! by @ProfFan in #1158
- InvDepthFactor3: Fix wrong derivative H3 by @d-vo in #1157
- Updated scaling factors for proper geometric representation of uncertainty ellipses by @magicbycalvin in #1067
- DecisionTree Refactor by @varunagrawal in #1155
- New
maxNrAssignment
scheme for pruning by @varunagrawal in #1156 - Fix slow dynamic cast by @ProfFan in #1168
- Fix robust deserialization by @ProfFan in #1169
- Add camera and Calibration Jacobians in Python by @ProfFan in #1171
- Regenerate python utils files upon edit by @gchenfc in #1176
- noise models: Add getters for all model parameters by @jlblancoc in #1175
- Add Similarity(2) support in gtsam/geometry by @johnwlambert in #918
- Fix warnings and docs by @varunagrawal in #1181
- Added some utilities for better using the SfM parts of GTSAM in Python by @ProfFan in #1185
- Some fixes by @varunagrawal in #1187
- Fix uncertainty ellipses in python helpers by @senselessDev in #1177
- Adding options to translation averaging to support betweenfactor translation priors by @akshay-krishnan in #1190
- All uncertainty ellipses now contain 95% by @dellaert in #1193
- Remove user flag for pip install by @varunagrawal in #1195
- Wrap triangulateSafe by @dellaert in #1194
- Python optimizer iteration hook by @gchenfc in #1127
New Contributors
Full Changelog: 4.2a6...4.2a7
4.2a6
A bit of a bigger pre-release since development of book slowed a bit.
What's Changed
- Fix MSVC / Windows Build of GTSAM_UNSTABLE by @mikesheffler in #1102
- Fix issues with grouped tests by @dellaert in #1107
- Header discipline in base by @dellaert in #1108
- fix: typo by @andre-nguyen in #1111
- correctly parse optimizer params for base optimizer in gnc by @yunzc in #1085
- Add missing header for timing target by @dellaert in #1112
- replace ifndefs with pragma once by @acxz in #1113
- CMake Warning Fixes by @varunagrawal in #1115
- Windows Tests by @varunagrawal in #1109
- Include guards by @acxz in #1116
- filename in repo is w10000 not w10000-odom by @acxz in #1123
- Added more tests for basis by @dellaert in #1121
- Using a random number generator in translation averaging by @akshay-krishnan in #1120
- A bunch of minor fixes by @varunagrawal in #1132
- fix triangulatePoint3 for calibrations with distortion by @thomassm in #1128
- Fix
visitWith
for Pruned Tree by @varunagrawal in #1135 - Wrap ParameterMatrix as argument for Values by @varunagrawal in #1136
- Apply DecisionTree
op
with Assignment by @varunagrawal in #1137 - Various Fixes by @varunagrawal in #1138
- Fix initialization in range iSAM example by @dellaert in #1131
- Fix Matlab Wrapper by @varunagrawal in #1140
- Print parents when printing GaussianConditional by @varunagrawal in #1143
- DecisionTree Improvements by @varunagrawal in #1144
- Fixed custom factors in doc/gtsam.lyx/pdf by @dellaert in #1139
- Fix
python-install
by @varunagrawal in #1145 - Wrapping Updates by @varunagrawal in #1146
- Allow more functionality through system METIS by @acxz in #1117
- Pose3 improvements by @dellaert in #1148
New Contributors
- @andre-nguyen made their first contribution in #1111
- @yunzc made their first contribution in #1085
- @thomassm made their first contribution in #1128
Full Changelog: 4.2a5...4.2a6
4.2a5
Major changes since 4.2a4
- inference module in wrapper
- moved SfmData classes from dataset.* to sfm folder
- lots of plotting/html/wrapping support for roboticsbook.org
Detailed PR list
- Added inference module by @dellaert in #1068
- Added support for positioning in BayesNet plotting by @dellaert in #1070
- Wrap FindKarcherMean for Rot3 by @johnwlambert in #1069
- Wrapped more things by @dellaert in #1077
- Moved Sfm classes to their own files by @dellaert in #1078
- Expose some iSAM2/FixedLagSmoothing functionality for the bindings by @senselessDev in #1053
- Cleaned up loading SfmData by @dellaert in #1082
- Fixes to get matlab wrapper working properly by @varunagrawal in #1083
- Wrapper Update by @varunagrawal in #1084
- Add default constructor to PoseRotationPrior to fix serialization by @ScottMcMichael in #1086
- Add shared_ptr definition for remainder of camera objects by @dwisth in #1088
- Fix DotWriter wrapping by @dellaert in #1089
- Improvements in linear by @dellaert in #1091
- Frobenius Factor Eigen Fix by @varunagrawal in #1096
- New functionality in linear by @dellaert in #1095
4.2a4
Yet another pre-release to support rendering pretty graphs in roboticsbook.org
Major changes:
- a pretty big big-fix: DiscreteFactorGraph::optimize now does MPE! #1050
- @dellaert also changed API (breaking!) of Subgraph Preconditioners to include fewer shared_ptrs. #1010
- @lucacarlone landed robust triangulation, great for GTSFM as well!
New Contributors
- @magicbycalvin made their first contribution in #1042
- @senselessDev made their first contribution in #1059
What's Changed since 4.2a3
- Robust triangulation by @lucacarlone in #1020
- DiscreteBayesNet sample/optimize variants by @dellaert in #1043
- Added a convenience function for plotting 2D points. by @magicbycalvin in #1042
- Some discrete improvements by @dellaert in #1045
- Subgraph API change by @dellaert in #1010
- Update python install in CI by @varunagrawal in #1054
- Fix DiscreteFactorGraph::optimize to return MPE by @dellaert in #1050
- Changes in gtsam to support hybrid branches by @dellaert in #1055
- Expose GraphvizFormatting and test in python by @senselessDev in #1059
- Add position to Point2 nodes in GraphViz by @senselessDev in #1058
- Fix docs by @dellaert in #1064
- Added sumProduct as a convenient alias by @dellaert in #1066
4.2a3
Quick pre-release, mainly changes needed for book in #1037 and #1039
Changes since 4.2a2
- Rename DiscretePrior -> DiscreteDistribution by @dellaert in #1039
- Better DiscreteConditional by @dellaert in #1037
- Fix probPrime by @varunagrawal in #1034
- Get Error From Hessians by @varunagrawal #1033
- Add python unit test for triangulation with robust noise model by @johnwlambert #1031
- FG print(): fix empty lines on nullptr; avoid endl by @jlblancoc in #1030
4.2a2
v4.2a1
Major changes
Since v4.2a0:
- More rendering improvements in discrete
- Improvements to DecisionTree code to support hybrid branch
- Deprecated (old) Lie{Scalar|Vector|Matrix} classes
- Moved many deprecated functions inside ifdefs
List of PRs
- Two small fixes by @dellaert in #996
- Force nonnegative scale for Sim(3) by @johnwlambert in #997
- Moved empty to Factor base class. by @dellaert in #998
- Fix documentation on ProjectionFactorPPPC by @dwisth in #1004
- Minor changes to LocalPlaneFactor by @dwisth in #1003
- DecisionTree Improvements by @varunagrawal in #1002
- Spring cleaning: deprecate -> 4.2 by @dellaert in #999
- DecisionTree refactor by @dellaert in #1000
- render values in markdown by @dellaert in #1001
- More DecisionTree improvements by @dellaert in #1005
Full Changelog Since 4.1.1: 4.1.1...4.2a1