OpenSim Moco  0.4.0
Public Member Functions | Protected Member Functions | List of all members
OpenSim::MocoOrientationTrackingGoal Class Reference

Description

The squared difference between a model frame's orientation and a reference orientation value, summed over the frames for which a reference is provided, and integrated over the phase.

This can be used to track orientation quantities in the model that don't correspond to model degrees of freedom. The reference can be provided as a trajectory of SimTK::Rotations representing the orientation reference data, or as a states trajectory from which the tracked rotation reference is computed. Both rotation and states references can be provided as a file name to a STO or CSV file (or other file types for which there is a FileAdapter), or programmatically as a TimeSeriesTable_<SimTK::Rotation> (for the rotation reference) or as a scalar TimeSeriesTable (for the states reference).

This cost requires realization to SimTK::Stage::Position. The cost is computed by creating a SimTK::Rotation between the model frame and the reference data, and then converting the rotation to an angle-axis representation and minimizing the angle value. The angle value is equivalent to the orientation error between the model frame and the reference data, so we only need to minimize this single scalar value per tracked frame, compared to other more complicated approaches which could require multiple minimized error values (e.g. Euler angle errors, etc).

Inheritance diagram for OpenSim::MocoOrientationTrackingGoal:
OpenSim::MocoGoal

#include <Moco/Moco/MocoGoal/MocoOrientationTrackingGoal.h>

Public Member Functions

 MocoOrientationTrackingGoal (std::string name)
 
 MocoOrientationTrackingGoal (std::string name, double weight)
 
void setRotationReferenceFile (const std::string &filepath)
 Set the rotations of individual frames in ground to be tracked in the cost. More...
 
void setRotationReference (const TimeSeriesTable_< Rotation > &ref)
 Each column label must be the path of a valid frame path (see seeRotationReferenceFile()). More...
 
void setStatesReference (const TableProcessor &ref)
 Provide a table containing values of model state variables. More...
 
void setFramePaths (const std::vector< std::string > &paths)
 Set the paths to frames in the model that this cost term will track. More...
 
void setWeightForFrame (const std::string &frameName, const double &weight)
 Set the weight for an individual frame's rotation tracking. More...
 
void setWeightSet (const MocoWeightSet &weightSet)
 Provide a MocoWeightSet to weight frame rotation tracking in the cost. More...
 
const TableProcessorgetStatesReference () const
 If no states reference has been provided, this returns an empty processor. More...
 
std::string getRotationReferenceFile () const
 If no rotation reference file has been provided, this returns an empty string. More...
 
- Public Member Functions inherited from OpenSim::MocoGoal
 MocoGoal (std::string name)
 
 MocoGoal (std::string name, double weight)
 
void setEnabled (bool enabled)
 Set whether this goal is used in the problem.
 
bool getEnabled () const
 
void setWeight (double weight)
 In cost mode, the goal is multiplied by this weight. More...
 
double getWeight () const
 
void setMode (std::string mode)
 Set the mode property to either 'cost' or 'endpoint_constraint'. More...
 
std::string getModeAsString () const
 This returns the default mode of the goal, unless the user overrode the default using setMode(). More...
 
Mode getMode () const
 
bool getModeIsCost () const
 
bool getModeIsEndpointConstraint () const
 
Mode getDefaultMode () const
 Types of goals have a class-level default for whether they are enforced as a cost or endpoint constraint. More...
 
bool getSupportsEndpointConstraint () const
 Can this constraint be used in endpoint constraint mode?
 
const MocoConstraintInfogetConstraintInfo () const
 Get bounds for the constraints when using this goal in endpoint constraint mode. More...
 
MocoConstraintInfoupdConstraintInfo ()
 
int getNumOutputs () const
 Get the length of the return value of calcGoal().
 
int getNumIntegrals () const
 Get the number of integrals required by this cost. More...
 
SimTK::Real calcIntegrand (const SimTK::State &state) const
 Calculate the integrand that should be integrated and passed to calcCost(). More...
 
void calcGoal (const GoalInput &input, SimTK::Vector &goal) const
 In cost mode, the returned cost includes the weight, and the elements of the returned vector should be summed by the caller to obtain the total cost. More...
 
void initializeOnModel (const Model &model) const
 For use by solvers. This also performs error checks on the Problem.
 
void printDescription (std::ostream &stream=std::cout) const
 Print the name type and mode of this goal. More...
 

Protected Member Functions

void initializeOnModelImpl (const Model &model) const override
 Perform any caching before the problem is solved. More...
 
void calcIntegrandImpl (const SimTK::State &state, double &integrand) const override
 
void calcGoalImpl (const GoalInput &input, SimTK::Vector &cost) const override
 The Lagrange multipliers for kinematic constraints are not available.
 
void printDescriptionImpl (std::ostream &stream=std::cout) const override
 Print a more detailed description unique to each goal.
 
- Protected Member Functions inherited from OpenSim::MocoGoal
void setNumIntegralsAndOutputs (int numIntegrals, int numOutputs) const
 Set the number of integral terms required by this goal and the length of the vector passed into calcGoalImpl(). More...
 
virtual Mode getDefaultModeImpl () const
 
virtual bool getSupportsEndpointConstraintImpl () const
 
const Model & getModel () const
 For use within virtual function implementations.
 
double calcSystemDisplacement (const SimTK::State &initial, const SimTK::State &final) const
 

Additional Inherited Members

- Public Types inherited from OpenSim::MocoGoal
enum  Mode { Cost, EndpointConstraint }
 

Member Function Documentation

◆ calcIntegrandImpl()

void OpenSim::MocoOrientationTrackingGoal::calcIntegrandImpl ( const SimTK::State &  state,
double &  integrand 
) const
overrideprotectedvirtual
Precondition(s):
The state is realized to SimTK::Stage::Position. If you need access to the controls, you must realize to Velocity:
getModel().realizeVelocity(state);
The Lagrange multipliers for kinematic constraints are not available.

Reimplemented from OpenSim::MocoGoal.

◆ getRotationReferenceFile()

std::string OpenSim::MocoOrientationTrackingGoal::getRotationReferenceFile ( ) const
inline

If no rotation reference file has been provided, this returns an empty string.

◆ getStatesReference()

const TableProcessor& OpenSim::MocoOrientationTrackingGoal::getStatesReference ( ) const
inline

If no states reference has been provided, this returns an empty processor.

◆ initializeOnModelImpl()

void OpenSim::MocoOrientationTrackingGoal::initializeOnModelImpl ( const Model &  ) const
overrideprotectedvirtual

Perform any caching before the problem is solved.

You must override this function and invoke setNumIntegralsAndOutputs().

Precondition(s):
The model is initialized (initSystem()) and getModel() is available. The passed-in model is equivalent to getModel(). Use this opportunity to check for errors in user input.

Implements OpenSim::MocoGoal.

◆ setFramePaths()

void OpenSim::MocoOrientationTrackingGoal::setFramePaths ( const std::vector< std::string > &  paths)
inline

Set the paths to frames in the model that this cost term will track.

The names set here must correspond to OpenSim::Components that derive from OpenSim::Frame, which includes SimTK::Rotation as an output. Replaces the frame path set if it already exists.

◆ setRotationReference()

void OpenSim::MocoOrientationTrackingGoal::setRotationReference ( const TimeSeriesTable_< Rotation > &  ref)
inline

Each column label must be the path of a valid frame path (see seeRotationReferenceFile()).

Calling this function clears the states_reference_file and rotation_reference_file properties or the table provided via setStatesReference(), if any.

◆ setRotationReferenceFile()

void OpenSim::MocoOrientationTrackingGoal::setRotationReferenceFile ( const std::string &  filepath)
inline

Set the rotations of individual frames in ground to be tracked in the cost.

The column labels of the provided reference must be paths to frames in the model, e.g. /bodyset/torso. If the frame_paths property is empty, all frames with data in this reference will be tracked. Otherwise, only the frames specified via setFramePaths() will be tracked. Calling this function clears the values provided via setStatesReference(), setRotationReference(), or the states_reference_file property, if any.

◆ setStatesReference()

void OpenSim::MocoOrientationTrackingGoal::setStatesReference ( const TableProcessor ref)
inline

Provide a table containing values of model state variables.

These data are used to create a StatesTrajectory internally, from which the rotation data for the frames specified in setFramePaths() are computed. Each column label in the reference must be the path of a state variable, e.g., /jointset/ankle_angle_r/value. Calling this function clears the table provided via setRotationReference(), or the rotation_reference_file property, if any. The table is not loaded until the MocoProblem is initialized.

◆ setWeightForFrame()

void OpenSim::MocoOrientationTrackingGoal::setWeightForFrame ( const std::string &  frameName,
const double &  weight 
)
inline

Set the weight for an individual frame's rotation tracking.

If a weight is already set for the requested frame, then the provided weight replaces the previous weight. An exception is thrown if a weight for an unknown frame is provided.

◆ setWeightSet()

void OpenSim::MocoOrientationTrackingGoal::setWeightSet ( const MocoWeightSet weightSet)
inline

Provide a MocoWeightSet to weight frame rotation tracking in the cost.

Replaces the weight set if it already exists.


The documentation for this class was generated from the following file: