use HybridSmoother for City10000
parent
0796ee293e
commit
4a302d7945
|
@ -20,7 +20,7 @@
|
||||||
#include <gtsam/geometry/Pose2.h>
|
#include <gtsam/geometry/Pose2.h>
|
||||||
#include <gtsam/hybrid/HybridNonlinearFactor.h>
|
#include <gtsam/hybrid/HybridNonlinearFactor.h>
|
||||||
#include <gtsam/hybrid/HybridNonlinearFactorGraph.h>
|
#include <gtsam/hybrid/HybridNonlinearFactorGraph.h>
|
||||||
#include <gtsam/hybrid/HybridNonlinearISAM.h>
|
#include <gtsam/hybrid/HybridSmoother.h>
|
||||||
#include <gtsam/hybrid/HybridValues.h>
|
#include <gtsam/hybrid/HybridValues.h>
|
||||||
#include <gtsam/inference/Symbol.h>
|
#include <gtsam/inference/Symbol.h>
|
||||||
#include <gtsam/nonlinear/Values.h>
|
#include <gtsam/nonlinear/Values.h>
|
||||||
|
@ -43,7 +43,7 @@ using symbol_shorthand::M;
|
||||||
using symbol_shorthand::X;
|
using symbol_shorthand::X;
|
||||||
|
|
||||||
// Testing params
|
// Testing params
|
||||||
const size_t max_loop_count = 2000; // 2000; // 200 //2000 //8000
|
const size_t max_loop_count = 1800; // 2000; // 200 //2000 //8000
|
||||||
|
|
||||||
noiseModel::Diagonal::shared_ptr prior_noise_model =
|
noiseModel::Diagonal::shared_ptr prior_noise_model =
|
||||||
noiseModel::Diagonal::Sigmas(
|
noiseModel::Diagonal::Sigmas(
|
||||||
|
@ -88,7 +88,7 @@ int main(int argc, char* argv[]) {
|
||||||
|
|
||||||
std::list<double> time_list;
|
std::list<double> time_list;
|
||||||
|
|
||||||
HybridNonlinearISAM isam(100);
|
HybridSmoother smoother;
|
||||||
|
|
||||||
HybridNonlinearFactorGraph graph;
|
HybridNonlinearFactorGraph graph;
|
||||||
|
|
||||||
|
@ -107,11 +107,12 @@ int main(int argc, char* argv[]) {
|
||||||
|
|
||||||
graph.push_back(PriorFactor<Pose2>(X(0), prior_pose, prior_noise_model));
|
graph.push_back(PriorFactor<Pose2>(X(0), prior_pose, prior_noise_model));
|
||||||
|
|
||||||
isam.update(graph, init_values, maxNrHypotheses);
|
HybridGaussianFactorGraph linearized = *graph.linearize(init_values);
|
||||||
|
smoother.update(linearized, maxNrHypotheses);
|
||||||
|
|
||||||
graph.resize(0);
|
graph.resize(0);
|
||||||
init_values.clear();
|
HybridValues delta = smoother.hybridBayesNet().optimize();
|
||||||
results = isam.estimate();
|
results.insert_or_assign(init_values.retract(delta.continuous()));
|
||||||
|
|
||||||
size_t key_s, key_t;
|
size_t key_s, key_t;
|
||||||
|
|
||||||
|
@ -163,15 +164,20 @@ int main(int argc, char* argv[]) {
|
||||||
pose_noise_model));
|
pose_noise_model));
|
||||||
}
|
}
|
||||||
|
|
||||||
isam.update(graph, init_values, maxNrHypotheses);
|
HybridGaussianFactorGraph linearized = *graph.linearize(init_values);
|
||||||
|
// std::cout << "index: " << index << std::endl;
|
||||||
|
smoother.update(linearized, maxNrHypotheses);
|
||||||
graph.resize(0);
|
graph.resize(0);
|
||||||
init_values.clear();
|
delta = smoother.hybridBayesNet().optimize();
|
||||||
results = isam.estimate();
|
results.insert_or_assign(init_values.retract(delta.continuous()));
|
||||||
|
|
||||||
// Print loop index and time taken in processor clock ticks
|
// Print loop index and time taken in processor clock ticks
|
||||||
if (index % 50 == 0 && key_s != key_t - 1) {
|
if (index % 50 == 0 && key_s != key_t - 1) {
|
||||||
std::cout << "index: " << index << std::endl;
|
std::cout << "index: " << index << std::endl;
|
||||||
std::cout << "acc_time: " << time_list.back() << std::endl;
|
std::cout << "acc_time: " << time_list.back() << std::endl;
|
||||||
|
delta.discrete().print("The Discrete Assignment");
|
||||||
|
tictoc_finishedIteration_();
|
||||||
|
tictoc_print_();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (key_s == key_t - 1) {
|
if (key_s == key_t - 1) {
|
||||||
|
|
Loading…
Reference in New Issue