roboptim::CubicBSpline Class Reference

Cubic B-Spline trajectory. More...

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

+ Inheritance diagram for roboptim::CubicBSpline:

List of all members.

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.
 CubicBSpline (const CubicBSpline &spline) throw ()
 Copy constructor.
virtual ~CubicBSpline () throw ()
virtual void setParameters (const vector_t &) throw ()
 Modify spline parameters.
virtual jacobian_t variationConfigWrtParam (double t) const throw ()
 Get the variation of a configuration with respect to parameter vector.
virtual jacobian_t variationDerivWrtParam (double t, size_type order) const throw ()
 Get the variation of a derivative with respect to parameter vector.
virtual value_type singularPointAtRank (size_type rank) const
 Get singular point at given rank.
virtual vector_t derivBeforeSingularPoint (size_type rank, size_type order) const
 Get left limit value of derivative at given singular point.
virtual vector_t derivAfterSingularPoint (size_type rank, size_type order) const
 Get right limit value of derivative at given singular point.
virtual Trajectory
< derivabilityOrder > * 
resize (interval_t timeRange) const throw ()
 Clone and resize a trajectory.
virtual std::ostream & print (std::ostream &o) const throw ()
 Display the function on the specified output stream.
jacobian_t variationConfigWrtParam (StableTimePoint tp) const throw ()
jacobian_t variationDerivWrtParam (StableTimePoint tp, size_type order) const throw ()

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

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

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().

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().

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 () [protected, virtual]
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 () [inline, virtual]

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().

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::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 >.