126 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C++
		
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C++
		
	
	
| /**
 | |
|  * @file   VSLAMConfig.h
 | |
|  * @brief  Config for VSLAM
 | |
|  * @author Alireza Fathi
 | |
|  * @author Carlos Nieto
 | |
|  */
 | |
| 
 | |
| #include <string>
 | |
| #include <map>
 | |
| #include <vector>
 | |
| #include <fstream>
 | |
| #include "VectorConfig.h"
 | |
| #include "Pose3.h"
 | |
| #include "Cal3_S2.h"
 | |
| #include "Testable.h"
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| namespace gtsam{
 | |
| 
 | |
| /**
 | |
|  * Config that knows about points and poses
 | |
|  */
 | |
| class VSLAMConfig : Testable<VSLAMConfig> {
 | |
| 
 | |
|  private:
 | |
|   typedef std::map<int, Pose3> PoseMap;
 | |
|   typedef std::map<int, Point3> PointMap;
 | |
|   PointMap landmarkPoints_;
 | |
|   PoseMap cameraPoses_;
 | |
| 
 | |
|  public:
 | |
|   typedef std::map<std::string, Vector>::const_iterator const_iterator;
 | |
|   typedef PoseMap::const_iterator const_Pose_iterator;
 | |
|   typedef PointMap::const_iterator const_Point_iterator;
 | |
|   /**
 | |
|    * default constructor
 | |
|    */
 | |
|   VSLAMConfig() {}
 | |
| 
 | |
|   /*
 | |
|    * copy constructor
 | |
|    */
 | |
|   VSLAMConfig(const VSLAMConfig& original):
 | |
|   	cameraPoses_(original.cameraPoses_), landmarkPoints_(original.landmarkPoints_){}
 | |
| 
 | |
|   PoseMap::const_iterator cameraIteratorBegin() const  { return cameraPoses_.begin();}
 | |
|   PoseMap::const_iterator cameraIteratorEnd() const   { return cameraPoses_.end();}
 | |
|   PointMap::const_iterator landmarkIteratorBegin() const { return landmarkPoints_.begin();}
 | |
|   PointMap::const_iterator landmarkIteratorEnd() const  { return landmarkPoints_.end();}
 | |
| 
 | |
|   /**
 | |
|    * print
 | |
|    */
 | |
|   void print(const std::string& s = "") const;
 | |
| 
 | |
|   /**
 | |
|    * Retrieve robot pose
 | |
|    */
 | |
|   bool cameraPoseExists(int i) const
 | |
|   {
 | |
|     PoseMap::const_iterator it = cameraPoses_.find(i);
 | |
|     if (it==cameraPoses_.end())
 | |
|       return false;
 | |
|     return true;
 | |
|   }
 | |
| 
 | |
|   Pose3 cameraPose(int i) const {
 | |
|     PoseMap::const_iterator it = cameraPoses_.find(i);
 | |
|     if (it==cameraPoses_.end())
 | |
|       throw(std::invalid_argument("robotPose: invalid key"));
 | |
|     return it->second;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Check whether a landmark point exists
 | |
|    */
 | |
|   bool landmarkPointExists(int i) const
 | |
|   {
 | |
|     PointMap::const_iterator it = landmarkPoints_.find(i);
 | |
|     if (it==landmarkPoints_.end())
 | |
|       return false;
 | |
|     return true;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Retrieve landmark point
 | |
|    */
 | |
|   Point3 landmarkPoint(int i) const {
 | |
|     PointMap::const_iterator it = landmarkPoints_.find(i);
 | |
|     if (it==landmarkPoints_.end())
 | |
|       throw(std::invalid_argument("markerPose: invalid key"));
 | |
|     return it->second;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * check whether two configs are equal
 | |
|    */
 | |
|   bool equals(const VSLAMConfig& c, double tol=1e-6) const;
 | |
|   void addCameraPose(const int i, Pose3 cp);
 | |
|   void addLandmarkPoint(const int i, Point3 lp);
 | |
| 
 | |
|   void removeCameraPose(const int i);
 | |
|   void removeLandmarkPose(const int i);
 | |
| 
 | |
|   void clear() {landmarkPoints_.clear(); cameraPoses_.clear();}
 | |
| 
 | |
|   inline size_t size(){
 | |
|     return landmarkPoints_.size() + cameraPoses_.size();
 | |
|   }
 | |
| 
 | |
|   friend VSLAMConfig expmap(const VSLAMConfig& c, const VectorConfig & delta);
 | |
| };
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * Exponential map: takes 6D vectors in VectorConfig
 | |
|  * and applies them to the poses in the VSLAMConfig.
 | |
|  * Needed for use in nonlinear optimization
 | |
|  */
 | |
| VSLAMConfig expmap(const VSLAMConfig& c, const VectorConfig & delta);
 | |
| 
 | |
| 
 | |
| } // namespace gtsam
 | |
| 
 |