Ejemplo n.º 1
0
Controller::Controller(dart::dynamics::Skeleton* _skel,
                       dart::constraint::ConstraintDynamics* _collisionHandle,
                       double _t) {
  mSkel = _skel;
  mCollisionHandle = _collisionHandle;
  mTimestep = _t;
  mFrame = 0;
  int nDof = mSkel->getNumGenCoords();
  mKp = Eigen::MatrixXd::Identity(nDof, nDof);
  mKd = Eigen::MatrixXd::Identity(nDof, nDof);
  mConstrForces = Eigen::VectorXd::Zero(nDof);

  mTorques.resize(nDof);
  mDesiredDofs.resize(nDof);
  for (int i = 0; i < nDof; i++) {
    mTorques[i] = 0.0;
    mDesiredDofs[i] = mSkel->getGenCoord(i)->getConfig();
  }

  // using SPD results in simple Kp coefficients
  for (int i = 0; i < 6; i++) {
    mKp(i, i) = 0.0;
    mKd(i, i) = 0.0;
  }
  for (int i = 6; i < 22; i++)
    mKp(i, i) = 200.0;  // lower body + lower back
  for (int i = 22; i < nDof; i++)
    mKp(i, i) = 20.0;
  for (int i = 6; i < 22; i++)
    mKd(i, i) = 100.0;
  for (int i = 22; i < nDof; i++)
    mKd(i, i) = 10.0;

  mPreOffset = 0.0;
}
Ejemplo n.º 2
0
Controller::Controller(dart::dynamics::SkeletonPtr _skel, double _t)
{
  mSkel = _skel;
  mLeftHeel = _skel->getBodyNode("h_heel_left");

  mLeftFoot[0] = _skel->getDof("j_heel_left_1")->getIndexInSkeleton();
  mLeftFoot[1] = _skel->getDof("j_toe_left")->getIndexInSkeleton();

  mRightFoot[0] = _skel->getDof("j_heel_right_1")->getIndexInSkeleton();
  mRightFoot[1] = _skel->getDof("j_toe_right")->getIndexInSkeleton();

  mTimestep = _t;
  mFrame = 0;
  int nDof = mSkel->getNumDofs();
  mKp = Eigen::MatrixXd::Identity(nDof, nDof);
  mKd = Eigen::MatrixXd::Identity(nDof, nDof);

  mTorques.resize(nDof);
  mTorques.setZero();

  mDesiredDofs = mSkel->getPositions();

  // using SPD results in simple Kp coefficients
  for (int i = 0; i < 6; i++)
  {
    mKp(i, i) = 0.0;
    mKd(i, i) = 0.0;
  }
  for (int i = 6; i < nDof; i++)
    mKp(i, i) = 400.0;
  for (int i = 6; i < nDof; i++)
    mKd(i, i) = 40.0;

  mPreOffset = 0.0;
}
Ejemplo n.º 3
0
Controller::Controller(dart::dynamics::Skeleton* _skel, dart::constraint::ConstraintSolver* _constrSolver, double _t, 
        dart::simulation::World* world) {
  prevXSet = false;
  bentAbdomen = false;
  mSkel = _skel;
  mConstraintSolver = _constrSolver;
  mTimestep = _t;

  int nDof = mSkel->getNumDofs();
  mKp = Eigen::MatrixXd::Identity(nDof, nDof);
  mKd = Eigen::MatrixXd::Identity(nDof, nDof);
  mTorques.resize(nDof);
  mDefaultPose.resize(nDof);
  mDesiredDofs.resize(nDof);

  // Set the barPositions

  if(world->getSkeleton("bar4")){
      numBars = 4;
      barPositions = new Eigen::Vector3d[4];
      barPositions[0] = world->getSkeleton("bar1")->getWorldCOM();
      barPositions[1] = world->getSkeleton("bar2")->getWorldCOM();
      barPositions[2] = world->getSkeleton("bar3")->getWorldCOM();
      barPositions[3] = world->getSkeleton("bar4")->getWorldCOM();
  }
  else if(world->getSkeleton("bar3")){
      numBars = 3;
      barPositions = new Eigen::Vector3d[3];
      barPositions[0] = world->getSkeleton("bar1")->getWorldCOM();
      barPositions[1] = world->getSkeleton("bar2")->getWorldCOM();
      barPositions[2] = world->getSkeleton("bar3")->getWorldCOM();
  }
  else if(world->getSkeleton("bar2")){
      numBars = 2;
      barPositions = new Eigen::Vector3d[2];
      barPositions[0] = world->getSkeleton("bar1")->getWorldCOM();
      barPositions[1] = world->getSkeleton("bar2")->getWorldCOM();
  }
  else{
      numBars = 1;
      barPositions = new Eigen::Vector3d[1];
      barPositions[0] = world->getSkeleton("bar1")->getWorldCOM();
  }

  handDiffZ = fabs(mSkel->getBodyNode("h_hand_left")->getWorldCOM()[2] 
                - mSkel->getBodyNode("h_hand_right")->getWorldCOM()[2]); 

  std::cout << "handDiffZ = " << handDiffZ << std::endl;
  for (int i = 0; i < numBars; i++){
      std::cout << "Bar WORLD COM " << i << std::endl;
      std::cout << barPositions[i].transpose() << std::endl;
  }


  // Set default pose as the initial pose when the controller is instantiated
  mDefaultPose = mSkel->getPositions();
  mDesiredDofs = mDefaultPose;

  std::cout << "mDesiredDofs" << std::endl;
  std::cout << mDesiredDofs.transpose() << std::endl;

  std::cout << "numBars" << std::endl;
  std::cout << numBars << std::endl;
  
  mTorques.setZero();

  // Using SPD results in simple spring coefficients
  for (int i = 0; i < 6; i++) {
    mKp(i, i) = 0.0;
    mKd(i, i) = 0.0;
  }
  for (int i = 6; i < 35; i++)
    mKp(i, i) = 400.0;
  for (int i = 6; i < 35; i++)
    mKd(i, i) = 40.0;

  // Make shoulders and elbows loose
  for (int i = 27; i < 35; i++) {
    //mKp(i, i) = 20.0;
    //mKd(i, i) = 2.0;
    mKp(i, i) = 10.0;
    mKd(i, i) = 1.0;
  }

  // Make wrists even looser
  for (int i = 35; i < 39; i++) {
    mKp(i, i) = 1.0;
    mKd(i, i) = 0.1;
  }

  mPreOffset = 0.0;
  mLeftHandHold = NULL;
  mRightHandHold = NULL;
  mFootContact = NULL;
  mLeftHandContact = NULL;
  mRightHandContact = NULL;
  mTimer = 300;
  mState = "STAND";
  mArch = 0;

}