Aikido
BSpline.hpp
Go to the documentation of this file.
1 #ifndef AIKIDO_TRAJECTORY_BSPLIINE_HPP_
2 #define AIKIDO_TRAJECTORY_BSPLIINE_HPP_
3 
9 
10 namespace aikido {
11 namespace trajectory {
12 
14 
15 class BSpline : public Trajectory
17 {
18 public:
22 
39  BSpline(
41  const KnotVectorType& knots,
42  const ControlPointVectorType& controlPoints);
43 
61  BSpline(
63  std::size_t degree,
64  const ControlPointVectorType& controlPoints,
65  double startTime = 0.0,
66  double endTime = 1.0);
67 
80  BSpline(
82  std::size_t degree,
83  std::size_t numControlPoints,
84  double startTime = 0.0,
85  double endTime = 1.0);
86 
90  BSpline(const BSpline& other);
91 
95  BSpline(BSpline&& other);
96 
98  ~BSpline() override;
99 
103  BSpline& operator=(const BSpline& other);
104 
108  BSpline& operator=(BSpline&& other);
109 
111  std::unique_ptr<trajectory::Trajectory> clone() const;
112 
114  std::size_t getDegree() const;
115 
117  std::size_t getOrder() const;
118 
120  std::size_t getNumKnots() const;
121 
123  std::size_t getNumControlPoints() const;
124 
130  void setStartPoint(std::size_t stateSpaceIndex, double value);
131 
136  void setStartPoint(const Eigen::VectorXd& point);
137 
141  void setStartPoint(const statespace::StateSpace::State* state);
142 
148  void setEndPoint(std::size_t stateSpaceIndex, double value);
149 
154  void setEndPoint(const Eigen::VectorXd& point);
155 
159  void setEndPoint(const statespace::StateSpace::State* state);
160 
171  void setControlPoints(
172  std::size_t stateSpaceIndex,
173  const ControlPointVectorType& controlPoints,
174  bool withStartControlPoint = true,
175  bool withEndControlPoint = true);
176 
184  void setControlPoints(
185  std::size_t stateSpaceIndex,
186  double value,
187  bool withStartControlPoint = true,
188  bool withEndControlPoint = true);
189 
196  std::size_t stateSpaceIndex) const;
197 
206  std::size_t stateSpaceIndex,
207  bool withStartControlPoint,
208  bool withEndControlPoint) const;
209 
210  // Documentation inherited.
212 
213  // Documentation inherited.
214  std::size_t getNumDerivatives() const override;
215 
216  // Documentation inherited.
217  double getStartTime() const override;
218 
219  // Documentation inherited.
220  double getEndTime() const override;
221 
222  // Documentation inherited.
223  double getDuration() const override;
224 
225  // Documentation inherited.
226  void evaluate(double t, statespace::StateSpace::State* state) const override;
227 
228  // Documentation inherited.
229  void evaluateDerivative(
230  double t, int derivative, Eigen::VectorXd& tangentVector) const override;
231 
236  virtual double computeArcLength(
237  const distance::DistanceMetric& distanceMetric,
238  double resolution = 0.1) const;
239  // TODO(JS): Consider adding this function to the base class as a pure virtual
240  // function.
241 
242 protected:
244  static std::size_t computeNumKnots(
245  std::size_t degree, std::size_t numControlPoints);
246 
256  std::size_t degree,
257  std::size_t numControlPoints,
258  double startTime = 0.0,
259  double endTime = 1.0);
260 
263 
265  std::vector<SplineType> mSplines;
266 
268  double mStartTime;
269  // This variable can be redundant because the knots in Eigen::Spline encodes
270  // the start time. This variable is for the case of zero dimensional state
271  // space since m1DSpline will be empty in that case.
272 
274  double mEndTime;
275  // This variable can be redundant because the knots in Eigen::Spline encodes
276  // the end time. This variable is for the case of zero dimensional state space
277  // since m1DSpline will be empty in that case.
278 };
279 
280 } // namespace trajectory
281 } // namespace aikido
282 
283 #endif // AIKIDO_TRAJECTORY_BSPLIINE_HPP_
aikido::trajectory::BSpline::setEndPoint
void setEndPoint(std::size_t stateSpaceIndex, double value)
Sets end point of one sub space of the state space.
aikido::trajectory::BSpline::operator=
BSpline & operator=(const BSpline &other)
Copy assignment operator.
aikido::trajectory::BSpline::setControlPoints
void setControlPoints(std::size_t stateSpaceIndex, const ControlPointVectorType &controlPoints, bool withStartControlPoint=true, bool withEndControlPoint=true)
Sets all the control points of one subspace of the state space.
aikido
Format of serialized trajectory in YAML.
Definition: algorithm.hpp:4
aikido::trajectory::BSpline::ControlPointVectorType
typename SplineType::ControlPointVectorType ControlPointVectorType
Definition: BSpline.hpp:21
aikido::trajectory::BSpline::evaluateDerivative
void evaluateDerivative(double t, int derivative, Eigen::VectorXd &tangentVector) const override
Evaluates the derivative of the trajectory at time _t.
aikido::trajectory::BSpline::clone
std::unique_ptr< trajectory::Trajectory > clone() const
Returns a clone of this BSpline.
StateSpace.hpp
aikido::trajectory::BSpline::getStateSpace
statespace::ConstStateSpacePtr getStateSpace() const override
Gets the StateSpace that this trajectory is defined in.
aikido::statespace::ConstStateSpacePtr
std::shared_ptr< const StateSpace > ConstStateSpacePtr
Definition: StateSpace.hpp:15
aikido::trajectory::BSpline::BSpline
BSpline(statespace::ConstStateSpacePtr stateSpace, const KnotVectorType &knots, const ControlPointVectorType &controlPoints)
Constructs BSpline from control points and knots.
aikido::trajectory::BSpline::getNumKnots
std::size_t getNumKnots() const
Returns the number of knots.
BSpline.hpp
aikido::trajectory::BSpline::getEndTime
double getEndTime() const override
Time at which the trajectory ends.
aikido::common::BSpline
Definition: BSpline.hpp:39
aikido::trajectory::BSpline::getDuration
double getDuration() const override
Duration of the trajectory.
aikido::trajectory::BSpline::mSplines
std::vector< SplineType > mSplines
One-demensional splines.
Definition: BSpline.hpp:265
aikido::common::BSpline::KnotVectorType
SplineTraits< BSpline >::KnotVectorType KnotVectorType
The data type used to store knot vectors.
Definition: BSpline.hpp:56
aikido::trajectory::BSpline::getNumControlPoints
std::size_t getNumControlPoints() const
Returns the number of control points.
pointers.hpp
aikido::trajectory::BSpline::mEndTime
double mEndTime
End time of b-spline.
Definition: BSpline.hpp:274
aikido::common::BSpline::ControlPointVectorType
SplineTraits< BSpline >::ControlPointVectorType ControlPointVectorType
The data type representing the spline's control points.
Definition: BSpline.hpp:72
aikido::trajectory::BSpline::computeArcLength
virtual double computeArcLength(const distance::DistanceMetric &distanceMetric, double resolution=0.1) const
Computes arc length.
Trajectory.hpp
aikido::trajectory::BSpline::getNumDerivatives
std::size_t getNumDerivatives() const override
Gets an upper bound on the number of non-zero derivatives available in this parameterization.
aikido::trajectory::BSpline::getControlPoints
const ControlPointVectorType & getControlPoints(std::size_t stateSpaceIndex) const
Returns control points of one subspace of the state space.
aikido::trajectory::BSpline::evaluate
void evaluate(double t, statespace::StateSpace::State *state) const override
Evaluates the state of the trajectory at time _t and store the result in a _state allocated by getSta...
aikido::trajectory::BSpline::computeUniformKnots
static KnotVectorType computeUniformKnots(std::size_t degree, std::size_t numControlPoints, double startTime=0.0, double endTime=1.0)
Computes uniform knots.
aikido::trajectory::BSpline
B-spline trajectory define in a StateSpace.
Definition: BSpline.hpp:16
aikido::trajectory::BSpline::mStateSpace
statespace::ConstStateSpacePtr mStateSpace
State space.
Definition: BSpline.hpp:262
aikido::trajectory::BSpline::KnotVectorType
typename SplineType::KnotVectorType KnotVectorType
Definition: BSpline.hpp:20
DistanceMetric.hpp
aikido::distance::DistanceMetric
Implements a distance metric defined on a StateSpace.
Definition: DistanceMetric.hpp:13
aikido::statespace::StateSpace::State
Definition: StateSpace.hpp:167
aikido::trajectory::BSpline::getStartTime
double getStartTime() const override
Time at which the trajectory starts.
aikido::trajectory::BSpline::mStartTime
double mStartTime
Start time of b-spline.
Definition: BSpline.hpp:268
aikido::trajectory::BSpline::computeNumKnots
static std::size_t computeNumKnots(std::size_t degree, std::size_t numControlPoints)
Computes number of knots given degree and number of control points.
aikido::trajectory::BSpline::getOrder
std::size_t getOrder() const
Returns order of the spline. Order is degree + 1.
aikido::trajectory::BSpline::~BSpline
~BSpline() override
Destructor.
aikido::trajectory::BSpline::getDegree
std::size_t getDegree() const
Returns degree of the spline. Degree is order - 1.
AIKIDO_DECLARE_POINTERS
#define AIKIDO_DECLARE_POINTERS(X)
Definition: pointers.hpp:21
aikido::trajectory::Trajectory
Time-parameterized path in a StateSpace.
Definition: Trajectory.hpp:20
aikido::trajectory::BSpline::setStartPoint
void setStartPoint(std::size_t stateSpaceIndex, double value)
Sets start point of one sub space of the state space.