• Nenhum resultado encontrado

3 DESENVOLVIMENTO

3.3 CONTROLE FUZZY E MUNDO VIRTUAL

3.3.6 MODELAGEM DAS REGRAS

Das três variáveis envolvidas no sistema, apenas duas foram trabalhadas na lógica Fuzzy (a distância do sensor e o ângulo da direção), para a velocidade do veículo foi adotado um valor padrão fixo e o seu controle foi feito com base na lógica convencional.

Para as outras duas variáveis foram formulados os seguintes conjuntos para representá-las: a variável lingüística “DistânciaDoSensor” foi associada ao conjunto representado graficamente na Figura 39, e a variável “ÂnguloDaDireção” com o conjunto da Figura 40.

A “DistânciaDoSensor” foi dividida em cinco termos:

 O “muitoPerto”, que representa a eminência de colisão e vai de 0 a 6 cm, sendo que para valores menores que 4 cm ele tem altura máxima, isso porque nessa faixa de valores o sensor não garante aferição das medidas;

 “Perto” que vai de 4 a 10 cm;

 “Médio”, que vai de 9 a 16 cm;

 “Longe” que vai de 15 a 23 cm; e

 O “muitoLonge” que vai 20 cm a infinito. Este tem sua altura máximo a partir de 25 cm, porque a partir de 30 cm em o sensor não garante mais a aferição das medidas.

Figura 39: Função Fuzzy que representa a variável lingüística "DistânciaDoSensor".

O “ÂnguloDaDireção” foi dividido em cinco termos também: “muitoDireita”, “direita”, “alinhado”, “esquerda”, “muitoEsquerda”. Apesar do carro só ter três ângulos de direção discretos, a direção é calculada com base na lógica Fuzzy. Para funcionar com o sistema o protocolo trata de verificar entre quais faixas está o valor inferido para a direção, e com base nisso adota uma das três direções possíveis.

Figura 40: Função Fuzzy que representa a variável lingüística "ÂnguloDaDireção".

Para o sistema iniciar o processo de estacionamento, inicialmente o carro deverá estar na posição inicial pré-estabelecida, conforme mostra a Figura 41 (a).

Quando o processo de estacionamento é iniciado o carro é posto em marcha ré e são chamadas as regras que modelam o movimento do carro quando anda para trás.

As regras mostradas na Figura 42 foram modeladas para fazer o carro começar a entrar na vaga no momento em que ele chega à posição mostrada no gráfico da Figura 41 (b) e continue até a posição da Figura 41 (d). Esse trajeto é percorrido com a direção virada para a direita e andando para trás.

Cada sigla mostrada nas regras representam uma especificação do termo “distânciaDoSensor”: ST (sensor traseiro), STDD (sensor traseiro diagonal direito), STLD (sensor traseiro lateral direito), SFLD (sensor frontal lateral direito), SFDD (sensor frontal diagonal direito) e SFDD (sensor frontal diagonal direito).

Para a próxima parte do trajeto que vai da Figura 43 (a) até (b), foram criadas as regras mostradas na Figura 44 para fazer o carro virar a direção para a esquerda e começar a se posicionar dentro da vaga.

Figura 43: Carro entrando na vaga com direção para esquerda - andando para trás.

//Entrar na vaga

Se(STDD(muitoLonge) && SFLD(perto)) //para trás && ângulo muitoDireita; Se(STDD(longe) && SFLD(perto))

//para trás && ângulo muitoDireita; Se(ST(longe) && STDD(longe) && SFLD(medio))

//para trás && ângulo muitoDireita;

Se(ST(muitoLonge) && STDD(longe) && SFLD(medio)) //para trás && ângulo muitoDireita;

if(ST(muitoLonge) && STDD(muitoLonge) && SFLD(medio)) //para trás && ângulo para muitoDireita

A partir deste ponto o carro já está na vaga e é iniciado o processo de alinhamento. Como o sensor traseiro está muito perto o carro muda de direção. As regras que modelam a mudança de direção não são regras Fuzzy, usam a lógica convencional. As condições nas quais o carro muda de direção quando está indo para trás estão mostradas na Figura 45.

Quando o carro muda de direção, passam a ser acionadas as regras que modelam o movimento do carro para frente no processo de alinhamento. As regras mostradas na Figura 46 controlam o trajeto em que o carro vai para frente, onde a direção está virada para a direita. Esse trajeto é mostrado na Figura 47 (a) e (b).

//Entrar na vaga

Se(ST(medio) && SFLD(muitoLonge))

//para trás && ângulo para muitoEsquerda; Se(STDD(medio) && SFLD(muitoLonge))

//para trás && ângulo para esquerda; Se(ST(medio) && SFLD(longe))

//para trás && ângulo para esquerda; Se (STDD(medio) && SFLD(longe))

//para trás && ângulo para esquerda;

Se(ST(muitoLonge) && STDD(muitoLonge) && SFLD(medio)) //para trás && ângulo para muitoDireita;

Figura 44: Regras que modelam a entrada no carro na vaga – para trás e para esquerda.

//Regra não Fuzzy - muda só a direção do veículo Se(ST(muitoPerto))

paraFrente();

Se(STDD(muitoPerto) && !STLD(muitoPerto)) paraFrente();

Se(ST(muitoPerto) && STLD(muitoPerto)) paraFrente();

Figura 47: Para frente e para direita - alinhando.

//Alinhando na vaga Se(SFLD(muitoLonge))

//para frente && ângulo muitoDireita; Se(SFLD(longe))

//para frente && ângulo muitoDireita; Se(SFLD(medio))

//para frente && ângulo para direita;

Ainda andando para frente e alinhando, nas situações em que o carro está perto do carro da frente ou do meio fio, ele muda a direção para a esquerda. Esse caso é modelado pelas regras da Figura 48, e o trajeto é mostrado na Figura 49.

Figura 49: Para frente e para esquerda - alinhando.

//Para esquerda

Se(STLD(medio) && SFLD(perto) && SF(perto)) //para frente && ângulo muitoEsquerda; Se(STLD(medio) && SFLD(medio) && SF(perto))

//para frente && ângulo muitoEsquerda;

Quando o carro está indo para frente e na eminência de choque alguma das regras não Fuzzy mostradas na Figura 50 é acionada fazendo o carro muda de direção.

Quando o carro começa a andar para trás e o sensor traseiro diagonal direito ainda não é perto, o carro seguirá as regras que são mostradas na Figura 51, cumprindo o trajeto da Figura 52. A partir do momento em que ele é perto, o sistema tem alguma das funções da Figura 53 ativadas e vira a direção para a esquerda fazendo o percurso da Figura 54.

//Regra não Fuzzy Se(SF(muitoPerto))

paraTras();

Se(SFDD(muitoPerto) && !SFLD(muitoPerto)) paraTras();

Se ((SFLD(muitoPerto) || SFDD(muitoPerto)) && !(SFLD(muitoPerto) || SFLD(perto)) ) paraTras();

Figura 50: Regras não Fuzzy que decidem quando o carro vai mudar de trajetória.

//Para Alinhar

Se(STDD(muitoLonge) && SFLD(muitoPerto)) //para trás && ângulo muitoDireita Se(STDD(longe) && SFLD(muitoPerto))

//para trás && ângulo muitoDireita Se(SFLD(medio) && ST(longe))

//para trás && ângulo muitoDireita Se(SFLD(medio) && ST(muitoLonge)){

//para trás && ângulo muitoDireita

Se(STDD(medio) && STLD(perto) && SFLD(perto) && SF(muitoPerto)){ //para trás && ângulo muitoDireita

Se(STDD(medio) && STLD(perto) && SFLD(perto) && SF(perto)){ //para trás && ângulo muitoDireita

Figura 54: Para trás e para esquerda - alinhando.

//Alinhar

Se(ST(perto) && SFLD(muitoLonge)) //para trás && ângulo muitoEsquerda Se(STDD(perto) && SFLD(muitoLonge))

//para trás && ângulo muitoEsquerda Se(ST(perto) && SFLD(longe))

//para trás && ângulo muitoEsquerda Se(STDD(perto) && SFLD(longe))

//para trás && ângulo muitoEsquerda Se(STLD(muitoPerto) && SFLD(perto)){

//para trás && ângulo para esquerda Se(STDD(perto) && SFDD(medio))

//para trás && ângulo muitoEsquerda

O percurso descrito pelas Figuras 55 e 56 usa as mesmas regras para alinhar o carro indo para frente, mostradas nas Figuras 46 e 48.

Para este exemplo específico, algumas regras não foram usadas, contudo, como o ponto de partida do carro pode variar, elas se fazem necessárias.

Essas regras foram modeladas inicialmente tomando-se por base alguns esboços gráficos. No segundo passo elas foram aperfeiçoadas para funcionar com o auxílio do “Mundo Virtual”, que simula o sistema no carro. E por último, já controlando o sistema no carro, foram adicionadas novas regras para cobrir os casos não previstos inicialmente.

Figura 56: Para frente e para esquerda - alinhado.

O controlador trabalha com os valores dispostos na classe “ModeloDeMundo” mostrada no diagrama da Figura 35. A responsabilidade de manter o modelo de mundo sincronizado com o sistema real, ou a sua simulação, fica à cargo da classe “Protocolo”, também mostrado no mesmo diagrama.

Documentos relacionados