Values initial;
initial.insert(0, Pose2(5.73879859, -0.460481998, -0.112793985));
initial.insert(1, Pose2(-0.372136134, 1.33611664, -1.56068983));
auto nm1 = noiseModel::Isotropic::Sigma(3, 0.316228);
auto f1 = boost::make_shared<BetweenFactor<Pose2> >(0, 1, Pose2(0.375387937, 0.097459428, -0.0294623178), nm1);
auto nm2 = noiseModel::Isotropic::Sigma(3, 0.05);
auto f2 = boost::make_shared<PriorFactor<Pose2> >(0, Pose2(5.73879859, -0.460481998, -0.112793985), nm2);
NonlinearFactorGraph graph;
graph.add<BetweenFactor<Pose2> >(f1);
graph.add<PriorFactor<Pose2> >(f2);
LevenbergMarquardtParams params;
params.setVerbosityLM("TRYDELTA");
gtsam::LevenbergMarquardtOptimizer optimizer(graph, initial, params);
auto optimized = optimizer.optimize();
initial.print("Initial\n");
graph.print("Graph\n");
optimized.print("Optimized\n");
std::cout << "Error: " << optimizer.error() << std::endl;
optimizer.params().print("Parameters:\n");
std::cout << "\n\n\n";
return optimized;