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 #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
What's Changed (Since 4.2a7)
- 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
What's Changed (Since 4.2a8)
- 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
What's Changed (Since 4.2a9)
- Better Hybrid support by @varunagrawal in #1466
- 4.2: Fix an invalid include, restore C++11 compatibility by @valgur in #1545
- Improved documentation, wrapper, and tests by @dellaert in #1574
- Cherrypick commits for release/4.2, that include transitivity fix for DsfTrackGenerator by @johnwlambert in #1616
New Contributors
- @magicbycalvin made their first contribution in #1042
- @senselessDev made their first contribution in #1059
- @andre-nguyen made their first contribution in #1111
- @yunzc made their first contribution in #1085
- @thomassm made their first contribution in #1128
- @d-vo made their first contribution in #1157
- @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
- @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
- @valgur made their first contribution in #1545
Full Changelog: 4.1.1...4.2