• Nenhum resultado encontrado

F.4 Matriz de Covariância de todos os sensores para a Classe 4

3.3 Heurística Proposta para Navegação Wall-Following

• MLRoboticRobot: este pacote permite a aquisição de alguns tipos de dados, que são ne- cessários no contexto da Robótica Móvel, tais como posição, velocidade, odometria, de- tector de colisões e medidas dos sensores de distância.

• MLRoboticIP: fornece algumas classes para processamento de imagens, além de dois diferentes tipos de imagem e algumas operações básicas de filtragem, métodos para con- versão de cores e operações de I/O para diferentes tipos de arquivos de imagem.

• MLRoboticOpenCV: este pacote oferece uma classe wrapper para o tipo de imagem IplI- mage a partir do Intel Open Source Computer Vision Library. Permite utilizar as funci-R onalidades do OpenCV, juntamente com o framework oferecido pela MLRobotic.

• MLRoboticGUI: este pacote contém algumas classes GUI simples para exibição de ima- gens, vídeos e dados de distâncias. Essas classes são baseadas em Qt toolkit da TrolltechR .R • MLRoboticSystem: neste pacote há algumas classes de baixo nível em que estão localiza-

das informações sobre a instalação da CPU e o sistema ALSA (Advanced Linux Sound Architecture) para controle do sistema de som.

• MLRoboticHardware: este pacote oferece algumas classes de controle adicional para componentes de hardware externos, que não pertencem ao robô propriamente dito. Qua- tro diferentes dispositivos como câmara Vídeo-4-Linux, Video-4-Linux-2, DC1394 e DFG1394 são suportadas e uma classe para porta serial está disponível.

Sensores de distância a laser, câmeras e braços robóticos são suportados através de Add-ons opcionais.

Na seção seguinte são apresentados os detalhes sobre o programa baseado em heurísticas responsável pela coordenação das quatro movimentações possíveis, de maneira a permitir que o robô apresente o comportamento de seguir paredes.

3.3

Heurística Proposta para Navegação Wall-Following

Para o desenvolvimento do sistema de navegação e controle de um robô, duas abordagens podem ser seguidas: top-down e bottom-up (PFEIFER; SCHEIER, 2002).

Na abordagem top-down (descendente), a tarefa que o robô deve executar é particionada em subtarefas, as quais são determinadas pelos projetistas. Neste paradigma, um especialista

3.3 Heurística Proposta para Navegação Wall-Following 49

projeta o sistema de navegação e controle com base no seu conhecimento (AGUIRRE, 2007), de tal forma que o robô fica limitado a apenas resolver a tarefa para a qual foi programado.

Já na abordagem bottom-up (ascendente), muito pouco conhecimento é imposto pelo pro- jetista do sistema de navegação e controle, exigindo que o sistema seja dotado de capacidade de aprendizagem e adaptação ao ambiente. Assim, os comportamentos observados emergem da interação do robô com o seu ambiente. Esses conceitos estão explicados com maior nível de detalhes e profundidade em ARKIN (1998), PFEIFER & SCHEIER (2002) e Tani (2007).

Nesta seção, é apresentado um algoritmo desenvolvido, na filosofia da abordagem top-

down, para que o robô SCITOS G5 seja capaz de navegar seguindo paredes (Wall-Following).

A metodologia de projeto do algoritmo é dita ser do tipo descendente devido ao fato de que as classes de movimentos e as condições sensório-motoras para que os movimentos sejam realiza- dos são construídas a partir de diversos testes realizados com o robô e a partir do conhecimento de especialistas. O algoritmo baseado em regras heurísticas com melhor resultado, pode ser visto no Algoritmo 3.3.1.

É interessante ressaltar que este algoritmo desenvolvido é apenas uma formalização de uma heurística e não é necessariamente o melhor para descrever a navegação do tipo seguir-paredes. A lógica implementada pelo Algoritmo 3.3.1 leva em consideração duas medidas principais: a da distância à frente e à esquerda. Sendo assim, o robô realiza a volta na sala no sentido horário, cuja trajetória criada e percepção sensorial do ambiente, na perspectiva do robô, podem ser vistos na Figura 3.2.

A tarefa de Seguir-Paredes no sentido horário é dividida em quatro subtarefas: seguir em Frente, girar para a direita em uma curva aberta, girar para a direita em uma curva fechada e girar à esquerda. O chaveamento das decisões é feita de acordo com a forma que o robô está percebendo o ambiente com seus sensores de ultra-som.

Esses movimentos não foram escolhidos ao acaso. Foram feitos vários testes até que se verificou que essas quatro ações permitiam ao robô desempenhar o comportamento desejado.

3.3 Heurística Proposta para Navegação Wall-Following 50

Algorithm 3.3.1: SEGUEPAREDE( f rontDistance, le f tDistance)

if le f tDistance> 0, 9 then              if f rontDistance<= 0, 9

then Parar e girar à direita

else Reduz a velocidade e gira à esquerda

else                              if f rontDistance<= 0, 9

then Parar e girar à direita

else if le f tDistance< 0, 55

then Reduz a velocidade e gira à direita

else Segue em Frente

O controle dos motores para que sejam realizadas essas ações, é feito a partir da modifica- ção das velocidades de translação e de rotação do robô. No caso deste trabalho, determinou-se que a velocidade normal de translação, tV t, é de 20% da velocidade máxima do robô (aproxi- madamente 1km/h) e a velocidade rotacional, tV r, sendo 30% da máxima.

Os valores de tV t e de tV r referem-se tanto ao motor direito quanto o esquerdo, sendo assim, particularizamos os movimentos a partir do sinal (+/−) que aplicamos. Por exemplo, o sinal negativo na velocidade rotacional, indica que o motor da esquerda deve ser acionado mais que o motor direito, de forma a fazer uma curva à direita, e vice-versa. Para a velocidade translacional, o sinal negativo indica que o robô deve andar de ré.

No caso dos movimentos descritos no Algoritmo 3.3.1, as velocidades aplicadas são mos- tradas na Tabela 3.1.

Tabela 3.1: Velocidades aplicadas em cada movimento.

Movimentos Velocidades

Translacional Rotacional

Seguir-em-Frente tV t 0

Parar e girar à direita 0 (−tV r)

Reduzir e girar à direita (0.5) ∗ tVt (0.2) ∗ (−tVr) Reduzir e girar à esquerda (0.85) ∗ tVt tV r