do arquivo - Programa de Pós
Transcrição
do arquivo - Programa de Pós
UNIVERSIDADE FEDERAL DA BAHIA ESCOLA POLITÉCNICA PROGRAMA DE PÓS-GRADUAÇÃO EM ENGENHARIA ELÉTRICA Anderson Amorim do Nascimento ANÁLISE DE SISTEMAS DE AQUISIÇÃO DE IMAGENS OMNIDIRECIONAIS PARA NAVEGAÇÃO EM ROBÓTICA MÓVEL DISSERTAÇÃO DE MESTRADO Salvador Outubro de 2015 Página em branco Anderson Amorim do Nascimento ANÁLISE DE SISTEMAS DE AQUISIÇÃO DE IMAGENS OMNIDIRECIONAIS PARA NAVEGAÇÃO EM ROBÓTICA MÓVEL Dissertação de Mestrado apresentada ao Programa de Pós-graduação em Engenharia Elétrica, PPGEE, da Universidade Federal da Bahia, como parte dos requisitos necessários à obtenção do tı́tulo de Mestre em Engenharia Elétrica. Orientador: Paulo César Machado de Abreu Farias Salvador Outubro de 2015 Agradecimentos Este trabalho foi o resultado sofrido de perı́odos de otimismo e esperança intercalados por longos vales de desânimo e incerteza. Como deve acontecer em qualquer outra pesquisa, houveram altos e baixos de produtividade que determinaram o ritmo do trabalho. Os altos foram importantes para a coleta de resultados, a elaboração de experimentos, a implementação de protótipos e para a revisão literária, mas foi o apoio que eu recebi durante os perı́odos de inércia que garantiram a finalização. É justamente este apoio que eu, correndo o risco imperdoável de deixar alguém de fora, quero agradecer neste espaço. Agradeço inicialmente aos meus pais, meu porto seguro, que sustentaram o sonho e esperaram com tanta paciência para que eu acordasse para a vida e tivesse um pouco mais fé no futuro. Agradeço ao meu irmão por perguntar quase que diariamente quando seria a data da minha defesa. Agradeço ao meu orientador, Paulo César, por não me deixar desistir algumas vezes e por me lembrar “que a vida às vezes nos prega peças, mas com paciência a gente resolve tudo”. Agradeço aos colegas de trabalho não só pelas conversas longas e improdutivas sobre assuntos aleatórios, mas também pela companhia solidária tanto nas horas produtividade quanto nas de procrastinação. Finalmente, com carinho especial e uma gratidão que não cabe em “trocentas” dissertações de mil páginas, agradeço à minha noiva, Ludmila, à quem eu também dedico esta dissertação. Agradeço por ela estar ao meu lado todo este tempo, desde o primeiro pixel capturado, vibrando mais do que eu em cada resultado, torcendo mais do que eu à cada novo “robozinho” e sonhando, também mais do que eu, com o desfecho disso tudo. Este trabalho é tão seu quanto meu, meu bem. Obrigado. iii Resumo da Dissertação apresentada à PPGEE/UFBA como parte dos requisitos necessários para a obtenção do grau de Mestre em Engenharia Elétrica (M.Sc.) ANÁLISE DE SISTEMAS DE AQUISIÇÃO DE IMAGENS OMNIDIRECIONAIS PARA NAVEGAÇÃO EM ROBÓTICA MÓVEL Anderson Amorim do Nascimento Outubro/2015 Orientador: Paulo César Machado de Abreu Farias Programa: Engenharia Elétrica Sistemas de visão omnidirecional são ferramentas extremamente úteis para aplicações de navegação em Robótica. Tarefas de localização, rastreamento de objetos e detecção de obstáculos podem ser beneficiadas por um campo de visão omnidirecional. O campo de visão estendido reduz o número necessário de observações do espaço ao redor do robô e permite que obstáculos e objetos de interesse fiquem visı́veis por mais tempo. Uma desvantagem destes sistemas, porém, é o custo computacional dos algoritmos envolvidos na manipulação de imagens, o que pode limitar a sua aplicação em dispositivos embarcados de pequeno porte. Para contornar esta limitação, uma alternativa comum é incorporar elementos de alto nı́vel ao sistema, como servidores e computadores pessoais. Esta abordagem, no entanto, pode elevar consideravelmente os custos do projeto, além de aumentar a sua complexidade. Outra estratégia é adaptar os algoritmos utilizados para dispositivos especializados de baixo custo, como o Raspberry Pi e a CMUCam, distribuindo o processamento entre eles. Neste modelo, as formas de interligação e distribuição de carga entre os diferentes componentes são os principais problemas de projeto e também os que mais limitam do seu desempenho. Este trabalho concentra esforços na análise de iv arquiteturas embarcadas de pequeno porte para aquisição e manipulação de imagens omnidirecionais. O objetivo é estabelecer modelos de arquitetura que sejam capazes de capturar imagens omnidirecionais e realizar tarefas básicas de navegação autônoma sobre elas. Cada modelo é um sistema fechado de navegação por visão computacional, podendo ser integrado á um robô móvel por meio de um protocolo simples de comunicação. O sistema captura, analisa e entrega ao robô um conjunto de coordenadas de movimentação, posicionamento e localização. São apresentados e comparados três modelos de arquitetura, cada um representando uma das formas tradicionais de aquisição de imagens omnidirecionais: câmera giratória (monocular), várias câmeras disposta em cı́rculo (multicâmeras) e arranjo câmera/espelho (catadióptrico). Os protótipos para avaliação foram construı́dos utilizando câmeras CMUCam3 para captura e pré-processamento das imagens e um Raspberry Pi B, para processamento e execução dos algoritmos de detecção de obstáculos, localização e rastreamento de objetos de interesse. Os tempos de aquisição e processamento de um panorama omnidirecional são os principais parâmetros de desempenho avaliados em cada arquitetura. v Abstract of Dissertation presented to PPGEE/UFBA as a partial fulfillment of the requirements for the degree of Master of Science (M.Sc.) ANALYSIS OF OMNIDIRECTIONAL IMAGES ACQUISITION SYSTEMS FOR MOBILE ROBOT NAVIGATION Anderson Amorim do Nascimento October/2015 Advisor: Paulo César Machado de Abreu Farias Department: Electrical Engineering Omnidirectional vision systems are extremely useful tools for autonomous robot navigation. The wide field of view can help the robot to move more efficiently between obstacles, demanding fewer observations of the scene. Additionally, visual marks and other interesting objects stay longer inside the field of view, which are important features for some navigation tasks, such as Localization and Object Tracking. However, these systems require some high cost algorithms for image processing, which are difficult to run in small embedded applications. Some approaches try to solve this problem by incorporating high level components into their systems, such as personal computers and servers. This strategy may, however, increase the financial costs of the project and limit their applications. Another approach focuses on distributing task pieces over different small and specialized hardware, such as CMUCam and Raspberry Pi. Nevertheless, on this strategy the many ways of interconnection and load distribution among its components may be a limiting point for the system, if not analyzed carefully. This work focus on the analysis of embedded architecture models for acquiring and manipulating omnidirectional images for robot navigation problems. Our goal is to define interconnection models between the embedded components for acquiring vi omnidirectional panoramas and performing basic navigation tasks with them. Each model is a closed computer vision navigation system, which can be further integrated to mobile robots with a simple communication protocol. The systems process omnidirectional panoramas and deliver moving coordinates or localization status to the robot. Three architecture models are presented, one for each traditional way of acquiring omnidirectional images: a single rotating camera covering a field of view of 360 degrees, multiple cameras placed on a circle, each one covering a fraction of the omnidirectional field of view, and a catadioptric model with camera and an spherical mirror. The prototypes were built using CMUCam3 cameras for image capturing and a Raspberry Pi B for image processing. The acquisition and processing times are the main parameter used for evaluating each model’s performance. vii Sumário Lista de Figuras x Lista de Tabelas xiii 1 Introdução 1.1 1 Sistemas de Navegação Autônoma em Robótica Móvel . . . . . . . . 2 1.1.1 Visão Computacional para Navegação . . . . . . . . . . . . . . 6 1.1.2 Sistemas de Visão Omnidirecional . . . . . . . . . . . . . . . . 8 1.1.3 Desafios de Implementação . . . . . . . . . . . . . . . . . . . . 9 1.2 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.3 Organização da Dissertação . . . . . . . . . . . . . . . . . . . . . . . 12 2 Navegação por Visão Computacional 2.1 2.2 14 Algoritmos de Navegação por Visão Computacional . . . . . . . . . . 16 2.1.1 Identificação de Obstáculos . . . . . . . . . . . . . . . . . . . 16 2.1.2 Rastreamento de Objetos 2.1.3 Localização e Mapeamento . . . . . . . . . . . . . . . . . . . . 23 . . . . . . . . . . . . . . . . . . . . 18 Sistema de Navegação . . . . . . . . . . . . . . . . . . . . . . . . . . 27 2.2.1 Arquitetura do Sistema de Navegação . . . . . . . . . . . . . . 27 2.2.2 Modelo de Navegação . . . . . . . . . . . . . . . . . . . . . . . 29 3 Aquisição de Imagens Omnidirecionais 33 3.1 Concatenação de Segmentos (Image Stitching) . . . . . . . . . . . . . 34 3.2 Remapeamento (Dewarping) . . . . . . . . . . . . . . . . . . . . . . 38 4 Análise de Modelos de Aquisição 4.1 42 Caracterização dos Componentes de Aquisição e Processamento . . . 43 viii 4.2 4.1.1 CMUCam3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 4.1.2 Raspberry Pi . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 4.1.3 Análise dos Resultados da Caracterização . . . . . . . . . . . 51 Aquisição de Panoramas Omnidirecionais . . . . . . . . . . . . . . . . 52 4.2.1 Arquitetura Monocular . . . . . . . . . . . . . . . . . . . . . . 53 4.2.2 Arquitetura Multicâmeras . . . . . . . . . . . . . . . . . . . . 55 4.2.3 Arquitetura Catadióptrica . . . . . . . . . . . . . . . . . . . . 61 4.2.4 Comparação dos Modelos de Aquisição . . . . . . . . . . . . . 62 5 Experimentos de Navegação 66 5.1 Cenário e Protótipo de Navegação . . . . . . . . . . . . . . . . . . . . 68 5.2 Arquitetura de Software . . . . . . . . . . . . . . . . . . . . . . . . . 70 5.3 Caracterização para Odometria . . . . . . . . . . . . . . . . . . . . . 71 5.4 Rastreamento de Objetos . . . . . . . . . . . . . . . . . . . . . . . . . 75 5.5 Mapeamento Incremental . . . . . . . . . . . . . . . . . . . . . . . . . 81 5.6 5.5.1 Detecção de Obstáculos . . . . . . . . . . . . . . . . . . . . . 81 5.5.2 Planejamento de Rota . . . . . . . . . . . . . . . . . . . . . . 83 5.5.3 Resultados de Mapeamento . . . . . . . . . . . . . . . . . . . 83 5.5.4 Discussão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 Localização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 5.6.1 Treinamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 5.6.2 Reconhecendo o Nó Inicial . . . . . . . . . . . . . . . . . . . . 90 5.6.3 Discussão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 6 Conclusões 94 6.1 Resumo de Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . 94 6.2 Discussão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 6.3 Contribuições . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 6.4 Trabalhos Futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 Referências Bibliográficas 102 A Trabalhos Publicados 112 ix Lista de Figuras 2.1 Procedimento de detecção de obstáculos por diferenciação da cor do solo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.2 Procedimento de detecção de objetos por threshold de uma cor especı́fica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 2.3 Algoritmo de Limiarização de imagens para detectar um objeto de cor especı́fica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.4 Algoritmo de detecção de objetos utilizando detecção de features. . . 22 2.5 Detecção de objetos por comparação de features. . . . . . . . . . . . . 23 2.6 Estratégias de mapeamento de um ambiente interno. . . . . . . . . . 24 2.7 Divisão geral de arquitetura. 2.8 Sequência de comunicação entre o Raspberry Pi e o tijolo Lego NXT 2.9 Representação do veı́culo em um plano de navegação . . . . . . . . . 30 . . . . . . . . . . . . . . . . . . . . . . 27 29 2.10 Representação do Centro Instantâneo de Curvatura (C.I.C.) . . . . . 30 3.1 Panorama retangular montado a partir de segmentos consecutivos . . 35 3.2 Dispositivo multicâmeras para aquisição de panoramas omnidirecionais por image stitching (Ladybug2 [63]) . . . . . . . . . . . . . . . . 35 3.3 Cálculo de homografias em cadeia . . . . . . . . . . . . . . . . . . . . 36 3.4 Exemplos de imagens omnidirecionais obtidas por uma câmera catadióptrica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 3.5 Modelos de implementação de uma câmera catadióptrica . . . . . . . 39 3.6 Lente de 360◦ Kogeto Dot [68]. . . . . . . . . . . . . . . . . . . . . . 39 3.7 Ilustração do procedimento de transformação de uma imagem polar em um panorama retangular (dewarping). . . . . . . . . . . . . . . . 41 x 4.1 Arquitetura genérica de um sistema de navegação por visão computacional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 4.2 Tempos de aquisição de um único quadro em uma CMUCam3 para diferentes resoluções e formatos de imagem: a) 352x288 pixels; b)176x143 pixels. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 4.3 Tempos de transmissão de um único quadro JPEG após filtro passabaixa (imagem suavizada). . . . . . . . . . . . . . . . . . . . . . . . . 47 4.4 Tempo gasto pela CMUCam3 para calcular a distância até um obstáculo posicionado à frente da câmera . . . . . . . . . . . . . . . . . . . . . 49 4.5 Resultado do procedimento de identificação de um obstáculo à 60 cm para a CMUCam3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 4.6 Tempo gasto pela Raspberry Pi para calcular a distância até um obstáculo posicionado à 60 cm da CMUCam. . . . . . . . . . . . . . . 51 4.7 Modelo monocular para aquisição de imagens omnidirecionais. . . . . 53 4.8 Tempos de aquisição e montagem de um panorama no protótipo monocular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 4.9 Exemplo de panorama omnidirecional montado pelo protótipo monocular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 4.10 Modelos de interligações multicâmeras . . . . . . . . . . . . . . . . . 56 4.11 Modelo de barramento multiplexado com 3 CMUCam3 e um 74LS151 57 4.12 Tempos de transferência e montagem de um panorama de 180◦ . Segmentos JPEG com resolução de 176x143. . . . . . . . . . . . . . . . . 59 4.13 Solicitação de quadro no modelo daisy chain . . . . . . . . . . . . . . 59 4.14 Tempos de transmissão e montagem do panorama de 180 graus (3 câmeras) em daisy chain . . . . . . . . . . . . . . . . . . . . . . . . . 60 4.15 Panorama de 180◦ montando a partir de um arranjo de 3 CMUCam3 em daisy chain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 4.16 Imagem esférica capturada pelo protótipo catadióptrico (a) e panorama omnidirecional (b). . . . . . . . . . . . . . . . . . . . . . . . . . 62 4.17 Tempo de geração de um panorama retangular a partir de uma imagem esférica de 480x480 pixels . . . . . . . . . . . . . . . . . . . . . . 63 5.1 Protótipo de veı́culo de tração diferencial para navegação . . . . . . . 69 xi 5.2 Panorama omnidirecional capturado pelo protótipo de navegação . . . 69 5.3 Piso padronizado para os experimentos de navegação . . . . . . . . . 70 5.4 Arquitetura geral do software para controle de navegação. . . . . . . 71 5.5 Diagrama de classes do sistema de controle de navegação. . . . . . . . 71 5.6 Medidas de distância percorrida para cada ângulo de rotação em função do deslocamento angular . . . . . . . . . . . . . . . . . . . . . 73 5.7 Escala de rotação a partir do centro do panorama retangular . . . . . 76 5.8 Calibração do algoritmo para determinar a distância até o objeto detectado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 5.9 Localização dos objetos para rastreamento . . . . . . . . . . . . . . . 77 5.10 Algoritmo para controle de movimentação do rastreamento . . . . . . 78 5.11 Trajetórias de rastreamento . . . . . . . . . . . . . . . . . . . . . . . 80 5.12 Grade de ocupação do cenário e grafo de representação do ambiente para mapeamento dinâmico . . . . . . . . . . . . . . . . . . . . . . . 81 5.13 Resultado do procedimento de detecção de obstáculos . . . . . . . . . 83 5.14 Obstáculos para o experimento de mapeamento dinâmico . . . . . . . 84 5.15 Exemplo de rotas calculadas até o nó de destinoS5,1 . . . . . . . . . . 85 5.16 Visão do robô durante o mapeamento . . . . . . . . . . . . . . . . . . 85 5.17 Grafo atualizado após o percurso . . . . . . . . . . . . . . . . . . . . 86 5.18 Mapa topológico e pontos selecionados para localização . . . . . . . . 88 5.19 Imagens de pontos conhecidos do ambiente de navegação . . . . . . . 89 5.20 Resultado de comparações com o robô posicionado sobre o nó S1,5 . . 92 xii Lista de Tabelas 2.1 Comandos de movimentação para controle do veı́culo Lego. . . . . . . 28 4.1 Resumo dos tempo de aquisição e montagem de panoramas em cada modelo arquitetural . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 5.1 Relação entre a distância real do objeto e a distância em pixels da imagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 5.2 Relação entre a distância real e a distância estimada pelo algoritmo de detecção de objetos . . . . . . . . . . . . . . . . . . . . . . . . . . 79 5.3 Cálculo e atualização de rotas no grafo de navegação . . . . . . . . . 86 5.4 Número de matches com o robô posicionado sobre pontos conhecidos do mapa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 5.5 Número de matches com o robô posicionado sobre pontos desconhecidos do mapa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 xiii à Bilinha, com todo o meu amor. xiv Capı́tulo 1 Introdução Na última década, pesquisas e aplicações envolvendo sistemas autônomos de navegação terrestre deixaram o âmbito exclusivo dos laboratórios e centros de estudos e chegaram às ruas. Em 2010 o Google Inc. anunciou em seu blog oficial e no jornal The New York Times [1] o protótipo de um veı́culo autodirigido que deveria, dentro de poucos anos, substituir os automóveis tradicionais. Acompanhando a tendência, algumas grandes empresas do mercado automobilı́stico como a Audi[2], a Mercedes-Benz [3] e a Jaguar[4] também anunciaram seus projetos de veı́culos de navegação parcial ou totalmente autônoma. Ao mesmo tempo, alguns estados dos EUA (e.g. California, Nevada, Michigan e Florida) aprovaram leis que autorizam e regulamentam o trânsito para veı́culos auto-digiridos em seus territórios. Em 2012, a Sociedade de Engenheiros Automotivos (Society of Automotive Engineers, SAE) estabeleceu um comitê para a definição de padrões para projeto e desenvolvimento de veı́culos de navegação não assistida [5]. Diversos outros setores também apresentaram avanços em dispositivos de navegação autônoma, incluindo drones [6], sondas espaciais [7] e dispositivos domésticos de baixo custo, como o robô aspirador de pó Roomba [8]. Em robótica móvel, a capacidade de navegar de forma autônoma por um determinado ambiente (conhecido ou não) requer duas habilidades essenciais no robô: a capacidade de “observar” o ambiente ao seu redor e a “inteligência” necessária para interpretar informações sobre ele. Um sistema de navegação genérico pode ser compreendido como uma combinação eficiente entre um aparato sensorial de observação (e.g. radares, sonares, câmeras, etc.) e a computação necessária para tomar decisões 1 sobre o que foi observado. Esta combinação permite ao robô elaborar um modelo descritivo do ambiente (e.g. mapas de ocupação, posicionamento de obstáculos, modelos 3D, etc.), para a realização de tarefas centrais de navegação. Alguns exemplos destas tarefas centrais são: encontrar um objeto especı́fico, desviar de obstáculos, otimizar a trajetória até um determinado ponto, mapear um ambiente desconhecido, etc. O tipo de sensor e o aparato computacional utilizado são especı́ficos de cada aplicação e sua escolha deve considerar uma grande variedade de fatores, por exemplo: a topologia e a dinâmica do ambiente navegado, a disponibilidade de recursos computacionais, a velocidade e a mobilidade do veı́culo, o tipo especı́fico de tarefa a ser realizada e o custo financeiro do projeto. Veı́culos seguidores de linha, por exemplo, normalmente não precisam de radares de alta precisão, da mesma forma que projetos de automóveis auto-dirigidos certamente não podem se basear em computadores de baixo desempenho. O dimensionamento correto dos diferentes tipos de sensores, hardware e algoritmos é um desafio para qualquer projeto de navegação autônoma e compreende um dos principais temas desta pesquisa. 1.1 Sistemas de Navegação Autônoma em Robótica Móvel A Navegação autônoma pode ser definida como uma combinação de três competências fundamentais: auto-localização, planejamento de rotas e mapeamento [9]. No contexto da robótica móvel, um sistema de navegação autônoma é o conjunto de ferramentas e algoritmos responsável pela escolha e pelo controle dos movimentos executados pelo robô. De um ponto de vista funcional, é o sistema de navegação que determina onde o robô está e para onde ele deve se mover. A habilidade de navegar de maneira autônoma é a soma de um conjunto de serviços fundamentais oferecidas pelo sistema de navegação, dentre eles: localização; mapeamento; odometria; planejamento de rotas; e a detecção de obstáculos, marcações e objetos de interesse (targets). De um ponto de vista da arquitetural, um sistema de navegação é a interligação entre os sensores, os algoritmos e os bancos de dados utilizados para oferecer estes serviços. 2 Um sistema de navegação pode ser caracterizado pelo conjunto de sensores que possui, pelo tipo e o grau de organização do ambiente no qual deve navegar e, finalmente, pela estratégia de mapeamento que utiliza [10]. O ambiente de navegação pode ser classificado como interno ou externo, estruturado ou desestruturado, humano ou natural. O tipo de ambiente tem impacto decisivo sobre a escolha dos algoritmos necessários para os serviços de navegação. Quanto ao tipo de mapeamento utilizado, é possı́vel escolher entre abordagens com mapeamento prévio, dinâmico ou sem mapeamento algum. Sistemas baseados em mapeamento são normalmente aplicados em ambientes estruturados e previamente conhecidos. Nestas abordagens, juntamente com o mapa do ambiente, é comum a utilização de marcações no terreno ou o reconhecimento de pontos de referência para auxiliar a localização do robô. Em [11], por exemplo, é apresentado um sistema de navegação de um robô móvel dentro de um escritório comercial. A estratégia de navegação é dividida em duas etapas: global e local. A primeira etapa envolve localizar o robô em um mapa global do ambiente a partir de um conjunto de marcações no terreno. O mapa é representado por um grafo onde os nós são pontos conhecidos do escritório e as arestas são os caminhos entre eles. Cada nó é associado a uma marcação passiva de RFID (Radio Frequency IDentification), que o robô é capaz de identificar a um metro de distância. Ele percorre os corredores do escritório e atualiza sua posição global toda vez que alcança uma destas marcações. A etapa local de navegação, por sua vez, consiste em manter o robô sempre paralelo às paredes dos corredores navegados. O alinhamento com as paredes é feito com base em informações fornecidas por um radar (laser range scanner ) e assegura a localização do robô entre duas marcações consecutivas. Em ambientes desconhecidos a navegação pode ser realizada com ou sem mapeamento dinâmico. Nas abordagens sem mapeamento (reativa), o robô se movimenta sem o auxı́lio de uma descrição prévia do ambiente, simplesmente reagindo aos estı́mulos encontrados (i.e. obstáculos, marcações, alvos). O Roomba [8], por exemplo, é um robô aspirador, bastante popular no mercado de robôs para utilidades domésticas, que utiliza uma abordagem reativa de movimentação. Seu sistema de navegação não depende de um mapeamento prévio do ambiente, ele é capaz de identificar obstáculos como móveis e paredes, de estimar a área do cômodo a ser 3 aspirado e ainda calcular o tempo que ele levará para aspirá-lo. O Roomba também é capaz de localizar e regressar a uma estação base quando os nı́veis de bateria estão baixos. Nos sistemas de mapeamento dinâmico, por sua vez, a representação do ambiente é construı́da a partir das informações de sensores adquiridas durante a navegação. O conjunto de técnicas de mapeamento dinâmico é denominado SLAM (Simultaneous localization and mapping), da sigla em inglês para Mapeamento e Localização Simultâneos [12]. Em [13] é apresentado um sistema de mapeamento dinâmico de ambientes externos e desestruturados baseado em informações coletadas de um sonar. As leituras do sonar são feitas sob múltiplos pontos de vista toda vez que o robô móvel entra em uma região desconhecida. A partir delas o robô é capaz de determinar áreas ocupadas ou vazias ao seu redor e montar um mapa topológico bidimensional do novo ambiente. O mapa serve de base para o planejamento de trajetórias e localização do veı́culo durante a navegação. Uma abordagem semelhante também é apresentada em [14], onde o sistema de mapeamento combina técnicas de visão panorâmica e reconstrução 3D para mapear o ambiente ao redor do robô. Entre robôs móveis de pequeno porte, um dos concorrentes do Roomba, o Neato Botvac 80 [15], utiliza uma estratégia de mapeamento dinâmico para mapear o cômodo a ser aspirado durante a navegação. A escolha da melhor combinação de sensores para um sistema de navegação é quase sempre estabelecida com uma solução para o seguinte problema: como extrair um volume de informações do ambiente suficiente para tomar decisões e assegurar uma movimentação segura entre dois pontos? O problema parte do pressuposto de que quanto maior é o número de informações coletadas sobre o ambiente, mais precisa pode ser a navegação. O principal desafio associado ao projeto de sistemas de navegação autônoma, portanto, é o de como obter o maior volume de informações utilizando estratégias de menor custo e complexidade. Há um número significativo de combinações de sensores para aquisição de informações sobre o ambiente a ser navegado. Além disso, para cada tarefa especı́fica de navegação (i.e. localização, desvio de obstáculos, planejamento de rota) também existe uma grande variedade de algoritmos disponı́veis na literatura. Considerando, por exemplo, o problema de identificação de obstáculos ao redor do robô, é possı́vel 4 escolher entre alternativas baseadas em mapeamento por sonar, como em [16] e [13], ou por visão computacional, como em [17]. Os dois primeiros apresentam soluções poderosas de identificação e mapeamento de obstáculos, mas o custo dos sensores e a complexidade dos algoritmos necessários para implementá-los podem ser proibitivos para projetos menores. O terceiro, por sua vez, apresenta uma solução mais simples baseada em segmentação de imagens obtidas com uma só câmera. O robô é capaz de identificar pela cor os obstáculos em uma imagem, e estimar a distância até eles. Em contrapartida, a aplicação deste modelo em ambientes altamente desestruturados pode ser inviável devido à fatores como: a necessidade de que os obstáculos tenham cores bem diferentes do solo; e o fato de que os obstáculos precisam ser visualizados diretamente pelo robô para serem mapeados. As diferentes combinações de sensores e algoritmos para interpretar o ambiente navegado podem ser separadas em duas abordagens distintas: Fusão de sensores: combinar sensores que sozinhos não oferecem informações suficientes, mas juntos podem gerar uma descrição detalhada sobre um ambiente desconhecido. Técnicas de fusão e filtragem das distribuições de probabilidade dos sensores (e.g. Kalman Filters, Particle Filters, etc.) podem ser utilizadas para combinar as diferentes leituras e aumentar a precisão das tomadas de decisão. Sensor Único: utilizar um único sensor que forneça sozinho um grande volume de informações que possam ser “mineradas” pelo sistema de navegação. A primeira abordagem apresenta resultados positivos com as mais variadas combinações de sensores ([18, 19, 20, 21]). O modelo de fusão de sensores pode oferecer um conjunto diversificado de informações sobre o ambiente. Em conjunto, estas informações podem ser utilizadas para compensar erros de estimativa de sensores individuais. Uma dificuldade particular desta abordagem, além da interligação e gerenciamento dos sensores, é a compatibilização da natureza das informações coletadas. Por exemplo, considerando um sistema de navegação de ambientes internos dotado de um sonar e de sensores infravermelhos de distância, e supondo que o ambiente a ser navegado contenha uma parede de vidro e outra de gesso, os sensores apresentariam informações conflitantes sobre os estes obstáculos [22]; o modelo 5 de navegação, neste caso, precisa considerar as peculiaridades de cada sensor para eliminar conflitos e redundâncias. A segunda abordagem normalmente requer a manipulação de sensores complexos através de algoritmos de alto custo computacional. Embora soe atraente a possibilidade de utilizar um sensor capaz de fornecer um grande volume de informações para navegação, os custos financeiros e computacionais associados à utilização destes dispositivos podem restringir a sua aplicação em projetos de pequeno porte. Projetos de grande porte, por outro lado, podem utilizar uma combinação das duas estratégias para ampliar o grau de independência do dispositivo. O veı́culo autodirigido do Google [23], por exemplo, combina diferentes sensores da seguinte forma: a princı́pio a navegação só é possı́vel em ruas, estradas e avenidas previamente mapeadas pelo Google Maps e Google Street View. O sistema combina informações de GPS com o mapa mundial da empresa para estimar a localização do veı́culo e determinar o melhor caminho até um destino especı́fico. É através destas informações que o veı́culo “sabe” em qual rua ele está e para qual rua ele deve ir no próximo cruzamento. No entanto, somente estas informações não são suficientes para uma localização mais precisa com relação a construções e referências locais. Enquanto o veı́culo trafega, o sistema de navegação compara imagens obtidas por câmeras no topo do carro com as imagens do Google Street View previamente adquiridas e elabora um mapa local para realimentar o sistema de localização. Finalmente, um sistema LIDAR (sigla em inglês para Light Detection And Ranging) de varredura por laser, combinado com sensores infravermelhos, varre todo o entorno do veı́culo e constrói um modelo 3D do ambiente a uma taxa de vinte vezes por segundo, identificando obstáculos dinâmicos do caminho. O resultado é um sistema robusto para navegação em ambientes altamente dinâmicos. 1.1.1 Visão Computacional para Navegação Uma alternativa comum para os projetos que optam pela abordagem de “sensor único” são os sistemas de visão computacional. A partir de uma única imagem do espaço ao redor do veı́culo é possı́vel extrair informações decisivas, como a presença ou não de obstáculos, a localização de objetos de interesse, a textura e a geometria do terreno e, finalmente, um conjunto de caracterı́sticas invariantes no campo de 6 visão do robô (i.e. cantos e bordas). Por conta do volume de informações oferecido pelos sensores visuais, bem como o avanço das técnicas e ferramentas de hardware e software para manipulação de imagens, os sistemas de visão computacional têm sido amplamente utilizados em diferentes projetos de navegação em robótica [14, 24, 25, 26, 27], tanto como sensor principal de navegação quanto como auxiliar em estruturas mais complexas de fusão de sensores. Sistemas de visão computacional podem auxiliar a execução de diferentes tarefas de navegação autônoma, dentre elas: identificação de obstáculos, auto-localização, mapeamento 3D, reconhecimento de marcações, etc. A versatilidade oferecida pelos sistemas de visão possibilita a sua aplicação em diferentes abordagens de navegação. Em [25], por exemplo, os autores apresentam a análise de um mecanismo para navegação em ambientes internos previamente mapeados. O mapa é construı́do inicialmente com o auxı́lio humano, levando o robô a pontos distintos do ambiente e capturando imagens de cada um deles. Em seguida, o robô é posicionado em um ponto qualquer do ambiente e inicia a navegação comparando imagens recém-adquiridas com aquelas capturadas na fase de treinamento; quando a correspondência entre duas imagens atinge um certo nı́vel, o robô identifica que chegou a um ponto conhecido do mapa. Os principais algoritmos utilizados neste sistema envolvem o reconhecimento de padrões e a extração e comparação de caracterı́sticas invariantes (features) presentes nas imagens. Em [28], por outro lado, é apresentado um sistema de navegação reativa para um veı́culo de colheita em um campo de grãos infestado por ervas daninhas. O sistema não utiliza um mapeamento prévio do campo de colheita e o robô orienta a sua trajetória simplesmente com base nas imagens adquiridas durante o percurso. Os autores argumentam que a principal dificuldade para utilizar sistemas de visão em campos deste tipo é o fato de que as ervas possuem a mesma coloração que os grãos, adicionando uma série de ruı́dos que interferem nos cálculos de trajetória. O artigo apresenta um modelo de eliminação do ruı́do causado pelas ervas através da remoção de pequenos componentes conexos nas imagens. Os principais algoritmos utilizados neste caso envolvem identificação de cores, segmentação e reconhecimento de formas (blob detection). As vantagens dos sistemas de visão computacional aplicados à navegação podem ser ainda maiores quando o campo de visão do robô é estendido. Tarefas que 7 envolvem extração de features e identificação de marcações, por exemplo, são beneficiadas quando as marcas e os objetos avaliados permanecem visı́veis por mais tempo. Além disso, quanto maior o campo de visão menos capturas o robô precisa fazer para identificar caracterı́sticas no ambiente ao seu redor. Manobras que precisam ser executadas com várias pausas em sistemas de visão frontal, por exemplo, podem ser simplificadas quando o robô “enxerga” todos os obstáculos a sua volta de uma só vez. Esta relação justifica o interesse em pesquisas de visão omnidirecional para navegação em robótica móvel. 1.1.2 Sistemas de Visão Omnidirecional Sistemas de visão omnidirecional para navegação de robôs são o interesse central deste trabalho. O principal objetivo de um sistema visão omnidirecional é fornecer um panorama de 360◦ do espaço ao redor do robô. As vantagem destes sistemas com relação aos modelos de visão direcionada é justamente o maior campo de visão disponı́vel para a análise em uma só captura. Quanto maior a amplitude angular mais tempo os objetos de interesse permanecem no campo de visão, facilitando a sua identificação e rastreamento. Imagens omnidirecionais também oferecem uma maior invariabilidade às rotações e deslocamentos horizontais, caracterı́sticas essenciais para tarefas de auto-localização [29]. Tradicionalmente, um panorama omnidirecional pode ser obtido de duas formas: 1. Combinando uma câmera e um espelho convexo devidamente alinhados pelo centro focal da câmera; 2. Concatenando segmentos parciais do panorama capturados ao redor de um centro de projeção. Na primeira abordagem, são capturadas imagens polares do entorno da câmera. Para obter um panorama retangular elas precisam passar por procedimentos de conversão entre coordenadas polares e cartesianas. A técnica de conversão de uma imagem polar para um panorama retangular é denominada dewarping (“desenrolar”, em tradução livre). No segundo modelo, os segmentos são inicialmente alinhados sobre um mesmo plano através de uma transformação perspectiva. Em seguida, todos 8 eles são concatenados em uma única imagem retangular. O processo de alinhamento e concatenação dos segmentos é conhecido como image stitching. Os dois modelos de aquisição serão melhor detalhados no terceiro capı́tulo desta dissertação. A principal diferença entre eles, além do método de criação do panorama retangular, é a resolução da imagem final. Se um sensor com resolução de 200x200 pixels for utilizado para capturar quatro segmentos, o panorama final obtido por concatenação terá uma resolução de até 800x200 pixels. Se o mesmo sensor for utilizado em conjunto com um espelho esférico para obtenção de uma imagem polar, o panorama final após o dewarping terá uma resolução em torno de 700x100 pixels. Estas particularidades têm um impacto decisivo na determinação do tipo de aplicação para qual cada modelo é mais adequado. 1.1.3 Desafios de Implementação A utilização de modelos de visão computacional em robótica embarcada pode ser limitada pelo alto custo computacional que eles demandam. Algoritmos de manipulação de imagens, em sua maioria, possuem alta complexidade e exigem grandes quantidades de memória e poder de processamento para serem executados em tempo real. Na maioria das aplicações de navegação as imagens precisam ser capturadas e analisadas em uma velocidade compatı́vel com a movimentação do robô. Por exemplo, para evitar colisões com obstáculos dinâmicos eles precisam ser identificados assim que aparecerem no campo de visão do dispositivo, assegurando um tempo hábil para reação. Restrições deste tipo impõem um desafio significativo em sistemas de pequeno porte, normalmente baseados em microcontroladores e FPGA, onde recursos computacionais são mais limitados. Para sistemas de visão omnidirecional esta dificuldade é ainda mais sensı́vel devido ao maior volume de dados em cada imagem, além do custo adicional dos algoritmos de montagem de um panorama retangular (dewarping ou image stitching). Em geral, a dificuldade de embarcar algoritmos de visão computacional é contornada através da incorporação de elementos de alto nı́vel ao sistema de navegação. Servidores e computadores pessoais normalmente são utilizados para realização das operações mais complexas do sistema. A adição de elementos de alto nı́vel trás consigo necessidade de incorporar todo um aparato necessário para o seu funciona9 mento, como redes de alta velocidade, sistemas operacionais e bibliotecas de software especializadas. Um efeito imediato desta alternativa é o encarecimento dos custos do projeto. Encontrar formas de interligação que comportem a utilização de algoritmos complexos de manipulação de imagens em dispositivos de pequeno porte ainda é um desafio aberto para pesquisa [30]. O conhecimento das etapas que compõem o fluxo de navegação visual pode ajudar a estabelecer uma divisão de tarefas eficiente entre os componentes de cada arquitetura. O fluxo de imagens em um sistema de navegação por visão omnidirecional pode ser dividido em cinco etapas: Aquisição: captura das imagens para processamento. Em sistemas panorâmicos de múltiplas câmeras é importante que as imagens sejam capturadas simultaneamente, evitando, por exemplo, que um mesmo objeto móvel seja visto em vários pontos da imagem. Também é necessário conhecer as distorções de imagem associadas aos sensores e lentes utilizados. Pré-processamento: ajuste e acomodação das imagens de acordo com as necessidades de cada projeto. Nesta etapa podem ser aplicados filtros para suavização de ruı́dos, para extração de bordas, ou até procedimentos de equalização de histogramas e compressão das imagens. Panorama: aplicação dos algoritmos de montagem do panorama retangular (dewarping e image stitching). Análise: algoritmos para interpretação das informações observadas em cada imagem. Exemplos comuns são os algoritmos de extração de caracterı́sticas invariantes, ou as técnicas de segmentação e limiarização de imagens. O conjunto de algoritmos utilizados depende do objetivo associado à navegação. Controle: a partir das informações obtidas na etapa de análise, o sistema de visão toma decisões de controle e movimentação do robô. Do ponto de vista de sistema, é possı́vel concentrar todas as etapas do fluxo de visão em uma única central de processamento, ou distribuı́-las entre os diferentes componentes. As etapas de análise das imagens e controle do dispositivo são as mais complexas e consomem a maior parte do tempo de execução. Por conta disso, 10 é essencial que as etapas de captura, pré-processamento e montagem dos panoramas tenham o máximo de eficiência possı́vel. 1.2 Objetivos O objetivo central deste trabalho é a implementação de um sistema de navegação por visão computacional para robôs móveis de pequeno porte. A ideia é adaptar o fluxo de imagens descrito na seção anterior para as restrições inerentes a este nicho de aplicações. O sistema final deve possuir um campo de visão omnidirecional e implementar tarefas comuns de navegação. A abordagem escolhida para a pesquisa pode ser dividida em duas etapas principais: a primeira delas é uma análise de diferentes arquiteturas de aquisição de imagens omnidirecionais e o impacto de cada uma sobre o desempenho do fluxo visual; já a segunda etapa é a integração de um dos modelos de aquisição a um robô móvel para navegação. Os modelos de aquisição de imagens omnidirecionais são responsáveis pelas três primeiras etapas do fluxo visual de navegação. Cada modelo é composto por uma ou mais câmeras, todas com um microcontrolador de pequeno porte embarcado (smartcam), e uma unidade de central de processamento com maior poder computacional. Na primeira fase, o trabalho procura responder questões do tipo: como deve ser a troca de informações entre os diferentes componentes do sistema? Quais etapas podem ser executadas diretamente na câmera e quais precisam ser encaminhadas para um módulo central de processamento? Quais as vantagens e desvantagens de montar um panorama a partir de vários segmentos ou de uma única imagem polar? Qual a forma mais eficiente de interligar várias câmeras para obter um panorama omnidirecional por concatenação? Para qual tipo de aplicação cada modelo é mais adequado? Ao todo são comparadas três arquiteturas básicas de aquisição nesta etapa do trabalho, duas por image stitching e uma por dewarping. O tempo de aquisição em cada modelo é o principal parâmetro de avaliação. O objetivo é determinar quais arquiteturas são capazes de entregar um panorama omnidirecional em um intervalo compatı́vel com a velocidade de movimentação do robô. Outro parâmetro importante avaliado é a resolução dos panoramas obtidos em cada modelo. Tarefas de navegação baseadas em extração de features, por exemplo, são bastante sensı́veis 11 à resolução das imagens utilizadas, bem como a presença de ruı́dos e distorções, justificando este tipo de análise. Uma vez definidas as vantagens e limitações de cada modelo de aquisição, o segundo objetivo da pesquisa é utilizar a melhor arquitetura como um sistema visual de navegação em um robô móvel. Esta fase compreende as duas últimas etapas do fluxo de imagens para navegação. A separação entre o sistema de aquisição e os sistemas de interpretação de imagens é proposta com o objetivo de facilitar a substituição do primeiro pelos modelos mais eficientes em cada aplicação. O sistema de navegação e o robô móvel se comunicam através de um protocolo pré-definido de troca de mensagens via Bluetooth. Como plataforma de navegação foi utilizado um robô móvel de tração diferencial, montado a partir de um kit Lego Mindstorms NXT [31]. Uma série de experimentos de navegação autônoma foram realizados para avaliar as potencialidades e as restrições da integração proposta em um contexto real de aplicação. 1.3 Organização da Dissertação Esta dissertação é um estudo das formas de aquisição de imagens omnidirecionais para sistemas de navegação visual em robôs móveis de pequeno porte. Aqui, entendese por “sistema de navegação” o conjunto de elementos que realizam tarefas de localização, mapeamento e cálculo de trajetórias. São analisados os sistemas de navegação baseados em visão computacional, destinados à ambientes internos e estruturados, sem mapeamento ou com mapeamento parcial. A linha geral para orientação da pesquisa é o fluxo de imagens necessário para navegação visual, composto pelas etapas de captura, pré-processamento, montagem de um panorama omnidirecional, análise e controle de movimentação. Inicialmente, o trabalho concentra esforços na análise e implementação de arquiteturas de aquisição de panoramas omnidirecionais. São avaliados quatro protótipos de aquisição, três por image stitching (monocular, multicâmeras em barramento e multicâmeras em cadeia) e um deles por dewarping (catadióptrico). A análise de arquiteturas de aquisição compreende as três primeiras etapas do fluxo de imagens. Em seguida, a atenção do trabalho é direcionada para a aplicação de um modelo de aquisição 12 em um contexto real de navegação. Um protótipo catadióptrico de aquisição é integrado à um robô móvel para a realização de experimentos de rastreamento de objetos, mapeamento dinâmico de obstáculos e localização. A fundamentação teórica necessária para a realização deste trabalho é apresentada nos Capı́tulos 2 e 3. O Capı́tulo 2 descreve os princı́pios de navegação por visão computacional e apresenta os algoritmos utilizados para implementar os serviços de identificação de obstáculos, rastreamento de objetos, localização e mapeamento. Os serviços de navegação descritos no Capı́tulo 2 servem de fundamentação para os experimentos descritos no Capı́tulo 5 desta dissertação. Após a descrição dos algoritmos de navegação por visão computacional, o Capı́tulo 2 ainda apresenta a arquitetura do sistema de navegação por visão proposto e o modelo cinemático para um robô móvel de tração diferencial. A interface e o protocolo de comunicação entre o sistema de navegação e o robô também é descrita no Capı́tulo 2. No Capı́tulo 3 são apresentados os fundamentos matemáticos para as duas formas tradicionais de aquisição de um panorama omnidirecional, stitching e dewarping. O capı́tulo serve de fundamentação para a implementação dos protótipos de aquisição, descritos no Capı́tulo 4. No Capı́tulo 4 também são apresentadas as análises de desempenho dos modelos de aquisição. As análises são baseadas no tempo de aquisição e na resolução dos panoramas. O objetivo do Capı́tulo 4 é avaliar as possı́veis formas de interligação entre as câmeras e os elementos de processamento para obter o melhor desempenho para navegação. O Capı́tulo 5 apresenta o robô móvel construı́do e uma série de experimentos de navegação com o modelo catadióptrico de visão omnidirecional. Os experimentos realizados compreendem os serviços de rastreamento de objetos, mapeamento dinâmico e localização. A metodologia e os resultados de cada experimento também são apresentados neste capı́tulo. Finalmente, o Capı́tulo 6 discute os resultados obtidos nos Capı́tulos 4 e 5 e apresenta as conclusões gerais do trabalho. 13 Capı́tulo 2 Navegação por Visão Computacional Navegação autônoma pode ser definida como um problema de como movimentar um robô entre dois pontos de forma segura e eficiente, sem intervenção humana direta. Segurança, neste contexto, significa ser capaz de detectar possı́veis obstáculos, evitando colisões e, consequentemente, danos ao robô e ao ambiente. A eficiência da movimentação, por sua vez, sugere que sejam considerados fatores como o consumo de energia, a quantidade de manobras, a velocidade de deslocamento, a escolha do melhor caminho, etc. [32]. Um veı́culo de navegação autônoma, portanto, deve ser capaz de se movimentar entre um ponto A e um ponto B, escolhendo o melhor caminho possı́vel, realizando o menor número de manobras, evitando obstáculos, reconhecendo marcações e determinando sua posição no ambiente navegado, tudo isso sem auxı́lio humano. O que se define por navegação é, de um ponto de vista computacional, a soma de algumas tarefas fundamentais para atender a esses requisitos de segurança e eficiência. Em qualquer ambiente de navegação a autonomia do robô depende diretamente da capacidade de receber informações sobre o espaço ao seu redor e tomar decisões de movimentação de acordo com elas. Quanto mais informações o robô obtiver, mais precisas podem ser suas manobras. Outro fator decisivo para a qualidade da navegação é o conjunto de suposições que o robô faz sobre o mundo navegado. É razoável supor, por exemplo, que ambientes humanos são normalmente planos e regulares, com linhas que podem ser seguidas e pontos de referência que podem 14 ser detectados; ao mesmo tempo é possı́vel admitir que ambientes naturais são mais acidentados e sujeitos a variações de iluminação e textura [27]. Os tipos de sensores utilizados para “observar” o ambiente e o conjunto de suposições sobre ele determinam a estratégia de navegação, assim como quais das tarefas são mais decisivas. Técnicas de visão computacional são especialmente atraentes para sistemas de navegação autônoma, porque fornecem, ao mesmo tempo, um grande volume de dados sobre o ambiente, juntamente com um conjunto de mecanismos eficientes para interpretação destes dados. Informações como cor, textura e linhas de fuga podem ajudar o robô a construir um modelo de mundo bastante detalhado, com a vantagem adicional do uso de um sensor apenas. A popularização de câmeras e sensores visuais (e.g. webcams, smartcams, Kinect, etc.) nos últimos anos também contribuiu para uma maior utilização das técnicas de visão em sistemas robóticos. Todos estes fatores atraı́ram um enorme interesse da academia e da indústria nas últimas décadas, como pode ser observado em [10] e [33]. Existem diversas formas de classificar os sistemas de navegação por visão computacional. Diferentes abordagens podem ser classificadas quanto ao tipo de ambiente navegado (interno ou externo), o grau de organização do ambiente (estruturados ou desestruturados) e o tipo de mapeamento utilizado (com ou sem mapeamento, mapeamento dinâmico, etc.). Para cada problema de navegação abordado existe também uma imensa variedade de algoritmos e técnicas de otimização disponı́veis na literatura. Problemas de detecção de obstáculos, por exemplo, podem ser abordados de diferentes formas de acordo com o ambiente de aplicação [17, 34, 35, 36]. A mesma variedade de soluções pode ser encontrada para cada um dos problemas fundamentais de navegação. Este trabalho restringe o escopo de navegação à realização de três tarefas fundamentais: rastreamento de objetos, detecção de obstáculos e auto-localização. O objetivo principal é submeter as imagens omnidirecionais, obtidas pelas arquiteturas descritas no Capı́tulo 4, a algoritmos que realizem estas tarefas. Para cada problema foi escolhido um algoritmo especı́fico e todos eles foram incorporados como funções básicas do sistema de navegação. Embora os algoritmos implementados não sejam os mais precisos em cada categoria, a escolha foi pautada principalmente pela neces- 15 sidade de incorporá-los em um ambiente embarcado de pequeno poder computacional. As arquiteturas propostas neste trabalho assumem que todo o processamento de navegação deve ser feito pelo próprio sistema de visão embarcado, evitando a necessidade de encaminhar imagens para elementos de alto nı́vel como servidores ou computadores pessoais. Os algoritmos escolhidos são descritos na Seção 2.1. O modelo geral para a arquitetura do sistema de navegação é apresentado na Seção 2.2. A arquitetura é baseada em um Raspberry Pi [37], para controle visual, e um mini-veı́culo montado a partir de um kit Lego Mindstorms [31], para navegação. As interligações entre os componentes de hardware e software do sistema também serão descritas nesta seção. 2.1 Algoritmos de Navegação por Visão Computacional Os algoritmos apresentados nesta seção foram escolhidos para avaliar as arquiteturas de aquisição omnidirecional para a realização de tarefas básicas de navegação autônoma. Eles foram incorporados ao firmware do sistema navegação sob a restrição de serem executados em um tempo compatı́vel com a velocidade de navegação. O hardware utilizado para processamento é um Raspberry Pi modelo B [38]. 2.1.1 Identificação de Obstáculos O algoritmo de identificação de obstáculos implementado é uma variação dos procedimentos descritos em [17] e [36], baseado na diferença entre a cor do solo e do restante do ambiente. A técnica é adequada para ambientes internos (indoor ) com obstáculos estáticos e onde a cor do solo é uniforme. Supondo que a imagem analisada é retangular, com dimensões W × H e com um referencial de origem no topo superior esquerdo, o algoritmo assume que os primeiros pixels a partir do centro inferior (i.e. W/2, H) correspondem à cor do solo à frente do robô. Ele retira uma amostra nesta região que servirá como base para a classificação do restante da imagem. Em seguida, partindo da última linha horizontal em direção ao topo da imagem, o algoritmo classifica cada pixel de acordo com a distância para a cor do solo. Pixels com valores próximos são classificados como solo e pintados de ama16 relo. O resultado deste procedimento inicial é ilustrado na Figura 2.1b. O solo é percebido como um grande componente conexo na imagem, possibilitando estimar quanto espaço que o robô tem à sua frente. (a) Visão original (b) Identificação do solo (c) Linhas de trajetórias possı́veis Figura 2.1: Procedimento de detecção de obstáculos por diferenciação da cor do solo O passo seguinte é determinar uma área livre para movimentação. O algoritmo traça linhas radiais a partir do ponto de origem do robô, definindo possı́veis trajetórias para o veı́culo neste ambiente. O robô pode desviar de obstáculos próximos seguindo as linhas mais longas. Se nenhuma linha estiver disponı́vel, ou caso elas sejam curtas demais, o robô pode executar uma rotação e avaliar o cenário de outro ponto de vista. A Figura 2.1c ilustra o resultado do procedimento. A distância entre o robô e o obstáculo pode ser estimada como uma função direta do comprimento das linhas de trajetórias. Desviar de um obstáculo requer movimentar a frente do robô na direção das linhas mais longas. Dispositivos com visão omnidirecional podem aproveitar o campo de visão estendido para decidir qual a melhor “rota de fuga” com apenas uma observação. 17 O algoritmo apresenta algumas limitações com relação à variações de iluminação e relevo do terreno. Seu funcionamento é baseado em três suposições sobre o ambiente [39]: • Obstáculos devem ter coloração diferente da do solo; • O solo deve ser plano e de cor uniforme; • O cenário não pode conter obstáculos suspensos, separados do solo. Para reduzir o efeito de manchas e ruı́dos no solo é possı́vel convoluir a imagem original com um filtro-passa baixa antes da detecção. O sistema de cores utilizado também pode ter impacto sobre o desempenho do algoritmo. Imagens em RGB (Red Blue Green) são mais sensı́veis a variações de iluminação, por exemplo, o que pode gerar detecção de falsos obstáculos à frente do robô. Converter as imagens capturadas para um sistema HSV (Hue Saturation Value) pode eliminar alguns problemas de iluminação. 2.1.2 Rastreamento de Objetos Uma das formas de classificar os diferentes sistemas de navegação autônoma é com relação ao objetivo da navegação. Em algumas aplicações o robô navega pelo ambiente sem nenhuma rota ou destino definidos. Sondas espaciais e veı́culos de reconhecimento de áreas inacessı́veis são exemplos destas aplicações. Outro grupo de aplicações inclui os sistemas que precisam percorrer uma trajetória predefinida, cobrir uma determinada área de atuação ou procurar um lugar especı́fico dentro de um espaço de navegação mais extenso. Um robô aspirador de pó como o Roomba, por exemplo, precisa elaborar uma estratégia para cobrir todo o espaço de atuação (i.e. cômodos de uma casa) e retornar à estação base para recarga das baterias. Já um robô seguidor de linhas, por outro lado, tem uma trajetória pré-estabelecida pelas marcações no solo. Em ambos os casos, o propósito (ou missão) da navegação tem um impacto decisivo no projeto dos algoritmos e sistemas de controle do robô. Alguns sistemas de navegação autônoma utilizam técnicas de rastreamento de objetos (Target Tracking) para determinar o tipo de movimentação do robô [40, 41]. Nestas aplicações, detectar um objeto especı́fico (e.g. marcações, pontos de 18 referência, rostos, etc.) pode servir para orientar o veı́culo durante a execução de uma tarefa, indicar uma determinada direção a ser tomada ou mesmo indicar que o destino foi atingido. Em aplicações de futebol de robô, por exemplo, é comum utilizar algoritmos de detecção e rastreamento da bola para orientar a movimentação dos jogadores [42, 43, 44]. Existe uma grande variedade de soluções para rastreamento, quase sempre determinadas pelo tipo o ambiente de navegação e o tipo de objeto detectados [45]. Algumas das dificuldades associadas à detecção e rastreamento de objetos são: • Ruı́dos presentes na imagem; • Padrões complexos de movimentação dos objetos; • Sobreposição parcial ou total do objeto; • Variações na iluminação do ambiente; • Desempenho em aplicações de tempo real. Para reduzir o impacto destes fatores, limitamos o objetivo dos experimentos de navegação neste trabalho ao rastreamento de um objeto rı́gido, de coloração uniforme e em ambientes internos. O rastreamento pode ser definido com um problema de localizar um determinado objeto dentro da imagem capturada e orientar o robô em direção a ele. A posição do objeto com relação à frente do robô deve servir de entrada para o sistema de controle servo-visual. A navegação terá como objetivo minimizar a distância entre a posição do objeto e o centro de referência da visão do robô. O primeiro problema de implementação do sistema de rastreamento é determinar quais caracterı́sticas melhor diferenciam o objeto de interesse do resto do ambiente. O melhor cenário ocorre quando o objeto tem caracterı́sticas visuais únicas (e.g. cor, textura, formato) no cenário observado. Corpos rı́gidos de coloração uniforme podem ser detectados rapidamente por algoritmos de limiarização (threshold ) de imagens e detecção de contornos [46]. A Figura 2.2 ilustra o resultado da detecção de um sólido vermelho por limiarização. 19 (a) Visão original (b) Imagem binarizada (c) Objeto detectado Figura 2.2: Procedimento de detecção de objetos por threshold de uma cor especı́fica. Nesta abordagem, a escolha do sistema de cores para representação das imagens é de fundamental importância. Como é argumentado em [47], o sistema de cores RGB é mais indicado para detecção de objetos multicoloridos. No entanto, o RGB também é mais sensı́vel à variações de iluminação e possui uma transição entre pixels bastante ruidosa. Para reduzir a sensibilidade a estas variações, as imagens analisadas podem ser convertidas para o sistema de cores HSV antes da detecção. O algoritmo completo para limiarização da imagem é apresentado na Figura 2.3. Na etapa de classificação, cada pixel é comparado com relação aos limites HSV inferior e superior da cor procurada. Pixels fora desta região são convertidos para preto e os demais para branco (Figura 2.2b). O contorno aproximado do objeto é detectado a partir da imagem binarizada (Figura 2.2c). Finalmente, supondo que a câmera foi posicionada no topo do robô e apontada para a frente, a posição relativa do objeto pode ser determinada pela distância até o centro da imagem. A principal vantagem da técnica de detecção por threshold é a relativa simplicidade do algoritmo. O sistema pode ser rapidamente implementado com OpenCV [48] e também não requer uma fase treinamento para detecção. Dentre as principais desvantagens, porém, estão uma grande sensibilidade à variações de iluminação e as restrições com relação ao tipo de ambiente navegado. Estes fatores podem limitar o 20 Figura 2.3: Algoritmo de Limiarização de imagens para detectar um objeto de cor especı́fica. campo de aplicações possı́veis. Para ambientes e objetos mais complexos, é comum utilizar técnicas de detecção de caracterı́sticas locais invariantes (local scale invariant features) [49, 50, 51]. Algoritmos de extração de features, como são conhecidos, localizam caracterı́sticas do objeto que são invariantes à rotação, translação e ao redimensionamento para localizá-lo em outras imagens. Estas caracterı́sticas são chamadas de pontos-chave (keypoints) e compreendem regiões da imagem contendo cantos (corners). Inicialmente é extraı́do um conjunto de pontos-chave de uma imagem de treinamento contendo apenas o objeto a ser detectado. Juntamente com a lista de pontos chaves, também são calculados uma série de descritores sobre a região ao redor de cada ponto-chave. A etapa seguinte consiste em procurar os mesmos pontos-chaves e descritores do objeto nas imagens capturadas durante a navegação (imagens de busca). Quando um número suficiente de combinações (matches) é atingido, o objeto é localizado. O contorno do objeto é determinado calculando uma matriz de homografia que determina a transformação perspectiva entre a imagem de treinamento e a imagem de busca. A Figura 2.4 resume o procedimento de detecção por comparação de 21 features. Figura 2.4: Algoritmo de detecção de objetos utilizando detecção de features. Dentre os algoritmos mais comuns de extração de features estão o SIFT [50] e suas variações. O SIFT é um algoritmo bastante robusto e de alta-precisão, resistente à variações de iluminação e oclusões parciais do objeto. No entanto, uma das desvantagens do SIFT em ambientes embarcados é o custo computacional e, consequentemente, o tempo de execução que ele demanda. Como alternativa, o SURF (Speed-up Robust Features), proposto inicialmente em [51], é uma variação do SIFT original que reduz consideravelmente o tempo necessário de processamento, facilitando a aplicação da técnica em plataformas de baixo poder computacional. A Figura 2.5a apresenta um exemplo de detecção de um objeto utilizando o SURF como detector de features. Na Figura 2.5b o mesmo objeto é encontrado mesmo estando parcialmente encoberto. Cabe ressaltar que a fase de treinamento do processo de extração de features, onde são detectados os pontos-chave e os descritores do objeto alvo, precisa ser realizada apenas durante o inı́cio do procedimento. 22 (a) (b) Figura 2.5: Detecção de objetos por comparação de features. 2.1.3 Localização e Mapeamento Auto-localização é uma habilidade fundamental para implementação de robôs móveis autônomos. De maneira geral, ela está associada à solução de perguntas como: Onde eu estou? Como cheguei aqui? E como faço para chegar até outro ponto? As respostas para estas questões estão diretamente relacionadas ao tipo de representação do ambiente utilizada em cada projeto. O ambiente navegado é normalmente representado por um mapa com estrutura e informações inteligı́veis para o robô. Dentre outros aspectos, o tipo de mapeamento determina como o robô “entende” a sua posição atual e a do ponto de destino, assim como a lista de movimentos que ele precisa executar para ir de um a outro. O formato e a posição dos obstáculos e das rotas livres entre dois pontos também podem ser representados com mais ou menos detalhes dependendo da estratégia de mapeamento escolhida. Existem várias estratégias de mapeamento disponı́veis para navegação, em sua maioria probabilı́sticas e com diferentes nı́veis de precisão [?]. Dois exemplos de mapeamento comuns para aplicações em ambientes internos e semi-estruturados são as grades de ocupação e os mapas topológicos. As grades de ocupação dividem o espaço global de navegação em pequenas áreas de formato regular e com dimensões próximas a do robô. Cada pequena área é classificada como ocupada, ou não, indicando por onde o robô deve transitar [52]. O mapeamento das áreas ocupadas pode ser feito previamente durante o projeto do sistema, ou pelo próprio robô com base nas leituras de sensores. Neste caso, 23 as grades de ocupação são mais adequadas para sistemas cujos sensores oferecem poucos detalhes geométricos sobre o ambiente, como os sonares [53]. Um mapa topológico, por sua vez, representa um determinado ambiente como um grafo, onde os nós são pontos conhecidos e as arestas são representações abstratas do caminho entre eles. Uma possı́vel vantagem dos mapas topológicos é que o sistema não precisa conhecer a geografia exata do ambiente para determinar uma aresta. Para navegar entre dois nós consecutivos, o robô precisa apenas saber em qual aresta ele está e como manter-se sobre ela. Esta caracterı́stica dos mapas topológicos facilita o mapeamento de novos ambientes. As Figuras 2.6a e 2.6b ilustram as duas estratégias de mapeamento para um mesmo ambiente interno. (a) Grade de ocupação (b) Mapa topológico Figura 2.6: Estratégias de mapeamento de um ambiente interno. Uma vez determinada a forma de representação do ambiente, a habilidade de auto-localização pode ser dividida em três problemas interdependentes: 1. Como determinar a posição atual do robô a partir da ponto inicial de partida e do registro de todos os deslocamentos realizados até então? 2. Como determinar a posição atual do robô sem nenhum conhecimento prévio sobre o ponto de partida ou a quantidade de deslocamentos? 24 3. Como mapear dinamicamente o ambiente à medida que ele é navegado? O último ı́tem é necessário para assegurar uma maior autonomia para o robô móvel. Um mapeamento prévio do espaço de navegação, embora facilite a implementação do sistema, acaba reduzindo a flexibilidade de aplicação em novos ambientes. A autonomia e a flexibilidade de navegação de um robô móvel crescem de acordo com a sua habilidade de mapear dinamicamente novos ambientes. Nestes casos, o mapeamento é feito com base nas leituras do conjunto de sensores disponı́veis no sistema à medida que ele navega. O problema de como determinar a posição atual do robô em um mapa, por sua vez, pode ser resolvido com o auxı́lio de técnicas de odometria, com o uso de marcações no terreno, ou por aparência (i.e. estado) dos sensores. No primeiro caso o sistema mantém um registro de todos os deslocamentos realizados pelo robô a partir de uma posição inicial conhecida. É possı́vel cruzar as informações de deslocamentos com as medidas armazenadas no mapa para determinar a posição atual do sistema. O procedimento depende principalmente de um sensor capaz de medir com precisão os deslocamentos realizados. Uma desvantagem desta abordagem, porém, é o erro acumulado pelas leituras após um certo tempo de navegação. Os registros de deslocamento normalmente acumulam um erro devido às perdas causadas por forças dissipativas e pela própria imprecisão dos sensores. De tempos em tempos é necessário reiniciar o registro deslocando o robô para um ponto conhecido, ou corrigindo o erro acumulado por realimentação de outros sensores. Quando a posição inicial e o registro de deslocamentos do robô não são conhecidos, a localização atual do robô pode ser determinada com o auxı́lio de marcações artificiais no terreno. Aplicações comuns desta abordagem utilizam marcações RFID em pontos conhecidos, sendo cada tag associada à um nó do grafo topológico ou a uma posição na grade de ocupação. No entanto, embora esta abordagem seja mais flexı́vel do que o mapeamento prévio e completo do ambiente, ela ainda exige que o cenário seja inicialmente “preparado” para o sistema de navegação. Uma alternativa mais flexı́vel é determinar a posição do robô comparando o estado atual dos sensores (aparência) com o estado esperado em cada ponto do mapa. Sistemas de localização visual podem ser encaixados nesta categoria. Neste contexto, algoritmos de extração e comparação de features podem ser utilizados em ambientes 25 parcialmente conhecidos [54, 55, 56]. Normalmente o procedimento é dividido em duas fases: na primeira etapa são adquiridas diferentes imagens de pontos especı́ficos do ambiente. Um conjunto de pontos-chave e descritores é extraı́do de cada imagem durante o treinamento e armazenado em um banco de dados. Em seguida, durante a navegação, o robô pode comparar imagens recém-adquiridas (candidatas) com as imagens previamente armazenadas. Quando a comparação atinge um número satisfatório de combinações (matches), o robô identifica que chegou a um lugar conhecido. Esta abordagem também pode ser utilizada em sistemas de mapeamento dinâmico, onde um robô pode ir montando um mapa de conexões entre os diferentes pontos de referência à medida que vai atingindo cada um deles. Uma dificuldade inerente às técnicas de localização por visão computacional é a sensibilidade à rotações no ponto de vista do robô. Algumas comparações podem falhar em situações em que o robô não está na mesma posição em que a imagem de referência foi capturada. Para contornar este problema, é comum optar por sistemas de visão omnidirecional para localização, como em [55] e [56]. Imagens omnidirecionais são menos sensı́veis à rotações e também permitem que pontoschave permaneçam visı́veis por mais tempo. Manter um fluxo de comparação de imagens compatı́vel com a velocidade de navegação do robô também é um problema para este tipo de sistema. A necessidade de extrair e comparar features em tempo de navegação pode ser desafiadora, mesmo utilizando algoritmos mais eficientes como o SURF. Uma alternativa para melhorar o desempenho nestes casos é apontada em [57], onde o conjunto inicial de imagens candidatas é “filtrado” por um algoritmo de comparação mais simples antes de serem submetidas ao SIFT. A distância euclidiana entre os histogramas das imagens recémcapturadas e das imagens previamente armazenadas serve de base para a seleção inicial de candidatas. Somente imagens com uma pequena distância em relação aos nós conhecidos são encaminhadas para o algoritmo de extração e comparação de features. O cálculo de distâncias euclidianas tem um tempo de execução muito menor comparado à extração de features, o que torna a filtragem inicial bastante vantajosa. 26 2.2 Sistema de Navegação O sistema de navegação proposto neste trabalho utiliza um Raspberry Pi modelo B como plataforma para de processamento de imagens e controle de movimentação, e um mini-veı́culo de tração diferencial montado a partir de um kit Lego Mindstorms NXT, equipado com um microcontrolador Atmel AT91SAM7S256 de 32 bits. A aquisição das imagens para controle de navegação é feita utilizando uma ou mais CMUCam3, ou uma câmera especı́fica para Raspberry Pi. A comunicação entre o Raspberry Pi e veı́culo NXT é via Bluetooth. Nesta seção serão apresentados o modelo geral de arquitetura do sistema e modelo dinâmico do veı́culo diferencial. 2.2.1 Arquitetura do Sistema de Navegação O modelo geral de navegação é composto pelos elementos apresentados na Figura 2.7. A câmera é o componente responsável pela captura e compressão das imagens para navegação. Nos modelos monocular e multicâmeras, ambos descritos no Capı́tulo 4, as imagens são capturadas por uma ou mais CMUCam3. No modelo catadióptrico, a captura das imagens é feita por uma câmera especı́fica para Raspberry Pi. Figura 2.7: Divisão geral de arquitetura. Uma vez capturadas, as imagens são encaminhadas para a unidade de controle de navegação, o Raspberry Pi. É nesta unidade que são executados os algoritmos de identificação de obstáculos, rastreamento de objetos e localização do robô. O Raspberry Pi também controla o estado atual do veı́culo, isto é, a velocidade das rodas, o ângulo de orientação e a posição global dentro do espaço de navegação. Todas estas variáveis são definidas de acordo com a missão de navegação associada ao robô. O módulo de movimentação Lego NXT é responsável pelo acionamento dos mo- 27 tores de acordo com as informações enviadas pela unidade central de controle. O controle de cada velocidade é feito a partir dos comandos enviados pelo Raspberry Pi via Bluetooth. As mensagens trocadas ente a unidade de controle e veı́culo são comandos de texto (em ASCII) definidos na Tabela 2.1. Após a realização de cada comando, o Lego envia uma resposta ACK ao sistema de navegação indicando a conclusão da tarefa. O Raspberry Pi pode escolher esperar ou não o sinal de ACK de acordo com a necessidade, mas é preciso considerar que a velocidade de movimentação do robô é sempre muito menor do que a de processamento de novas imagens. Esperar o sinal de sincronia ACK serve para garantir que nenhuma nova imagem é capturada enquanto o robô esteja se movendo. Tabela 2.1: Comandos de movimentação para controle do veı́culo Lego. COMANDO DESCRIÇÃO HS Configura os motores para alta velocidade (180◦ /s) LS Configura os motores para baixa velocidade (90◦ /s) MV [D] Movimenta o veı́culo em linha reta por uma distância D, em centı́metros RO [A] Rotaciona o eixo central do veı́culo por A graus RS [A] Configura a velocidade do motor direito para A graus por segundo LS [A] Configura a velocidade do motor esquerdo para A graus por segundo ST Para a rotação dos motores imediatamente A separação fı́sica entre a unidade de controle e o tijolo (brick ) NXT facilita a substituição futura do veı́culo, desde que seja mantido o protocolo de troca de mensagens entre os componentes. A Figura 2.8 mostra um exemplo do procedimento de troca de mensagens entre o Raspberry Pi e o Lego NXT. O veı́culo Lego NXT é controlado por um sistema operacional Lejos [58], que oferece uma interface de programação em Java para manipular sensores e atuadores ligados ao sistema. Alguns dos principais métodos disponı́veis para controle de rotação dos motores são: • NXTRegulatedMotor.setSpeed(int x): configura a velocidade de rotação do motor à uma razão de x graus por segundo. • NXTRegulatedMotor.rotate (int z): rotaciona o motor por um ângulo especificado pelo parâmetro z, em graus, a partir da posição atual. 28 Figura 2.8: Sequência de comunicação entre o Raspberry Pi e o tijolo Lego NXT • NXTRegulatedMotor.forward (): faz o motor girar no sentido horário até que um método de parada seja chamado. • NXTRegulatedMotor.backward (): faz o motor girar no sentido anti-horário até que um método de parada seja chamado. A velocidade dos motores é definida em termos de graus por segundo. Cada roda é ligada diretamente ao motor mantendo um plano perpendicular ao solo. O modelo matemático de movimentação do veı́culo será descrito na próxima seção. 2.2.2 Modelo de Navegação Um modelo do veı́culo de navegação é representado na Figura 2.9. O robô possui tração diferencial e se movimenta sobre um plano 2D com três graus de liberdade. A posição atual do robô em qualquer instante é definida como p(t) = (x, y, θ), com relação à origem do plano global de referência para navegação. O ângulo θ, com valores entre -π e π, indica a rotação do plano local do veı́culo com relação ao eixo x do plano global. Uma discussão detalhada sobre o projeto de robôs móveis de tração diferencial e sobre o modelo cinemático associado a eles pode ser encontrada em [59]. O controle de movimentação do robô é feito a partir da diferença entre as velocidades lineares da roda esquerda (vE (t)) e direita (vD (t)). A velocidade de translação 29 Figura 2.9: Representação do veı́culo em um plano de navegação do ponto central do eixo entre as rodas é definida pela Equação 2.1. O veı́culo se movimenta realizando uma trajetória circular com um Centro Instantâneo de Curvatura (CIC) localizado a uma distância R do ponto central entre as rodas, como mostra a Figura 2.10. v(t) = (vD (t) + vE (t))/2 (2.1) Figura 2.10: Representação do Centro Instantâneo de Curvatura (C.I.C.) O raio R com relação ao Centro Instantâneo de Curvatura e a velocidade angular de rotação podem ser determinados através das Equações 2.2 e 2.3, conhecendo-se as velocidades instantâneas de cada roda. Quando as velocidades vD (t) e vE (t) são iguais, o raio de curvatura é infinito e a velocidade angular é zero, o veı́culo se movimenta em linha reta. Caso as velocidades sejam iguais, mas com sinais contrários, o raio de curvatura é zero, fazendo com que o robô gire sobre o ponto central entre as rodas. Finalmente, quando somente uma das rodas tem velocidade 30 zero, o raio de curvatura será L/2 (sendo L a distância entre as duas rodas) fazendo com que o robô gire sobre a roda parada. R(t) = L vD (t) + vE (t) × 2 vD (t) − vE (t) (2.2) vD (t) − vE (t) L (2.3) ω(t) = Conhecendo a velocidade linear das rodas e o ponto atual do veı́culo com relação ao plano de referência global, é possı́vel determinar a posição futura do veı́culo utilizando a posição do centro instantâneo de curvatura. A posição do CIC é determinada através da Equação 2.4. Determina-se a nova posição do veı́culo (p(t + δt)) através da Equação 2.5. Caso o robô esteja se movimentando em linha reta (R infinito e ω = 0), a posição futura pode ser determinada de forma mais simples pela Equação 2.6 CIC(t) = (x(t) − R sin(θ(t)), y(t) + R cos(θ(t))) (2.4) CICx cos(ωδt) − sin(ωδt) 0 R sin(θ(t)) x(t + δt) p(t + δt) = y(t + δt) = sin(ωδt) cos(ωδt) 0 R cos(θ(t)) + CICy (2.5) ωδt 0 0 1 θ(t) θ(t + δt) x(t) + v(t) cos(θ(t))δt x(t + δt) p(t + δt) = y(t + δt) = y(t) + v(t) sin(θ(t))δt θ(t) θ(t + δt) (2.6) O modelo descrito até aqui assume o seguinte conjunto de restrições sobre o veı́culo e o ambiente de navegação: • O plano das rodas deve ser sempre vertical; • Deve haver apenas um ponto de contato entre a roda e solo; • Não pode haver deslizamento entre a roda e o solo; • O movimento do veı́culo ocorre somente sobre o plano horizontal; • As rodas não deformam; 31 • As rodas são unidas por um chassi rı́gido. O modelo também desconsidera uma série de problemas do mundo fı́sico, especialmente o atrito entre a roda e o solo. As equações assumem que é possı́vel determinar com precisão a velocidade de cada roda em qualquer instante. As velocidades instantâneas vD (t) e vE (t) dependem da velocidade angular ϕ e do raio r de cada roda, de acordo com a Equação 2.7. vx (t) = rx × ϕx (2.7) No entanto, esta relação pode ser comprometida por uma uma série de fatores imprecisos, por exemplo: a potência aplicada aos motores, a carga da bateria, o peso do veı́culo, o coeficiente de atrito do solo e pequenas deformações na roda. Todos estes fatores têm impacto sobre a determinação da velocidade angular e do raio, dificultando a realização de medidas com precisão. Como resultado o sistema acumula um erro de posicionamento à medida que vai se deslocando no ambiente. Após algum tempo de navegação as medidas previstas pelas equações cinemáticas podem estar totalmente invalidadas, impondo a necessidade do robô atualizar sua posição por meio de marcações ou outros mecanismos de localização. 32 Capı́tulo 3 Aquisição de Imagens Omnidirecionais Um panorama omnidirecional é uma imagem retangular com um campo de visão horizontal de 360 graus. Imagens deste tipo possuem uma grande variedade de aplicações em áreas como vigilância, monitoramento, telepresença e robótica. Hoje em dia, uma grande quantidade de câmeras e telefones celulares oferece suporte para a criação de panoramas omnidirecionais com extrema facilidade, estimulando o surgimento de novas aplicações em diferentes áreas. Em robótica, sistemas de navegação autônoma são uma das principais áreas de aplicação para imagens panorâmicas, beneficiando-se especialmente do amplo campo de visão oferecido por elas. No entanto, apesar da popularização e da variedade de ferramentas disponı́veis para a aquisição, alguns desafios ainda precisam ser superados. Como exemplo, é possı́vel citar os problemas de captura e manipulação de panoramas omnidirecionais em sistemas de pequeno porte que exigem altas taxas de aquisição. Os mecanismos envolvidos nestas tarefas são computacionalmente caros e podem exigir um tempo de processamento muito alto para aplicações de tempo real. A análise dos mecanismos envolvidos na aquisição destas imagens é importante para a otimização e a eliminação de gargalos em sistemas de visão omnidirecional. Há três formas tradicionais de obter um panorama omnidirecional: 1. Rotacionando uma única câmera em torno do seu centro óptico [60] (monocular); 33 2. Utilizando várias câmeras dispostas em cı́rculo, cada uma responsável por uma fração angular do campo de visão (multicâmeras) [61]; 3. Com uma única câmera com o centro óptico alinhado a um espelho convexo (catadióptrico)[29]. Nos modelos monocular e multicâmeras, o panorama omnidirecional é obtido pela concatenação de vários segmentos consecutivos em um mesmo plano; já no modelo catadióptrico, o panorama retangular é obtido após a transformação (dewarping) da imagem esférica capturada. Apesar das diferenças estruturais, o projeto de sistemas de visão omnidirecional precisa considerar três fatores fundamentais [62]: a resolução do panorama final; o campo de visão compreendido e o tempo total de aquisição. Os modelos podem ser comparados entre si de acordo com estes elementos. Os sistemas monocular e multicâmeras oferecem grande resolução e um campo de visão ajustável, porém, normalmente exigem um tempo de aquisição mais longo. Já os sistemas catadióptricos apresentam o menor tempo de aquisição, mas também as menores resoluções. A escolha da estratégia de aquisição para um sistema de visão é sempre um compromisso entre estes três fatores e, normalmente, é determinada pelo tipo de restrições em cada aplicação. Neste capı́tulo serão apresentados alguns fundamentos matemáticos para a montagem de um panorama omnidirecional. Os modelos monocular e multicâmeras serão abordados da Seção 3.1 e os sistemas catadióptricos na Seção 3.2. Os detalhes de implementação dos protótipos de cada modelo de aquisição serão apresentados no Capı́tulo 4. 3.1 Concatenação de Segmentos (Image Stitching ) O processo de concatenação de segmentos consecutivos para montar um panorama retangular é conhecido na literatura como image stitching. Como é ilustrado na Figura 3.1, cada segmento corresponde a uma fração angular do campo de visão. Ao final do processo todos eles são mapeados em um mesmo plano do panorama. A resolução horizontal da imagem final é igual à soma das resoluções individuais, menos as áreas de intersecção entre imagens adjacentes. O segmentos podem ser obtidos com uma única câmera girando em torno do próprio centro óptico, ou com 34 múltiplas câmeras dispostas em cı́rculo. O campo de visão total do panorama pode ser ajustado de acordo com o número de segmentos utilizados. A Figura 3.2 mostra um sistema comercial para captura de panoramas omnidirecionais por image stitching. Figura 3.1: Panorama retangular montado a partir de segmentos consecutivos Figura 3.2: Dispositivo multicâmeras para aquisição de panoramas omnidirecionais por image stitching (Ladybug2 [63]) Quando todos os segmentos são capturados em um mesmo plano cada quadro é somente uma translação do quadro anterior. Neste caso, o processo de concatenação consiste basicamente na eliminação das áreas de intersecção e no alinhamento das imagens em sequência. Já no caso dos panoramas circulares, cada segmento é capturado em um plano diferente do anterior e para alinhá-los é necessário realizar uma transformação projetiva em cada um deles [64]. Escolhendo uma das imagens como plano base para o panorama, a transformação consiste em mapear todos os pixels das imagens seguintes para o plano escolhido, de acordo com parâmetros de rotação, deslocamento e escala previamente calculados. Sendo p = (x, y)T um ponto qualquer de um segmento e p0 = (x0 , y 0 )T este mesmo ponto no plano do panorama, a transformação pode ser representada pela Equação 3.1. A matriz H3×3 é denominada matriz de homografia e realiza uma transformação projetiva entre imagens de planos diferentes. Os parâmetros da matriz de homografia são determinados pe35 las Equações 3.2 e 3.3, utilizando pontos de correspondência conhecidos entre duas imagens. x h h h x 11 12 13 p = y × h21 h22 h23 y 1 h31 h32 h33 1 h11 x + h12 y + h13 h31 x + h32 y + 1 h21 x + h22 y + h23 y0 = h31 x + h32 y + 1 x0 = (3.1) (3.2) (3.3) Para determinar um conjunto de pontos de correspondência é necessário que haja uma área de superposição entre duas imagens consecutivas. Um algoritmo de extração de features, como o SIFT ou detector de Harris [65], pode ser utilizado para determinar os melhores pontos de correspondência. No mı́nimo oito pontos precisam ser encontrados para resolver todos os parâmetros da matriz de homografia. Em um panorama omnidirecional composto por seis quadros consecutivos, cinco homografias precisam ser determinadas. As matrizes são calculadas em pares com relação ao plano da imagem escolhida como base. O procedimento é ilustrado na A ) é determinada entre os seguimentos S1 e Figura 3.3. A primeira homografia (H3×3 B ), por sua vez, é determinada entre o segmento S3 S2. A segunda homografia (H3×3 e o plano formado pelo panorama S1-S2. A terceira homografia é formada entre S4 e o plano S1-S2-S3 e assim por diante. Figura 3.3: Cálculo de homografias em cadeia O processo de montagem dos panoramas pode ser otimizado se a posição de 36 captura dos segmentos for sempre a mesma. Como a transformação projetiva leva em consideração somente a posição dos pixels entre imagens consecutivas, e não o valor em cada um deles, o cálculo das homografias precisa ser feito apenas durante a fase de construção do sistema. Uma vez determinadas as homografias, e mantendo-se a disposição angular das câmeras, todas as montagens posteriores podem ser feitas com as mesmas matrizes. Como o cálculo das homografias é a etapa mais complexa do processo, realizá-lo somente durante a calibração reduz consideravelmente o tempo de montagem dos panoramas durante a utilização do sistema. Excluindo o tempo de calibração e cálculo das matrizes de homografia, o tempo total de aquisição de um panorama é determinado pelas seguintes caracterı́sticas: • A velocidade de rotação mecânica da câmera (para sistemas monoculares apenas); • O tempo de captura de cada segmento; • O tempo de multiplicação de cada imagem pela matriz de homografia correspondente; • O tempo de transmissão do panorama para fora do sistema de visão. Cada uma destas caracterı́sticas pode representar um gargalo de desempenho durante a utilização do sistema. Em arquiteturas monoculares, por exemplo, a velocidade de rotação da câmera representa uma desvantagem com relação à alternativa multicâmeras. Outro problema são os possı́veis “fantasmas” que podem aparecer na imagem devido à movimentação de objetos no ambiente durante a captura. Os sistemas multicâmeras, por outro lado, podem ser configurados para capturar todos os segmentos simultaneamente, eliminando a necessidade de ter um ambiente estático. Nestas arquiteturas os maiores impactos no desempenho são causados pelo tempo de multiplicação das homografias e, principalmente, pelo tempo de transmissão dos segmentos entre as câmeras. Em resumo, o projeto de sistemas de aquisição por image stitcing deve identificar os elementos responsáveis por estes fatores e balancear a escolha de cada um deles, garantindo o desempenho mais adequado em cada aplicação. 37 3.2 Remapeamento (Dewarping ) Combinando uma câmera simples com um espelho convexo é possı́vel obter uma imagem omnidirecional polar (donut) como a mostrada na Figura 3.4a. Os espelhos utilizados podem ter formato esférico, cônico, parabólico ou hiperbólico, cada um fornecendo uma imagem com geometria especı́fica. Conhecer a geometria de formação da imagem esférica é importante para aplicação de diferentes técnicas de visão computacional diretamente sobre elas (e.g. geometria epipolar adaptada [66], algoritmos de extração de features [67], etc.). A abordagem mais comum, no entanto, é converter as imagens esféricas para um formato mais simples, normalmente um panorama retangular como o mostrado na Figura 3.4b, e realizar o processamento sobre ele. Uma das vantagens deste formato é que ele pode ser manipulado com coordenadas cartesianas ao invés de coordenadas polares da imagem original. Outra vantagem é que o panorama retangular pode ser analisado com técnicas tradicionais de visão computacional, sem a necessidade de incorporar adaptações para a geometria especı́fica do espelho utilizado. (a) Imagem omnidirecional polar (donut) (b) Panorama cilı́ndrico Figura 3.4: Exemplos de imagens omnidirecionais obtidas por uma câmera catadióptrica 38 As Figuras 3.5a e 3.5b apresentam dois modelos conceituais para construção de uma câmera catadióptrica. Na Figura 3.5a a luz incide inicialmente sobre a superfı́cie esférica e é refletida na direção da lente da câmera. O modelo da Figura 3.5b é composto por dois espelhos, a luz incide inicialmente sobre um espelho côncavo, é refletida para um espelho plano no topo do arranjo onde é novamente refletida na direção da lente da câmera. O modelo da Figura 3.5b pode ser implementado com a lente de 360◦ para telefones celulares ilustrada na Figura 3.6. Embora a construção do segundo modelo seja relativamente mais complexa que a do primeiro, as imagens capturadas são similares. A utilização de arranjos industrializados como a Kogeto Dot [68] elimina a necessidade de realizar um alinhamento manual entre os espelhos e facilita a sua incorporação em robôs de pequeno porte. (a) (b) Figura 3.5: Modelos de implementação de uma câmera catadióptrica Figura 3.6: Lente de 360◦ Kogeto Dot [68]. Matematicamente, uma câmera catadióptrica pode ser representada por um modelo de câmera projetiva, como na Equação 3.4. A matriz M̂ é uma matriz de projeção que mapeia um ponto p no mundo real para um ponto p0 no plano da imagem; ela deve conter os parâmetros intrı́nsecos da câmera e a transformação 39 entre as coordenadas do mundo externo e coordenadas da câmera. Em sistemas catadióptricos, porém, como a luz incide sobre o espelho antes de atingir a câmera, uma função de transformação F precisa ser adicionada (Equação 3.5) para representar o ponto sobre a superfı́cie do espelho. p0 = M̂ × p (3.4) p0 = M̂ × F (p) (3.5) Para espelhos hiperbólicos, elı́pticos e parabólicos, a função F pode ser definida pelo modelo de projeção unificada proposto em [69]. Para os demais formatos, uma função de transformação especı́fica precisa ser determinada. Uma discussão detalhada sobre modelos de projeção para câmeras catadióptricas pode ser encontrada em [29, 70] e [71]. A transformação de uma imagem esférica em um panorama retangular requer um processo chamado dewarping (ou unwarping em algumas referências), algo como “desenrolar” a imagem esférica em tradução livre. O procedimento mapeia todos os pixels Io (u, v) da imagem esférica para uma posição (I(x, y)) correspondente no panorama retangular. Existem três formas tradicionais de realizar esta transformação: mapeamento direto (pano-mapping) [72]; geometria discreta [73]; e mapeamento logpolar [74]. Cada abordagem oferece diferentes resultados com relação ao tempo de processamento e à resolução do panorama final [75]. O procedimento para dewarping adotado neste trabalho é uma variação do modelo de mapeamento direto, ele é dividido em duas etapas: 1. Cálculo de uma matriz de mapeamento entre os pixels das duas imagens; 2. Transformação a partir da matriz de mapeamento; Na primeira etapa é calculada uma matriz de mapeamento para todos os pares (x, y) → (u, v)) de acordo com a Equação 3.6. O parâmetro R é uma função linear de y, variando por todo o comprimento da área efetiva da imagem omnidirecional (i.e. excluindo o cı́rculo interno e a borda). O parâmetro α, por sua vez, é uma função linear de x variando de 0 à 2π. O ponto Io (uo , vo ) corresponde ao centro da 40 imagem esférica. I(x, y) = Io (R cos(α) + uo , R sin(α) + vo ) (3.6) Para cada posição (x, y) do panorama, é calculado um par de coordenadas (α, R), que determina a posição (u, v) do pixel correspondente no donut. Todos os pares (x, y) → (u, v)) são então posicionados em uma matriz MW xH para consulta em todas as transformações futuras. Esta divisão de etapas é possı́vel porque os relacionamentos entre os pixels são construı́dos com base na posição de cada um, e não no seu valor. A segunda etapa ocorre durante a utilização do sistema (e.g. navegação do robô) e consiste basicamente em transferir os pixels de uma imagem para outra de acordo com os relacionamentos da tabela de mapeamento direto. A resolução final do panorama retangular é determinada pelas Equações 3.7 e 3.8, onde o comprimento W é igual à circunferência do cı́rculo externo e a altura H é igual a diferença entre os raios externo e interno da imagem. Estes parâmetros podem ser observados na Figura 3.7 que representa o processo de dewarping. W = 2π × (Rout + Rin) 2 H = Rout − Rin (3.7) (3.8) Figura 3.7: Ilustração do procedimento de transformação de uma imagem polar em um panorama retangular (dewarping). 41 Capı́tulo 4 Análise de Modelos de Aquisição A eficácia de um sistema de navegação autônoma pode ser diretamente dependente do volume de informações que ele é capaz de coletar sobre o ambiente navegado. Esta dependência é ainda mais importante em aplicações para ambientes desconhecidos e sem mapeamento. Nestes casos, a realização das tarefas fundamentais de navegação (i.e. localização, planejamento de rotas e desvio de obstáculos) é inteiramente determinada pelos tipos de sensores disponı́veis no sistema. Quanto mais informações o sistema puder adquirir sobre espaço ao redor, mais precisos podem ser os cálculos de localização e desvio de obstáculos durante a trajetória entre dois pontos. Mesmo em ambientes altamente estruturados, ou previamente mapeados, o robô precisa de algum nı́vel de observação externa para que possa corrigir erros acumulados durante a movimentação (e.g odometria, identificação de marcações por RFID, etc.). Dentre as diferentes alternativas de sensoriamento para aquisição de dados sobre o espaço de navegação, os sistemas de visão computacional são especialmente poderosos. Algumas tarefas de navegação podem ser executadas com bastante eficiência utilizando visão computacional, atraindo uma grande variedade de projetos [76]. Como exemplo destas tarefas é possı́vel citar algoritmos de identificação e desvio de obstáculos, localização do veı́culo, mapeamento 3D do ambiente e rastreamento de objetos de interesse. O principal apelo dos sistemas de visão, com relação às outras formas de sensoriamento, é o grande volume de informações (e.g. textura, cores, formas, presença ou ausência de objetos) que pode ser extraı́do de um único sensor. O volume de informações adquiridas também é diretamente proporcional ao campo 42 de visão da câmera utilizada, o que torna os sistemas de visão omnidirecional, estudados no Capı́tulo 3, especialmente vantajosos. Sistemas de visão omnidirecional podem ser construı́dos de três formas diferentes: com uma única câmera rotacionada em torno de si mesma (monocular); com várias câmeras interligadas em um arranjo circular (multicâmeras); com uma única câmera com o centro de imagem apontando para um espelho convexo posicionado sobre ela (catadióptrico). Neste capı́tulo serão descritos e comparados os três protótipos implementados para esta análise de arquiteturas, um para cada modelo de aquisição. Inicialmente será apresentada uma caracterização individual dos elementos de hardware utilizados na implementação dos protótipos (e.g. câmeras e unidade de controle). O objetivo da caracterização é definir fatores importantes como taxas de transmissão de dados, desempenho de software e interfaces de ligação. Com os resultados da caracterização será possı́vel identificar alguns dos principais gargalos de cada arquitetura e propor alterações especı́ficas para melhorar o desempenho. Cada protótipo implementado deve gerar, no menor tempo possı́vel, um panorama omnidirecional do espaço ao redor do robô. As imagens produzidas em cada arquitetura serão posteriormente submetidas à técnicas de localização e identificação de obstáculos e objetos de interesse. Os resultados de cada arquitetura serão comparados entre si. 4.1 Caracterização dos Componentes de Aquisição e Processamento O modelo arquitetural básico para um sistema de navegação por visão computacional é composto pelos três elementos mostrados na Figura 4.1. O fluxo de informações parte dos sensores de captura de imagens, passa pela unidade central de controle e termina nos atuadores do sistema de movimentação. Os procedimentos necessários para cumprir o fluxo completo de informações podem ser centralizados em uma única unidade de processamento, ou divididos entre vários módulos especializados. A aquisição de imagens é feita a partir de uma ou mais CMUCam3, para os modelos monocular e multicâmeras, ou com um módulo de vı́deo para Raspberry Pi, para o modelo catadióptrico. Após a aquisição, as imagens são encaminhadas para um módulo Raspberry Pi para montagem do panorama omnidirecional, e realização de 43 Figura 4.1: Arquitetura genérica de um sistema de navegação por visão computacional tarefas de localização e identificação de obstáculos. O módulo Raspberry Pi também calcula e envia coordenadas para o terceiro componente de movimentação, neste caso representado por um mini-veı́culo montado a partir de um kit Lego Mindstorms. A adição do Raspeberry Pi possibilita a utilização de bibliotecas de alto nı́vel para manipulação de imagens como o OpenCV. A divisão da arquitetura em módulos especializados possibilita a identificação precisa de gargalos para a otimização do fluxo de informações e tarefas do sistema de navegação. As responsabilidades e limitações de cada componente são definidas com clareza, facilitando a sua substituição por modelos mais eficientes. 4.1.1 CMUCam3 O hardware básico para aquisição de imagens utilizado foi a CMUCam3 [77, 78]. Dentre os recursos disponı́veis na câmera destacam-se: duas interfaces UART (Universal Asynchronous Receiver Transmitter ) para comunicação externa, um microcontrolador Philips LPC2106 (core ARM7TDMI-S), expansão para cartões MMC de até 4GB e um sensor CCD Omnivision OV6620, com resolução máxima de 352x288 pixels e amplitude horizontal de 120 graus. Além disso, o sistema oferece uma ampla biblioteca de software para aquisição, transmissão e pré-processamento de imagens. Cada imagem adquirida pela CMUCam3 é transmitida através de uma das interfaces UART disponı́veis na placa. Os protocolos de transmissão são definidos de acordo com as necessidades do projeto. A câmera pode ser configurada para capturar imagens em RGB, HSV, YCbCr, ou em escala de cinza. É preciso observar que o sistema de cores escolhido tem influência direta sobre o tamanho da imagem 44 final e sobre o tempo total de transmissão, no entanto, a velocidade de transmissão é determinada exclusivamente pela taxa de transferência da UART utilizada. O sensor OV6620 também pode ser configurado para realizar ajustes de tempo de exposição e balanço de branco automaticamente. A resolução máxima oferecida pelo sensor é 352x288 pixels, no entanto, o sistema pode ser ajustado para realizar sub-amostragens da resolução total de acordo com uma proporção predefinida. Ao configurar, por exemplo, a proporção de sub-amostragem de 1 (horizontal) para 2 (vertical), a imagem de saı́da tem uma resolução de 352x144 pixels. Também é possı́vel restringir a captura a apenas um canal de interesse por vez, ou seja, caso a câmera esteja configurada em RGB é possı́vel realizar operações sobre um dos três canais de cores apenas. Este recurso facilita especialmente a localização de objetos especı́ficos pela cor, a extração de histogramas e o cálculo de informações da frequência de um único canal. A CMUCam3 pode embarcar diferentes algoritmos de pré-processamento, compressão, reconhecimento de padrões especı́ficos de imagem e controle servo-visual, eliminando a necessidade de enviar uma imagem completa para fora do sistema de visão. Em aplicações mais simples, todo o sistema de visão e controle pode ser embarcado direto na CMUCam, a exemplo do Spoonbot [79], um pequeno robô móvel de mesa controlado por vı́deo para seguir objetos de uma cor especı́fica. Outro projeto, o Firefly Mosaic [80], monta uma rede de visão distribuı́da a partir de um conjunto de CMUCam acopladas a um módulo de rede sem fio. Dentre as aplicações possı́veis do Firefly, são mencionadas a de vigilância contra incêndios e o monitoramento à distância de idosos em ambientes domésticos. As principais limitações das CMUCam3, no entanto, são as interfaces seriais para entrada de saı́da de dados. A melhor taxa alcançada nos experimentos feitos para estas interfaces foi de 115200 bits por segundo (bps), o que é particularmente lento, sobretudo quando é necessário transmitir imagens coloridas com resoluções mais altas. Considerando que um robô navegando por um ambiente desconhecido precisa adquirir algumas imagens por segundo para garantir uma movimentação segura, as baixas taxas de transferências de imagens são uma limitação considerável. Para fins de caracterização do equipamento utilizado, inicialmente foram feitas medidas de tempos de aquisição de imagens de diferentes formatos e resoluções. 45 Para este experimento uma CMUCam3 foi ligada a um computador pessoal através de um adaptador USB-RS232. Para cada resolução configurada, foi feita uma bateria de testes com cinquenta aquisições consecutivas, medindo-se o tempo entre cada uma delas. O objetivo do experimento é determinar quanto tempo leva para transmitir uma imagem para fora da CMUCam3 via interface serial. O resultados são mostrados nas Figuras 4.2a e 4.2b. Para as imagens RGB o tempo de aquisição de cada canal de cores é, em média, um terço do tempo total. (a) (b) Figura 4.2: Tempos de aquisição de um único quadro em uma CMUCam3 para diferentes resoluções e formatos de imagem: a) 352x288 pixels; b)176x143 pixels. Uma das formas de reduzir o impacto da baixa velocidade de transmissão é tentar retirar da câmera sempre o menor número de informações possı́vel, em outras palavras, atribuir ao microcontrolador embarcado um maior número de operações de pré-processamento sobre as imagens capturadas. Um exemplo disso é comprimir as imagens em JPEG antes de enviá-las. As Figuras 4.2a e 4.2b mostram que o tempo de aquisição de imagens JPEG, já incluindo o tempo gasto para compressão, é ainda menor do que o tempo gasto para transmitir uma imagem em escala de cinza. Este raciocı́nio tenta estabelecer uma divisão adequada de carga entre as diferentes 46 unidades de processamento do sistema. Como estamos tratando de sistemas de navegação de baixo custo, é fundamental definir quais cálculos devem ser executados em cada componente e estabelecer a combinação mais eficiente possı́vel. Tomando como exemplo o procedimento de identificação de obstáculos apresentado no Capı́tulo 3, é possı́vel avaliar a melhor divisão de carga entre a CMUCam e a unidade central de controle. A tarefa consiste em diferenciar o obstáculo do solo através da cor, desde que o objeto esteja à frente do robô. De maneira resumida, o algoritmo para identificação de obstáculos por este método requer as seguintes etapas: 1. Captura da imagem; 2. Suavização de ruı́dos, necessário para uma melhor detecção da área da imagem que corresponde ao solo em torno do robô; 3. Preenchimento de solo com uma cor sólida a partir da posição do robô até a primeira borda encontrada na imagem. 4. Cálculo de área de solo livre à frente do robô. O primeiro experimento consiste em executar os passos 1 e 2 na CMUCam e transmitir uma imagem comprimida (JPEG) para a unidade central de controle. A suavização é feita aplicando um filtro média móvel à imagem original. A Figura 4.3 apresenta os tempos de aquisição de 50 imagens suavizadas e comprimidas antes do envio, todas elas com resolução de 176x143 pixels. Figura 4.3: Tempos de transmissão de um único quadro JPEG após filtro passabaixa (imagem suavizada). O próximo experimento consiste em executar todas as etapas da identificação de obstáculos na CMUCa3m, enviando para unidade de controle somente a informação 47 de espaço livre à frente do robô. Todos os cálculos necessários para implementação desta tarefa são executados localmente, eliminando a necessidade de envio das imagens para fora da câmera. O objetivo desta avaliação é verificar o quanto do total de operações necessárias para navegação pode ser executado com eficiência pela CMUCam3. A divisão de carga será válida se o tempo necessário para identificar obstáculos for menor do que o tempo necessário para transmitir a imagem e realizar a operação em uma unidade de processamento mais robusta. O procedimento completo de identificação de obstáculos foi implementado em linguagem C e embarcado juntamente com firmware básico da CMUCam3. O ambiente montado para o experimento é descrito a seguir: • Em um ambiente com solo verde foi posicionado um obstáculo azul inicialmente à 30 cm e depois à 60 cm da câmera; • Para cada posição foram capturadas 50 medidas de distância entre a câmera e o obstáculo. Cada captura é iniciada após o recebimento, via UART, de um comando de identificação de obstáculos. • Os comandos para identificação de obstáculos foram enviados por um computador pessoal ligado via RS232 à CMUCam, simulando uma arquitetura descentralizada do sistema de navegação. • Para cada captura foi medido o tempo entre o envio do comando de identificação pela unidade controle e o recebimento da informação de distância até o obstáculo. As Figuras Figuras 4.4a e 4.4b apresentam os tempos medidos para o cálculo de 50 distâncias para os cenários com obstáculos à 30 cm e à 60 cm, respectivamente. A Figura 4.5, por sua vez, apresenta uma imagem após o processamento para o obstáculo posicionado à 60 cm de distância. 48 (a) Obstáculo à 30 cm (b) Obstáculo à 60 cm. Figura 4.4: Tempo gasto pela CMUCam3 para calcular a distância até um obstáculo posicionado à frente da câmera (a) Visão original (b) Obstáculo à 60 cm. Figura 4.5: Resultado do procedimento de identificação de um obstáculo à 60 cm para a CMUCam3 Os tempos de cálculo das distâncias (Figura 4.4) são maiores do que os tempos de aquisição (i.e. captura, filtro e transmissão) das imagens suavizadas (Figura 4.3). Para que esta alternativa seja competitiva é necessário que estes valores sejam menores do que os obtidos caso o restante do procedimento fosse realizado fora da 49 câmera, por um hardware mais rápido. 4.1.2 Raspberry Pi O Raspberry Pi é uma famı́lia de computadores “de bolso” (credit-card-sized ) desenvolvido pela fundação Raspberry Pi britânica (Raspberry Pi Foundation), com o propósito inicial de fomento ao ensino de computação básica nas escolas [37]. O modelo original é um SoC (System on a chip) composto de um processador ARM ARM1176JZF-S, de 700Mhz, e 512MB de memória RAM (para os modelos B e B+ apenas), capaz de executar sistemas operacionais de alto-nı́vel como o Linux. O Raspberry Pi é um computador de propósito geral de baixo consumo e pequenas dimensões, com um conjunto variado de periféricos e interfaces de comunicação, dentre elas: Ethernet, USB 2.0, HDMI, SPI e UART. O sistema combina as proporções fı́sicas e o consumo de energia comuns em sistemas embarcados de pequeno porte, com as facilidades oferecidas por computadores pessoais. É esta combinação que o torna ideal para aplicações embarcadas que realizam tarefas de alta complexidade. Umas das principais vantagens oferecidas pelo Raspberry Pi em sistemas de visão computacional é a possibilidade de utilizar bibliotecas de alto-nı́vel como o OpenCV embarcadas no sistema. Esta caracterı́stica reduz a necessidade de distribuir o processamento para tarefas de navegação, por exemplo, em computadores pessoais e servidores de grande porte. Em todos os experimentos desta pesquisa foi utilizado um Raspberry Pi modelo B [38] como unidade central de processamento para as tarefas de navegação. O protótipo de câmera catadióptrica foi implementado utilizando um módulo de vı́deo especı́fico para o Raspberry Pi. Os modelos monocular e multicâmeras, por sua vez, utilizaram o Raspberry interligado a uma ou mais CMUCam3 através da interface de comunicação UART. O procedimento de caracterização do desempenho do Raspberry, dentro do escopo desta pesquisa, foi realizado medindo-se o tempo de execução da mesma tarefa de identificação de obstáculos discutida na seção anterior. Interligando o Raspberry Pi com a CMUCam3 é possı́vel modularizar o processamento necessário à identificação de obstáculos. A interface UART entre os dois módulos é limitada à uma taxa de transferência de 115200 bps. Por conta disso, é preciso ajustar bem o vo50 Figura 4.6: Tempo gasto pela Raspberry Pi para calcular a distância até um obstáculo posicionado à 60 cm da CMUCam. lume de informações trocados entre os módulos para garantir a maior eficiência das demais tarefas de navegação. Para verificar o desempenho desta divisão de carga, repetimos o experimento de identificação de obstáculos à distâncias fixas, mas agora realizando o procedimento de identificação inteiramente no Raspberry Pi. A CMUCam3, desta vez, é responsável apenas pela captura e compressão das imagens, enviando-as em formato JPEG para processamento na unidade central de controle. Com relação a primeira alternativa implementada em C como firmware da CMUCam3, este modelo é beneficiado pelo uso do OpenCV no Raspberry Pi. Com um posicionamento das barreiras idêntico ao descrito na seção anterior (60 cm) os tempos medidos para este experimento são mostrados na Figura 4.6. Cabe ressaltar que os resultados apresentados na Figura 4.6 correspondem apenas ao tempos de execução do procedimento, desconsiderando o tempo de transmissão das imagens da CMUCam3 para o Raspberry Pi. O tempo médio de transmissão de um quadro em JPEG, sem a filtragem de suavização, entre a CMUCam3 e o Raspberry pode ser observado na Figura 4.2a, sendo aproximadamente 0,5 segundo. Somando este tempo ao tempo médio da Figura 4.6 (0,35 segundo) o tempo total necessário para a tarefa de identificação de obstáculos nesta configuração é de 0,85 segundo. 4.1.3 Análise dos Resultados da Caracterização Comparando os resultados obtidos para identificação de obstáculos da Seção 4.1.1 com o tempo gasto pelo Raspberry Pi para a mesma tarefa, é fácil observar que 51 o segundo apresenta uma melhor alternativa para o problema de interligação e divisão de carga. A CMUCam, embora seja muito versátil, possui baixo poder de processamento e pouca memória disponı́vel para a realização de operações complexas sobre imagens. Outra desvantagem é que o projetista deve encarregar-se da programação das rotinas necessárias para os procedimentos de computação visual, otimizando cada algoritmo às limitações da arquitetura da câmera, sobretudo à falta de memória para alocar imagens com resolução acima de 173x143 pixels. Utilizando somente a CMUCam, embora ela disponibilize em seu firmware básico algumas funções elementares de manipulação (e.g. convolução 2D, extração de histograma, equalização, e compressão JPEG), o desenvolvedor estaria impossibilitado de utilizar ferramentas consolidadas como a biblioteca OpenCV. Finalmente, a CMUCam apresenta uma séria limitação de comunicação com o mundo externo que é a interface serial UART como taxa máxima de transferência de 115200 bps. Esta limitação é um gargalo importante para a realização de tarefas cujo tempo de resposta precisa ser inferior à 1 segundo, por exemplo. Para contornar este problema é necessário tomar medidas impactantes para a navegação, como reduzir a resolução das imagens capturadas. O melhor desempenho da interligação foi atingido quando a operação da CMUCam foi restrita à simples captura e compressão das imagens, sendo o restante do processamento realizado no Raspberry Pi com auxı́lio da biblioteca OpenCV. A partir deste ponto a análise das arquiteturas seguintes irá considerar este modelo de interligação. 4.2 Aquisição de Panoramas Omnidirecionais Como descrito no Capı́tulo 3, um panorama omnidirecional pode ser obtido através da concatenação de vários quadros consecutivos, cada um cobrindo uma fração angular dos 360◦ de amplitude horizontal, ou “desenrolando” (dewarping) uma imagem obtida a partir de uma câmera catadióptrica. Nesta seção serão apresentados os protótipos dos três métodos de aquisição, tendo em vista a aplicação de cada um no contexto da navegação de dispositivos robóticos. Em todos os protótipos o principal objetivo é montar um panorama omnidirecional para experimentos de navegação. 52 Nos modelos monocular e multicâmeras, os panoramas podem ser montados nas próprias CMUCam3, ou no módulo central de processamento, o Raspberry Pi. No modelo catadióptrico a captura e a montagem do panorama omnidirecional é feita inteiramente no Raspberry Pi. 4.2.1 Arquitetura Monocular O primeiro modelo implementado consiste em uma única câmera presa a um eixo móvel ligado à um motor de passos simples, como ilustrado na Figura 4.7. A câmera gira em torno do eixo vertical, capturando um quadro à cada passo do motor. O controle dos passos do motor é determinado pelo software embarcado na câmera. Após o recebimento de um comando para inı́cio da montagem de um panorama omnidirecional, a CMUCam3 incrementa os passos do motor sempre após a captura de cada quadro. A velocidade de movimentação do motor precisa ser compatı́vel com o tempo de montagem do panorama a partir dos segmentos individuais capturados durante a rotação. Neste protótipo cada quadro é capturado com um intervalo de um segundo entre um passo e outro. Para que sempre haja uma área de superposição entre dois quadros adjacentes, foi determinado um passo de 30◦ para este modelo. Figura 4.7: Modelo monocular para aquisição de imagens omnidirecionais. Nos modelos baseados em image stitching, as matrizes de homografia são calculadas durante a fase de projeto. A incorporação delas ao sistema é feita em duas 53 etapas: na primeira etapa, uma imagem de cada posição angular é capturada e enviada ao computador pessoal, onde as matrizes são calculadas utilizando o OpenCV. Em seguida, as matrizes são registradas e incorporadas ao firmware da CMUCam3 para utilização. Como o deslocamento angular das imagens é sempre fixo, as matrizes não precisam ser recalculadas durante a operação do sistema, apenas aplicadas. O procedimento de montagem do panorama retangular pode ser dividido em duas etapas: 1. captura dos segmentos individuais e 2. concatenação (image stitching). A etapa de concatenação pode ser realizada na própria CMUCam3, ou na unidade central de controle. No primeiro caso, cada segmento é inicialmente armazenado em um cartão de memória com a marcação da posição em que foi capturado. A câmera realiza o procedimento de concatenação e envia o panorama completo para a unidade central de controle. Uma segunda alternativa é enviar todos os quadros para o Raspberry Pi já comprimidos em JPEG. A ligação entre a CMUCam3 e o Raspberry Pi é via UART com uma taxa de transmissão de 115200 bps. No Raspberry Pi o software de controle recebe os quadros na ordem correta e concatena todos eles em um panorama retangular. Esta alternativa só é vantajosa se o tempo de transmissão e concatenação no Raspberry Pi for menor do que o tempo de captura e concatenação na CMUCam3. A Figura 4.8 apresenta os tempos de montagem dos panoramas para cada estratégia. A Figura 4.9, por sua vez, apresenta um exemplo de panorama obtido com protótipo monocular. Figura 4.8: Tempos de aquisição e montagem de um panorama no protótipo monocular O tempo de aquisição de um panorama neste modelo pode ser reduzido aumentando a velocidade de rotação do motor de passos. Para passos de 30◦ , com um intervalo de um segundo entre todos eles, são consumidos em média doze segundos 54 (a) Panorama Omnidirecional (b) Quadros individuais Figura 4.9: Exemplo de panorama omnidirecional montado pelo protótipo monocular para cobrir a circunferência somente com a rotação do protótipo. 4.2.2 Arquitetura Multicâmeras A arquitetura monocular apresenta inconvenientes óbvios para aplicação em navegação robótica. O primeiro deles é a necessidade parar o veı́culo para montar cada panorama. Como a câmera precisa ser rotacionada, o veı́culo precisa estar parado para que as matrizes de homografia não sejam invalidadas. O tempo total de aquisição também é limitado pela rotação do motor, como foi visto na seção anterior. Em um contexto de navegação automática esta alternativa tem um espaço muito restrito de aplicações, apresentando como vantagens com relação às demais uma menor complexidade de comunicação e a alta resolução dos panoramas finais. O modelo multicâmeras, por sua vez, mantém a estratégia de captura de vários 55 segmentos independentes da arquitetura monocular, adicionando a vantagem da aquisição simultânea. O resultado oferecido continua sendo um panorama omnidirecional de alta resolução, porém com maior robustez contra a movimentações do veı́culo durante a aquisição. Um sistema de arranjo circular deve ser construı́do de forma que haja uma superposição de uma parte do campo de visão de cada câmera com relação aos seus adjacentes à esquerda e à direita. Como a CMUCam3 tem uma amplitude horizontal de aproximadamente 120◦ , seis câmeras são suficientes para cobrir a circunferência, mantendo 30◦ de superposição entre duas câmeras consecutivas. Aproveitando as duas interfaces de comunicação UART disponı́veis em cada CMUCam3, é possı́vel interligar o arranjo de três formas: a) em estrela, b) em barramento com árbitro central e c) em cadeia (daisy chain); Os três modelos de interligação são apresentados nas Figuras 4.10a, 4.10b e 4.10c . (a) Estrela (b) Barramento (c) Daisy Chain Figura 4.10: Modelos de interligações multicâmeras A interligação em estrela requer a adição de um microcontrolador central com pelo menos seis interfaces UART de comunicação, que servirá de ponte entre a unidade central de controle e as câmeras. A interface entre o microcontrolador central e a unidade de controle do sistema de navegação (Raspberry Pi) pode ser via USB, Wifi, ou Ethernet, todas elas com taxas de transmissão muito superiores à da UART. Para adquirir cada quadro do panorama final, a unidade de controle envia um comando ao microcontrolador central que, por sua vez, o reencaminha para uma câmera especı́fica. Como cada quadro solicitado precisa fazer o caminho de volta da câmera para o microcontrolador e deste para a unidade de controle, o tempo médio para a aquisição de todos os seguimentos do panorama omnidirecional 56 é de pelo menos seis vezes o tempo de aquisição de cada quadro (desprezando-se o tempo de envio entre o microcontrolador e a unidade de controle). A implementação do protótipo em estrela apresenta inúmeras dificuldades e a primeira delas é encontrar no mercado um microcontrolador com caracterı́sticas tão peculiares como as seis interfaces de comunicação UART. Mesmo atendendo a este requisito, o modelo proposto continua extremamente rı́gido e com pouca escalabilidade. Uma alternativa mais eficiente de interligação é unir todas as linhas Tx (transmissão) das câmeras em um mesmo barramento multiplexado, ilustrado conceitualmente na Figura 4.10b, e com mais detalhes na Figura 4.11. Neste modelo, a linha Tx do microcontrolador principal é distribuı́da entre todas as câmeras, enquanto as linhas Tx das câmeras são multiplexadas por um CI 74LS151, de oito canais para um (Figura 4.11). Quando o microcontrolador solicita um quadro, ele inicialmente envia um comando de captura contendo um endereço da câmera correspondente. Embora todas as câmeras recebam a solicitação, apenas aquela cujo endereço foi especificado envia o quadro como resposta. O microcontrolador deve configurar os bits de seleção do multiplexador para a linha adequada da câmera requisitada. Figura 4.11: Modelo de barramento multiplexado com 3 CMUCam3 e um 74LS151 Um protótipo do modelo em barramento foi construı́do interligando três CMUCam3, utilizando uma delas como árbitro. A câmera C1 é configurada como árbitro do sistema e tem como responsabilidades a coordenação da aquisição dos quadros das outras duas e a montagem do panorama omnidirecional. Os bits de seleção do multiplexador estão ligados aos pinos de GPIO (General Purpose Input-Output) disponı́veis na CMUCam3. Para solicitar um quadro à câmera C2, por exemplo, a 57 câmera C1 realiza o seguinte procedimento: 1. Configura os bits de seleção para o valor especı́fico da linha da câmera C2; 2. Envia o comando “GET-FRAME C2” através da interface serial; 3. Lê o quadro recebido na linha Rx da interface serial; 4. Armazena o quadro recebido no cartão de memória. Foi realizado um experimento para medir os tempos de montagem e transmissão de um panorama de 180◦ neste modelo. Inicialmente, foram medidos os tempos de transmissão dos quadros das câmeras C2 e C3 para a câmera C1, e desta para os Raspberry Pi. Nesta primeira etapa não foram incluı́dos os procedimentos de montagem do panorama (i.e. transformações de homografia), somente o tempo de transmissão dos quadros. Todos os segmentos capturados possuem resolução de 176x143 pixels e estão em escala de cinza. O tempo médio de aquisição foi de aproximadamente 2,5 segundos. Com exceção da primeira câmera do arranjo, cada novo dispositivo adicionado acrescenta um tempo médio de 1 segundo para transmissão do quadro associado a ele. A Equação 4.1 resume o tempo médio para capturar todos os quadros em um arranjo com N câmeras. A constante k é o tempo médio para a transmissão de um quadro em JPEG nesta resolução e tem um valor aproximado de 0,5 segundo. Este valor foi medido experimentalmente e pode ser observado na Figura 4.2a. T = k + 2 × k(N − 1) (4.1) A Figura 4.12 apresenta os resultados para a aquisição de 20 panoramas consecutivos, todos montados no Raspberry Pi. Note que as matrizes de homografia foram calculadas durante a calibração, cabendo a Raspberry somente o cômputo da transformação afim. O tempo médio de transmissão dos três quadros foi de 2,5 segundos, já o tempo médio total para a montagem do panorama foi de 4,2 segundos. Finalmente, no modelo daisy chain as câmeras são ligadas entre si em cadeia, mostrado na Figura 4.10c. Cada câmera é ligada à sua esquerda através da primeira UART (UART0), e à sua direita através da segunda UART (UART1). No inı́cio da cadeia, a primeira câmera se conecta ao mundo externo pela UART0 e age como 58 Figura 4.12: Tempos de transferência e montagem de um panorama de 180◦ . Segmentos JPEG com resolução de 176x143. árbitro das transmissões. Para adquirir o segmento correspondente a última câmera, por exemplo, o árbitro deve enviar uma solicitação que atravessa toda a cadeia e cuja resposta deve fazer caminho inverso até o primeiro nó. O procedimento é ilustrado na Figura 4.13. Figura 4.13: Solicitação de quadro no modelo daisy chain Em cada salto um tempo médio de 0,5 segundo é necessário para transmitir uma imagem em JPEG com resolução de 176x143 pixels. O primeiro segmento leva então 0,5 segundo para ser transmitido da primeira câmera à unidade de controle. O segundo seguimento, por sua vez, deve ser transmitido para a primeira câmera (0,5s) e novamente para à unidade de controle (mais 0,5s). Finalmente, um terceiro segmento deve ser transmitido sucessivamente através de todos os saltos até o Raspberry Pi. O tempo de aquisição de um único panorama cresce em progressão 59 aritmética com número de câmeras no arranjo em daisy chain, como descrito pela Equação 4.2. T =k× (N + N 2 ) 2 1≤N ≤6 (4.2) A Figura 4.14 apresenta os tempos de transmissão e montagem de um panorama retangular de 180◦ a partir de três segmentos individuais. Neste caso, cada quadro foi enviado para o Raspberry Pi ligado à primeira câmera do arranjo via UART. Na Figura 4.15 é mostrado um exemplo de um dos panoramas montados nesta arquitetura. Figura 4.14: Tempos de transmissão e montagem do panorama de 180 graus (3 câmeras) em daisy chain (a) Panorama (b) Quadros individuais Figura 4.15: Panorama de 180◦ montando a partir de um arranjo de 3 CMUCam3 em daisy chain 60 4.2.3 Arquitetura Catadióptrica O protótipo da câmera catadióptrica foi montado utilizando um Raspberry Pi B como hardware básico para processamento, um módulo de vı́deo para Raspberry Pi [81] e uma lente de 360◦ Kogeto Dot [68]. A lente Kogeto Dot foi posicionada sobre o módulo de vı́deo que, por sua vez, é conectado ao Raspberry Pi via SPI. O protótipo é similar ao modelo omnidirecional apresentado em [82], que também utiliza a Kogeto Dot como espelho. A captura e manipulação básica das imagens pode ser feita com uma biblioteca de software oferecida pela Fundação Raspberry Pi escrita em Python (PiCamera). Os procedimentos mais complexos para navegação são também implementados em Python utilizando OpenCV. A taxa de aquisição da câmera varia de acordo com a resolução das imagens. Utilizando a PiCamera foi possı́vel capturar imagens RGB de 480x480 em um tempo médio de 0,58s por imagem. As Figuras 4.16a e 4.16b mostram uma imagem esférica capturada pelo protótipo e o panorama retangular após o processo de dewarping, respectivamente. O procedimento de dewarping constrói uma matriz de correspondência entre todos os pontos da imagem polar e todos os pontos do panorama retangular. O cálculo da matriz de correspondência leva em conta somente a posição relativa de cada pixel nas duas imagens e não a intensidade deles. Essa condição permite que a mesma matriz possa ser reutilizada em qualquer imagem obtida pela câmera, reduzindo o tempo necessário para a montagem de um panorama durante a navegação. Para imagens esféricas com resolução de 480x480, o tempo médio para cálculo da matriz de correspondência no Raspberry Pi é de aproximadamente 81 segundos. Esta etapa precisa ser feita somente durante a primeira captura do protótipo. Uma vez calculada a matriz de correspondência, a etapa seguinte é o transporte dos pixels do donut para o panorama retangular. Esta etapa dura em média 0,21 segundos e pode ser realizada durante o tempo de navegação para cada novo donut capturado. A Figura 4.17 apresenta os tempos de dewarping medidos para uma série de 20 capturas sucessivas neste protótipo. Neste experimento a matriz de correspondência foi calculada previamente e seus valores foram armazenados em um arquivo de texto. À cada nova imagem esférica capturada, o sistema utiliza a mesma matriz para gerar um panorama omnidirecional. 61 (a) Imagem esférica (donut) (b) Panorama após o dewarping Figura 4.16: Imagem esférica capturada pelo protótipo catadióptrico (a) e panorama omnidirecional (b). 4.2.4 Comparação dos Modelos de Aquisição Apesar das diferenças estruturais entre os modelos de aquisição apresentados nas seções anteriores, é possı́vel compará-los de acordo com alguns critérios essenciais em sistemas de visão computacional, por exemplo: o campo de visão oferecido, a resolução das imagens e o tempo de aquisição de cada uma delas. A relevância individual destes critérios pode variar de acordo com a aplicação desejada, possibilitando que um mesmo modelo seja apropriado para um determinado tipo de aplicação e inadequado para outras. Os modelos monocular e multicâmeras possuem um tempo de aquisição muito alto para aplicações de navegação em tempo real, isto é, onde o robô precisa analisar o cenário à medida em que vai navegando. Por outro, a resolução dos panoramas oferecidos por estes modelos é superior à do modelo catadióptrico, o que pode ser fundamental em tarefas de rastreamento de objetos, por exemplo. Para sistemas de processamento offline de imagens os modelos de image stitching são normalmente a 62 Figura 4.17: Tempo de geração de um panorama retangular a partir de uma imagem esférica de 480x480 pixels melhor escolha, diferentemente dos sistemas de processamento em tempo real, como os de navegação. Para melhorar o desempenho de aquisição das arquiteturas monocular e multicâmeras é possı́vel reduzir os tempos de transmissão e processamento das imagens utilizando equipamentos mais eficientes. As interfaces de comunicação UART disponı́veis nas CMUCam3, por exemplo, representam uma grande limitação para o desempenho geral destes sistemas devido às baixas taxas de transmissão. O tempo de transmissão dos segmentos, mesmo comprimidos, representa uma grande parcela do tempo total de aquisição dos panoramas e pode ser reduzido com uso de interfaces mais rápidas. Outra alternativa é reduzir o volume de informações trocadas entre as câmeras, no entanto, esta solução exige também que parte do processamento seja feita localmente, o que não se mostrou vantajoso com o microcontrolador embarcado na CMUCam3 (Seção 4.1.3). Em resumo, as seguintes melhorias devem ser aplicadas aos modelos multicâmeras e monocular para torná-los compatı́veis com as restrições de navegação em tempo real: 1. Substituir a interface de comunicação externa (UART) por modelos de maior velocidade (SPI, USB, Firewire, etc.); 2. Substituir o microcontrolador da câmera por um de melhor desempenho; 3. Reduzir o volume de informações transmitidas entre as câmeras; Em sistemas de navegação em tempo real e com baixo desempenho, o tempo de aquisição e processamento das imagens é um critério importante para a escolha do modelo de aquisição. Neste contexto o modelo catadióptrico representa uma grande melhoria com relação aos demais. Com uma única captura o robô visualiza todo o 63 espaço ao seu redor, reduzindo as perdas com a transmissão e o alinhamento das imagens. O tempo de dewarp foi inferior a meio segundo e pode ser melhorado ainda mais com a utilização de modelos mais recentes do Raspberry Pi. Apesar disso, a resolução oferecida por este modelo pode ser um fator limitante para algumas tarefas de navegação. Algoritmos de limiarização e extração de features podem ser consideravelmente limitados pela baixa resolução oferecida. A principal alternativa para contornar este problema é a utilização de sensores e espelhos mais eficientes. No caso especı́fico do protótipo implementado neste trabalho, um ajuste da distância focal da câmera utilizada seria necessário para aumentar a resolução da imagem polar. Como a lente Kogeto Dot é ajustada para câmeras de iPhone, a combinação artesanal entre ela e a câmera do Raspberry Pi, que possui distância focal fixa, não é ideal para obter a melhor resolução. O campo de visão de cada modelo também pode ser ajustado de acordo com a necessidade da aplicação. No modelo monocular o campo de visão pode ser reduzido ou ampliado de acordo com o número de passos realizados pelo motor. Nos protótipos multicâmeras o mesmo resultado pode ser obtido aumentando ou diminuindo o número de câmeras. Finalmente, para ajustar o campo de visão no modelo catadióptrico é necessário segmentar o panorama em regiões de interesse. A Tabela 4.1 resume os resultados obtidos para cada modelo de acordo com os critérios de resolução e tempo de aquisição. Os modelos de barramento e daisy chain foram construı́dos para uma resolução angular de apenas 180◦ . Uma estimativa dos tempos de transmissão para panoramas de 360◦ pode ser obtida através das Equações 4.2 e 4.1. Para os modelo de barramento o tempo de transmissão em um arranjo de seis câmeras sobe para 5,5 segundos (de acordo com a Equação 4.1), enquanto no modelo daisy chain esse valor atinge 10,5 segundos (Equação 4.2). O modelo catadióptrico foi o único que apresentou um tempo de aquisição inferior a um segundo, o que o torna mais adequado para aplicações de navegação em tempo real, ainda assim, de baixa velocidade. O veı́culo robô utilizado neste trabalho é capaz de mover-se com uma velocidade média de 7cm/s, o que sugere que as imagens precisam ser processadas em menos de um segundo para que o robô possa manter uma distância mı́nima de 7cm de qualquer obstáculo. O modelo catadióptrico, portanto, será utilizado como sistema de aquisição de imagens omnidirecionais para 64 Tabela 4.1: Resumo dos tempo de aquisição e montagem de panoramas em cada modelo arquitetural Modelo Quadros Resolução do Panorama Transmissão (s) Montagem (s) Monocular 12 912x143 12 1,7 Estrela - - - - Barramento* 3 228x143 2,5 1,7 Daisy Chain* 3 228x143 3,1 1,7 1 1262x192 0,58 0,21 Multicâmeras Catadióptrica ◦ * Protótipos de 180 . os experimentos de navegação apresentados no próximo capı́tulo. 65 Capı́tulo 5 Experimentos de Navegação A principal responsabilidade de um sistema de navegação visual é fornecer ao robô uma série de comandos de movimentação com base no que foi observado sobre espaço ao seu redor. O sistema de navegação coleta e interpreta imagens do ambiente e determina os movimentos seguintes de acordo com alguma estratégia de movimentação pré-estabelecida. O objetivo geral de movimentação é o que define como e para onde o robô deve se mover, justificando decisões tomadas ao longo do caminho. Exemplos comuns de objetivos de navegação são: seguir uma linha no chão, percorrer um corredor até encontrar uma marcação especı́fica, localizar e seguir um objeto conhecido, transitar de um ponto a outro de um mapa, etc. Cada objetivo tem nı́vel de complexidade especı́fico, assim como um conjunto de restrições que determina qual deve ser a melhor abordagem para a aquisição de imagens. Um outro fator decisivo para a implementação de qualquer estratégia de navegação é o grau de conhecimento que o sistema possui sobre o ambiente navegado. Em ambientes totalmente mapeados a estratégia de movimentação consiste em determinar a posição atual do robô e calcular a melhor trajetória através do mapa até um ponto de destino. Um mapa de navegação é normalmente descrito como um grafo, onde os nós representam pontos conhecidos e as arestas são os caminhos entre eles. O robô deve conhecer o caminho a ser percorrido, podendo determinar com antecedência todas as manobras que precisam ser realizadas para alcançar um destino. Algoritmos de planejamento de rotas podem ser utilizados para otimizar a escolha das trajetórias. O sistema de visão, nestes casos, serve para realimentar o sistema de controle, corrigindo erros de posicionamento e atualizando a localização do robô. 66 Ele é prescindı́vel caso o robô não acumule erros de posicionamento e odometria, ou disponha de outras formas de verificar quando chegou a um nó do mapa. Em ambientes não mapeados, por outro lado, o sistema de visão é uma peça fundamental para implementar a estratégia de navegação. A partir de um determinado objetivo (e.g. localizar e seguir uma bola vermelha), o robô decide como se movimentar com base no que ele pode observar, reagindo à marcações e obstáculos ao longo do caminho. Conhecendo a estratégia geral de navegação, o sistema de visão também pode selecionar nas imagens somente um conjunto útil de informações, descartando informações desnecessárias e reduzindo o volume de processamento. Os experimentos apresentados neste capı́tulo consideram o ambiente navegado como parcialmente mapeado, ou totalmente desconhecido. O objetivo dos experimentos é demonstrar a viabilidade da utilização da arquitetura catadióptrica de aquisição em um contexto de navegação autônoma. O modelo catadióptrico foi escolhido por apresentar o melhor desempenho de aquisição e uma menor complexidade de construção. Além de mais rápido que os demais, o modelo catadióptrico também é mais compacto fisicamente e possui um menor consumo de energia. Estas caracterı́sticas facilitam a sua integração ao robô móvel de pequeno porte descrito neste capı́tulo. Os experimentos realizados foram: Rastreamento de objetos: Com o auxı́lio do algoritmo descrito na Seção 2.1.2, o sistema deve ser capaz de localizar um sólido vermelho no campo de visão omnidirecional, estimar a distância e rotação do objeto com relação ao robô e movimentar o veı́culo até ele; Mapeamento incremental: Utilizando o algoritmo de detecção do solo descrito na Seção 2.1.1, o sistema deve ser capaz de identificar a posição de obstáculos em sua trajetória e construir dinamicamente um mapa topológico do ambiente navegado; Localização: Utilizando algoritmos de extração de features para comparação de imagens atuais com pontos previamente mapeados do cenário, o sistema deve ser capaz de determinar se está ou não em um local conhecido e atualizar as tabelas de planejamento de rotas a partir desta informação. O experimento 67 utiliza as estratégias de mapeamento topológico e comparação de features descritos na Seção 2.1.3. Os experimentos de localização por comparação de features e mapeamento incremental foram inspirados nos experimentos realizados em [25], [83] e [84], onde os autores apresentam uma série de resultados para mapeamento topológico de ambientes externos por comparação de imagens omnidirecionais. O sistema apresentado é capaz de montar dinamicamente um mapa topológico do ambiente comparando a visão atual do robô com imagens de pontos conhecidos previamente armazenadas. Uma abordagem semelhante para ambientes internos pode ser encontrada em [85]. Neste trabalho adaptamos o escopo dos experimentos para ambientes internos e controlados, reduzindo consideravelmente a complexidade das análises. Na Seção 5.1 são apresentados os detalhes de construção do robô móvel e sua integração com o sistema de visão. Também são apresentadas as caracterı́sticas do cenário montado para realização dos experimentos de navegação. Na Seção 5.3, por sua vez, é apresentado um experimento para estimar o raio médio das rodas do robô móvel, com o objetivo de reduzir os erros acumulados de deslocamento durante a navegação. O modelo de movimentação e as equações para controle de deslocamentos também são apresentados nesta seção. 5.1 Cenário e Protótipo de Navegação O veı́culo montado para navegação segue o modelo matemático estabelecido no Capı́tulo 2, utilizando um kit Lego Mindstorms NXT. O protótipo completo é ilustrado na Figura 5.1a e suas dimensões são detalhadas nas Figuras 5.1b, 5.1c e 5.1d. A lente Kogeto Dot para visão omnidirecional foi posicionada de cabeça para baixo para que o robô tivesse uma boa visão do solo ao seu redor. 68 (a) (b) (c) (d) Figura 5.1: Protótipo de veı́culo de tração diferencial para navegação A Figura 5.2 apresenta um panorama omnidirecional obtido pela câmera já posicionada sobre o robô. As hastes de sustentação da câmera podem servir de marcação na imagem para demarcar os limites das regiões à frente, à esquerda, à direita e ao fundo do veı́culo. Esta divisão pode ser útil para segmentar o panorama em regiões de interesse e reduzir o tempo de processamento sobre elas. Figura 5.2: Panorama omnidirecional capturado pelo protótipo de navegação Todos os experimentos de navegação foram realizados sobre um piso emborrachado de 2m × 2m de cor verde, como ilustra a Figura 5.3. A padronização da cor e da textura do solo é importante para melhorar a precisão dos algoritmos de 69 identificação de objetos por cor. Ela também ajuda a reduzir o impacto dos ruı́dos causados por variações na iluminação do cenário, fator de significativa importância devido à baixa resolução dos panoramas do modelo catadióptrico. (a) (b) Figura 5.3: Piso padronizado para os experimentos de navegação 5.2 Arquitetura de Software O software para de controle de navegação necessário para a realização dos experimentos foi implementado em linguagem Python e embarcado na unidade central de controle (Raspberry Pi). A Figura 5.4 ilustra a organização geral do programa que é organizado em camadas de acordo com o escopo e a funcionalidade de cada componente. A camada de controle de navegação ((Navigation Control ) contém os pontos de entrada do software para cada experimento. Ela é responsável pela criação e sincronização das diferentes tarefas de navegação (Navigation Tasks). Como exemplo destas tasks estão os objetos responsáveis pela detecção de obstáculos, mapeamento incremental e comparação de imagens para localização. Cada um destes componentes utiliza os módulos das camadas inferiores para captura e análise dos panoramas omnidirecionais. A comunicação com o robô móvel é feita através de uma camada especı́fica de comunicação (Comm) que encapsula os drivers de acesso a uma porta serial e emulada sobre uma interface dispositivo bluetooth. O sistema também contém uma camada para registro de informações de navegação e relatórios de experimentos 70 (Log/Database). A Figura 5.5 apresenta um diagrama de classes dos principais componentes implementados e suas relações. Figura 5.4: Arquitetura geral do software para controle de navegação. Figura 5.5: Diagrama de classes do sistema de controle de navegação. 5.3 Caracterização para Odometria Uma das dificuldades da implementação de robôs móveis é manter a compatibilidade entre as distâncias que robô deve percorrer e as que ele realmente percorre. Devido a 71 ação de diferentes forças dissipativas, bem como às imprecisões inerentes ao controle dos motores, é esperado que o sistema acumule um erro entre o deslocamento real e o estimado, especialmente após um certo tempo de navegação. Este erro acumulado dificulta a implementação dos algoritmos de localização baseados estritamente em odometria. No robô móvel implementado neste trabalho, os comandos para o deslocamento são calculados como uma função de um ângulo de rotação dos motores a partir da posição atual. Por exemplo, para uma dada velocidade angular ϕ de rotação dos motores, para deslocar o veı́culo por uma distância D em linha reta, é necessário girar os motores por um ângulo α a partir da posição atual. É possı́vel determinar a distância percorrida D através da Equação 5.1, conhecendo-se a velocidade linear vr (t) dos pneus, o ângulo α de deslocamento a partir da posição atual e velocidade angular ϕ dos motores. O problema oposto para o sistema de navegação é decidir qual o ângulo de rotação α deve ser aplicado aos motores para deslocar o robô por uma distância D. Em ambos os casos a solução só é possı́vel conhecendo o valor do raio das rodas do sistema. D = vr (t) × α ϕ D = (r × ω) × r= α ϕ D α (5.1) (5.2) (5.3) Para minimizar os efeitos causados pelas imprecisões das deformações e do atrito causados pelo contado entre os pneus e solo, o raio das rodas não pode ser medido diretamente com paquı́metro, e sim estimado experimentalmente. O procedimento adotado para estimar a medida dos raios leva em consideração a razão descrita pela Equação 5.3, que relaciona uma distância D de translação em linha reta e o ângulo α aplicado aos motores pelo firmware do sistema. O procedimento consiste nas seguintes etapas: 1. Estabelecer uma velocidade angular ϕ fixa para os dois motores; 2. Posicionar o motor sobre a origem do plano de navegação; 72 3. Rotacionar os dois motores por vários ângulos α entre 60◦ e 720◦ (deslocamento angular); 4. Para cada deslocamento angular anotar a distância percorrida em linha reta pelo veı́culo; 5. Calcular um valor de raio r de acordo com a Equação 5.3 para cada par (D, α); 6. Calcular a média aritmética de todos os valores r encontrados. O procedimento foi repetido com velocidades de 90 graus/segundo (π/2 rads/s) e 180 graus/segundo (π rads/s). Para cada velocidade foram realizados doze deslocamentos angulares entre 60◦ e 720◦ . O raio médio das rodas em cada velocidade pode ser determinado como a média aritmética das doze medidas de raio. Os resultados das medidas de distância e o raio médio em cada velocidade são exibidos nas Figuras 5.6a e 5.6b. (a) 90 graus/s (b) 180 graus/s Figura 5.6: Medidas de distância percorrida para cada ângulo de rotação em função do deslocamento angular Uma vez determinado o raio médio e conhecendo a velocidade angular de rotação dos motores, é possı́vel determinar a velocidade linear vr (t) em centı́metros por segundo de cada roda de acordo com a Equação 5.4. Para a velocidade angular de 73 π/2 rads/s a velocidade linear estimada foi de 6, 18 cm/s, enquanto para π rads/s o valor foi de 12, 59 cm/s. vr (t) = r × ϕ (5.4) Dado um ponto à uma distância D à frente do robô, e conhecendo o raio médio das rodas, é possı́vel calcular o deslocamento angular necessário para cobrir esta distância com relativa precisão. Quando o ponto de destino não está à frente do veı́culo, porém, é preciso utilizar técnicas de planejamento de trajetória. Sistemas de controle por realimentação são normalmente utilizados para este tipo de planejamento [86, 87]. Neste trabalho, optamos por uma alternativa mais simples de movimentação. Em cada deslocamento, o robô inicialmente alinha o ângulo de orientação (θ) com o ponto de destino para, em seguida, se movimentar em linha reta até ele. Caso algum obstáculo seja encontrado no caminho, o robô realiza uma manobra de contorno e procura uma nova orientação em direção ao ponto de destino. Para um ponto de destino q = (Qx , Qy ) no plano de navegação, o vetor direção até o robô é definido pela Equação 5.5. A inclinação β que deve ser adotada pelo robô é definida pela Equação 5.6. Para alinhar a orientação θ do veı́culo com o vetor direção, o robô precisa realizar uma rotação γ definida na Equação 5.7. Após o alinhamento, a distância necessária até o ponto q é o módulo do vetor direção, definido na Equação 5.8. dx Qx − x dˆ = = dy Qy − y dx ) dy (5.6) −π < γ ≤ π (5.7) d2x + d2y (5.8) β = tan− 1( γ = β − θ, D= q (5.5) 74 5.4 Rastreamento de Objetos O procedimento para rastrear um objeto de cor especı́fica foi inicialmente explicado na Seção 2.1.2, no Capı́tulo 2 desta dissertação. O algoritmo isola a região correspondente ao objeto no campo de visão do robô por um processo de limiarização de cores. Dois limites de cores (i.e. HSV inferior e HSV superior) determinam a coloração do objeto procurado e são configurados como informações de entrada. Em seguida, o algoritmo classifica toda a imagem como dentro ou fora desta região, binarizando a imagem inicial. O resultado da limiarização é uma imagem binária que pode ser utilizada para estimar a posição do objeto com relação à parte frontal do robô. A principal restrição para este procedimento é a necessidade do objeto ter uma cor única com relação ao ambiente. O objetivo do experimento descrito nesta seção é fazer o robô identificar uma esfera vermelha de aproximadamente oito centı́metros de diâmetro para, em seguida, aproximar-se dela em linha reta. A movimentação do robô após a localização da esfera no panorama omnidirecional é divida em duas etapas: • Rotação: o sistema rotaciona o veı́culo para alinhar a frente dele com a posição da esfera. • Translação: o sistema calcula a distância até a esfera e envia um comando ao veı́culo para deslocamento em linha reta. O ângulo α de rotação inicial do robô para alinhamento é determinado pela Equação 5.9, onde W é a resolução horizontal da imagem e xb é a coordenada horizontal do centro da esfera. De uma extremidade a outra do panorama o sistema tem uma variação angular de 360◦ (i.e. 180◦ à −180◦ ), valores negativos de α indicam que o objeto está posicionado à direita do centro da imagem, enquanto os valores positivos indicam que ele está à esquerda. A escala de rotação é ilustrada na Figura 5.7. α= −360 × xb + 180 W (5.9) Após o alinhamento inicial o robô deve realizar uma translação até que esteja a uma distância aproximada de 20cm. A distância relativa do robô até a esfera é 75 Figura 5.7: Escala de rotação a partir do centro do panorama retangular estimada com base na distância (em pixels) do centro da esfera detectada até um ponto no centro inferior da imagem, correspondente à frente do veı́culo. A relação entre a distância em pixels e a distância real foi determinada experimentalmente a partir de uma série de posições conhecidas. Os resultados são apresentados na Tabela 5.1. Para cada distância real a distância na imagem foi medida cinquenta vezes. Uma distribuição normal foi montada com os resultados e os valores médios foram utilizados para determinar o polinômio de ajuste da Equação 5.10. O polinômio determina uma distância dist em centı́metros a partir do valor p em pixels. A dispersão dos valores médios e o polinômio de ajuste são ilustrados no gráfico da Figura 5.8. Na Tabela 5.1 também é possı́vel observar que quanto mais distante o objeto é posicionado do veı́culo, menor é a taxa de detecção do algoritmo, caindo para menos de 50% após um metro. Tabela 5.1: Relação entre a distância real do objeto e a distância em pixels da imagem Distância (cm) Distância na Imagem (Pixels) Desvio padrão (Pixels) Taxa de Detecção (%) 20 11 5 100 25 31 4 100 30 33 5 95 35 41 3 95 40 48 4 90 45 52 4 90 50 54 4 85 60 55 3 85 70 57 3 76 80 58 1 62 90 57 1 49 100 58 1 45 dist(p) = 1, 2942e − 005p5 − 0.0021635p4 + 0, 13775p3 − 4, 1152p3 + 56, 99p3 − 262, 71 (5.10) 76 Figura 5.8: Calibração do algoritmo para determinar a distância até o objeto detectado O algoritmo de rastreamento foi verificado posicionado o mesmo objeto em quatro pontos diferentes do campo de navegação, como mostra a Figura 5.9. O robô foi posicionado no centro da arena e suas medidas foram comparadas com a distância real do objeto. O objetivo do experimento é verificar se o sistema é capaz de: 1. Identificar a esfera em seu campo de visão, estimando o ângulo de rotação com relação à frente do robô e a distância de translação até ele; 2. Alinhar a frente do veı́culo na mesma direção do objeto detectado; 3. Deslocar o robô até que ele esteja a uma distância de aproximadamente 20cm do objeto. Figura 5.9: Localização dos objetos para rastreamento Uma verificação do alinhamento do robô é feita antes de cada translação. O sistema foi configurado para realizar uma rotação somente quando o deslocamento 77 da bola com relação ao centro do panorama é maior que cinco graus. O controle de alinhamento do robô busca minimizar o ângulo com relação ao objeto até que ele esteja no intervalo entre zero e cinco graus. O algoritmo de controle de movimentação do rastreamento é ilustrado na Figura 5.10, ele foi implementado em Python 2.7 e executado no Raspberry Pi. Figura 5.10: Algoritmo para controle de movimentação do rastreamento Devido à posição da câmera no robô, objetos à menos de vinte centı́metros não são visualizados. A distância percorrida em cada translação é sempre o valor estimado menos vinte centı́metros (i.e. distância mı́nima de segurança). A Tabela 5.2 relaciona as medidas reais de distância, as distâncias em pixels e as estimadas pelo polinômio de ajuste (Equação 5.10). O tempo médio de cada detecção foi de 1,23 segundo. A Figura 5.11 apresenta as imagens obtidas pelo robô ao longo do caminho e a trajetória realizada por ele. 78 Tabela 5.2: Relação entre a distância real e a distância estimada pelo algoritmo de detecção de objetos Distância na Imagem (px) Dist. Real (cm) Dist. Estimada (cm) Erro (cm) Erro (%) 13 20 28 -8 40 28 25 24 1 4 32 30 26 4 13 40 35 35 0 0 48 40 38 2 5 47 45 38 7 16 51 50 42 8 16 56 55 65 -10 18 56 60 65 -5 8 57 65 75 -10 15 55 70 58 12 17 58 75 87 -12 16 56 80 65 15 19 57 85 75 10 12 57 90 75 15 17 58 95 87 8 8 57 100 75 25 25 79 (a) Posição A (b) Posição B (c) Posição C (d) Posição D Figura 5.11: Trajetórias de rastreamento 80 5.5 Mapeamento Incremental Para o experimento de mapeamento dinâmico o espaço de navegação foi mapeado em uma grade de ocupação de acordo com a Figura 5.12a, com quadrados de 40cm de lado. O centro de cada quadrado corresponde a um nó (i.e. pontos Sj,k ) do grafo de navegação, representado pelo mapa topológico (S5×5 ) ilustrado na Figura 5.12b. Para navegar pela grade de ocupação o robô deve sempre seguir as arestas de interligação entre os nós, atualizando constantemente sua posição e o ângulo θ de orientação em relação ao sistema de coordenadas de referência. Todas as rotações realizadas devem ser de 90◦ , -90, ou 180◦ , sendo proibida a movimentação em diagonal entre os nós. O objetivo do experimento é navegar de um ponto a outro do mapa identificando quais nós estão preenchidos por obstáculos. Para identificar os obstáculos ao redor do veı́culo, o sistema de visão incorpora o algoritmo de detecção descrito na Seção 2.1.1, do Capı́tulo 2, com algumas adaptações para o sistema de visão omnidirecional. (a) Grade de ocupação (b) Grafo Figura 5.12: Grade de ocupação do cenário e grafo de representação do ambiente para mapeamento dinâmico 5.5.1 Detecção de Obstáculos A detecção de obstáculos utilizada no mapeamento dinâmico baseia-se na segmentação das imagens capturadas em dois componentes: solo e obstáculos. O solo é identificado pelo sistema como um grande componente conexo que começa ime81 diatamente após o robô (i.e. ponto O(W/2, H/2)) no centro inferior da imagem) em todas as direções. Tudo o que está fora deste componente é classificado como obstáculo. Conhecendo a área de solo livre ao redor do veı́culo é possı́vel determinar a melhor forma de se mover através dele evitando colisões. A eficácia do algoritmo é baseada em duas suposições sobre o ambiente a ser navegado, uma sobre o solo e outra sobre os obstáculos. A primeira suposição é a de que o solo é plano e tem coloração e textura uniformes, a segunda é a de que não há obstáculos suspensos. Atendendo estas duas restrições o sistema pode identificar a área de solo livre até um obstáculo e estimar a distância até ele como uma função direta do número de pixels no solo. Inicialmente, o panorama omnidirecional é dividido em cinco regiões, cada uma correspondendo à uma seção do campo de visão. Em cada região é delimitada uma área trapezoidal de segurança equivalente à vinte centı́metros de distância da borda do veı́culo, os trapézios são ilustrados na Figura 5.13a. Uma amostra da cor do solo é retirada no ponto central de cada trapézio e armazenada na memória. É importante que o robô seja inicialmente posicionado em uma área sem obstáculos na região de segurança, assegurando que as amostras coletadas são realmente do solo. Em seguida o algoritmo “inunda” (flooding) a imagem a partir dos pontos de amostragem, convertendo todos os pixels de valor próximo ao do solo para uma cor sólida. Uma série de linhas de verticais são traçadas em espaços regulares partindo da altura (i.e. coordenada y) de cada amostra até a borda do componente. O comprimento em pixels de cada linha pode ser utilizado para determinar a distância até o primeiro obstáculo naquela região da imagem. O resultado é ilustrado na Figura 5.13b. Caso alguma dessas retas termine dentro do trapézio de segurança, o robô identifica que aquela região tem um obstáculo muito próximo, e escolhe outra direção. Na Figura 5.13b a direção escolhida é sinalizada com um cı́rculo azul. O robô deve se movimentar sempre pela distância delimitada por um trapézio de segurança livre de obstáculos. O comprimento dos trapézios foi escolhido de forma que o veı́culo também possa fazer rotações sem colidir as laterais. 82 (a) Trapézios de segurança (b) Detecção de solo Figura 5.13: Resultado do procedimento de detecção de obstáculos 5.5.2 Planejamento de Rota O planejamento de rota é feito com auxı́lio do algoritmo de Dijkstra para definir o menor caminho entre dois nós de um grafo. O algoritmo inicialmente define um peso unitário para cada aresta livre do grafo. A distância entre dois pontos do mapa é definida como a soma dos pesos das arestas da trajetória escolhida. O algoritmo avalia os caminhos possı́veis e retorna sempre o que oferece a menor distância. Partindo de uma posição inicial S1×1 , com θ = 0, o robô calcula a primeira trajetória assumindo que não há obstáculos no espaço de navegação. Durante trajetória, o robô utiliza o procedimento de detecção de obstáculos para verificar se o próximo nó do caminho está livre ou ocupado. Caso esteja ocupado ele atualiza a matriz de adjacências e calcula uma nova trajetória a partir do ponto atual. Se próximo nó não estiver ocupado, ele avança 40cm em direção a ele. Não há garantia de que o sistema possa mapear todos os obstáculos do posicionados no espaço de navegação. Para isso seria mais eficiente forçar o robô a visitar todos os nós do grafo. No entanto, quanto mais distantes estiveram a origem e o destino escolhidos, maiores são as chances do sistema recalcular as rotas iniciais e, consequentemente, visitar mais pontos do mapa. 5.5.3 Resultados de Mapeamento Os obstáculos foram posicionados como mostra a Figura 5.14. O robô foi posicionado no nó S1,1 , com θ = 0 e o destino escolhido foi o nó S5,1 . Os obstáculos cobrem os nós: S1,3 , S2,5 , S3,1 , S3,2 , S3,3 , S5,3 , S5,4 e S5,5 . O robô não tem conhecimento prévio sobre a posição das barreiras, por conta 83 Figura 5.14: Obstáculos para o experimento de mapeamento dinâmico disso a primeira rota calculada é: S1,1 → S2,1 → S3,1 → S4,1 → S5,1 , como mostrado na Figura 5.15a. Ao atingir o nó S2,1 , o robô percebe a presença de um bloqueio no nó seguinte e atualiza a matriz de adjacências removendo a aresta entre eles. Com o grafo atualizado, o sistema calcula uma nova rota até o destino, como mostrado na Figura 5.15b. Uma nova rota é calculada toda vez que o veı́culo encontra um bloqueio, o processo se repete até que o veı́culo atinja o nó de destino por um caminho livre de obstáculos (Figura 5.15c). O grafo final representa um mapa do ambiente com regiões que podem ou não serem navegadas. A Tabela 5.3 apresenta todas as rotas calculadas pelo veı́culo até atingir o nó de destino neste experimento. Os nós marcados como bloqueados contém obstáculos identificados pelo robô. O tempo de cálculo de cada rota também é apresentado na tabela. A Figura 5.16, por sua vez, apresenta alguns exemplos da visão do robô durante o percurso. Os pontos vermelhos nas imagens da Figura 5.16 indicam os pontos de intersecção entre o solo e os obstáculos identificados pelo algoritmo de detecção. 84 (a) (b) (c) Figura 5.15: Exemplo de rotas calculadas até o nó de destinoS5,1 Figura 5.16: Visão do robô durante o mapeamento 85 Tabela 5.3: Cálculo e atualização de rotas no grafo de navegação Atual Próximo Bloqueado Rota Re-cálculo (ms) Ângulo (◦ ) ◦ -90◦ S1,1 S2,1 Não S1,1 → S2,1 → S3,1 → S4,1 → S5,1 - 0 S2,1 S3,1 Sim S2,1 → S3,1 → S4,1 → S5,1 2 -90◦ - ◦ S2,1 S2,2 S2,1 → S2,2 → S3,2 → S4,2 → S5,2 → S5,1 Não Rotação (◦ ) 0◦ -90 90◦ ◦ S2,2 S3,2 Sim S2,2 → S3,2 → S4,2 → S5,2 → S5,2 → S5,1 2,3 0 -90◦ S2,2 S2,3 Não S2,2 → S2,3 → S3,3 → S4,3 → S4,2 → S5,2 → S5,1 - -90◦ 90◦ S2,3 S3,3 Sim S2,3 → S3,3 → S4,3 → S4,2 → S5,2 → S5,1 2 0 -90◦ S2,3 S2,4 Não S2,3 → S2,4 → S3,4 → S4,4 → S4,3 → S4,2 → S5,2 → S5,1 - -90◦ 90◦ S2,4 S3,4 Não S2,3 → S2,4 → S3,4 → S4,4 → S4,3 → S4,2 → S5,2 → S5,1 - ◦ ◦ -90◦ 0 ◦ S3,4 S4,4 Não S2,3 → S2,4 → S3,4 → S4,4 → S4,3 → S4,2 → S5,2 → S5,1 - -90 S4,4 S4,3 Não S2,3 → S2,4 → S3,4 → S4,4 → S4,3 → S4,2 → S5,2 → S5,1 - -90◦ S4,3 S4,2 Não S2,3 → S2,4 → S3,4 → S4,4 → S4,3 → S4,2 → S5,2 → S5,1 - 0◦ -90◦ ◦ 0◦ ◦ -180 S4,2 S5,2 Não S2,3 → S2,4 → S3,4 → S4,4 → S4,3 → S4,2 → S5,2 → S5,1 - -180 90◦ S5,2 S5,1 Não S2,3 → S2,4 → S3,4 → S4,4 → S4,3 → S4,2 → S5,2 → S5,1 - -90◦ -90◦ 5.5.4 Discussão A Figura 5.17 apresenta o grafo de representação do ambiente obtido após o final do percurso de mapeamento. É possı́vel observar que somente as arestas identificadas como bloqueio durante o percurso é que são removidas do grafo de representação do ambiente. A precisão da representação final é proporcional ao número de bloqueios que o robô foi capaz de identificar durante o percurso. No trajeto apresentado, a partir do nó S2,4 o veı́culo não encontra mais arestas bloqueadas até o ponto de destino. O único obstáculo identificado foi o que cobre os vértices S3,1 , S3,2 e S3,3 . Uma forma de aumentar a cobertura do mapeamento seria forçar o robô a visitar todos os nós do grafo de representação. Figura 5.17: Grafo atualizado após o percurso Uma outra limitação encontrada é o fato de que o robô não considera as rotações necessárias na trajetória antes de escolher entre duas rotas com a mesma distância. 86 Por exemplo, quando o robô atinge o nó S4,2 , com orientação de −180◦ , ele escolhe o caminho S4,2 → S5,2 → S5,1 , executando uma rotação a mais do que se tivesse escolhido o caminho S4,2 → S4,1 → S5,1 . Uma forma de solucionar este problema é utilizar pesos adicionais em arestas que exigem rotações, dada a orientação do atual do robô. Outro problema associado à este experimento é erro acumulado de odometria durante o percurso. Quanto maior é a distância percorrida pelo robô, mais significativos se tornam os pequenos erros acumulados em cada rotação ou translação. Após um certo tempo de navegação, a posição do robô deixa de corresponder à posição esperada, inviabilizando a adoção de estratégias de mapeamento de todos os nós do grafo. 5.6 Localização O experimento de mapeamento dinâmico de obstáculos apresentado na seção anterior pressupõe que o robô conhece a sua posição inicial no mapa topológico. Durante a execução de uma determinada rota, o robô determina a sua posição atual com base em registro de todos os movimentos realizados desde o ponto de partida. Corrigindo os erros de odometria, o sistema é capaz de determinar sozinho quando atinge cada nó do percurso até o ponto de destino. O que fazer, no entanto, quando a posição inicial do veı́culo não é conhecida inicialmente? A habilidade para determinar a posição do robô com base na aparência atual dos sensores, ou seja, sem o registro anterior de movimentação, é um dos ı́tens fundamentais dos problemas de localização, discutidos no Capı́tulo 2. Nesta seção realizamos um experimento para determinar a localização atual do robô móvel com base em um conjunto de imagens associadas à diferentes nós do mapa topológico. O objetivo final do algoritmo de localização implementado é determinar se o robô está ou não sobre um nó previamente mapeado. O sistema de visão executa um algoritmo de extração e comparação de features para determinar qual imagem do banco de dados mais se assemelha à da posição atual. O nó atual é identificado quando um número mı́nimo de matches entre duas imagens é atingido. Para detecção de pontos-chave e descritores na imagem foi utilizado o algoritmo de 87 extração ORB (Oriented FAST and Rotated BRIEF ) [88], uma alternativa eficiente para o SIFT e SURF. A comparação de descritores foi feita com um comparador do tipo FLANN (Fast Approximate Nearest Neighbors)[89]. 5.6.1 Treinamento Considerando o mapa topológico da Figura 5.18, o robô foi manualmente posicionado sobre os nós S1,1 , S1,5 , S3,3 , S5,5 e S5,1 . Uma imagem local foi capturada pelo robô em cada um destes pontos e armazenadas para comparação futura. A Figura 5.19 apresenta as cinco imagens capturadas. Figura 5.18: Mapa topológico e pontos selecionados para localização 88 (a) S1,1 (b) S1,5 (d) S5,5 (c) S3,3 (e) S5,1 Figura 5.19: Imagens de pontos conhecidos do ambiente de navegação Os algoritmos de extração de features podem ser executados diretamente sobre as imagens polares, eliminando a necessidade de conversão para um panorama retangular nesta fase. Outra vantagem importante oferecida pelas imagens omnidirecionais é uma maior invariabilidade rotacional. Esta caracterı́stica permite que um nó seja identificado visualmente mesmo que o robô esteja com um ângulo atual de rotação diferente do treinamento. Para cada nó Sx,y mapeado previamente pelo sistema, a fase de treinamento consiste em comparar o número de matches retornado na comparação com todos os demais. O objetivo é determinar o valor mı́nimo de matches que sistema deve utilizar para indicar quando ele “reconheceu” ou não um nó mapeado. Durante a elaboração do experimento, foi observado que o algoritmo retorna um número de matches proporcional à distância geográfica dos nós no cenário. Quanto mais próximos estão dois nós, maior o número de matches entre eles. Por exemplo, considerando uma imagem de treinamento capturada sobre o nó S1,5 , os números de matches com relação aos nós S2,5 , S2,4 e S1,4 são de 38, 36 e 29, respectivamente. Para nós mais distantes, como S3,3 , S4,2 e S5,1 , os valores são sempre inferiores 89 à 25. Com base nesta observação, um número mı́nimo de quarenta matches foi então determinado para indicar quando uma comparação é bem-sucedida ou não. Considerando um ponto de treinamento Sj,k , um ponto atual qualquer Cx,y e uma função de comparação F (Cx,y , Sj,k ) que retorna o número de matches entre as duas imagens, os seguintes resultados podem ser esperados nas comparações: 1. F (Cx,y , Sj,k ) ≥ 40, para Cx,y = Sj,k . Nó reconhecido com sucesso. 2. F (Cx,y , Sj,k ) < 40, para Cx,y 6= Sj,k . Neste caso o algoritmo também é bemsucedido, porque não identifica como iguais dois nós diferentes. 3. F (Cx,y , Sj,k ) < 40, para Cx,y = Sj,k . Falso-negativo. Neste caso o algoritmo falha quando não reconhece o nó atual como previamente mapeado. 4. F (Cx,y , Sj,k ) ≥ 40, para Cx,y 6= Sj,k . Falso-positivo. Neste caso o algoritmo falha, porque reconhece um nó desconhecido como um nó mapeado. Os casos 1 e 2 são considerados bem-sucedidos, enquanto os casos 3 e 4 são considerados com o falhas. Com a habilidade de reconhecer o nó atual com base na comparação de imagens, é possı́vel repetir o experimento de mapeamento dinâmico, mas agora sem a necessidade de posicionar o sistema sempre sobre o mesmo nó inicial. Antes de iniciar o cálculo de rotas até um destino pré-configurado, o sistema de visão compara o ponto de vista atual com as cinco imagens capturadas durante o treinamento e determina de onde ele está partindo. 5.6.2 Reconhecendo o Nó Inicial A eficácia do algoritmo de localização foi avaliada em dois experimentos separados. No primeiro experimento o sistema foi posicionado novamente sobre cada um dos pontos de treinamento. O resultado esperado é que o sistema identifique corretamente o nó em que está (F (Cx,y , Sj,k ) ≥ 40), descartando os demais (F (Cx,y , Sj,k ) < 40). A Tabela 5.4 apresenta o número de matches encontrados em cada comparação. A Figura 5.20 apresenta o resultado da comparação da imagem obtida sobre o nó S1,5 com todos os nós conhecidos. Para validar o procedimento de comparação, um segundo experimento foi realizado, mas agora posicionando o robô sobre pontos não mapeados do cenário. O 90 Tabela 5.4: Número de matches com o robô posicionado sobre pontos conhecidos do mapa Nós Conhecidos Nó Atual Tempo por Comparação (s) S1,1 S1,5 S3,3 S5,5 S5,1 S1,1 45 26 12 11 16 1,7 S1,5 19 57 13 15 30 1,7 S3,3 24 10 46 18 11 1,9 S5,5 12 21 14 49 17 1,73 S5,1 13 22 25 11 49 1,7 resultado esperado é que o robô não consiga um número mı́nimo de matches para nenhuma das imagens do banco de dados de treinamento. A Tabela 5.5 apresenta o número de correspondências obtidos em todas as comparações realizadas nesta segunda etapa. Tabela 5.5: Número de matches com o robô posicionado sobre pontos desconhecidos do mapa Nós Conhecidos Nó Atual Tempo por Comparação (s) S1,1 S1,5 S3,3 S5,5 S5,1 S5,4 12 8 24 38 16 1,95 S5,2 17 20 22 16 47 1,9 S3,4 20 10 28 12 21 1,92 S3,1 34 9 23 18 10 1,9 S2,2 29 11 43 16 20 1,9 91 (a) S1,5 - S1,1 (b) S1,5 - S1,5 (c) S1,5 - S3,3 (d) S1,5 - S5,5 (e) S1,5 - S5,1 Figura 5.20: Resultado de comparações com o robô posicionado sobre o nó S1,5 5.6.3 Discussão O algoritmo de localização utilizado baseia-se na comparação da imagem do local atual com imagens previamente armazenadas de pontos conhecidos. Quanto mais próxima for a aparência entre duas imagens, mais combinações de pontos chaves (matches)são encontradas entre as duas. A Tabela 5.4 mostra que o sistema de visão é capaz de identificar quando o robô é posicionado sobre um nó já conhecido. Por outro lado, também na Tabela 5.5, os pontos S2,2 e S5,2 foram identificados como os nós S3,3 e S5,1 do mapa, respectivamente. O algoritmo, neste caso, “falha” na identificação de nós geograficamente muito próximos um do outro. Esta carac92 terı́stica pode ser um problema para cenários pequenos e regulares como o utilizado neste experimento, mas tem um impacto menos significativos quando os ambientes comparados são mais variados entre si. Uma forma de contornar esta limitação é adicionar marcações visuais únicas aos nós conhecidos. Uma outra limitação associada ao estado atual do algoritmo de localização é a de não identificar a rotação do robô com relação à imagem de treinamento. É possı́vel comparar o deslocamento dos pontos-chave entre a imagem teste e a de treinamento para estimar a diferença de rotação entre as duas. Este cálculo é útil para que o robô possa estimar não só a sua localização inicial, mas também o ângulo de orientação com relação ao sistema global de referências. Na forma atual, o robô precisa ser posicionado sempre com a mesma orientação sobre o mapa, para que ele seja capaz de definir com precisão todos os movimentos até o destino. Uma outra melhoria que pode ser incorporada ao algoritmo de localização é o armazenamento apenas dos pontos-chave e dos descritores dos nós conhecidos, e não da imagem completa. Esta alteração pode reduzir o tempo de execução do algoritmo. 93 Capı́tulo 6 Conclusões Este capı́tulo faz um resumo geral do trabalho apresentado nesta dissertação, discutindo os principais resultados e contribuições e apresentando direções para trabalhos futuros. 6.1 Resumo de Resultados O interesse central deste trabalho foi realizar um estudo sistemático de diferentes arquiteturas de visão omnidirecional para utilização em robôs móveis de pequeno porte. Aqui, o termo “pequeno porte” estabelece um escopo geral para as soluções analisadas, direcionando a atenção da pesquisa para plataformas com pequenas dimensões fı́sicas, baixo consumo de energia e baixo poder de processamento. Outra restrição de escopo foi a necessidade de elaborar um sistema que pudesse ser embarcado sem a incorporação de elementos computacionais de grande porte, como servidores e computadores pessoais. O trabalho utilizou alternativas de hardware e software que, ao mesmo tempo, atendessem a estas restrições e fossem capazes de oferecer um conjunto mı́nimo de serviços para navegação. O objetivo final era avaliar estratégias para desenvolver um sistema de visão omnidirecional fechado, que pudesse ser integrado à diferentes plataformas móveis por meio de um protocolo simples de troca de mensagens. Um sistema de navegação autônoma é uma soma de tarefas fundamentais (i.e. localização, identificação de obstáculos, planejamento de rotas) que operam em conjunto para levar o robô de um ponto A a um ponto B de forma segura e eficiente. Para 94 cada uma destas “tarefas fundamentais” existe uma infinidade de soluções possı́veis, com vários nı́veis de precisão e complexidade. No caso especı́fico dos sistemas de navegação por visão computacional, estes serviços precisam ser incorporados a um fluxo de trabalho que compreende as seguintes etapas: I Captura de imagens; II Pré-processamento; III Interpretação; IV Tomada de decisão; V Controle de movimentação. Este fluxo de navegação visual é a linha geral que conecta os diferentes aspectos desta dissertação. As etapas I e II estão presentes nos Capı́tulos 3 e 4, que se concentraram no estudo das melhores estratégias para aquisição de imagens omnidirecionais utilizando câmeras inteligentes (smartcams) e microcontroladores. O Capı́tulo 3 apresentou os fundamentos teóricos para a aquisição de panoramas omnidirecionais, enquanto o Capı́tulo 4 estudou a implementação de protótipos, enfatizando as diferentes estratégias de interligação entre as câmeras e as unidades de processamento. Como resultado, foram construı́dos e analisados três protótipos de aquisição por image stitching, sendo um monocular e dois multicâmeras, e um protótipo por dewarping de imagens polares (catadióptrico). Embora o modelo catadióptrico seja a escolha mais comum em projetos de visão omnidirecional para robôs, os sistemas de image stitching não podem ser totalmente descartados. Aplicações que precisam de altas resoluções podem utilizar esta abordagem desde que a arquitetura utilizada atenda às suas restrições de desempenho. Um dos aspectos centrais desta pesquisa foi justamente o estudo das diferentes arquiteturas de interligação entre câmeras para implementar um sistema de visão por image stitching. O objetivo foi responder perguntas como: é possı́vel construir um sistema de image stitching utilizando smartcams como a CMUCam3 e computadores de bolso como Raspberry Pi? Em caso afirmativo, como atingir o melhor desempenho? Quais os principais gargalos deste tipo de implementação? 95 O Capı́tulo 4 apresentou elementos para avaliar sistematicamente estes problemas. Os melhores resultados em image stitching foram alcançados com as arquiteturas de barramento compartilhado e daisy chain. Embora estes modelos não tenham oferecido um tempo de aquisição compatı́vel com aplicações de navegação em tempo real, a análise das formas de interligação fornece material de referência para outros projetos semelhantes. Os principais fatores que contribuı́ram para o baixo desempenho destas arquiteturas foram as limitações de processamento e transmissão de dados da CMUCam3. Estas dificuldades podem ser superadas com o uso de plataformas mais robustas, por exemplo, a versão mais recente da CMUCam, a CMUCam5 Pixy [90], equipada com um microcontrolador NXP LPC4330 (núcleo ARM Cortex-M4/M0, 204Mhz, dual core) e interfaces comunicação UART, SPI, I2C e USB para saı́da de dados. Com uma comunicação rápida e unidades de processamento mais poderosas, é possı́vel embarcar os algoritmos de filtragem e limiarização de imagens diretamente nas smartcams, dedicando os recursos do Raspberry Pi (ou de outra unidade central de processamento) para tarefas mais complexas. As etapas III, IV e V do fluxo visual, por sua vez, foram objeto de estudo dos Capı́tulos 2 e 5. Tendo em vista as restrições gerais de escopo do trabalho, o Capı́tulo 2 priorizou a análise de algoritmos com baixa complexidade e de fácil implementação em ambientes embarcados. Os algoritmos escolhidos para rastreamento de objetos e detecção de obstáculos baseiam-se em técnicas de comparação de valores de pixels (limiarização); estratégias que, embora sejam sensı́veis à variações de iluminação, não exigem computações complexas e grandes quantidades de memória. Para os problemas de extração e comparação de features, por sua vez, foram escolhidos algoritmos como o SURF e o ORB, versões mais eficientes do tradicional SIFT. O Capı́tulo 2 (Seção 2.2) ainda define um modelo geral de integração entre o sistema de captura de imagens, o processamento de navegação e o robô móvel em si, além de um modelo cinemático para controle de movimentação e odometria. Após o ciclo inicial de análise de algoritmos e protótipos de aquisição omnidirecional, a etapa seguinte do trabalho foi integrar todos estes elementos em um contexto real de navegação. No Capı́tulo 5, o protótipo de aquisição catadióptrico foi interligado ao robô móvel de acordo com os modelos apresentados no Capı́tulo 96 2. Foram realizados experimentos de navegação para problemas de rastreamento, mapeamento dinâmico de obstáculos e localização inicial em um ambiente parcialmente conhecido. Os experimentos demonstraram a viabilidade da utilização de plataformas como o Raspberry Pi em problemas de robótica móvel. 6.2 Discussão O objetivo de desenvolver um sistema de navegação por visão como um componente que pudesse ser integrado à diferentes plataformas móveis acompanhou este trabalho desde os primeiros meses. Buscávamos um sistema que implementasse todas as etapas do fluxo de navegação visual e entregasse ao robô móvel, através de um protocolo simples de comunicação, uma série de comandos para movimentação. Um sistema como este precisaria integrar uma câmera para captura das imagens, uma unidade de processamento e uma interface de comunicação com o mundo externo. Todas estas caracterı́sticas podiam ser encontradas em plataformas de câmeras inteligentes (smartcams) como a CMUCam3, sugerindo uma alternativa inicial para implementação. A CMUCam3 reune, em uma mesma placa, um sensor CCD OV6620, um microcontrolador LPC2106, com núcleo ARM7TDMI-S de 64KB de SRAM, e uma entrada para cartões de memória de até 4GB. A placa também oferece duas interfaces de comunicação serial e quatro pinos de GPIO (General Purpose Input/Output) para comunicação externa. Em seu portfolio de aplicações constavam alguns sistemas de vigilância, teleconferência e controle de robôs de pequeno porte com visão monocular. Nossa primeira estratégia foi construir um sistema de visão omnidirecional inteiramente baseado em CMUCam3. A revisão teórica do assunto mostrou que existem duas formas tradicionais para capturar um panorama omnidirecional: dewarping de uma imagem polar e stitching de segmentos consecutivos. O primeiro método pode ser implementado com um arranjo catadióptrico entre uma câmera e um espelho convexo, já o segundo pode ser implementado com uma única câmera giratória (monocular) ou um arranjo circular multicâmeras. Enquanto o desempenho é a principal vantagem do primeiro método, a resolução final do panorama é a do segundo. 97 O modelo catadióptrico é mais popular entre os trabalhos relacionados na literatura, fator que contribuiu para que ele seja a primeira escolha em projetos semelhantes. Estes projetos quase sempre optam por construir os próprios arranjos devido a escassez de câmeras catadióptricas industrializadas no mercado. No nosso caso, as tentativas de montar uma câmera catadióptrica alinhando manualmente uma CMUCam3 à um espelho convexo mostraram-se bastante desafiadoras. Uma alternativa mais promissora surgiu da combinação entre um módulo de video especı́fico para Raspberry Pi e uma lente Kogeto Dot de 360◦ . O modelo catadióptrico final foi escolhido para integração com o robô móvel não só porque apresentou o melhor desempenho de aquisição, mas também por que era fisicamente mais compacto que os demais, o que facilitou a montagem sobre o Lego NXT. Para construir um sistema de aquisição por image stitching utilizando múltiplas CMUCam3 seria necessário, além de determinar a melhor forma de interligar as câmeras, distribuir o cálculo das transformações perspectivas entre os vários processadores. Uma vez definido o mecanismo de aquisição omnidirecional, a etapa seguinte seria embarcar os algoritmos de interpretação de imagens e planejamento de rotas ao arranjo de câmeras, transformando-o em um sistema de navegação propriamente dito. Neste ponto começaram as dificuldades causadas pelas limitações da CMUCam3. Os primeiros ensaios realizados com a câmera (Seção 4.1.1) mostraram uma limitação significativa: a interface de comunicação serial tornava a transmissão de imagens completas muito lenta para os padrões de navegação em tempo real. Além disso, apesar do microcontrolador LPC2106 disponibilizar interfaces de comunicação mais rápidas (e.g. I2C e SPI), elas já estavam ocupadas por outros componentes da placa, impossibilitando a sua utilização no projeto. A limitação no tempo de transmissão das imagens para fora da CMUCam3 não seria tão importante caso todo o processamento de navegação ainda pudesse ser realizado dentro dela. Se os algoritmos de identificação de obstáculos, localização e mapeamento fossem executados pela própria CMUCam3 em tempo de navegação, o volume de informações transmitidos pelas interfaces seriais poderia ser reduzido ao ponto de não impactar no funcionamento do sistema. Para avaliar esta possibilidade, foi medido o desempenho da execução de dois algoritmos necessários para o fluxo de navegação visual: um filtro de suavização de imagens (convolução) e o 98 algoritmo de detecção de obstáculos por detecção de solo (limiarização). Os resultados apresentados na Seção 4.1.1 para estes ensaios não foram animadores, deixando claro que a CMUCam3 não seria capaz de executar, em tempo hábil, os algoritmos mais complexos para extração de features e planejamento de rotas. Uma unidade de processamento de maior poder computacional precisava ser incorporada. Seguindo a orientação geral para não incorporar elementos de grande porte, as alternativas mais promissoras seriam incorporar microcontroladores mais poderosos, hardware programável (FPGA) ou “computadores de bolso” como o Raspberry Pi. A última alternativa pareceu mais vantajosa pelo fato de incorporar elementos de alto nı́vel (i.e. Linux, OpenCV, Python, etc.) mantendo os mesmos nı́veis de consumo e dimensões fı́sicas das demais. O Raspberry Pi é um computador de propósito geral embarcado em um SoC Broadcom BCM2835 e BCM2836. As versões mais recentes possuem um processador ARM Cortex-A7 de quatro núcleos e até 1GB de RAM. O Raspberry Pi é capaz de rodar sistemas Linux e suporta bibliotecas de alto nı́vel como o OpenCV. Também é possı́vel embarcar frameworks especı́ficos para robótica como o ROS (Robot Operation System) [91]. O ensaio para caracterização da performance do Raspberry Pi foi apresentado na Seção 4.1.2. O desempenho foi superior ao obtido pela CMUCam3. A melhor interligação foi alcançada com a CMUCam3 responsável pela captura e compressão das imagens, deixando o restante do processamento para o Raspberry Pi. O menor tempo de transmissão de um quadro em JPEG da CMUCam3 para o Raspberry Pi foi de 0,5 segundo, dando margem para a execução das demais tarefas em um tempo compatı́vel com a velocidade do robô. A arquitetura geral do sistema de navegação visual ficou definida desta forma: a CMUCam3 responsável pela captura e compressão das imagens e o Raspberry Pi responsável pela execução dos algoritmos de navegação. A incorporação do Raspberry Pi facilitou a implementação completa do fluxo visual e a integração com o Lego NXT. Este resultado expandiu as possibilidades da pesquisa, possibilitando a realização dos experimentos de navegação do Capı́tulo 5. Com o Raspberry Pi B rodando um sistema operacional Linux Raspbian Wheezy no papel da unidade central de controle, todos os algoritmos puderam ser implementados em Python 2.7 com o auxı́lio da biblioteca OpenCV. O software final de navegação foi uma combinação de 99 funções oferecidas pelo OpenCV e código próprio desenvolvido para este trabalho. Foram criados diferentes módulos Python para executar todas as etapas do fluxo visual de acordo com o experimento desejado. 6.3 Contribuições As principais contribuições oferecidas por este trabalho podem ser resumidas da seguinte forma: • Um estudo sistemático de arquiteturas embarcadas para aquisição de imagens omnidirecionais por image stitching, com enfoque especial nos modelos de interligação e distribuição de tarefas entre os elementos de processamento; • A identificação de gargalos importantes para a implementação de sistemas mono e multicâmeras de visão omnidirecional; • A elaboração de uma arquitetura de visão fechada, capaz de ser integrada à diferentes plataformas móveis através de um protocolo de troca de mensagens e uma interface sem fio; • Uma demonstração da viabilidade da utilização de plataformas como o Raspberry Pi em aplicações de robótica móvel; • O desenvolvimento de soluções em Python para problemas de rastreamento de objetos, identificação de obstáculos e mapeamento dinâmico em plataformas de baixo poder computacional. A linguagem escolhida ainda permite a utilização das mesmas soluções em outros ambientes além do Raspberry Pi, exigindo pouca ou nenhuma adaptação; • A implementação de um sistema catadióptrico de visão utilizando componentes de prateleira (off-the-shelf ) e a sua utilização em experimentos reais de navegação não assistida; As contribuições apresentadas fornecem um material de referência para outros trabalhos do mesmo gênero, indicando vantagens e desvantagens de cada estratégia e auxiliando futuras pesquisas na escolha do modelo mais adequado de aquisição. 100 6.4 Trabalhos Futuros Devido à preocupação inicial com o desempenho das plataformas utilizadas neste trabalho (i.e. Raspberry Pi e CMUCam3), e também ao objetivo de desenvolver soluções totalmente embarcadas, a escolha dos algoritmos de interpretação de imagens e controle de navegação priorizou soluções mais “leves”, que exigissem poucos recursos computacionais. Embora estes algoritmos nem sempre ofereçam os resultados mais precisos, foi possı́vel embarcá-los no Raspberry Pi e na CMUCam3. Um desdobramento futuro deste trabalho pode ser a implementação de técnicas mais robustas de navegação por visão, por exemplo: algoritmos de classificação de imagens por redes neurais, estratégias de controle probabilı́stico (e.g. Kalman Filters, Particle Filters, etc.), localização e mapeamento simultâneos (SLAM). Com relação aos componentes do sistema, também é possı́vel substituir as plataformas básicas de aquisição e processamento por versões mais recentes. A CMUCam5 Pixy parece ser uma boa alternativa para contornar as limitações da CMUCam3. Versões mais recentes do Raspberry Pi também oferecem um desempenho muito mais alto com os mesmos nı́veis de consumo. Atualizar a aplicação das arquiteturas de interligação e dos algoritmos de visão nestes componentes, bem como avaliar o ganho de desempenho desta alteração, pode ser uma direção futura para esta pesquisa. Finalmente, graças à portabilidade dos códigos desenvolvidos em Python durante o trabalho, também é possı́vel adaptar as soluções para outras plataformas similares ao Raspberry Pi como, por exemplo, o Intel Galileo [92] e o Beaglebone [93]. Um outro desdobramento possı́vel é a utilização de frameworks especı́ficos para robótica, como o ROS, nestas plataformas embarcadas. 101 Referências Bibliográficas [1] MARKOFF, J., “Google Cars Drive Themselves, in Traffic”, New York Times, v. 9, 2010. [2] AG, A., “Audi piloted driving”, Disponı́vel em: http : //www.audi.com/com/brand/en/piloted − driving.html. Acesso em: 29 de julho de 2015, Julho 2015. [3] MERCEDES-BENZ, I., “The Mercedes-Benz F 015 Luxury in Motion”, Disponı́vel em: http : //www.landrover.com/experiences/news/jlr − remote − control − range − rover − sport.html. Acesso em: 01 de Setembro de 2015, Outubro 2015. [4] ROVER, J. L., “Jaguar Land Rover Showcase New Technologies Including A Remote Control Range Rover Sport”, Disponı́vel em: http : //www.landrover.com/experiences/news/jlr − remote − control − range − rover − sport.html. Acesso em: 29 de junho de 2015, 2015. [5] AUTOMOTIVE Vehicle ENGINEERS, Standards S. Committee”, O., “On-Road Disponı́vel //www.sae.org/works/committeeHome.do?comtID em: = Automated http : T EV AV S. Acesso em: 29 de junho de 2015, 2012. [6] LILY, “Lily Camera”, Disponı́vel em: https : //www.lily.camera/. Acesso em: 29 de junho de 2015, 2015. [7] GROTZINGER, J. P., CRISP, J., VASAVADA, A. R., et al., “Mars Science Laboratory mission and science investigation”, Space science reviews, v. 170, n. 1-4, pp. 5–56, 2012. 102 [8] JONES, J. L., “Robots at the tipping point: the road to iRobot Roomba”, Robotics & Automation Magazine, IEEE , v. 13, n. 1, pp. 76–78, 2006. [9] ANDREW, A. M., “Mobile Robotics: A Practical Introduction”, Kybernetes, v. 33, n. 8, pp. 1336–1337, 2004. [10] GUILHERME, N., AVINASH, C., “Vision for mobile robot navigation: A survey”, IEEE Transactions on Pattern Analysis and Machine Intelligence, v. 24, n. 2, pp. 237–267, 2002. [11] TSUKIYAMA, T., “Rfid based navigation system for indoor mobile robots”. In: World Congress, v. 18, n. 1, pp. 1084–1089, 2011. [12] DURRANT-WHYTE, H., BAILEY, T., “Simultaneous localization and mapping: part I”, Robotics & Automation Magazine, IEEE , v. 13, n. 2, pp. 99– 110, 2006. [13] ELFES, A., “Sonar-based real-world mapping and navigation”, In: Autonomous Robot Vehicles, pp. 233–249, Springer, 1990. [14] ISHIGURO, H., MAEDA, T., MIYASHITA, T., et al., “A strategy for acquiring an environmental model with panoramic sensing by a mobile robot”. In: Robotics and Automation, 1994. Proceedings., 1994 IEEE International Conference on, pp. 724–729, 1994. [15] INC, N. R., “Neato Botvac”, Disponı́vel em: http : //www.neatorobotics.com/robot − vacuum/botvac/. Acesso em: 29 de junho de 2015, 2012. [16] ANSARI, M. A., UMRANI, F. A., “SONAR Based Obstacle Detection and Avoidance Algorithm”. In: Signal Acquisition and Processing, 2009. ICSAP 2009. International Conference on, pp. 98–102, 2009. [17] LENSER, S., VELOSO, M., “Visual sonar: Fast obstacle avoidance using monocular vision”. In: Intelligent Robots and Systems, 2003.(IROS 2003). Proceedings. 2003 IEEE/RSJ International Conference on, v. 1, pp. 886– 891, 2003. 103 [18] DURRANT-WHYTE, H. F., Integration, coordination and control of multisensor robot systems. v. 36. Springer Science & Business Media, 2012. [19] KAM, M., ZHU, X., KALATA, P., “Sensor fusion for mobile robot navigation”, Proceedings of the IEEE , v. 85, n. 1, pp. 108–119, 1997. [20] JOLLAY, D., RICKS, R., Sensor fusion for robot navigation, Tech. rep., Oak Ridge National Lab., TN (USA), 1988. [21] BENTO, L. C., NUNES, U., MOITA, F., et al., “Sensor fusion for precise autonomous vehicle navigation in outdoor semi-structured environments”. In: Intelligent Transportation Systems, 2005. Proceedings. 2005 IEEE , pp. 245–250, 2005. [22] LEONARD, J. J., DURRANT-WHYTE, H. F., Directed sonar sensing for mobile robot navigation. v. 175. Springer Science & Business Media, 2012. [23] GUIZZO, em: E., http “How : Google’s Self-Driving Car Works”, Disponı́vel //spectrum.ieee.org/automaton/robotics/artif icial − intelligence/how − google − self − driving − car − works. Acesso em: 29 de junho de 2015, 2011. [24] MÖLLER, B., POSCH, S., HAASCH, A., et al., “Interactive object learning for robot companions using mosaic images”. In: Intelligent Robots and Systems, 2005.(IROS 2005). 2005 IEEE/RSJ International Conference on, pp. 2650–2655, 2005. [25] CHEN, Z., BIRCHFIELD, S. T., “Qualitative vision-based mobile robot navigation”. In: Robotics and Automation, 2006. ICRA 2006. Proceedings 2006 IEEE International Conference on, pp. 2686–2692, 2006. [26] HRABAR, S., SUKHATME, G. S., “Omnidirectional vision for an autonomous helicopter”. In: Robotics and Automation, 2003. Proceedings. ICRA’03. IEEE International Conference on, v. 1, pp. 558–563, 2003. [27] KARTHIK, N. A., Vision System for Autonomous Navigation, Ph.D. Thesis, NATIONAL INSTITUTE OF TECHNOLOGY, ROURKELA,INDIA, 2014. 104 [28] WANG, P., MENG, Z., LUO, C., et al., “Path Recognition for Agricultural Robot Vision Navigation under Weed Environment”, In: Computer and Computing Technologies in Agriculture VII , pp. 242–248, Springer, 2014. [29] GASPAR, J. A. D. C. P., Omnidirectional vision for mobile robot navigation, Ph.D. Thesis, Universidade Técnica de Lisboa, Lisboa, Portugal, 2002. [30] BURBRIDGE, C., BURBRIDGE, C., BURBRIDGE, C., et al., “Efficient Robot Navigation with Omnidirectional Vision”, Proceedings of Towards Autonomous Robotic Systems (TAROS), v. 55, pp. 667, 2010. [31] LEGO, I., “Lego Mindstorms NXT 2.0”, Disponı́vel em: http : //www.lego.com/en − us/mindstorms. Acesso em: 01 de Setembro de 2015, 2015. [32] CHOSET, H. M., Principles of robot motion: theory, algorithms, and implementation. MIT press, EUA, 2005. [33] BONIN-FONT, F., ORTIZ, A., OLIVER, G., “Visual navigation for mobile robots: A survey”, Journal of intelligent and robotic systems, v. 53, n. 3, pp. 263–296, 2008. [34] SABE, K., FUKUCHI, M., GUTMANN, J.-S., et al., “Obstacle avoidance and path planning for humanoid robots using stereo vision”. In: Robotics and Automation, 2004. Proceedings. ICRA’04. 2004 IEEE International Conference, Nova Orleães, Luisiana, EUA, on, v. 1, pp. 592–597, 2004. [35] MICHELS, J., SAXENA, A., NG, A. Y., “High speed obstacle avoidance using monocular vision and reinforcement learning”. In: Proceedings of the 22nd international conference on Machine learning, pp. 593–600, Bonn, Renânia, Alemanha, 2005. [36] ULRICH, I., NOURBAKHSH, I., “Appearance-based obstacle detection with monocular color vision”. In: Innovative Applications of Artificial Intelligence Conference (IAAI), pp. 866–871, Association for the Advancement of Artificial Intelligence: Austin, Texas, EUA, 2000. 105 [37] UPTON, E., HALFACREE, G., Meet the Raspberry Pi . John Wiley & Sons: Reino Unido, 2012. [38] RASPBERRYPI, F., “Raspberry Pi Model B”, Disponı́vel em: https : //www.raspberrypi.org/products/model − b/. Acesso em: 29 de junho de 2015, 2012. [39] GUZEL, M. S., BICKER, R., Vision based obstacle avoidance techniques. INTECH Open Access Publisher, 2011. [40] WU, B.-F., LU, W.-C., JEN, C.-L., “Monocular vision-based robot localization and target tracking”, Journal of Robotics, v. 2011, 2012. [41] BENAVIDEZ, P., JAMSHIDI, M., “Mobile robot navigation and target tracking system”. In: System of Systems Engineering (SoSE), 2011 6th International Conference on, pp. 299–304, Albuquerque, Novo México, EUA, 2011. [42] HONG, C., CHUN, S., LEE, J. S., et al., “A vision-guided object tracking and prediction algorithm for soccer robots”. In: Robotics and Automation, 1997. Proceedings., 1997 IEEE International Conference on, v. 1, pp. 346–351, Albuquerque, Novo México, EUA, 1997. [43] LU, H., ZHANG, H., YANG, S., et al., “Vision-based ball recognition for soccer robots without color classification”. In: Information and Automation, 2009. ICIA’09. International Conference on, pp. 916–921, Zhuhai, China, 2009. [44] LU, H., ZHANG, H., XIAO, J., et al., “Arbitrary ball recognition based on omni-directional vision for soccer robots”, In: RoboCup 2008: Robot Soccer World Cup XII , pp. 133–144, Springer, 2009. [45] YILMAZ, A., JAVED, O., SHAH, M., “Object tracking: A survey”, Acm computing surveys (CSUR), v. 38, n. 4, pp. 13, 2006. [46] BRADSKI, G., KAEHLER, A., Learning OpenCV: Computer vision with the OpenCV library. ”O’Reilly Media, Inc.”, 2008. 106 [47] GEVERS, T., SMEULDERS, A. W., “Color-based object recognition”, Pattern recognition, v. 32, n. 3, pp. 453–464, 1999. [48] ITSEEZ, I., “Open Source Computer Vision Library”, Disponı́vel em: http : //opencv.org/. Acesso em: 01 de Setembro de 2015, 2015. [49] LOWE, D. G., “Object recognition from local scale-invariant features”. In: Computer vision, 1999. The proceedings of the seventh IEEE international conference on, v. 2, pp. 1150–1157, 1999. [50] LOWE, D. G., “Distinctive image features from scale-invariant keypoints”, International journal of computer vision, v. 60, n. 2, pp. 91–110, 2004. [51] BAY, H., TUYTELAARS, T., VAN GOOL, L., “Surf: Speeded up robust features”, In: Computer vision–ECCV 2006 , pp. 404–417, Springer, 2006. [52] ELFES, A., “Using occupancy grids for mobile robot perception and navigation”, Computer , v. 22, n. 6, pp. 46–57, 1989. [53] RASCHKE, U., BORENSTEIN, J., “A comparison of grid-type map-building techniques by index of performance”. In: Robotics and Automation, 1990. Proceedings., 1990 IEEE International Conference on, pp. 1828–1832, Cincinnati, Ohio, EUA, 1990. [54] SE, S., LOWE, D., LITTLE, J., “Vision-based mobile robot localization and mapping using scale-invariant features”. In: Robotics and Automation, 2001. Proceedings 2001 ICRA. IEEE International Conference on, v. 2, pp. 2051–2058, Seoul, Korea, 2001. [55] PARK, S. Y., JUNG, S. C., SONG, Y. S., et al., “Mobile robot localization in indoor environment using scale-invariant visual landmarks”. In: IAPR Workshop Cognitive Information Processing, Santorini, Grécia, 2008. [56] MURILLO, A. C., GUERRERO, J. J., SAGÜÉS, C., “Surf features for efficient robot localization with omnidirectional images”. In: Robotics and Automation, 2007 IEEE International Conference on, pp. 3901–3907, Roma, Itália, 2007. 107 [57] MAOHAI, L., HAN, W., LINING, S., et al., “Robust Omnidirectional Mobile Robot Topological Navigation System Using Omnidirectional Vision”, Eng. Appl. Artif. Intell., v. 26, n. 8, pp. 1942–1952, Sept. 2013. [58] SOLORZANO, J., BAGNALL, B., STUBER, J., et al., “Java for Lego Mindstorms”, Disponı́vel em: http : //www.lejos.org/. Acesso em: 01 de Setembro de 2015, 2006. [59] SIEGWART, R., NOURBAKHSH, I. R., SCARAMUZZA, D., Introduction to autonomous mobile robots. MIT press: EUA, 2011. [60] DOS SANTOS, C. C., STOETER, S., RYBSKI, P. E., et al., “Mosaicking images [panoramic imaging]”, Robotics & Automation Magazine, IEEE , v. 11, n. 4, pp. 62–68, 2004. [61] IKEDA, S., SAT, T., YOKOYA, N., “High-resolution panoramic movie generation from video streams acquired by an omnidirectional multi-camera system”. In: Multisensor Fusion and Integration for Intelligent Systems, MFI2003. Proceedings of IEEE International Conference on, pp. 155–160, 2003. [62] GLEDHILL, D., TIAN, G. Y., TAYLOR, D., et al., “Panoramic imaging: a review”, Computers & Graphics, v. 27, n. 3, pp. 435–445, 2003. [63] GREY, P. R., “Ladybug2 360 Degree FireWire Spherical Camera Systems”, Disponı́vel em: http : //www.ptgrey.com/ladybug2 − 360 − degree − f irewire − spherical − camera − systems. Acesso em: 01 de Setembrode 2015, 2015. [64] SZELISKI, R., “Image alignment and stitching: A tutorial”, Foundations and R in Computer Graphics and Vision, v. 2, n. 1, pp. 1–104, 2006. Trends [65] HARRIS, C., STEPHENS, M., “A combined corner and edge detector.” In: Alvey vision conference, v. 15, p. 50, Manchester, Reino Unido, 1988. [66] SVOBODA, T., PAJDLA, T., HLAVÁČ, V., “Epipolar geometry for panoramic cameras”, In: Computer Vision-ECCV98 , pp. 218–231, Springer, 1998. 108 [67] SCARAMUZZA, D., CRIBLEZ, N., MARTINELLI, A., et al., “Robust feature extraction and matching for omnidirectional images”. In: Field and Service Robotics, pp. 71–81, 2008. [68] KOGETO, I., “Kogeto Dot”, Disponı́vel em: http : //kogeto.com/dot.html. Acesso em: 29 de junho de 2015, 2013. [69] GEYER, C., DANIILIDIS, K., “A unifying theory for central panoramic systems and practical implications”, In: Computer Vision-ECCV 2000 , pp. 445–461, Springer, 2000. [70] GRASSI JUNIOR, V., OKAMOTO JUNIOR, J., “Development of an omnidirectional vision system”, Journal of the Brazilian Society of Mechanical Sciences and Engineering, v. 28, n. 1, pp. 58–68, 2006. [71] ISHIGURO, H., “Development of low-cost compact omnidirectional vision sensors”, In: Panoramic vision, pp. 23–38, Springer, 2001. [72] JENG, S., TSAI, W., “Using pano-mapping tables for unwarping of omniimages into panoramic and perspective-view images”, Image Processing, IET , v. 1, n. 2, pp. 149–155, 2007. [73] TORII, A., IMIYA, A., “Panoramic image transform of omnidirectional images using discrete geometry techniques”. In: 3D Data Processing, Visualization and Transmission, 2004. 3DPVT 2004. Proceedings. 2nd International Symposium on, pp. 608–615, 2004. [74] WONG, W. K., CHOO, C. W., LOO, C. K., et al., “FPGA implementation of log-polar mapping”, International Journal of Computer Applications in Technology, v. 39, n. 1-3, pp. 12–18, 2010. [75] PUA, W. S., WONG, W. K., LOO, C. K., et al., “A Study of Different Unwarping Methods for Omnidirectional Imaging”, Computer Technology and Application 3 (2012), pp. 226–239, 2012. [76] DESOUZA, G. N., KAK, A. C., “Vision for mobile robot navigation: A survey”, Pattern Analysis and Machine Intelligence, IEEE Transactions on, v. 24, n. 2, pp. 237–267, 2002. 109 [77] ROWE, A. G., GOODE, A., GOEL, D., et al., “CMUcam3: An open programmable embedded vision sensor”, 2007. [78] GOODE, A ROWE, A., AGYEMAN, K., “CMUCam Project”, Disponı́vel em: http : //www.cmucam.org. Acesso em: 29 de junho de 2015, 2012. [79] GOODE, A ROWE, A., AGYEMAN, K., “SpoonBot Project”, Disponı́vel em: http : //www.cmucam.org/projects/cmucam3/wiki/SpoonBot. Acesso em: 29 de junho de 2015, 2012. [80] ROWE, A., GOEL, D., RAJKUMAR, R., “Firefly mosaic: A vision-enabled wireless sensor networking system”. In: Real-time systems symposium, 2007. RTSS 2007. 28th IEEE international , pp. 459–468, 2007. [81] RASPBERRYPI, F., “Raspberry Pi Camera Module”, Disponı́vel em: https : //www.raspberrypi.org/products/camera − module/. Acesso em: 29 de junho de 2015, 2013. [82] HART, C., A Low-cost Omni-directional Visual Bearing Only Localization System, Ph.D. Thesis, Case Western Reserve University, Cleveland, Ohio, EUA, 2014. [83] VALGREN, C., “Topological mapping and localization using omnidirectional vision”, Licentiate thesis, Orebro University, 2007. [84] VALGREN, C., LILIENTHAL, A. J., “SIFT, SURF & seasons: Appearancebased long-term localization in outdoor environments”, Robotics and Autonomous Systems, v. 58, n. 2, pp. 149–156, 2010. [85] VALGREN, C., LILIENTHAL, A., DUCKETT, T., “Incremental topological mapping using omnidirectional vision”. In: Intelligent Robots and Systems, 2006 IEEE/RSJ International Conference on, pp. 3441–3447, 2006. [86] HE, S., “Feedback control design of differential-drive wheeled mobile robots”. In: Advanced Robotics, 2005. ICAR’05. Proceedings., 12th International Conference on, pp. 135–140, Seattle, Washington, EUA, 2005. 110 [87] PARK, J. J., KUIPERS, B., “A smooth control law for graceful motion of differential wheeled mobile robots in 2D environment”. In: Robotics and Automation (ICRA), 2011 IEEE International Conference on, pp. 4896– 4902, Shanghai, China, 2011. [88] RUBLEE, E., RABAUD, V., KONOLIGE, K., et al., “ORB: an efficient alternative to SIFT or SURF”. In: Computer Vision (ICCV), 2011 IEEE International Conference on, pp. 2564–2571, Barcelona, Espanha, 2011. [89] MUJA, M., LOWE, D. G., “Fast Approximate Nearest Neighbors with Automatic Algorithm Configuration.” VISAPP (1), v. 2, 2009. [90] GOODE, A ROWE, A., AGYEMAN, K., “CMUCam: Open Source Programmable Embedded Color Vision Sensors”, Disponı́vel em: http : //www.cmucam.org/projects/cmucam5. Acesso em: 01 de Setembro de 2015, 2015. [91] QUIGLEY, M., CONLEY, K., GERKEY, B., et al., “ROS: an open-source Robot Operating System”. In: ICRA workshop on open source software, v. 3, n. 3.2, p. 5, 2009. [92] RAMON, M. C., Intel Galileo and Intel Galileo Gen 2 . Apress: Nova York, EUA, 2014. [93] COLEY, G., “Beaglebone black system reference manual”, Texas Instruments, 2013. [94] KUBITZ, O., BERGER, M. O., PERLICK, M., et al., “Application of radio frequency identification devices to support navigation of autonomous mobile robots”. In: Vehicular Technology Conference, 1997, IEEE 47th, v. 1, pp. 126–130, Phoenix, Arizona, EUA, 1997. [95] TREPTOW, A., ZELL, A., “Real-time object tracking for soccer-robots without color information”, Robotics and Autonomous Systems, v. 48, n. 1, pp. 41–48, 2004. [96] THRUN, S., “Robotic mapping: A survey”. In: Exploring Artificial Intelligence in the New Millenium, p. 2002, Morgan Kaufmann. 111 Apêndice A Trabalhos Publicados Alguns resultados obtidos nesta pesquisa foram aceitos para apresentação e publicados em anais de congressos nacionais. No contexto da análise de modelos de aquisição, o artigo “Omnidirectional Multicamera Architecture for Mobile Robot Navigation”, foi publicado no IX Workshop de Visão Computacional (WVC), em 2013, e o artigo “Análise de Arquiteturas Embarcadas de Baixo-custo para Aquisição de Imagens Omnidirecionais”, foi aceito para publicação no XII Simpósio Brasileiro de Automação Inteligente em 2015. Já no contexto de integração de um modelo de aquisição omnidirecional como plataforma de navegação para robôs móveis, o artigo “Omnidirectional Vision Architecture for Embedded Robot Navigation with Raspberry Pi”, foi aceito para publicação no XI WVC também em 2015. Um resultado derivado da linha central da pesquisa foi também publicado no XX Congresso Brasileiro de Automática, em 2014, no artigo “Cálculo De Distâncias Euclidianas Entre Histogramas Para Sistemas De Localização Robótica Em FPGA”. Os resumos e referências de cada artigo são listados a seguir. Anderson A. do Nascimento, Paulo C. M. A. Farias. “Omnidirectional Multicamera Architecture for Mobile Robot Navigation”, IX Workshop de Visão Computacional. Rio de Janeiro - RJ, 2013. Sistemas de visão omnidirecional têm sido amplamente utilizados em sistemas móveis de navegação devido a caracterı́sticas úteis das imagens omnidirecionais, dentre elas: o campo de visão estendido, invariabilidade rotacional e simetria. Embora os sistemas de visão omnidirecional mais comuns sejam baseados em câmeras catadióptricas, eles apresentam pro112 blemas como baixa resolução das imagens e distorções naturais causadas pelo uso de espelhos convexos. Para contornar estes problemas, panoramas omnidirecionais retangulares podem ser utilizados. Este artigo analisa três modelos diferentes de aquisição de imagens omnidirecionais baseados em múltiplas câmeras. O projeto propõe a utilização de seis câmeras CMUCam3, dispostas em cı́rculo e interconectadas, cada uma responsável por uma fração angular do panorama final. O panorama omnidirecional obtido é mais adequado para aplicações de rastreamento de pequenos detalhes, ou navegação de precisão. Anderson A. do Nascimento, Paulo C. M. A. Farias. “Análise de Arquiteturas Embarcadas de Baixo-custo para Aquisição de Imagens Omnidirecionais”, XII Simpósio Brasileiro de Automação Inteligente. Natal - RN, 2015. Este trabalho compara duas arquiteturas de baixo custo para aquisição de imagens omnidirecionais, analisando suas aplicações em problemas de robótica embarcada, como os de navegação autônoma. A primeira arquitetura é baseada em um arranjo de três câmeras CMUCam3 interligadas por um barramento mestre-escravo. Cada câmera captura um segmento individual de 60◦ , compreendendo uma parte de um panorama retangular de 180◦ . O panorama é montado em um processo de image stitching incorporado ao firmware das câmeras do arranjo. O segundo modelo utiliza um Raspberry Pi com um módulo de vı́deo e um espelho esférico. O resultado é câmera catadióptrica com um campo de visão de 360◦ . As duas arquiteturas são submetidas a um algoritmo de detecção de obstáculos para comparação de desempenho. O algoritmo é baseado na identificação de obstáculos a partir da diferença entre a cor deles e a cor do solo ao redor do robô. São medidos tempos de aquisição, montagem e processamento dos panoramas nas duas arquiteturas. Anderson A. do Nascimento, Paulo C. M. A. Farias. “Omnidirectional Vision Architecture for Embedded Robot Navigation with Raspberry Pi”, XI Workshop de Visão Computacional. São Carlos - SP, 2015. 113 Sistemas de visão omnidirecional são ferramentas extremamente úteis para navegação em robótica móvel. O campo de visão estendido pode ajudar o robô a mover-se com mais eficiência entre obstáculos, exigindo menos observações do cenário. No entanto, normalmente estes sistemas demandam algoritmos de alto custo computacional para manipulação de imagens, dificultando a execução em aplicações embarcadas de pequeno porte. Este artigo descreve uma arquitetura funcional de aquisição de imagens omnidirecionais a partir de uma câmera catadióptrica. As imagens capturadas alimentam um fluxo de imagens para duas tarefas de navegação: rastreamento de objetos por cor e detecção de obstáculos por segmentação. O modelo descrito utiliza um Raspberry Pi como unidade central de processamento, juntamente com um veı́culo diferencial construı́do a partir de um kit Lego Mindstorms NXT. São apresentados detalhes de arquitetura e implementação do sistema, assim como uma avaliação de desempenho em aplicações para ambientes internos. Anderson A. do Nascimento, Paulo C.M.A. Farias. “Cálculo De Distâncias Euclidianas Entre Histogramas Para Sistemas De Localização Robótica Em FPGA”, XX Congresso Brasileiro de Automática. Belo Horizonte - MG, 2014. Sistemas de navegação autônoma baseados em visão robótica geralmente lidam com dois problemas principais: detecção de obstáculos e localização. Em ambos os casos os algoritmos utilizados demandam um pré-processamento das imagens de entrada para eliminar (ou isolar) caracterı́sticas especı́ficas e compensar variações de iluminação. Para navegação em tempo real, o pré-processamento precisa ser feito com o máximo de rapidez possı́vel, salvando tempo para os procedimentos mais robustos de detecção e análise de cena. Esta necessidade impõe severas restrições de desempenho da aquisição, o que justifica a adaptação das rotinas de pré-processamento em hardware dedicado. Este projeto propõe a implementação em HDL (Hardware Description Language) de um módulo de equalização de imagens e cálculo de distância euclidiana entre histogramas, para auxiliar mecanismos de localização em navegação autônoma. 114