/** * @file pose2SLAM.h * @brief: 2D Pose SLAM * @authors Frank Dellaert **/ #pragma once #include "Key.h" #include "Pose2.h" #include "LieConfig.h" #include "PriorFactor.h" #include "BetweenFactor.h" #include "NonlinearEquality.h" #include "NonlinearFactorGraph.h" #include "NonlinearOptimizer.h" namespace gtsam { // Use pose2SLAM namespace for specific SLAM instance namespace pose2SLAM { // Keys and Config typedef TypedSymbol Key; typedef LieConfig Config; /** * Create a circle of n 2D poses tangent to circle of radius R, first pose at (R,0) * @param n number of poses * @param R radius of circle * @param c character to use for keys * @return circle of n 2D poses */ Config circle(size_t n, double R); // Factors typedef PriorFactor Prior; typedef BetweenFactor Constraint; typedef NonlinearEquality HardConstraint; // Graph struct Graph: public NonlinearFactorGraph { void addPrior(const Key& i, const Pose2& p, const sharedGaussian& model); void addConstraint(const Key& i, const Key& j, const Pose2& z, const sharedGaussian& model); void addHardConstraint(const Key& i, const Pose2& p); }; // Optimizer typedef NonlinearOptimizer Optimizer; } // pose2SLAM /** * Backwards compatibility */ typedef pose2SLAM::Config Pose2Config; typedef pose2SLAM::Prior Pose2Prior; typedef pose2SLAM::Constraint Pose2Factor; typedef pose2SLAM::Graph Pose2Graph; } // namespace gtsam