Example #1
0
    void ApplyMotorTorque(ref Ackermann ackermann, float maxTorque, float value)
    {
        float fs, fp, rs, rp;

        // If we have Ackerman steering, we apply torque based on the steering radius of each wheel
        var radii = AckermannUtils.GetRadii(ackermann.angle, ackermann.AxleSeparation, ackermann.AxleWidth);
        var total = radii[0] + radii[1] + radii[2] + radii[3];

        fp = radii[0] / total;
        fs = radii[1] / total;
        rp = radii[2] / total;
        rs = radii[3] / total;

        if (ackermann.angle > 0)
        {
            ackermann.m_FrontRight.motorTorque = value * maxTorque * fp;
            ackermann.m_FrontLeft.motorTorque  = value * maxTorque * fs;
            ackermann.m_RearRight.motorTorque  = value * maxTorque * rp;
            ackermann.m_RearLeft.motorTorque   = value * maxTorque * rs;
        }
        else
        {
            ackermann.m_FrontLeft.motorTorque  = value * maxTorque * fp;
            ackermann.m_FrontRight.motorTorque = value * maxTorque * fs;
            ackermann.m_RearLeft.motorTorque   = value * maxTorque * rp;
            ackermann.m_RearRight.motorTorque  = value * maxTorque * rs;
        }
    }
Example #2
0
    public void Run(float delta)
    {
        var farAngle = AckermannUtils.GetSecondaryAngle(angle, AxleSeparation, AxleWidth);

        // The rear wheels are always at 0 steer in Ackermann
        m_RearLeft.steerAngle = m_RearRight.steerAngle = 0;

        if (Mathf.IsZeroApprox(angle))
        {
            m_FrontRight.steerAngle = m_FrontLeft.steerAngle = 0;
        }

        m_FrontLeft.steerAngle  = angle;
        m_FrontRight.steerAngle = farAngle;
    }