Eigen::VectorXd TrajectoryThread::getCurrentTaskStateAsVector()
{
    Eigen::VectorXd startVector = Eigen::VectorXd::Zero(weightDimension);
    ocra::TaskState state = task->getTaskState();

    switch (taskType) {
        case ocra::Task::META_TASK_TYPE::UNKNOWN:
        {
            // do nothing
        }break;
        case ocra::Task::META_TASK_TYPE::POSITION:
        {
            startVector = state.getPosition().getTranslation();
        }break;
        case ocra::Task::META_TASK_TYPE::ORIENTATION:
        {
            Eigen::Rotation3d quat = state.getPosition().getRotation();
            startVector = Eigen::VectorXd(4);
            startVector << quat.w(), quat.x(), quat.y(), quat.z();
        }break;
        case ocra::Task::META_TASK_TYPE::POSE:
        {
            Eigen::Displacementd disp = state.getPosition();
            startVector = Eigen::VectorXd(7);
            startVector << disp.x(), disp.y(), disp.z(), disp.qw(), disp.qx(), disp.qy(), disp.qz();
        }break;
        case ocra::Task::META_TASK_TYPE::FORCE:
        {
            startVector = state.getWrench();
        }break;
        case ocra::Task::META_TASK_TYPE::COM:
        {
            startVector = state.getPosition().getTranslation();

        }break;
        case ocra::Task::META_TASK_TYPE::COM_MOMENTUM:
        {
            startVector = state.getPosition().getTranslation();

        }break;
        case ocra::Task::META_TASK_TYPE::PARTIAL_POSTURE:
        {
            startVector = state.getQ();

        }break;
        case ocra::Task::META_TASK_TYPE::FULL_POSTURE:
        {
            startVector = state.getQ();

        }break;
        case ocra::Task::META_TASK_TYPE::PARTIAL_TORQUE:
        {
            startVector = state.getTorque();

        }break;
        case ocra::Task::META_TASK_TYPE::FULL_TORQUE:
        {
            startVector = state.getTorque();

        }break;
        default:
        {

        }break;
    }
    return startVector;
}