Merge pull request #1053 from senselessDev/develop

release/4.3a0
Varun Agrawal 2022-02-01 15:55:31 -05:00 committed by GitHub
commit ad0d7e4b21
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 40 additions and 53 deletions

View File

@ -300,18 +300,10 @@ struct GTSAM_EXPORT ISAM2Params {
RelinearizationThreshold getRelinearizeThreshold() const { RelinearizationThreshold getRelinearizeThreshold() const {
return relinearizeThreshold; return relinearizeThreshold;
} }
int getRelinearizeSkip() const { return relinearizeSkip; }
bool isEnableRelinearization() const { return enableRelinearization; }
bool isEvaluateNonlinearError() const { return evaluateNonlinearError; }
std::string getFactorization() const { std::string getFactorization() const {
return factorizationTranslator(factorization); return factorizationTranslator(factorization);
} }
bool isCacheLinearizedFactors() const { return cacheLinearizedFactors; }
KeyFormatter getKeyFormatter() const { return keyFormatter; } KeyFormatter getKeyFormatter() const { return keyFormatter; }
bool isEnableDetailedResults() const { return enableDetailedResults; }
bool isEnablePartialRelinearizationCheck() const {
return enablePartialRelinearizationCheck;
}
void setOptimizationParams(OptimizationParams optimizationParams) { void setOptimizationParams(OptimizationParams optimizationParams) {
this->optimizationParams = optimizationParams; this->optimizationParams = optimizationParams;
@ -319,31 +311,12 @@ struct GTSAM_EXPORT ISAM2Params {
void setRelinearizeThreshold(RelinearizationThreshold relinearizeThreshold) { void setRelinearizeThreshold(RelinearizationThreshold relinearizeThreshold) {
this->relinearizeThreshold = relinearizeThreshold; this->relinearizeThreshold = relinearizeThreshold;
} }
void setRelinearizeSkip(int relinearizeSkip) {
this->relinearizeSkip = relinearizeSkip;
}
void setEnableRelinearization(bool enableRelinearization) {
this->enableRelinearization = enableRelinearization;
}
void setEvaluateNonlinearError(bool evaluateNonlinearError) {
this->evaluateNonlinearError = evaluateNonlinearError;
}
void setFactorization(const std::string& factorization) { void setFactorization(const std::string& factorization) {
this->factorization = factorizationTranslator(factorization); this->factorization = factorizationTranslator(factorization);
} }
void setCacheLinearizedFactors(bool cacheLinearizedFactors) {
this->cacheLinearizedFactors = cacheLinearizedFactors;
}
void setKeyFormatter(KeyFormatter keyFormatter) { void setKeyFormatter(KeyFormatter keyFormatter) {
this->keyFormatter = keyFormatter; this->keyFormatter = keyFormatter;
} }
void setEnableDetailedResults(bool enableDetailedResults) {
this->enableDetailedResults = enableDetailedResults;
}
void setEnablePartialRelinearizationCheck(
bool enablePartialRelinearizationCheck) {
this->enablePartialRelinearizationCheck = enablePartialRelinearizationCheck;
}
GaussianFactorGraph::Eliminate getEliminationFunction() const { GaussianFactorGraph::Eliminate getEliminationFunction() const {
return factorization == CHOLESKY return factorization == CHOLESKY

View File

@ -588,21 +588,19 @@ class ISAM2Params {
void setOptimizationParams(const gtsam::ISAM2DoglegParams& dogleg_params); void setOptimizationParams(const gtsam::ISAM2DoglegParams& dogleg_params);
void setRelinearizeThreshold(double threshold); void setRelinearizeThreshold(double threshold);
void setRelinearizeThreshold(const gtsam::ISAM2ThresholdMap& threshold_map); void setRelinearizeThreshold(const gtsam::ISAM2ThresholdMap& threshold_map);
int getRelinearizeSkip() const;
void setRelinearizeSkip(int relinearizeSkip);
bool isEnableRelinearization() const;
void setEnableRelinearization(bool enableRelinearization);
bool isEvaluateNonlinearError() const;
void setEvaluateNonlinearError(bool evaluateNonlinearError);
string getFactorization() const; string getFactorization() const;
void setFactorization(string factorization); void setFactorization(string factorization);
bool isCacheLinearizedFactors() const;
void setCacheLinearizedFactors(bool cacheLinearizedFactors); int relinearizeSkip;
bool isEnableDetailedResults() const; bool enableRelinearization;
void setEnableDetailedResults(bool enableDetailedResults); bool evaluateNonlinearError;
bool isEnablePartialRelinearizationCheck() const; bool cacheLinearizedFactors;
void setEnablePartialRelinearizationCheck( bool enableDetailedResults;
bool enablePartialRelinearizationCheck); bool enablePartialRelinearizationCheck;
bool findUnusedFactorSlots;
enum Factorization { CHOLESKY, QR };
Factorization factorization;
}; };
class ISAM2Clique { class ISAM2Clique {

View File

@ -566,7 +566,13 @@ virtual class FixedLagSmoother {
gtsam::FixedLagSmootherKeyTimestampMap timestamps() const; gtsam::FixedLagSmootherKeyTimestampMap timestamps() const;
double smootherLag() const; double smootherLag() const;
gtsam::FixedLagSmootherResult update(const gtsam::NonlinearFactorGraph& newFactors, const gtsam::Values& newTheta, const gtsam::FixedLagSmootherKeyTimestampMap& timestamps); gtsam::FixedLagSmootherResult update(const gtsam::NonlinearFactorGraph &newFactors,
const gtsam::Values &newTheta,
const gtsam::FixedLagSmootherKeyTimestampMap &timestamps);
gtsam::FixedLagSmootherResult update(const gtsam::NonlinearFactorGraph &newFactors,
const gtsam::Values &newTheta,
const gtsam::FixedLagSmootherKeyTimestampMap &timestamps,
const gtsam::FactorIndices &factorsToRemove);
gtsam::Values calculateEstimate() const; gtsam::Values calculateEstimate() const;
}; };
@ -576,6 +582,8 @@ virtual class BatchFixedLagSmoother : gtsam::FixedLagSmoother {
BatchFixedLagSmoother(double smootherLag); BatchFixedLagSmoother(double smootherLag);
BatchFixedLagSmoother(double smootherLag, const gtsam::LevenbergMarquardtParams& params); BatchFixedLagSmoother(double smootherLag, const gtsam::LevenbergMarquardtParams& params);
void print(string s = "BatchFixedLagSmoother:\n") const;
gtsam::LevenbergMarquardtParams params() const; gtsam::LevenbergMarquardtParams params() const;
template <VALUE = {gtsam::Point2, gtsam::Rot2, gtsam::Pose2, gtsam::Point3, template <VALUE = {gtsam::Point2, gtsam::Rot2, gtsam::Pose2, gtsam::Point3,
gtsam::Rot3, gtsam::Pose3, gtsam::Cal3_S2, gtsam::Cal3DS2, gtsam::Rot3, gtsam::Pose3, gtsam::Cal3_S2, gtsam::Cal3DS2,
@ -589,7 +597,12 @@ virtual class IncrementalFixedLagSmoother : gtsam::FixedLagSmoother {
IncrementalFixedLagSmoother(double smootherLag); IncrementalFixedLagSmoother(double smootherLag);
IncrementalFixedLagSmoother(double smootherLag, const gtsam::ISAM2Params& params); IncrementalFixedLagSmoother(double smootherLag, const gtsam::ISAM2Params& params);
void print(string s = "IncrementalFixedLagSmoother:\n") const;
gtsam::ISAM2Params params() const; gtsam::ISAM2Params params() const;
gtsam::NonlinearFactorGraph getFactors() const;
gtsam::ISAM2 getISAM2() const;
}; };
#include <gtsam_unstable/nonlinear/ConcurrentFilteringAndSmoothing.h> #include <gtsam_unstable/nonlinear/ConcurrentFilteringAndSmoothing.h>

View File

@ -113,6 +113,9 @@ public:
/// Get results of latest isam2 update /// Get results of latest isam2 update
const ISAM2Result& getISAM2Result() const{ return isamResult_; } const ISAM2Result& getISAM2Result() const{ return isamResult_; }
/// Get the iSAM2 object which is used for the inference internally
const ISAM2& getISAM2() const { return isam_; }
protected: protected:
/** Create default parameters */ /** Create default parameters */

View File

@ -7,7 +7,7 @@ import gtsam.*
%% Initialize iSAM %% Initialize iSAM
params = gtsam.ISAM2Params; params = gtsam.ISAM2Params;
if options.alwaysRelinearize if options.alwaysRelinearize
params.setRelinearizeSkip(1); params.relinearizeSkip = 1;
end end
isam = ISAM2(params); isam = ISAM2(params);

View File

@ -52,7 +52,7 @@ IMU_params.setOmegaCoriolis(w_coriolis);
%% Solver object %% Solver object
isamParams = ISAM2Params; isamParams = ISAM2Params;
isamParams.setFactorization('CHOLESKY'); isamParams.setFactorization('CHOLESKY');
isamParams.setRelinearizeSkip(10); isamParams.relinearizeSkip = 10;
isam = gtsam.ISAM2(isamParams); isam = gtsam.ISAM2(isamParams);
newFactors = NonlinearFactorGraph; newFactors = NonlinearFactorGraph;
newValues = Values; newValues = Values;

View File

@ -46,7 +46,7 @@ posesIMUbody(1).R = poses(1).R;
%% Solver object %% Solver object
isamParams = ISAM2Params; isamParams = ISAM2Params;
isamParams.setRelinearizeSkip(1); isamParams.relinearizeSkip = 1;
isam = gtsam.ISAM2(isamParams); isam = gtsam.ISAM2(isamParams);
initialValues = Values; initialValues = Values;

View File

@ -34,7 +34,7 @@ poses(1).R = currentPoseGlobal.rotation.matrix;
%% Solver object %% Solver object
isamParams = ISAM2Params; isamParams = ISAM2Params;
isamParams.setRelinearizeSkip(1); isamParams.relinearizeSkip = 1;
isam = gtsam.ISAM2(isamParams); isam = gtsam.ISAM2(isamParams);
sigma_init_x = 1.0; sigma_init_x = 1.0;

View File

@ -119,7 +119,7 @@ h = figure;
% Solver object % Solver object
isamParams = ISAM2Params; isamParams = ISAM2Params;
isamParams.setFactorization('CHOLESKY'); isamParams.setFactorization('CHOLESKY');
isamParams.setRelinearizeSkip(10); isamParams.relinearizeSkip = 10;
isam = gtsam.ISAM2(isamParams); isam = gtsam.ISAM2(isamParams);
newFactors = NonlinearFactorGraph; newFactors = NonlinearFactorGraph;
newValues = Values; newValues = Values;

View File

@ -82,7 +82,7 @@ w_coriolis = [0;0;0];
%% Solver object %% Solver object
isamParams = ISAM2Params; isamParams = ISAM2Params;
isamParams.setFactorization('QR'); isamParams.setFactorization('QR');
isamParams.setRelinearizeSkip(1); isamParams.relinearizeSkip = 1;
isam = gtsam.ISAM2(isamParams); isam = gtsam.ISAM2(isamParams);
newFactors = NonlinearFactorGraph; newFactors = NonlinearFactorGraph;
newValues = Values; newValues = Values;

View File

@ -58,7 +58,7 @@ w_coriolis = [0;0;0];
%% Solver object %% Solver object
isamParams = ISAM2Params; isamParams = ISAM2Params;
isamParams.setFactorization('CHOLESKY'); isamParams.setFactorization('CHOLESKY');
isamParams.setRelinearizeSkip(10); isamParams.relinearizeSkip = 10;
isam = gtsam.ISAM2(isamParams); isam = gtsam.ISAM2(isamParams);
newFactors = NonlinearFactorGraph; newFactors = NonlinearFactorGraph;
newValues = Values; newValues = Values;

View File

@ -203,7 +203,7 @@ def optimize(gps_measurements: List[GpsMeasurement],
# Set ISAM2 parameters and create ISAM2 solver object # Set ISAM2 parameters and create ISAM2 solver object
isam_params = gtsam.ISAM2Params() isam_params = gtsam.ISAM2Params()
isam_params.setFactorization("CHOLESKY") isam_params.setFactorization("CHOLESKY")
isam_params.setRelinearizeSkip(10) isam_params.relinearizeSkip = 10
isam = gtsam.ISAM2(isam_params) isam = gtsam.ISAM2(isam_params)

View File

@ -111,7 +111,7 @@ def Pose2SLAM_ISAM2_example():
# update calls are required to perform the relinearization. # update calls are required to perform the relinearization.
parameters = gtsam.ISAM2Params() parameters = gtsam.ISAM2Params()
parameters.setRelinearizeThreshold(0.1) parameters.setRelinearizeThreshold(0.1)
parameters.setRelinearizeSkip(1) parameters.relinearizeSkip = 1
isam = gtsam.ISAM2(parameters) isam = gtsam.ISAM2(parameters)
# Create the ground truth odometry measurements of the robot during the trajectory. # Create the ground truth odometry measurements of the robot during the trajectory.

View File

@ -140,7 +140,7 @@ def Pose3_ISAM2_example():
# update calls are required to perform the relinearization. # update calls are required to perform the relinearization.
parameters = gtsam.ISAM2Params() parameters = gtsam.ISAM2Params()
parameters.setRelinearizeThreshold(0.1) parameters.setRelinearizeThreshold(0.1)
parameters.setRelinearizeSkip(1) parameters.relinearizeSkip = 1
isam = gtsam.ISAM2(parameters) isam = gtsam.ISAM2(parameters)
# Create the ground truth poses of the robot trajectory. # Create the ground truth poses of the robot trajectory.

View File

@ -81,7 +81,7 @@ def visual_ISAM2_example():
# will approach the batch result. # will approach the batch result.
parameters = gtsam.ISAM2Params() parameters = gtsam.ISAM2Params()
parameters.setRelinearizeThreshold(0.01) parameters.setRelinearizeThreshold(0.01)
parameters.setRelinearizeSkip(1) parameters.relinearizeSkip = 1
isam = gtsam.ISAM2(parameters) isam = gtsam.ISAM2(parameters)
# Create a Factor Graph and Values to hold the new data # Create a Factor Graph and Values to hold the new data

View File

@ -17,7 +17,7 @@ def initialize(data, truth, options):
# Initialize iSAM # Initialize iSAM
params = gtsam.ISAM2Params() params = gtsam.ISAM2Params()
if options.alwaysRelinearize: if options.alwaysRelinearize:
params.setRelinearizeSkip(1) params.relinearizeSkip = 1
isam = gtsam.ISAM2(params=params) isam = gtsam.ISAM2(params=params)
# Add constraints/priors # Add constraints/priors