getValAt() public method

public getValAt ( float p_phi ) : float
p_phi float
return float
 void updateFeetPositions(float p_phi)
 {
     for (int i = 0; i < m_foot.Length; i++)
     {
         bool inStance = m_stepCycles[i].isInStance(p_phi);
         //
         if (!inStance)
         {
             float swingPhi = m_stepCycles[i].getSwingPhase(p_phi);
             // The height offset, ie. the "lift" that the foot makes between stepping points.
             Vector3 heightOffset = new Vector3(0.0f, m_stepHeightTraj.getValAt(swingPhi), 0.0f);
             float   flip         = (i * 2.0f) - 1.0f;
             Vector3 wpos         = Vector3.Lerp(m_liftPos[i],
                                                 transform.position + new Vector3(flip * m_stepLength.x, 0.0f, m_stepLength.y * 0.5f),
                                                 swingPhi);
             wpos = new Vector3(wpos.x, 0.0f, wpos.z);
             m_foot[i].position = wpos + heightOffset;
         }
         else
         {
             m_liftPos[i] = m_foot[i].position;
             Debug.DrawLine(m_foot[i].position, m_foot[i].position + Vector3.up, Color.magenta - new Color(0.3f, 0.3f, 0.3f, 0.0f), 10.0f);
         }
         Color debugColor = Color.red;
         if (i == 1)
         {
             debugColor = Color.green;
         }
         Debug.DrawLine(m_oldFootPos[i], m_foot[i].position, debugColor, 30.0f);
         m_oldFootPos[i] = m_foot[i].position;
     }
 }
示例#2
0
    public void calculateFh(float p_phi, float p_currentH, float p_dt, Vector3 p_up)
    {
        float hLF = m_tuneLFHeightTraj.getValAt(p_phi);

        m_Fh = p_up * m_heightForceCalc.drive(hLF - p_currentH, p_dt);
        int i = 0;
    }
示例#3
0
    public void calculateFsw(int p_legId, float p_phi)
    {
        float swing = m_tuneStepCycles[p_legId].getSwingPhase(p_phi);
        float Kft   = m_tunePropGainFootTrackingKft.getValAt(swing);

        m_FootTrackingSpringDamper.m_Kp = Kft;
        Vector3 diff = m_feet[p_legId].transform.position - m_footStrikePlacement[p_legId];
        float error  = Vector3.Magnitude(diff);

        m_Fsw[p_legId] = -diff.normalized * m_FootTrackingSpringDamper.drive(error, Time.deltaTime);
        Debug.DrawLine(m_feet[p_legId].transform.position, m_feet[p_legId].transform.position + m_Fsw[p_legId], Color.yellow);
    }
示例#4
0
    public void updateReferenceFeetPositions(float p_phi, float p_t, Vector3 p_goalVelocity)
    {
        m_optimalProgress = p_goalVelocity.z * p_t;
        for (int i = 0; i < m_referenceFootPos.Length; i++)
        {
            bool inStance = m_tuneStepCycles[i].isInStance(p_phi);
            //
            if (!inStance)
            {
                float swingPhi = m_tuneStepCycles[i].getSwingPhase(p_phi);
                // The height offset, ie. the "lift" that the foot makes between stepping points.
                Vector3 heightOffset = new Vector3(0.0f, m_tuneStepHeightTraj.getValAt(swingPhi), 0.0f);
                float flip           = (i * 2.0f) - 1.0f;

                float legOptimalProgress = m_optimalProgress - m_referenceLiftPos[i].z;

                Vector3 offset = transform.position.x * Vector3.right + m_referenceLiftPos[i].z * Vector3.forward + Vector3.forward * legOptimalProgress;

                Vector3 wpos = Vector3.Lerp(m_referenceLiftPos[i],
                                            offset + new Vector3(flip * m_tuneStepLength.x, 0.0f, m_tuneStepLength.y * 0.5f),
                                            swingPhi);
                wpos = new Vector3(wpos.x, 0.0f, wpos.z);
                m_referenceFootPos[i] = wpos + heightOffset;
            }
            else
            {
                m_referenceLiftPos[i] = m_referenceFootPos[i];
                Debug.DrawLine(m_referenceFootPos[i] + Vector3.forward * m_startPos.z, m_referenceFootPos[i] + Vector3.up + Vector3.forward * m_startPos.z, Color.magenta - new Color(0.3f, 0.3f, 0.3f, 0.0f), 10.0f);
            }
            Color debugColor = Color.red;
            if (i == 1)
            {
                debugColor = Color.green;
            }
            Debug.DrawLine(m_referenceOldFootPos[i] + Vector3.forward * m_startPos.z, m_referenceFootPos[i] + Vector3.forward * m_startPos.z, debugColor, 10.0f);
            m_referenceOldFootPos[i] = m_referenceFootPos[i];
        }
    }
示例#5
0
 // Get the phase value in the foot transition based on
 // swing phase. Note the phi variable here is the fraction
 // of the swing phase!
 private float getFootTransitionPhase(float p_swingPhi)
 {
     return(m_tuneFootTransitionEase.getValAt(p_swingPhi));
 }