71 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
		
		
			
		
	
	
			71 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
|  | /*
 | ||
|  |  * @file ControlPoint.h | ||
|  |  * @brief Class with a point in a Position-Velocity model at a given time for 2D robots | ||
|  |  * @author Alex Cunningham | ||
|  |  */ | ||
|  | 
 | ||
|  | #pragma once
 | ||
|  | 
 | ||
|  | #include "Pose2.h"
 | ||
|  | #include "Testable.h"
 | ||
|  | 
 | ||
|  | namespace gtsam { | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * This class stores a single point in time using a model | ||
|  |  * with position and velocity, as well as a time stamp, and | ||
|  |  * is designed for use with robot control applications. | ||
|  |  */ | ||
|  | class ControlPoint : public Testable<ControlPoint> { | ||
|  | private: | ||
|  | 	// position model
 | ||
|  | 	Pose2 pos_; | ||
|  | 
 | ||
|  | 	// velocity model
 | ||
|  | 	Pose2 vel_; | ||
|  | 
 | ||
|  | 	// timestamp for this observation
 | ||
|  | 	double time_; | ||
|  | 
 | ||
|  | public: | ||
|  | 	/** default contructor: stationary point at origin at zero time*/ | ||
|  | 	ControlPoint(); | ||
|  | 
 | ||
|  | 	/** full constructor */ | ||
|  | 	ControlPoint(const Pose2& pos, const Pose2& vel, double time); | ||
|  | 
 | ||
|  | 	/** manual constructor - specify each Pose2 in full */ | ||
|  | 	ControlPoint(double posx, double posy, double posr, | ||
|  | 				 double velx, double vely, double velr, double time); | ||
|  | 
 | ||
|  | 	/** default destructor */ | ||
|  | 	virtual ~ControlPoint() {} | ||
|  | 
 | ||
|  | 	/** Standard print function with optional label */ | ||
|  | 	virtual void print(const std::string& name="") const; | ||
|  | 
 | ||
|  | 	/** Equality up to a tolerance */ | ||
|  | 	virtual bool equals(const ControlPoint& expected, double tol=1e-9) const; | ||
|  | 
 | ||
|  | 	/* Access functions */ | ||
|  | 	Pose2 pos() const { return pos_; } | ||
|  | 	Pose2 vel() const { return vel_; } | ||
|  | 	double time() const { return time_; } | ||
|  | 
 | ||
|  | 	/**
 | ||
|  | 	 * Exmap function to add a delta configuration to the point | ||
|  | 	 * NOTE: in handling rotation, the position will have its | ||
|  | 	 * range bounded to -pi < r < pi, but the velocity | ||
|  | 	 * can be larger than 2pi, as this would represent that | ||
|  | 	 * the angular velocity will do more than a full rotation | ||
|  | 	 * in a time step. | ||
|  | 	 */ | ||
|  | 	ControlPoint exmap(const Vector& delta); | ||
|  | }; | ||
|  | 	// comparison
 | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 |