Generic CRTP implementation for a task tracking a curve in both position and orientation. This class takes care of much of the logic behind tracking a curve: More...
#include <mc_tasks/SplineTrajectoryTask.h>
Public Types | |
using | SplineTrajectoryBase = SplineTrajectoryTask< Derived > |
using | TrajectoryTask = TrajectoryTaskGeneric |
using | SequenceInterpolator6d = mc_trajectory::SequenceInterpolator< Eigen::Vector6d, mc_trajectory::LinearInterpolation< Eigen::Vector6d > > |
Public Types inherited from mc_tasks::TrajectoryTaskGeneric | |
using | TrajectoryBase = TrajectoryTaskGeneric |
Public Types inherited from mc_tasks::MetaTask | |
using | Backend = mc_solver::QPSolver::Backend |
Public Member Functions | |
SplineTrajectoryTask (const mc_rbdyn::RobotFrame &frame, double duration, double stiffness, double weight, const Eigen::Matrix3d &target, const std::vector< std::pair< double, Eigen::Matrix3d >> &oriWp={}) | |
Constructor. More... | |
void | load (mc_solver::QPSolver &solver, const mc_rtc::Configuration &config) override |
Load parameters from a Configuration object. More... | |
std::function< bool(const mc_tasks::MetaTask &, std::string &)> | buildCompletionCriteria (double dt, const mc_rtc::Configuration &config) const override |
void | oriWaypoints (const std::vector< std::pair< double, Eigen::Matrix3d >> &oriWp) |
Sets the orientation waypoints. More... | |
bool | timeElapsed () const |
Whether the trajectory has finished. More... | |
Eigen::VectorXd | eval () const override |
Returns the transformError between current robot surface pose and its final target. More... | |
virtual Eigen::VectorXd | evalTracking () const |
Returns the trajectory tracking error: transformError between the current robot surface pose and its next desired pose along the trajectory error. More... | |
void | target (const sva::PTransformd &target) |
Sets the curve target pose. Translation target will be handled by the Derived curve, while orientation target is interpolated here. More... | |
const sva::PTransformd | target () const |
Gets the target pose (position/orientation) More... | |
void | displaySamples (unsigned s) |
Number of points to sample on the spline for the gui display. More... | |
unsigned | displaySamples () const |
Number of samples for displaying the spline. More... | |
void | pause (bool paused) |
Allows to pause the task. More... | |
bool | pause () const noexcept |
double | currentTime () const noexcept |
double | duration () const noexcept |
Returns the trajectory's duration. More... | |
Setters for the tasks gains and gain interpolation (dimWeight/Stiffnes/Damping) | |
This task supports two different ways to define gains:
If an interpolation method is present, calling the corresponding dimWeight/stiffness/damping/setGains setter will disable interpolation and set a constant gain. The interpolation setters ensure that gains are interpolated starting from the current (time, gain) values. | |
void | dimWeight (const Eigen::VectorXd &dimW) override |
Sets the dimensional weights (controls the importance of orientation/translation). More... | |
Eigen::VectorXd | dimWeight () const override |
Gets the dimensional weights (orientation/translation) More... | |
void | stiffness (double stiffness) |
Set the task stiffness/damping. More... | |
void | stiffness (const Eigen::VectorXd &stiffness) |
Set dimensional stiffness. More... | |
void | damping (double damping) |
Set the task damping, leaving its stiffness unchanged. More... | |
void | damping (const Eigen::VectorXd &damping) |
Set dimensional damping. More... | |
void | setGains (double stiffness, double damping) |
Set both stiffness and damping. More... | |
void | setGains (const Eigen::VectorXd &stiffness, const Eigen::VectorXd &damping) |
Set dimensional stiffness and damping. More... | |
void | dimWeightInterpolation (const std::vector< std::pair< double, Eigen::Vector6d >> &dimWeights) |
const std::vector< std::pair< double, Eigen::Vector6d > > & | dimWeightInterpolation () const noexcept |
Sets the dimensional weights (controls the importance of orientation/translation). More... | |
void | stiffnessInterpolation (const std::vector< std::pair< double, Eigen::Vector6d >> &stiffnessGains) |
const std::vector< std::pair< double, Eigen::Vector6d > > & | stiffnessInterpolation () const noexcept |
Sets the dimensional weights (controls the importance of orientation/translation). More... | |
void | dampingInterpolation (const std::vector< std::pair< double, Eigen::Vector6d >> &dampingGains) |
const std::vector< std::pair< double, Eigen::Vector6d > > & | dampingInterpolation () const noexcept |
Sets the dimensional weights (controls the importance of orientation/translation). More... | |
void | damping (double damping) |
Set the task damping, leaving its stiffness unchanged. More... | |
void | damping (const Eigen::VectorXd &damping) |
Set dimensional damping. More... | |
double | damping () const |
Get the current task damping. More... | |
void | dimWeight (const Eigen::VectorXd &dimW) override |
Sets the dimensional weights (controls the importance of orientation/translation). More... | |
Eigen::VectorXd | dimWeight () const override |
Sets the dimensional weights (controls the importance of orientation/translation). More... | |
void | stiffness (double stiffness) |
Set the task stiffness/damping. More... | |
void | stiffness (const Eigen::VectorXd &stiffness) |
Set dimensional stiffness. More... | |
double | stiffness () const |
Get the current task stiffness. More... | |
Public Member Functions inherited from mc_tasks::TrajectoryTaskGeneric | |
TrajectoryTaskGeneric (const mc_rbdyn::Robots &robots, unsigned int robotIndex, double stiffness, double weight) | |
Constructor (auto damping) More... | |
TrajectoryTaskGeneric (const mc_rbdyn::RobotFrame &frame, double stiffness, double weight) | |
Constructor (auto damping) More... | |
virtual | ~TrajectoryTaskGeneric ()=default |
void | reset () override |
Reset task target velocity and acceleration to zero. More... | |
void | refVel (const Eigen::VectorXd &vel) |
Set the trajectory reference velocity. More... | |
const Eigen::VectorXd & | refVel () const |
Get the trajectory reference velocity. More... | |
void | refAccel (const Eigen::VectorXd &accel) |
Set the trajectory reference acceleration. More... | |
const Eigen::VectorXd & | refAccel () const |
Get the trajectory reference acceleration. More... | |
void | stiffness (double stiffness) |
Set the task stiffness/damping. More... | |
void | stiffness (const Eigen::VectorXd &stiffness) |
Set dimensional stiffness. More... | |
void | damping (double damping) |
Set the task damping, leaving its stiffness unchanged. More... | |
void | damping (const Eigen::VectorXd &damping) |
Set dimensional damping. More... | |
void | setGains (double stiffness, double damping) |
Set both stiffness and damping. More... | |
void | setGains (const Eigen::VectorXd &stiffness, const Eigen::VectorXd &damping) |
Set dimensional stiffness and damping. More... | |
double | stiffness () const |
Get the current task stiffness. More... | |
double | damping () const |
Get the current task damping. More... | |
const Eigen::VectorXd & | dimStiffness () const |
Get the current task dimensional stiffness. More... | |
const Eigen::VectorXd & | dimDamping () const |
Get the current task dimensional damping. More... | |
void | weight (double w) |
Set the task weight. More... | |
double | weight () const |
Returns the task weight. More... | |
void | dimWeight (const Eigen::VectorXd &dimW) override |
Set the task's dimension weight vector. More... | |
Eigen::VectorXd | dimWeight () const override |
Get the current task's dim weight vector. More... | |
void | selectActiveJoints (const std::vector< std::string > &activeJointsName, const std::map< std::string, std::vector< std::array< int, 2 >>> &activeDofs={}, bool checkJoints=true) |
Create an active joints selector. More... | |
void | selectActiveJoints (mc_solver::QPSolver &solver, const std::vector< std::string > &activeJointsName, const std::map< std::string, std::vector< std::array< int, 2 >>> &activeDofs={}) override |
Create an active joints selector. More... | |
void | selectUnactiveJoints (const std::vector< std::string > &unactiveJointsName, const std::map< std::string, std::vector< std::array< int, 2 >>> &unactiveDofs={}, bool checkJoints=true) |
Create an unactive joints selector. More... | |
void | selectUnactiveJoints (mc_solver::QPSolver &solver, const std::vector< std::string > &unactiveJointsName, const std::map< std::string, std::vector< std::array< int, 2 >>> &unactiveDofs={}) override |
Create an unactive joints selector. More... | |
virtual void | resetJointsSelector () |
void | resetJointsSelector (mc_solver::QPSolver &solver) override |
Reset active joints selection. More... | |
Eigen::VectorXd | eval () const override |
Returns the task error. More... | |
Eigen::VectorXd | speed () const override |
Returns the task velocity. More... | |
const Eigen::VectorXd & | normalAcc () const |
void | load (mc_solver::QPSolver &solver, const mc_rtc::Configuration &config) override |
Load parameters from a Configuration object. More... | |
Public Member Functions inherited from mc_tasks::MetaTask | |
MetaTask () | |
virtual | ~MetaTask () |
const std::string & | type () const |
virtual void | name (const std::string &name) |
const std::string & | name () const |
size_t | iterInSolver () const noexcept |
Get the number of iterations since the task was added to the solver. More... | |
void | resetIterInSolver () noexcept |
Set the number of iterations since the task was added to the solver to zero. More... | |
void | incrementIterInSolver () noexcept |
Increment the number of iterations since the task was added to the solver. More... | |
Backend | backend () const noexcept |
Protected Member Functions | |
void | refPose (const sva::PTransformd &pose) |
Tracks a reference world pose. More... | |
const sva::PTransformd & | refPose () const |
Returns the trajectory reference world pose. More... | |
void | addToGUI (mc_rtc::gui::StateBuilder &gui) override |
Add task controls to the GUI. Interactive controls for the trajectory waypoints and end-endpoints automatically updates the curve. More... | |
void | addToLogger (mc_rtc::Logger &logger) override |
Add information about the task to the logger. More... | |
void | update (mc_solver::QPSolver &) override |
Update trajectory target. More... | |
void | interpolateGains () |
void | refAccel (const Eigen::VectorXd &accel) |
Set the trajectory reference acceleration. More... | |
const Eigen::VectorXd & | refAccel () const |
Get the trajectory reference acceleration. More... | |
void | refVel (const Eigen::VectorXd &vel) |
Set the trajectory reference velocity. More... | |
const Eigen::VectorXd & | refVel () const |
Get the trajectory reference velocity. More... | |
Protected Member Functions inherited from mc_tasks::TrajectoryTaskGeneric | |
template<Backend backend, typename ErrorT , typename... Args> | |
void | finalize (Args &&... args) |
void | addToGUI (mc_rtc::gui::StateBuilder &) override |
void | addToLogger (mc_rtc::Logger &logger) override |
std::function< bool(const mc_tasks::MetaTask &task, std::string &)> | buildCompletionCriteria (double dt, const mc_rtc::Configuration &config) const override |
void | addToSolver (mc_solver::QPSolver &solver) override |
Add the task to a solver. More... | |
void | removeFromSolver (mc_solver::QPSolver &solver) override |
Remove the task from a solver. More... | |
void | update (mc_solver::QPSolver &) override |
Update the task. More... | |
Protected Member Functions inherited from mc_tasks::MetaTask | |
virtual void | removeFromLogger (mc_rtc::Logger &) |
virtual void | removeFromGUI (mc_rtc::gui::StateBuilder &) |
Protected Attributes | |
mc_rbdyn::ConstRobotFramePtr | frame_ |
double | duration_ = 0 |
mc_trajectory::InterpolatedRotation | oriSpline_ |
SequenceInterpolator6d | dimWeightInterpolator_ |
SequenceInterpolator6d | stiffnessInterpolator_ |
SequenceInterpolator6d | dampingInterpolator_ |
bool | paused_ = false |
double | currTime_ = 0. |
unsigned | samples_ = 20 |
bool | inSolver_ = false |
Protected Attributes inherited from mc_tasks::TrajectoryTaskGeneric | |
const mc_rbdyn::Robots & | robots |
unsigned int | rIndex |
mc_rtc::void_ptr | errorT {nullptr, nullptr} |
Eigen::VectorXd | refVel_ |
Eigen::VectorXd | refAccel_ |
bool | inSolver_ = false |
mc_rtc::void_ptr | trajectoryT_ {nullptr, nullptr} |
Eigen::VectorXd | stiffness_ |
Eigen::VectorXd | damping_ |
double | weight_ |
mc_rtc::void_ptr | selectorT_ {nullptr, nullptr} |
Protected Attributes inherited from mc_tasks::MetaTask | |
Backend | backend_ |
std::string | type_ |
std::string | name_ |
size_t | iterInSolver_ = 0 |
Additional Inherited Members | |
Static Protected Member Functions inherited from mc_tasks::MetaTask | |
static void | addToSolver (MetaTask &t, mc_solver::QPSolver &solver) |
static void | removeFromSolver (MetaTask &t, mc_solver::QPSolver &solver) |
static void | update (MetaTask &t, mc_solver::QPSolver &solver) |
static void | addToLogger (MetaTask &t, mc_rtc::Logger &logger) |
static void | removeFromLogger (MetaTask &t, mc_rtc::Logger &logger) |
static void | addToGUI (MetaTask &t, mc_rtc::gui::StateBuilder &gui) |
static void | removeFromGUI (MetaTask &t, mc_rtc::gui::StateBuilder &gui) |
static void | ensureHasJoints (const mc_rbdyn::Robot &robot, const std::vector< std::string > &joints, const std::string &prefix) |
Generic CRTP implementation for a task tracking a curve in both position and orientation. This class takes care of much of the logic behind tracking a curve:
To implement tracking of a new curve, simply derive from this class and implement the functionalites specific to the curve. You need to at least implement:
using mc_tasks::SplineTrajectoryTask< Derived >::SequenceInterpolator6d = mc_trajectory::SequenceInterpolator<Eigen::Vector6d, mc_trajectory::LinearInterpolation<Eigen::Vector6d> > |
using mc_tasks::SplineTrajectoryTask< Derived >::SplineTrajectoryBase = SplineTrajectoryTask<Derived> |
using mc_tasks::SplineTrajectoryTask< Derived >::TrajectoryTask = TrajectoryTaskGeneric |
mc_tasks::SplineTrajectoryTask< Derived >::SplineTrajectoryTask | ( | const mc_rbdyn::RobotFrame & | frame, |
double | duration, | ||
double | stiffness, | ||
double | weight, | ||
const Eigen::Matrix3d & | target, | ||
const std::vector< std::pair< double, Eigen::Matrix3d >> & | oriWp = {} |
||
) |
Constructor.
frame | Control frame |
duration | Length of the motion |
stiffness | Task stiffness |
weight | Task weight |
target | Target orientation |
oriWp | Optional orientation waypoints (pairs of [time, orientation]) |
|
overrideprotectedvirtual |
Add task controls to the GUI. Interactive controls for the trajectory waypoints and end-endpoints automatically updates the curve.
Reimplemented from mc_tasks::MetaTask.
|
overrideprotectedvirtual |
Add information about the task to the logger.
logger |
Reimplemented from mc_tasks::MetaTask.
|
overridevirtual |
Add support for the following entries
if | the surface does not have an associated force sensor |
Reimplemented from mc_tasks::MetaTask.
|
inlinenoexcept |
Returns the current time along the trajectory
double mc_tasks::TrajectoryTaskGeneric::damping |
Get the current task damping.
void mc_tasks::TrajectoryTaskGeneric::damping |
Set dimensional damping.
The caller should be sure that the dimension of the vector fits the task dimension.
damping | Dimensional damping |
void mc_tasks::SplineTrajectoryTask< Derived >::damping | ( | const Eigen::VectorXd & | damping | ) |
void mc_tasks::TrajectoryTaskGeneric::damping |
Set the task damping, leaving its stiffness unchanged.
damping | Task stiffness |
void mc_tasks::SplineTrajectoryTask< Derived >::damping | ( | double | damping | ) |
Set the task damping, leaving its stiffness unchanged.
damping | Task stiffness |
|
inlinenoexcept |
Sets the dimensional weights (controls the importance of orientation/translation).
if | dimW is not a Vector6d |
dimW | Weights expressed as a Vector6d [wx, wy, wz, tx, ty, tz] |
void mc_tasks::SplineTrajectoryTask< Derived >::dampingInterpolation | ( | const std::vector< std::pair< double, Eigen::Vector6d >> & | dampingGains | ) |
Interpolate the dimensional damping between the provided values
dampingGains | Pairs of [time, dimensional gain]. Must be strictly ordered by ascending time, and time > currentTime() |
std::runtime_error | If dampingGains is not meeting the requirements |
|
override |
Sets the dimensional weights (controls the importance of orientation/translation).
if | dimW is not a Vector6d |
dimW | Weights expressed as a Vector6d [wx, wy, wz, tx, ty, tz] |
|
overridevirtual |
Gets the dimensional weights (orientation/translation)
Implements mc_tasks::MetaTask.
|
override |
Sets the dimensional weights (controls the importance of orientation/translation).
if | dimW is not a Vector6d |
dimW | Weights expressed as a Vector6d [wx, wy, wz, tx, ty, tz] |
|
overridevirtual |
Sets the dimensional weights (controls the importance of orientation/translation).
if | dimW is not a Vector6d |
dimW | Weights expressed as a Vector6d [wx, wy, wz, tx, ty, tz] |
Implements mc_tasks::MetaTask.
|
inlinenoexcept |
Sets the dimensional weights (controls the importance of orientation/translation).
if | dimW is not a Vector6d |
dimW | Weights expressed as a Vector6d [wx, wy, wz, tx, ty, tz] |
void mc_tasks::SplineTrajectoryTask< Derived >::dimWeightInterpolation | ( | const std::vector< std::pair< double, Eigen::Vector6d >> & | dimWeights | ) |
Interpolate the dimensional weight between the specified values
dimWeights | Pairs of [time, dimensional gain], strictly ordered by ascending time. |
std::runtime_error | If dimWeights is not meeting the requirements |
unsigned mc_tasks::SplineTrajectoryTask< Derived >::displaySamples | ( | ) | const |
Number of samples for displaying the spline.
void mc_tasks::SplineTrajectoryTask< Derived >::displaySamples | ( | unsigned | s | ) |
Number of points to sample on the spline for the gui display.
s | number of samples |
|
inlinenoexcept |
Returns the trajectory's duration.
|
overridevirtual |
Returns the transformError between current robot surface pose and its final target.
Implements mc_tasks::MetaTask.
|
virtual |
Returns the trajectory tracking error: transformError between the current robot surface pose and its next desired pose along the trajectory error.
|
protected |
Interpolate dimWeight, stiffness, damping
|
overridevirtual |
Load parameters from a Configuration object.
Reimplemented from mc_tasks::MetaTask.
void mc_tasks::SplineTrajectoryTask< Derived >::oriWaypoints | ( | const std::vector< std::pair< double, Eigen::Matrix3d >> & | oriWp | ) |
Sets the orientation waypoints.
oriWp | Orientation waypoints defined as pairs of [time, orientation] |
|
inlinenoexcept |
True when the task is paused
|
inline |
Allows to pause the task.
This feature is mainly intended to allow starting the task in paused state to allow adjusting the parameters of the trajectory before its execution. Use with care in other contexts.
paused | True to pause the task, False to resume. |
|
protected |
Get the trajectory reference acceleration.
|
protected |
Set the trajectory reference acceleration.
accel | New reference acceleration |
|
protected |
Returns the trajectory reference world pose.
|
protected |
Tracks a reference world pose.
pose | Desired position (world) |
|
protected |
Get the trajectory reference velocity.
|
protected |
Set the trajectory reference velocity.
vel | New reference velocity |
void mc_tasks::SplineTrajectoryTask< Derived >::setGains | ( | const Eigen::VectorXd & | stiffness, |
const Eigen::VectorXd & | damping | ||
) |
void mc_tasks::SplineTrajectoryTask< Derived >::setGains | ( | double | stiffness, |
double | damping | ||
) |
Set both stiffness and damping.
stiffness | Task stiffness |
damping | Task damping |
double mc_tasks::TrajectoryTaskGeneric::stiffness |
Get the current task stiffness.
void mc_tasks::TrajectoryTaskGeneric::stiffness |
Set dimensional stiffness.
The caller should be sure that the dimension of the vector fits the task dimension.
Damping is automatically set to 2*sqrt(stiffness)
stiffness | Dimensional stiffness |
void mc_tasks::SplineTrajectoryTask< Derived >::stiffness | ( | const Eigen::VectorXd & | stiffness | ) |
void mc_tasks::TrajectoryTaskGeneric::stiffness |
Set the task stiffness/damping.
Damping is automatically set to 2*sqrt(stiffness)
stiffness | Task stiffness |
void mc_tasks::SplineTrajectoryTask< Derived >::stiffness | ( | double | stiffness | ) |
Set the task stiffness/damping.
Damping is automatically set to 2*sqrt(stiffness)
stiffness | Task stiffness |
|
inlinenoexcept |
Sets the dimensional weights (controls the importance of orientation/translation).
if | dimW is not a Vector6d |
dimW | Weights expressed as a Vector6d [wx, wy, wz, tx, ty, tz] |
void mc_tasks::SplineTrajectoryTask< Derived >::stiffnessInterpolation | ( | const std::vector< std::pair< double, Eigen::Vector6d >> & | stiffnessGains | ) |
Interpolate the stiffness between the provided values
stiffnessGains | Pairs of [time, dimensional gain], strictly ordered by ascending time. |
std::runtime_error | If stiffnessGains is not meeting the requirements |
const sva::PTransformd mc_tasks::SplineTrajectoryTask< Derived >::target | ( | ) | const |
Gets the target pose (position/orientation)
void mc_tasks::SplineTrajectoryTask< Derived >::target | ( | const sva::PTransformd & | target | ) |
Sets the curve target pose. Translation target will be handled by the Derived curve, while orientation target is interpolated here.
target | Target pose for the curve |
bool mc_tasks::SplineTrajectoryTask< Derived >::timeElapsed | ( | ) | const |
Whether the trajectory has finished.
|
overrideprotectedvirtual |
Update trajectory target.
Implements mc_tasks::MetaTask.
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |