예제 #1
0
    void Update()
    {
        float leftLightSensor;
        float rightLightSensor;

        if (gaussian) // caso a boolean gaussiana esteja ativada a strenght das rodas irá ser calculada pela função gaussiana
        //Read light sensor values
        {
            leftLightSensor  = LeftLD.GetGaussianOutput();
            rightLightSensor = RightLD.GetGaussianOutput();
        }
        else     // caso a boolean gaussiana NÃO esteja ativada a strenght das rodas irá ser calculada linearmente
                 //sem sofrer alterações da funçao normal
        //Read light sensor values
        {
            leftLightSensor  = LeftLD.GetLinearOutput();
            rightLightSensor = RightLD.GetLinearOutput();
        }


        //Read obstacle sensor values
        float leftObstacleSensor  = LeftOD.GetLinearOutput();
        float rightObstacleSensor = RightOD.GetLinearOutput();

        // Calculate target motor values
        // LightSensors estão ligados cruzados e ObstacleSensor estão ligados diretamente
        m_LeftWheelSpeed  = (rightLightSensor + leftObstacleSensor) * MaxSpeed;
        m_RightWheelSpeed = (leftLightSensor + rightObstacleSensor) * MaxSpeed;
    }
예제 #2
0
    void Update()
    {
        //Read sensor values
        float leftSensor  = LeftLD.GetGaussianOutput();
        float rightSensor = RightLD.GetGaussianOutput();

        // strength
        if (leftSensor < limiarMinimo)
        {
            leftSensor = limiarMinimo;
        }
        else if (leftSensor > limiarMaximo)
        {
            leftSensor = limiarMaximo;
        }

        if (rightSensor < limiarMinimo)
        {
            rightSensor = limiarMinimo;
        }
        else if (rightSensor > limiarMaximo)
        {
            rightSensor = limiarMaximo;
        }


        // read sensor values - blocks
        float leftSensorBlock  = LeftBD.GetLinearOutput();
        float rightSensorBlock = RightBD.GetLinearOutput();

        if (leftSensorBlock < limiarMinimo)
        {
            leftSensorBlock = limiarMinimo;
        }
        else if (leftSensorBlock > limiarMaximo)
        {
            leftSensorBlock = limiarMaximo;
        }

        if (rightSensorBlock < limiarMinimo)
        {
            rightSensorBlock = limiarMinimo;
        }
        else if (rightSensorBlock > limiarMaximo)
        {
            rightSensorBlock = limiarMaximo;
        }


        //Calculate target motor values
        m_LeftWheelSpeed  = ((leftSensor + leftSensorBlock) * MaxSpeed);
        m_RightWheelSpeed = ((rightSensor + rightSensorBlock) * MaxSpeed);

        // output
        if (m_LeftWheelSpeed < limiteInferior)
        {
            m_LeftWheelSpeed = limiteInferior;
        }
        else if (m_LeftWheelSpeed > limiteSuperior)
        {
            m_LeftWheelSpeed = limiteSuperior;
        }

        if (m_RightWheelSpeed < limiteInferior)
        {
            m_RightWheelSpeed = limiteInferior;
        }
        else if (m_RightWheelSpeed > limiteSuperior)
        {
            m_RightWheelSpeed = limiteSuperior;
        }
    }