void unigripper_motoman_plant_t::update_phys_configs(config_list_t& configs, unsigned& index) const
            {
                bool update = true;
                VectorNd tmpVec = VectorNd::Zero(3);
                VectorNd pos;
                Matrix3d orient;
                Quaternion quat;
                double qw,qx,qy,qz;
                for(unsigned i=0;i<simple_rigid_body_names.size();i++)
                {
                    unsigned int id = body_ids[i];//model.GetBodyId(simple_rigid_body_names[i].c_str());
                    pos = CalcBodyToBaseCoordinates(model,Q,id,tmpVec,update);
                    update = false;
                    orient = CalcBodyWorldOrientation(model,Q,id,update);
                    quat = Quaternion::fromMatrix(orient);
                    augment_config_list(configs,index);
                    configs[index].first = config_names[i];

                    configs[index].second.set_position(pos[0],pos[1],pos[2]);
                    configs[index].second.set_orientation(quat.x(),quat.y(),quat.z(),quat.w());
                    if(std::isnan(quat.w()) || std::isnan(quat.x()) || std::isnan(quat.y()) || std::isnan(quat.z()) )
                    {
                        uni_convert_matrix_to_quaternion(orient,qx,qy,qz,qw);
                        configs[index].second.set_orientation(qx,qy,qz,qw);
                    }

                    index++;
                }
            }
void PoseTask::getSensedValue(const Eigen::VectorXd& q,
                              Eigen::VectorXd& xsensed)
{
  if (taskType_ == 0)
    xsensed = CalcBodyToBaseCoordinates(*model_, q, linkNum_, 
                                        localpos_, true);
  if (taskType_ == 1)
  {
    std::cerr << "Not yet implemented !  TODO" << std::endl;
    //TODO: Handle orientation (rot matrix)
    //xsensed = CalcBodyWorldOrientation(*model_, q, linkNum_, true);
  }
  if (taskType_ == 2)
    std::cerr << "Not yet implemented !  TODO" << std::endl;
  
}
 void unigripper_motoman_plant_t::get_end_effector_configuration(config_t& effector_config)
 {
     double qw,qx,qy,qz;
     bool update = true;
     VectorNd tmpVec = VectorNd::Zero(3);
     VectorNd pos;
     Matrix3d orient;
     Quaternion quat;
     std::string ee = "vacuum_volume";
     unsigned int id = model.GetBodyId(ee.c_str());
     pos = CalcBodyToBaseCoordinates(model,Q,id,tmpVec,update); 
     update = false;
     orient = CalcBodyWorldOrientation(model,Q,id,update);
     quat = Quaternion::fromMatrix(orient);
     effector_config.set_position(pos[0], pos[1], pos[2]);
     effector_config.set_orientation(quat[0],quat[1],quat[2],quat[3]);
     if(std::isnan(quat.w()) || std::isnan(quat.x()) || std::isnan(quat.y()) || std::isnan(quat.z()) )
     {
         uni_convert_matrix_to_quaternion(orient,qx,qy,qz,qw);
         effector_config.set_orientation(qx,qy,qz,qw);
     }
 }