本文整理汇总了C++中Actuator::setForce方法的典型用法代码示例。如果您正苦于以下问题:C++ Actuator::setForce方法的具体用法?C++ Actuator::setForce怎么用?C++ Actuator::setForce使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Actuator
的用法示例。
在下文中一共展示了Actuator::setForce方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: lu
/**
* This method is called at the beginning of an analysis so that any
* necessary initializations may be performed.
*
* This method should be overriden in the child class. It is
* included here so that the child class will not have to implement it if it
* is not necessary.
*
* @param s state of system
*
* @return -1 on error, 0 otherwise.
*/
int InverseDynamics::
begin(SimTK::State& s )
{
if(!proceed()) return(0);
SimTK::Matrix massMatrix;
_model->getMatterSubsystem().calcM(s, massMatrix);
//massMatrix.dump("mass matrix is:");
// Check that m is full rank
try {
SimTK::FactorLU lu(massMatrix);
} catch (const SimTK::Exception::Base&) {
throw Exception("InverseDynamics: ERROR- mass matrix is singular ",__FILE__,__LINE__);
}
// enable the line below when simmath is fixed
//bool singularMassMatrix = lu.isSingular();
//cout << "Mass matrix is " << (singularMassMatrix?"singular":"Non-singular");
// Make a working copy of the model
delete _modelWorkingCopy;
_modelWorkingCopy = _model->clone();
_modelWorkingCopy->updAnalysisSet().setSize(0);
//_modelWorkingCopy = _model->clone();
//_modelWorkingCopy = new Model(*_model);
// Replace model force set with only generalized forces
if(_model) {
SimTK::State& sWorkingCopyTemp = _modelWorkingCopy->initSystem();
// Update the _forceSet we'll be computing inverse dynamics for
if(_ownsForceSet) delete _forceSet;
if(_useModelForceSet) {
// Set pointer to model's internal force set
_forceSet = &_modelWorkingCopy->updForceSet();
_numCoordinateActuators = _modelWorkingCopy->getActuators().getSize();
} else {
ForceSet& as = _modelWorkingCopy->updForceSet();
// Keep a copy of forces that are not muscles to restore them back.
ForceSet* saveForces = as.clone();
// Generate an force set consisting of a coordinate actuator for every unconstrained degree of freedom
_forceSet = CoordinateActuator::CreateForceSetOfCoordinateActuatorsForModel(sWorkingCopyTemp,*_modelWorkingCopy,1,false);
_numCoordinateActuators = _forceSet->getSize();
// Copy whatever forces that are not muscles back into the model
for(int i=0; i<saveForces->getSize(); i++){
const Force& f=saveForces->get(i);
if ((dynamic_cast<const Muscle*>(&saveForces->get(i)))==NULL)
as.append(saveForces->get(i).clone());
}
}
_modelWorkingCopy->setAllControllersEnabled(false);
_ownsForceSet = false;
SimTK::State& sWorkingCopy = _modelWorkingCopy->initSystem();
// Gather indices into speed set corresponding to the unconstrained degrees of freedom (for which we will set acceleration constraints)
_accelerationIndices.setSize(0);
const CoordinateSet& coordSet = _model->getCoordinateSet();
for(int i=0; i<coordSet.getSize(); i++) {
const Coordinate& coord = coordSet.get(i);
if(!coord.isConstrained(sWorkingCopy)) {
_accelerationIndices.append(i);
}
}
_dydt.setSize(_modelWorkingCopy->getNumCoordinates() + _modelWorkingCopy->getNumSpeeds());
int nf = _numCoordinateActuators;
int nacc = _accelerationIndices.getSize();
if(nf < nacc)
throw(Exception("InverseDynamics: ERROR- overconstrained system -- need at least as many forces as there are degrees of freedom.\n"));
// Realize to velocity in case there are any velocity dependent forces
_modelWorkingCopy->getMultibodySystem().realize(sWorkingCopy, SimTK::Stage::Velocity);
_constraintMatrix.resize(nacc,nf);
_constraintVector.resize(nacc);
_performanceMatrix.resize(nf,nf);
_performanceMatrix = 0;
for(int i=0,j=0; i<nf; i++) {
Actuator* act = dynamic_cast<Actuator*>(&_forceSet->get(i));
if( act ) {
act->setForce(sWorkingCopy,1);
_performanceMatrix(j,j) = act->getStress(sWorkingCopy);
j++;
//.........这里部分代码省略.........