roboptim::CubicBSpline Class Reference

Cubic B-Spline trajectory. More...

#include <roboptim/trajectory/cubic-b-spline.hh>

+ Inheritance diagram for roboptim::CubicBSpline:

Public Member Functions

 CubicBSpline (interval_t timeRange, size_type dimension, const vector_t &parameters, const std::string name="cubic B-Spline") throw ()
 Instantiate a cubic B-Spline from its definition. More...
 
 CubicBSpline (const CubicBSpline &spline) throw ()
 Copy constructor. More...
 
virtual ~CubicBSpline () throw ()
 
virtual void setParameters (const vector_t &) throw ()
 Modify spline parameters. More...
 
virtual jacobian_t variationConfigWrtParam (double t) const throw ()
 Get the variation of a configuration with respect to parameter vector. More...
 
virtual jacobian_t variationDerivWrtParam (double t, size_type order) const throw ()
 Get the variation of a derivative with respect to parameter vector. More...
 
virtual value_type singularPointAtRank (size_type rank) const
 Get singular point at given rank. More...
 
virtual vector_t derivBeforeSingularPoint (size_type rank, size_type order) const
 Get left limit value of derivative at given singular point. More...
 
virtual vector_t derivAfterSingularPoint (size_type rank, size_type order) const
 Get right limit value of derivative at given singular point. More...
 
virtual Trajectory
< derivabilityOrder > * 
resize (interval_t timeRange) const throw ()
 Clone and resize a trajectory. More...
 
virtual std::ostream & print (std::ostream &o) const throw ()
 Display the function on the specified output stream. More...
 
jacobian_t variationConfigWrtParam (StableTimePoint tp) const throw ()
 
jacobian_t variationDerivWrtParam (StableTimePoint tp, size_type order) const throw ()
 
- Public Member Functions inherited from roboptim::Trajectory< 3 >
virtual ~Trajectory () throw ()
 
result_t operator() (StableTimePoint argument) const throw ()
 
void operator() (result_t &result, StableTimePoint argument) const throw ()
 
gradient_t derivative (StableTimePoint argument, size_type order=1) const throw ()
 
void derivative (gradient_t &derivative, StableTimePoint argument, size_type order=1) const throw ()
 
bool isValidTime (value_type t) const throw ()
 
virtual void normalizeAngles (size_type index) throw ()
 Normalize angles in parameters array. More...
 
virtual Trajectory
< DerivabilityOrder > * 
clone () const =0 throw ()
 
const vector_tparameters () const throw ()
 
interval_t timeRange () const throw ()
 
value_type length () const throw ()
 
virtual vector_t state (double t, size_type order) const throw ()
 Get state along trajectory. More...
 
virtual vector_t state (StableTimePoint t, size_type order) const throw ()
 
jacobian_t variationStateWrtParam (double t, size_type order) const throw ()
 Get the variation of the state with respect to parameter vector. More...
 
jacobian_t variationStateWrtParam (StableTimePoint stp, size_type order) const throw ()
 
size_type singularPoints () const throw ()
 Get number of singular points. More...
 

Protected Member Functions

void impl_compute (result_t &, double) const throw ()
 
void impl_derivative (gradient_t &g, double x, size_type order) const throw ()
 
void impl_derivative (gradient_t &g, StableTimePoint, size_type order) const throw ()
 
value_type Dt () const
 
size_type interval (value_type t) const
 
vector_t basisFunctions (value_type t, size_type order) const
 
- Protected Member Functions inherited from roboptim::Trajectory< 3 >
virtual void normalizeAngles (size_type index, size_type offset) throw ()
 Internal version of normalizeAngles allowing an optional offset. More...
 
void impl_compute (result_t &, StableTimePoint) const throw ()
 
 Trajectory (interval_t, size_type, const vector_t &, std::string name=std::string()) throw ()
 

Additional Inherited Members

- Public Types inherited from roboptim::Trajectory< 3 >
typedef
NTimesDerivableFunction
< DerivabilityOrder > 
parent_t
 Parent type. More...
 
typedef parent_t::value_type value_type
 Import value type. More...
 
typedef parent_t::size_type size_type
 Import size type. More...
 
typedef parent_t::vector_t vector_t
 Import vector type. More...
 
typedef parent_t::result_t result_t
 Import result type. More...
 
typedef parent_t::gradient_t gradient_t
 Import gradient type. More...
 
typedef parent_t::jacobian_t jacobian_t
 Import jacobian type. More...
 
typedef parent_t::interval_t interval_t
 Import interval type. More...
 
- Protected Attributes inherited from roboptim::Trajectory< 3 >
interval_t timeRange_
 
vector_t parameters_
 
size_type singularPoints_
 

Detailed Description

Cubic B-Spline trajectory.

Implement a B-Spline as a trajectory as described below: given

  • a number $m\geq 4$ of control points,
  • regularly spaced time points: $t_0 < t_1 < \cdots < t_{m}$, $\forall i\in\{0,...,m-1\}$, $t_{i+1}-t_i = \Delta t$
  • $m$ control points $ P_0,\cdots, P_{m-1}$ in $\textbf{R}^n$ , the cubic B-spline of control points $P_0,\cdots, P_{m-1}$ is defined over $[t_3,t_{m}]$ by

    \[ B(t) = \sum_{i=0}^{m-1} P_i b_{i,3}(t) \]

    where basis functions $b_{i,3}$ are defined by:

    \begin{eqnarray*} b_{i,3}(t)=& \frac{(t-t_i)^3}{6\Delta t^3} & \mbox{ if } t_{i} \leq t < t_{i+1} \\ & \frac{(t-t_i)^2(t_{i+2}-t)+(t-t_i)(t_{i+3}-t)(t-t_{i+1})+(t_{i+4}-t)(t-t_{i+1})^2}{6\Delta t^3}& \mbox{ if } t_{i+1} \leq t < t_{i+2} \\ & \frac{(t-t_i)(t_{i+3}-t)^2+(t_{i+4}-t)(t-t_{i+1})(t_{i+3}-t)+(t_{i+4}-t)^2(t-t_{i+2})}{6\Delta t^3}& \mbox{ if } t_{i+2} \leq t < t_{i+3} \\ & \frac{(t_{i+4}-t)^3}{6\Delta t^3}& \mbox{ if } t_{i+3} \leq t < t_{i+4} \end{eqnarray*}

Examples:
spline-optimization.cc, and spline-time-optimization.cc.

Constructor & Destructor Documentation

roboptim::CubicBSpline::CubicBSpline ( interval_t  timeRange,
size_type  dimension,
const vector_t parameters,
const std::string  name = "cubic B-Spline" 
)
throw (
)

Instantiate a cubic B-Spline from its definition.

Parameters
timeRangespline time range: $ $[t_3,t_n]$
dimensionspline dimension: $n$
parametersvector of parameters defining control points
namefunction title

Number of control points is inferred from dimension of dimenion of parameter vector.

Referenced by resize().

roboptim::CubicBSpline::CubicBSpline ( const CubicBSpline spline)
throw (
)

Copy constructor.

Parameters
splinespline that will be copied
roboptim::CubicBSpline::~CubicBSpline ( )
throw (
)
virtual

Member Function Documentation

CubicBSpline::vector_t roboptim::CubicBSpline::basisFunctions ( value_type  t,
size_type  order 
) const
protected
CubicBSpline::vector_t roboptim::CubicBSpline::derivAfterSingularPoint ( size_type  rank,
size_type  order 
) const
virtual

Get right limit value of derivative at given singular point.

Parameters
rankrank of the singular points.
orderorder of derivation.
Return values
derivativeLimit of the derivative at singular point for decreasing parameter values.

Implements roboptim::Trajectory< 3 >.

References roboptim::Trajectory< 3 >::derivative(), and singularPointAtRank().

CubicBSpline::vector_t roboptim::CubicBSpline::derivBeforeSingularPoint ( size_type  rank,
size_type  order 
) const
virtual

Get left limit value of derivative at given singular point.

Parameters
rankrank of the singular points.
orderorder of derivation.
Returns
Limit of the derivative at singular point for increasing parameter values.

Implements roboptim::Trajectory< 3 >.

References roboptim::Trajectory< 3 >::derivative(), and singularPointAtRank().

CubicBSpline::value_type roboptim::CubicBSpline::Dt ( ) const
protected
void roboptim::CubicBSpline::impl_compute ( result_t derivative,
double  t 
) const
throw (
)
protected
void roboptim::CubicBSpline::impl_derivative ( gradient_t g,
double  x,
size_type  order 
) const
throw (
)
protected
void roboptim::CubicBSpline::impl_derivative ( gradient_t g,
StableTimePoint  stp,
size_type  order 
) const
throw (
)
protectedvirtual
CubicBSpline::size_type roboptim::CubicBSpline::interval ( value_type  t) const
protected
std::ostream & roboptim::CubicBSpline::print ( std::ostream &  o) const
throw (
)
virtual

Display the function on the specified output stream.

Parameters
ooutput stream used for display
Returns
output stream

Reimplemented from roboptim::Trajectory< 3 >.

virtual Trajectory<derivabilityOrder>* roboptim::CubicBSpline::resize ( interval_t  timeRange) const
throw (
)
inlinevirtual

Clone and resize a trajectory.

Implements roboptim::Trajectory< 3 >.

References CubicBSpline().

void roboptim::CubicBSpline::setParameters ( const vector_t p)
throw (
)
virtual

Modify spline parameters.

Reimplemented from roboptim::Trajectory< 3 >.

Referenced by roboptim::SplineLength::impl_compute(), and roboptim::SplineLength::impl_gradient().

CubicBSpline::value_type roboptim::CubicBSpline::singularPointAtRank ( size_type  rank) const
virtual

Get singular point at given rank.

Implements roboptim::Trajectory< 3 >.

References roboptim::Trajectory< 3 >::length().

Referenced by derivAfterSingularPoint(), and derivBeforeSingularPoint().

CubicBSpline::jacobian_t roboptim::CubicBSpline::variationConfigWrtParam ( double  t) const
throw (
)
virtual

Get the variation of a configuration with respect to parameter vector.

Parameters
tvalue $t$ in the definition interval.
Returns
Jacobian:

\[\frac{\partial\Gamma_{\textbf{p}}(t)}{\partial\textbf{p}}\]

Implements roboptim::Trajectory< 3 >.

Examples:
spline-optimization.cc.
CubicBSpline::jacobian_t roboptim::CubicBSpline::variationConfigWrtParam ( StableTimePoint  tp) const
throw (
)
virtual
CubicBSpline::jacobian_t roboptim::CubicBSpline::variationDerivWrtParam ( double  t,
size_type  order 
) const
throw (
)
virtual

Get the variation of a derivative with respect to parameter vector.

Parameters
tvalue $t$ in the definition interval.
orderorder $r$ of the derivative.
Returns
jacobian

\[ \frac{\partial}{\partial\textbf{p}} \left(\frac{d^r\Gamma_{\textbf{p}}}{dt^r}(t)\right) \]

Implements roboptim::Trajectory< 3 >.

CubicBSpline::jacobian_t roboptim::CubicBSpline::variationDerivWrtParam ( StableTimePoint  tp,
size_type  order 
) const
throw (
)
virtual