Robô Movel PIC
Transcrição
Robô Movel PIC
UNIVERSIDADE ESTADUAL DE CAMPINAS FACULDADE DE ENGENHARIA MECÂNICA Desenvolvimento de um Robô Autônomo Móvel Versátil utilizando Arquitetura Subsumption Autor : Justo Emilio Alvarez Jácobo Orientador: Prof. Dr. Pablo Siqueira Meirelles 71/01 UNIVERSIDADE ESTADUAL DE CAMPINAS FACULDADE DE ENGENHARIA MECÂNICA DEPARTAMENTO DE MECÂNICA COMPUTACIONAL Desenvolvimento de um Robô Autônomo Móvel Versátil utilizando Arquitetura Subsumption Autor : Justo Emilio Alvarez Jácobo Orientador: Prof. Dr. Pablo Siqueira Meirelles Curso: Engenharia Mecânica. Área de concentração: Mecânica dos Sólidos e Projeto Mecânico Dissertação de mestrado apresentada à comissão de Pós Graduação da Faculdade de Engenharia Mecânica, como requisito para obtenção do título de Mestre em Engenharia Mecânica. Campinas, 2001 S.P. - Brasil UNIVERSIDADE ESTADUAL DE CAMPINAS FACULDADE DE ENGENHARIA MECÂNICA DEPARTAMENTO DE MECÂNICA COMPUTACIONAL DISSERTAÇÃO DE MESTRADO Desenvolvimento de um Robô Autônomo Móvel Versátil utilizando Arquitetura Subsumption Autor : Justo Emilio Alvarez Jácobo Orientador: Prof. Dr. Pablo Siqueira Meirelles _______________________________________ Prof. Dr. Pablo Siqueira Meirelles, Presidente FEM/UNICAMP _______________________________________ Prof. Dr. Franco Giuseppe Dedini FEM/UNICAMP _______________________________________ Prof. Dr. Akebo Yamakami FEEC/UNICAMP Campinas, 24 de Agosto de 2001 Dedicatória: Dedico este trabalho a minha querida mãe, como gratidão por todo o esforço, dedicação, e amor que teve para conosco e a meu querido sobrinho como símbolo da esperança de um futuro melhor. Agradecimentos Em primeiro lugar, agradeço a Deus, pela benção da inteligência, saúde, amizade, e principalmente por jamais me ter deixado sozinho na procura dos meus sonhos. Um agradecimento muito especial aos meus pais, a minha irmã Isabelita, aos meus tios Elma e Anizio, e a Paola pelo apoio, incentivo e compreensão na realização deste trabalho. Meu profundo agradecimento ao Prof. Pablo Siqueria por esta oportunidade, e acima de tudo pela paciência que teve para comigo ao longo destes anos. Obrigado por todo o tempo que me dispensou. Aos meus amigos conterrâneos, Blanca, Marco, John, Carlitos Salinas, pela grande amizade que me brindaram e pelos valiosos momentos que tivemos juntos, os quais me ajudaram a superar as saudades da pátria. Aos meus amigos de Campinas, Kelly, Sílvia, Egnilson, André, Fábio e Antonio, por me suportar durante todo este tempo. Ao Dr. Roberto Tavares pela ajuda com o microcontrolador PIC. A todos os meus colegas do DMC que de alguma forma contribuíram para o meu trabalho. E finalmente para o Conselho Nacional de Desenvolvimento Científico e Tecnológico (CNPq) pela ajuda financeira para a realização deste trabalho. “Ama Sua, Ama Llulla, Ama Quella.” “No seas ladrón, no seas mentiroso, no seas perezoso.” “Não seja ladrão, não seja mentiroso, não seja preguiçoso.” Leis principais do Império Inca Resumo ALVAREZ JÁCOBO, Justo Emilio, Desenvolvimento de um Robô Autônomo Móvel Versátil utilizando Arquitetura Subsumption, Faculdade de Engenharia Mecânica, Universidade Estadual de Campinas, 2001. 139 p.. Dissertação (Mestrado). Este trabalho apresenta o projeto, implementação e construção do robô autônomo móvel RAM-I, o qual tem autonomia energética e de controle. A locomoção é feita através de motores de passo, controlados pelo módulo Controlador dos Motores, baseados no microcontrolador PIC16F84. O módulo Principal, recebe os sinais dos sensores externos e os processa conforme a estratégia de controle implementada. Esta é baseada na Arquitetura Subsumption, tomando as decisões que serão enviadas pela interface para o módulo Controlador dos Motores, sem necessidade de intervenção externa. A alimentação é feita por meio de baterias embarcadas. Será apresentado o projeto do Sistema, descrição das partes, implementação da estratégia de controle, modelagem do robô e por ultimo os resultados experimentais obtidos com o protótipo construído em laboratório. Palavras Chave Robótica, Controle, Arquitetura Subsumption, Microcontroladores. Abstract ALVAREZ JÁCOBO, Justo Emilio, Development of a Versatile Mobile Autonomous Robot using Subsumption Architecture, Faculdade de Engenharia Mecânica, Universidade Estadual de Campinas, 2001. 139 p.. Dissertação (Mestrado). This work presents the design, implementation and construction of a mobile autonomous robot RAM-I, which has autonomous energy supply and control. The locomotion is done through stepper motors, controlled by the module Controller of the Motors based on microcontroller PIC16F84. The Main module, also based in the PIC, receives the inputs signals from external sensors and processes according with the control strategy implemented, based on the Architecture of Subsumption, taking decisions that will be sent to the interface for the Motor Controller, without the necessity of external intervention. The power will be supplied by internal batteries. It will be presented the design of the system, description of the parts, implementation of the control strategy and modeling, as well as the experimental results obtained with the prototype constructed in the laboratory. Key Words Robotic, Control, Architecture Subsumption, Microcontroller. Índice Índice i Lista de Figuras iv Lista de Tabelas vii Nomenclatura viii 1. Introdução e Revisão Bibliográfica 1 1.1 Introdução 1 1.2 Breve Histórico. 3 1.3 Pontos Importantes em Robótica 6 1.3.1 Definição do Robô 7 1.3.2 Robótica Móvel Autônoma 7 Robôs Móveis 8 1.4 1.4.1 Aplicações 12 1.5 Objetivos deste Trabalho 16 1.6 Desenvolvimento de um Robô Autônomo Inteligente: RAM-I. 16 1.6.1 Considerações Iniciais 17 1.6.2 Interface sistema-ambiente 18 Organização deste Trabalho 19 1.7 2. Concepção de um Robô Autônomo Móvel 21 2.1 Introdução 21 2.2 “Hardware” Computacional 22 2.3 Projetos com Microcontroladores 22 i 2.4 Microcontroladores PIC da MICROCHIP 28 2.4.1 Estrutura Interna 29 2.4.2 O PIC 16F84 34 2.4.3 Os Registradores Especiais 38 2.4.4 “Set” de Instruções 40 2.4.5 Introdução à Ferramenta MPLAB 43 2.4.6 Programador Sb Microlab 44 2.5 Controle em Tempo Real 46 2.6 Módulo Sb Step Control 48 2.6.1 Caraterísticas do controlador 48 2.6.2 Descrição do controlador Sb Step Control 49 Módulo Sb 9902_2 50 2.7.1 Caraterísticas do Módulo Sb 9902_2 51 2.7.2 Descrição do Módulo Sb 9902_2 51 2.8 Implementação da Interface RS232-C 53 2.9 Os Sensores 55 2.9.1 Sensores de Toque 56 2.9.2 Sensores de Distância 56 2.9.3 Sensores de Proximidade 57 2.9.4 Sensores de Visão 58 2.10 Motores 58 2.11 Baterias 63 2.7 3. Arquitetura Subsumption 65 3.1 Introdução 65 3.2 Percepção-Ação 65 3.3 Divisão por Níveis Funcionais 66 3.4 Divisão por Níveis de Atividades 66 3.5 Exemplos da Implementação da Arquitetura Subsumption 68 3.5.1 Implementação da Arquitetura Subsumption no Robô ALLEN. 68 3.5.2 Implementação da Arquitetura Subsumption no Robô OBELIX. 74 3.5.3 Implementação da Arquitetura Subsumption no Robô MINEIRIN 76 ii 3.5.4 Descrição das Camadas Implementadas no Robô RAM-I 4. Modelagem de Robôs Móveis 77 79 4.1 Introdução 79 4.2 Modelo Cinemático de uma Base Móvel 80 4.2.1 A Postura do Robô 80 4.2.2 Descrição das Rodas 81 4.2.3 Mobilidade e Classificação dos Robôs Móveis. 86 4.2.4 Modelo Cinemático de Postura 96 4.2.5 Modelo Cinemático de Configuração 100 O Modelo do Robô RAM-I 102 4.3.1 Descrição do Robô RAM-I 102 4.3.2 Modelo Cinemático de Postura do RAM-I. 103 4.3.3 Modelo Cinemático de Configuração do RAM-I 104 4.3 5. Resultados e Conclusões 5.1 111 Robô Autônomo Móvel Inteligente: RAM-I 111 Características do Robô RAM-I 112 Testes e Resultados com o Robô RAM-I 115 5.2.1 Vagar Livremente num Ambiente Estruturado e desviar Obstáculos 115 5.2.2 Afastar-se do Perigo, Perder o Chão. 116 5.3 Conclusões 119 5.4 Trabalhos futuros 120 5.1.1 5.2 Referências Bibliográficas 122 Anexos 128 A.1: Programa 128 A.2: Diagrama eletrônico do SbMicrolab 136 A.3: Diagrama eletrônico do Sb Step Control 137 A.4: Diagrama eletrônico do Módulo 9902_2 138 A.5: Portas de Comunicação PC Sb Fast Card 139 A.6: Series 4SQ Stepper Motors 1.8 ° Thomson Airpax Mechatronics 140 iii Lista de Figuras Figura 1.1: O Robô NOMAD. 11 Figura 1.2 : O Robô Khepera 11 Figura 1.3 : O Robô Reatler 14 Figura 1.4 : O Robô MARV 15 Figura 1.5 : MINI-ROBOT girando numa moeda de dez centavos. 15 Figura 2.1: Diagrama interno do PIC 16F84. 30 Figura 2.2: Diagrama em blocos simplificado do PIC. 31 Figura 2.3: Esquema dos ciclos de máquina no PIC. 32 Figura 2.4: O PIC 16F84. 34 Figura 2.5: Circuito do oscilador do PIC 16F84. 36 Figura 2.6: Circuito para oscilador RC do PIC 16F84. 37 Figura 2.7: Mapa da memória de programa e STACK do PIC 16F84A. 39 Figura 2.8: Mapa da memória de dados do PIC 16F84A. 39 Figura 2.9: Tela inicial do ambiente de trabalho MPLAB. 43 Figura 2.10: Tela de composição do projeto no MPLAB. 44 Figura 2.11: Ambiente de trabalho completo do MPLAB. 44 Figura 2.12: Placa do módulo Sb Microlab para a programação do PIC16F84. 45 Figura 2.13: Tela de apresentação do Sb Prog40. 46 Figura 2.14: Placa do módulo Sb Step Control para controlar motores de passo. 50 Figura 2.15: Placa do módulo Sb 9902-2, usado como “cérebro” do robô. 53 Figura 2.16: Exemplo de um sensor de distância. 57 Figura 2.17: Exemplo de um sensor de proximidade. 57 iv Figura 2.18: Motor de passo magnético permanente. 60 Figura 2.19: Curva caraterística Torque/Velocidade do motor de passo 57L048B L/R. 61 Figura 2.20: Esquema da seqüência de ligação de 4 passos. 61 Figura 2.21: Esquema da seqüência de ligação de motores de passo unipolares e bipolares. 62 Figura 3.1: Divisão tradicional do sistema de controle em módulos funcionais. 66 Figura 3.2: Exemplo de divisão do sistema em atividades. 67 Figura 3.3: Arquitetura Subsumption. 67 Figura 3.4: Modulo para implementar camadas de comportamento com entradas e saídas. 70 Figura 3.5: Robô Allen recebendo a leitura dos doze sensores de ultra-som. 70 Figura 3.6: Camada ZERO do robô móvel Allen. 71 Figura 3.7: Camada ZERO e camada UM do robô móvel Allen. 72 Figura 3.8: Trajetória do robô quando controlado pelas camadas zero (evitar obstáculos) e um (vaguear). 72 Figura 3.9: Conjunto das três camadas utilizadas no robô Allen. 73 Figura 3.10: Trajetórias do robô ALLEN controlado pelas três camadas zero (evitar obstáculos), um (vaguear) e dois (explorar). 73 Figura 3.11: Arquitetura Subsumption composta de caminhos paralelos e uma rede de resolução de conflitos. 74 Figura 3.12: Camadas no sistema de controle do robô obelix. 75 Figura 3.13: Camadas no sistema de controle do robô MINEIRIN. 77 Figura 3.14: Camadas no sistema de controle do robô RAM-I 78 Figura 3.15: Diagrama de fluxo do programa implementado no robô RAM-I 78 Figura 4.1: Definição da postura do robô móvel. 80 Figura 4.2: Rodas convencionais fixas e orientadas no centro 83 Figura 4.3: Rodas convencionais orientadas fora do centro. 84 Figura 4.4: Rodas Suecas. 85 Figura 4.5: Centro instantâneo de rotação (CIR) 89 Figura 4.6: Robô Omnidirecional tipo (3,0), três rodas suecas 91 Figura 4.7: Robô omnidirecional, tipo (3,0), com três rodas orientadas fora do centro. 92 Figura 4.8: Robô tipo (2,0). 93 Figura 4.9: Robô tipo (2,1). 94 v Figura 4.10: Robô tipo (1,1). 95 Figura 4.11: Robô tipo (1,2). 96 Figura 4.12: O chassi do robô RAM-I. 102 Figura 4.13: Coordenadas do robô móvel RAM-I. 104 Figura 5.1: Robô RAM-I . 112 Figura 5.2: Detalhes do Robô RAM-I . 113 Figura 5.3: Vistas de frente e de lado do Robô RAM-I: motores, sensores de toque e rodas. 114 Figura 5.4: Vistas superior e inferior do Robô RAM-I: módulos, motores, sensores, bateria. 114 Figura 5.5: Robô autônomo móvel RAM-I no ambiente de testes. 117 vi Lista de Tabelas Tabela 2.1: Famílias e tipos de microcontroladores fabricados pela MOTOROLA 25 Tabela 2.2: Famílias e tipos de microcontroladores fabricados pela INTEL 25 Tabela 2.3: Famílias e tipos de microcontroladores COP8 fabricados pela National Semiconductor. 26 Tabela 2.4: Famílias de microcontroladores PIC fabricados pela MICROCHIP. 27 Tabela 2.5: Valores recomendados para os capacitores do oscilador 36 Tabela 2.6: Caraterísticas elétricas e outras do PIC16F84 37 Tabela 2.7: Endereços dos registradores do PIC16F84 38 Tabela 2.8: Resumo das Instruções do PIC, Operações com registradores. 41 Tabela 2.9: Resumo das Instruções do PIC, Operações com literais. 42 Tabela 2.10: Resumo das Instruções do PIC, Operações com bits. 42 Tabela 2.11: Resumo das Instruções do PIC, Controles. 42 Tabela 2.12: Comandos usados pelo módulo Sb Step Control para o controle dos motores. 49 Tabela 2.13: Pinos do conector JP1 para a gravação “in circuit” do módulo Sb Step Control. 52 Tabela 2.14: Pinos do conector JP3 para o interfaceamento do módulo Sb Step Control. 52 Tabela 2.15: Tempo de duração de um bit em relação as velocidades da interface RS232-C 54 Tabela 2.16: Comparação de características para a seleção dos tipos e tamanhos de baterias. 64 Tabela 4.1: Restrições cinemáticas para cada classe de rodas 86 Tabela 4.2: Classes de robôs móveis de acordo com ( δm , δ) s 90 Tabela 4:3: Modelos cinemáticos de postura genéricos para robôs móveis com rodas. 99 Tabela 4.4: Parâmetros do modelo tipo “Char” do robô RAM-I vii 105 Nomenclatura Letras Latinas x- Abcissa no plano cartesiano. y- Ordenada no plano cartesiano. I- Sistema de coordenadas cartesianas de referencia. X- Sistema de coordenadas cartesianas móvel solidária como robô. P- Ponto no robô onde o Sistema móvel de referência está assentado. R- Matriz de rotação de coordenadas. l- Distância entre o centro da roda e a origem do sistema móvel no robô. r- raio da roda. d- Excentricidade nas rodas orientadas fora do centro. N- Número de rodas. L- Méia distância entre as rodas medida sobre o eixo destas. Letras Gregas θ - Posição angular do robô em relação ao sistema de referencia inercial. β- Ângulo de rotação das rodas orientáveis. ϕ - Ângulo de rotação das rodas em torno do seu centro. ξ - Postura cartesiana do robô. η1 - Velocidade longitudinal do robô. η 2 - Velocidade angular do robô. viii λ- Matriz que relaciona as variáveis de controle internas com as velocidades das rodas. α - Posição angular do centro da roda em relação ao chassi do robô. δm - Índice de Mobilidade do robô. δs Índice de Dirigibilidade do robô. γ- Ângulo que determina a direção de não deslizamento nas rodas suecas. ∑ - Matriz cujas colmas formam uma base no espaço nulo da matriz das restrições cinemáticas. φ- Trajetória. Subscritos c- Rodas orientáveis no centro. fc- Rodas orientáveis fora do centro. sw- Rodas suecas. ix Capítulo 1 Introdução e Revisão Bibliográfica 1.1 Introdução Nos últimos anos observou-se um aumento no grau de consciência com relação ao potencial de aplicações dos robôs autônomos móveis, em especial em tarefas perigosas, sujas ou desagradáveis. As aplicações propostas para robótica avançada parecem cobrir a quase totalidade da atividade humana. Estas incluem: luta contra o fogo, salvamento de emergência, prevenção de desastres, patrulha de segurança, limpeza industrial e doméstica, serviço doméstico, manipulação de pacientes, operações de procura em ambientes distantes e/ou inóspitos, etc. Uma caraterística comum destas aplicações, ao invés do robô industrial, é a exigência de um veículo móvel ou plataforma, que sirva como base para qualquer tarefa exigida. A exigência comum para tal veículo móvel ou plataforma, é a habilidade para navegar de uma posição conhecida a uma nova localização, evitar obstáculos e se posicionar na tarefa a ser realizada. Isto é possível com o uso de um sistema de sensores, o qual deve adquirir os dados que descrevem o ambiente e passá-los ao sistema de computador do robô, que fará os cálculos necessários para que o sistema piloto do robô controle os movimentos. O desenvolvimento de robôs autônomos constitui uma área atual de pesquisa em robótica. Tais robôs aceitarão ordens para a execução de tarefas com um elevado grau de dificuldade e as cumprirão sem a intervenção humana adicional (Latombe, 1996). Na entrada das ordens será 1 especificado o que o usuário quer que seja realizado e não uma explicação do que deve ser feito para realizá-las (Andrade, 2001). Ao colocar o robô como substituto do homem, deve-se dotá-lo de autonomia, para que ele possas trabalhar conjuntamente com as demais máquinas. Esta autonomia deve ser: mecânica, de controle, e se é possível, energética. Esta premissa tem sido uma das principais motivações para a pesquisa do robô autônomo móvel. Nos últimos anos, também parece haver uma desafortunada divergência na pesquisa da robótica autônoma móvel, entre teoria e prática. Relatórios publicados nesta área podem ser divididos em duas categorias: trabalho teórico com pequena ou nenhuma verificação experimental (a excepção de simulação), e resultados experimentais de sistemas implementados com pequena ou nenhuma fundamentação teórica formal. É raro encontrar um postulado teórico formal verificado (ou refutado) por experiências reproduzidas em um robô real (Gat, 1995). Esta divergência é devida ao fato de que os robôs autônomos móveis têm que interagir com ambientes complexos, que especificamente não foram criados para o robô. Estas interações são extremamente difíceis de modelar, pois são governadas por um enorme número de variáveis independentes. As formulações teóricas ignoram habitualmente fatores como: custo computacional, ruído nos sensores, interações mecânicas, fricção e deformação da superfície. Temos ainda, que os robôs móveis com rodas e os robôs móveis a pernas, juntamente com os satélites, pertencem a uma classe de sistema mecânico denominada de sistemas nãoholonômicos, que se caraterizam por ter restrições cinemáticas não integráveis. Os algoritmos de controle e planejamento de movimento de tais sistemas requerem, portanto, uma classe diferente de procedimentos do que aqueles empregados no controle de manipuladores mecânicos estacionários, exemplo claro de um sistema holonômico (Victorino, 1998). 2 1.2 Breve Histórico. Desde os tempos mais remotos, o homem tem sentido a necessidade de criar mecanismos que o auxiliem no seu trabalho. Esta capacidade de criação do homem se remonta aos tempos dos antigos egípcios, aproximadamente no ano 3 000 A.C., os quais haviam construído relógios de água e figuras articuladas para seus cultos. O desenvolvimento da arte mecânica alcançou notável intensidade entre os anos 1400 e 1700. Nas obras dos artistas e experimentalistas destes anos ganha corpo uma nova apreciação sobre o trabalho: a função do saber técnico. O mundo deve aos trabalhos de Leonardo da Vinci, Galileu Galilei, Giordano Bruno, Francisco Baco, Pascal, Descarte e Diderot, entre outros, os quais marcam a divisão entre o antigo e o moderno, a valorização do saber técnico. Ao não mais desprezar o saber técnico, eles criaram uma nova concepção de técnica e ciência, fator importante na concepção de novas idéias e de progressos científicos. Esses homens não foram apenas acadêmicos, trabalhavam nas oficinas e ateliês, não desprezando a prática. Por exemplo: Descartes nos últimos anos da sua vida, elaborou o projeto de uma grande escola de artes e ofícios, que teria a tarefa de estabelecer elo entre os trabalhos dos cientistas, dos artesãos e dos técnicos. A escola idealizada por Descartes, era composta por várias grandes salas para os artesãos; para cada grupo de ofício uma sala. Cada sala tinha um laboratório provido de todos os instrumentos mecânicos necessários ou úteis às artes que ali deveriam ser ensinadas; o número de professores ou mestres era igual ao das artes ensinadas. Esses professores deveriam ser especialistas em física e matemática para responder a todas as perguntas dos artesãos, e assim explicar e esclarecer dúvidas, para realizar novas descobertas sobre as artes, (Viera, 1996). Todos esses novos métodos da ciência experimental que provocaram a revolução técnica/científica do século XVII, abriram caminho à grande transformação dos meios de produção, a chamada Revolução Industrial. 3 A primeira fase desta Revolução Industrial acontece quando as escolas de artes e ofícios tornam-se independentes do estado, e a fase definitiva dessa revolução acontece com o surgimento da fábrica, quando James Watt desenvolve o governador para a máquina de vapor. O surgimento da fábrica traz consigo a divisão dos processos de manufatura, e em particular o trabalho cooperativo. A Revolução Industrial, iniciada na Inglaterra no final do século XVIII , trouxe como fator sociológico o surgimento das fábricas, a criação e desenvolvimento das grandes cidades industriais e consequentemente, o êxodo rural. Se vemos o avanço na área de robótica, temos por exemplo, autômatos construídos em 1770 que escreviam, desenhavam e tocavam instrumentos musicais. Até então, a utilização de tais criações era para entretenimento. (Rezende, 1992). A Segunda Revolução Industrial (Era da modernização) idealizada como saída econômica para a grande depressão americana, iniciou-se nos anos trinta do século passado com a automação que Henry Ford realizou em sua fábrica de automóveis, baseada na organização estruturada do processo. Nesta época surge o conceito de autonomia. A terceira Revolução Industrial (Era de informação), ainda está em processo. Idealizada como saída econômica para a grande crise do petróleo, nela se vê a robotização do processo produtivo. O primeiro a utilizar a palavra “robô” foi o tetrólogo tcheco Karel Capek na sua publicação “Os Robôs Universais de Roussum”, cujo significado é servidão ou trabalho forçado. A partir de 1930, surgem na ficção os chamados “robôs amigáveis” idealizados pelo escritor Isaac Asimov. Tais robôs eram máquinas bem projetadas, cuja construção e programação eram baseadas em princípios denominados As Três Leis da Robótica: (Rezende, 1992 ) 4 1. Um robô não pode ferir um ser humano ou, por inação, permitir que um humano seja ferido. 2. Um robô deve obedecer às ordens dada por humanos, exceto quando isto conflitar com a Primeira Lei. 3. Um robô deve proteger sua própria existência a menos que isto conflite com a Primeira ou Segunda Lei. A partir da Revolução Industrial, vários esforços foram empreendidos no sentido de criar mecanismos que facilitem a vida do homem, ou seja, mecanismos que façam pelo homem os trabalhos rotineiros, pesados e cansativos. O desenvolvimento destes mecanismos a princípio foi difícil. Com os computadores digitais, conseguiu-se avanços significativos. As incontáveis aplicações fizeram com que mais recursos fossem voltados para esta área, fazendo desta forma com que os pesquisadores começassem a se interessar por ela. Ultimamente, além das pesquisas na área tecnológica, que estão voltadas mais ao desenvolvimento de robôs de aplicação prática, como os industriais, mais ligados à relação custo/benefício e produtividade; outra área que vêm despertando interesse dos pesquisadores é a área científica. Nesta área é enfatizada a percepção sensorial, controle motor, e comportamento inteligente. Tal como ocorreu com os computadores, os robôs foram classificados de acordo com o seu surgimento: Ø Primeira Geração: Robôs Seqüenciais: São manipuladores automáticos a ciclos ou cadência de operadores preestabelecidas, controlados em malha aberta. Têm de 2 a 4 graus de liberdade e só executam tarefas simples como por exemplo, os de carga e descarga de prensas e máquinas ferramenta. 5 Ø Segunda Geração: Robôs a Ciclos Programáveis: São robôs um pouco mais sofisticados, possuem de 4 a 8 graus de liberdade e em função do modo de programação podem ser divididos em: robôs programáveis por aprendizagem ou robôs “Play-Back” e robôs programáveis por linguagem. Ø Terceira Geração: Robôs Inteligentes: São robôs capazes de se adaptar às modificações do ambiente mediante sistemas de controle, percepção, comunicação e decisão e são capazes de executar tarefas via “interações” com o meio ambiente. É importante notar que a maioria dos autores referem-se à Terceira Geração, como aqueles capazes de operar autonomamente num ambiente desconhecido. É assim que temos como comum referência: Robôs Autônomos, Robôs Autônomos Inteligentes e Robôs Móveis Autônomos, todos eles da Terceira Geração, hoje dedicados a fazer tarefas especializadas em ambientes desestruturados (Rezende, 1992). Os robôs móveis possuem três formas básicas de locomoção, podendo utilizar apenas uma, como também, uma associação dessas configurações. Estas formas são: dispositivo articulado de rotação (rodas), corpos articulados e pernas. A forma de locomoção do robô deve levar em conta a finalidade, o tipo de terreno em que o robô opera, fonte de alimentação e autonomia energética. Vendo as diferenças entre os robôs antes citados, verifica-se que os robôs com pernas apresentam duas vantagens: a mobilidade em terrenos irregulares e a suspensão ativa que proporciona um transporte mais estável. 1.3 Pontos Importantes em Robótica Para melhor entender este trabalho, torna-se relevante levar em consideração algumas definições, que, ainda que muito conhecidas, serão muito usadas nesta pesquisa, como é o caso da definição do robô: 6 1.3.1 Definição do Robô Ø Definição da JIRA (Japan Industrial Robot Association): O robô é definido como um sistema mecânico que possui movimentos flexíveis análogos aos movimentos orgânicos, e combina esses movimentos com funções inteligentes e ações semelhantes as do humano. Neste contexto, função inteligente significa o seguinte: decisão, reconhecimento, adaptação ou aprendizagem. Ø Definição do RIA (Robot Institute of America): O robô é definido como um dispositivo mecânico programável para execução de algumas tarefas de manipulação ou locomoção sob controle automático. Robô industrial é um manipulador multifuncional e reprogramável projetado para movimentar materiais, peças e ferramentas ou dispositivos especiais, conforme programação prévia, de modo a executar uma variedade de tarefas. 1.3.2 Robótica Móvel Autônoma Também é necessária a introdução de uma definição para robô móvel. Muir (1988), define um robô móvel como: “um robô capaz de se locomover sobre uma superfície somente através da atuação de rodas montadas no robô e em contato com a superfície” (Victorino, 1998). As rodas permitem um deslocamento relativo entre o seu eixo e a superfície sobre a qual se espera ter um único ponto de contato com rolamento puro. Um robô móvel atual é equipado com sensores (visão, infravermelho, sonar, tato, toque, sistemas de navegação inercial, etc.) que permitem a percepção do meio ambiente, total ou parcialmente desconhecido, e é dotado de capacidade de decisão, que lhe permite cumprir uma tarefa sem intervenção humana. Quando tais sensores estão disponíveis no robô, pode-se fazer uso da interação do robô com o ambiente, fazendo-o perceber e construir o modelo do ambiente no qual o movimento se desenvolve e depois decidir as ações a serem tomadas para a realização da tarefa. Os processos de percepção e decisão podem ser considerados de três formas: 7 Ø estratégia reativa: o comportamento do robô é determinado pelos estímulos exteriores vindos do ambiente através dos sensores. Ø estratégia deliberada: as informações do ambiente são previamente processadas e a tarefa e o comportamento do robô são, da mesma forma, previamente determinadas. Ø estratégia híbrida: junção das duas anteriores. 1.4 Robôs Móveis Um dos primeiros robôs móveis de relevância experimental foi o robô SHAKEY, do Instituto de Pesquisa de Stanford, entre as décadas de 60 e 70. Esse robô foi desenvolvido com o objetivo de estudar as aplicações de inteligência artificial e estudar os processos para controle em tempo real de robôs que interagissem com ambientes complexos (Rezende,1992). O robô CART do mesmo instituto de pesquisa foi desenvolvido para estudos de visão estéreo. Estes sistemas usavam computadores externos e operavam, na maioria das vezes, em ambientes estáticos, ou seja, em ambientes especialmente projetados para eles. No caso do SHAKEY, os experimentos incluíam a alteração do ambiente após muitas horas de execução, sem que o robô percebesse o efeito do ato dinâmico, a menos que tal mudança fosse relevante para a subtarefa que ele estivesse fazendo. Apesar das simplificações, eles operavam muito lentamente. Levavam muito tempo construindo modelos do mundo e usavam pouco tempo de computação para planejar e agir. Na época, a dificuldade de levar adiante as aplicações ao mundo real e a falta de instrumentação eficiente (computadores, sensores) retardaram o avanço da pesquisa para estes robôs. Houve falta de perspectivas palpáveis por parte dos pesquisadores, como por parte dos financiadores que queriam resultados imediatos. Desta forma, houve a ascensão dos robôs manipuladores de aplicação imediata e de resultados palpáveis a curto prazo. Com a tecnologia dos microprocessadores houve uma retomada do interesse pelos robôs móveis. 8 O Laboratório de Robôs Móveis, no Instituto de Robótica da Universidade de CarnegieMellon, tem desde 1982 projetado, construído e avaliado quatro protótipos de robôs móveis: O robô PLUTO, com três rodas independentemente associadas, foi desenvolvido para o estudo dos problemas de controle e estabilização. O Robô NEPTUNE que é um triciclo equipado com duas câmeras e 24 sensores de ultrasom distribuídos em sua volta. O robô ILONATOR possui quatro rodas unidirecionais montadas simetricamente nos quatro vértices de um retângulo, resultando um movimento com três graus de liberdade. Um microprocessador embarcado faz a interface com os atuadores das rodas que possuem sensores (encoders ópticos) e o robô necessita de um computador para a comunicação dos comandos de alto-nível. O robô TERRAGATOR é dotado de um motor à gasolina, ele se desloca a curtas distâncias em estradas e se orienta visualmente pelas bordas da pista. Na França os robôs móveis mais representativos são: O HILARE do Laboratorie d’Automatique et d’Analyses des Systemes (LAAS) que é utilizado para pesquisas sobre programação de robôs móveis e planejamento de movimento. O robô móvel do projeto ICARE, do INRIA/Sophia Antipolis, que serve como plataforma experimental para o estudo de processamento de imagens em 3D. Alguns sistemas mais representativos foram desenvolvidos no Artificial Intelligence Lab. Massachusetts Institute of Technology (MIT), estes são: 9 O robô PEBBLES, um robô móvel que usa uma câmera para evitar obstáculos em ambientes acidentados e desconhecidos. Os microrobôs ANTS foram projetados para explorar idéias sobre a ação de cooperação entre robôs. Esse projeto tem como objetivos estender os limites da micro-robótica integrando muitos sensores e atuadores em um espaço pequeno, formando dessa forma uma comunidade robótica estruturada a partir de seus indivíduos. O projeto se inspirou na colônia de formigas. O SOLEITE, um robô móvel de 30 gramas de massa, completamente autônomo e alimentado por energia solar. A energia coletada pelo painel é armazenada em um capacitor de 1F para a alimentação do robô. Tal robô serve também aos propósitos de exploração espacial. Um dos locais mais representativos do estudo da robótica móvel no Brasil é o Laboratório de Robótica e Visão, do Instituto de Automação no Centro Tecnológico para a Informática LRV/IA/CTI, em Campinas-S.P. Os projetos se relacionam não apenas com robôs móveis, como também com sistemas não-holonômicos como veículos aéreos autônomos (dirigível e helicóptero). Os projetos robóticos e robôs do CTI são: O projeto LEOPARD, que procura estudar a questão do controle de robôs móveis atuando de forma cooperativa, inclui os módulos de sensoriamento por visão computacional, estratégia de controle e comunicação por telemetria. O robô NOMAD (Nomadic Technologies Company), de origem americana, é uma plataforma para estudos experimentais e possui sensores de proximidade de infravermelho e de ultra-som. Possui também dois anéis em sua base com sensores de tato e é equipado de uma câmera que faz parte do sistema de sensoriamento por visão. A navegação do robô é ainda auxiliada por uma bússola digital. O robô é utilizado em desenvolvimento de “softwares” de controle, percepção e navegação. 10 Figura 1.1: O Robô NOMAD. O Robô KHEPERA, de origem suíça, trata-se de um robô móvel miniaturizado de seção circular com raio de 2,5 cm e que se move através de duas rodas fixas impulsadas por motores de corrente contínua independentes. Dispõe de módulos suplementares de visão, telemetria e garra mecânica. Em sua circunferência existem oito sensores de infravermelho que detectam a proximidade do obstáculo. É utilizado no estudo de controle e estabilização de sistemas nãoholonômicos. Figura 1.2 : O Robô Khepera 11 É importante mencionar também que o Laboratório de Automação e Sistemas da Escola Politécnica de São Paulo dispõe de um AGV (Autonomous Guide Vehicle). O ARIEL, uma base experimental construída no mesmo laboratório, possui duas rodas motrizes acionadas por motores de corrente contínua, além de possuir um computador a bordo para operações de controle e interfaceamento. O laboratório de robótica da Universidade Federal de Minas Gerais começa a ser montado com a aquisição de um robô NOMAD, sendo o segundo no Brasil. 1.4.1 Aplicações Terrorismo, envelhecimento da população, mudanças de clima, e escassez de recursos, são alguns dos desafios do mundo de hoje. Mas as máquinas inteligentes ajudarão a resolver estes e outros problemas sociais, ambientais e de defesa. Nestes dias já é possível fabricar robôs que servem quase para qualquer operação, seja de limpeza, operações cirúrgicas a distancia, cortar a grama, fazer o chá, etc. O único limite é a nossa imaginação. Existem micromáquinas (colocados num relógio de pulso, por exemplo) capazes de obter dados de temperatura, pressão, pulso, etc. Um computador recolherá estes dados e diagnosticará em tempo real, acionando outros robôs, que por exemplo estejam carregados de pílulas. No futuro, robôs móveis com biosensores poderão ajudar aos soldados frente às armas químicas, identificando a presença e a natureza dos gases, alertando assim aos humanos. Robôs móveis voadores poderão monitorar a poluição no meio ambiente. A disponibilidade de nova tecnologia permite a formação de novas idéias nas áreas de inteligência artificial, robótica, micro-máquinas e materiais inteligentes. Os sistemas de inteligência para robôs autônomos móveis permitem agora, comportamentos simples quase ao nível de insetos. Estes avanços em “software”, junto com nova tecnologia para a fabricação de micro-sensores e micro-atuadores, oferecem a oportunidade de termos no futuro robôs pequenos, de baixo custo, e potencialmente de muita utilidade para tarefas como a cirurgia. 12 Como exemplo de um futuro próximo, no Laboratório de Robótica Móvel do MIT, novos enfoques na inteligência artificial aplicados aos robôs móveis autônomos, fazem com que eles explorem, caminhem, interajam com pessoas e aprendam a coordenar vários comportamentos internos. Este tipo de sistema de controle, conhecido como Arquitetura Subsumption, mostra-se como uma rede distribuída em camadas com capacidade aumentada de transmissão de mensagens, permitindo uma estreita relação entre a percepção e a ação que se deve ter no mundo dinâmico de um robô móvel (Flynn, 1996). O SQUIRT, o menor robô construído com esta arquitetura, mede 2,5 cm, tem a bordo um computador, dois microfones, um sensor de luz, motor e baterias. O programa que permite que ele possa ocultar-se na escuridão ou possa aproximar-se de um determinado som, é de 1,300 bytes. Está dotado de um motor DC, que só lhe permite um grau de liberdade. Seria possível imaginar que o computador, os sensores e as baterias coubessem num espaço reduzido como o de SQUIRT. Ainda assim, este mesmo espaço não permitiria incluir motores suficientes que permitissem ao robô uma maior destreza. São necessários pequenos motores, compactos, de transmissão direta, de custo razoável e cujo torque útil possa se adaptar à carga. Um motor com estas qualidades é o motor piezo elétrico ultra-sônico. Estes motores podem funcionar sem engrenagens, com sistema de transmissão direta, que pode reduzir de forma considerável o peso do robô móvel. Como exemplo da utilização destes motores tem-se: um carro que leva uma câmera; este mede aproximadamente um centímetro cúbico e conta com mais movimentos que o Squirt. Micro-Trepadores; as caraterísticas do piezo-motor (alto torque e baixa velocidade), permitem que possa ser usado de forma direta para acionar cada uma das seis pernas deste robô. MicroSubmergível; um robô submarino, de 2,5 cm de comprimento, incorpora um micro motor piezoelétrico para propulsão. O robô CLEO é mostra do desenvolvimento nesta área. Este é um robô autônomo altamente integrado, com mais sensores e atuadores que o Squirt, sendo do mesmo tamanho. Contém 3 13 motores, 17 sensores, um computador, uma garra, bateria, e um conversor DC-AC. O sistema de inteligência gera comportamentos de formiga e é implementado com a arquitetura de assunção e lógica percepção-ação. O cérebro de CLEO foi implementado em um microprocessador MOTOROLA 68HC11E2, com 256 bytes de RAM e 2K de memória, somente para leitura (EEPROM). Nos laboratórios do Sandia’s intelligent System and Robotic Center (ISCR) tem sido desenvolvidos robôs e máquinas inteligentes (RIM’s) com flexibilidade pare executar múltiplas tarefas. Estes serão apresentados a seguir (Sandia Technology, 2000): O robô REATLER (Robotic All Terrain Lunar Exploration Rover) pode cooperar com outros robôs sentinelas para proteger um perímetro. Este robô foi desenvolvido para uma missão à lua. Está equipado com um CHIP de computador Intel, um sistema receptor de posicionamento global, dois rádios, uma bússola e sensores de inclinação, câmera de vídeo, etc. Figura 1.3 : O Robô REATLER O robô FIRE ANT é um exemplo de um sistema móvel autônomo destrutor de blindados, usa um projetil do tipo explosivo (EFP). Um detetor de movimento por vídeo proporciona o alvo a seguir. A plataforma é teleoperada a partir de um ponto de observação. Na versão inicial, o robô é destruído quando chega ao alvo. Nas versões novas, os robôs não são destruídos, usando novos projetis mais letais (EFPs). 14 O robô MARV (Miniature Autonomous Robotic Vehicle) prepara o caminho para pequenos veículos com mobilidade, inteligência, navegação e comunicação, e apresenta ainda a capacidade de comportamento cooperativo. Tendo só uma polegada cúbica (16 centímetros cúbicos), o minirobô MARV carrega fonte, sensores, um computador e os controles necessários na mesma placa, para localizar e seguir fios que levam predeterminados sinais de rádio. Figura 1.4 : O Robô MARV O MINI-ROBOT, Com 4 centímetros cúbicos de volume e pesando menos de 28 gramas, possui três pilhas de relógio como fonte, rodas a tração, um processador de 8K ROM, sensor de temperatura e dois motores. As melhorias que estão sendo consideradas no futuro incluem uma câmera em miniatura, microfone, dispositivo de comunicação e um microsensor químico. É um produto do Laboratories Directed Research and Development (LDRD) continuando um trabalho iniciado no Sandia’s Intelligent Systems Sensors & Controls Department. Figura 1.5 : MINI-ROBOT girando numa moeda de dez centavos. 15 1.5 Objetivos deste Trabalho Como apresentado neste capítulo, existe um enorme potencial e interesse na aplicação dos robôs autônomos móveis, pois a sua utilização abarca a maioria das áreas da vida humana. Alem de existir este potencial na utilização deste tipo de robôs, na área acadêmica existem poucos trabalhos dedicados à verificação de dados teóricos com dados experimentais adquiridos com um robô real, e não por simulações. Na necessidade de formar um elo entre o teórico e o prático, e assim poder proporcionar aos futuros trabalhos na área da robótica autônoma móvel uma ferramenta (“plataforma de testes”) que facilite a validação experimental, é que surge a necessidade de desenvolver um robô autônomo móvel com características apropriadas para a experimentação, e também fornecer ao futuro pesquisador as ferramentas que o ajudem a sobrelevar os diferentes problemas na utilização deste robô. O objetivo principal deste trabalho é o desenvolvimento de um robô autônomo móvel, chamado RAM-I utilizando a Arquitetura Subsumption, para ser usado como base de testes de futuros trabalhos na área da robótica autônoma móvel. Para a realização deste trabalho, implementação de um robô autônomo móvel, foi necessário seguir vários passos: escolha de um microcontrolador adequado às necessidades do projeto, conhecimento da linguagem de programação, escolha dos módulos de “hardware”, seleção dos motores, dos tipos de sensores a ser usados, baterias, desenho da plataforma móvel, montagem do conjunto, e testes finais. 1.6 Desenvolvimento de um Robô Autônomo Inteligente: RAM-I. Para este trabalho foi escolhido desenvolver um robô de plataforma retangular sobre três rodas, sendo duas delas motrizes e a terceira de apoio. Para que servisse de exemplo, foi decidido que o robô deveria ter a habilidade de vagar num plano, evitando obstáculos e depressões. Para atender a estas especificações foi necessário 16 escolher dimensões, motorização, sensores, processador, estratégia de controle, etc, sempre atendendo ao objetivo maior, que é o de deixar uma plataforma flexível o suficiente para que possa ser reaproveitada para outros trabalhos. 1.6.1 Considerações Iniciais A necessidade de aplicação da Inteligência Artificial em robótica não é nova. Uma das grandes dificuldades que se tem, está na complexidade de uma definição rigorosa da palavra “inteligência”, para definir se um robô é ou não “inteligente”. Talvez seja mais prudente, aceitar que o ser humano detenha a exclusividade de exibir o que o consenso geral considera inteligente, e através da identificação de alguns de seus comportamentos mais simples, mas que o consenso geral os tenha como inteligentes, buscar o desenvolvimento de sistemas artificiais que sejam capazes de simular estes comportamentos (Rezende, 1992). Robôs Móveis Autônomos Inteligentes será a denominação adotada para robôs que simulam comportamentos que o consenso geral classifica como inteligentes. Em termos de comportamento (por exemplo o retorno a um determinado lugar, no que se refere a desviar, ultrapassar obstáculos e alcançar um objetivo), não há maior diferença entre ser humano, formiga e autômato, podendo exibir um mesmo tipo de comportamento. Por que então, somente apenas a um desses objetos se atribui inteligência? Pode–se argumentar que ao ser humano, e não aos demais, são atribuídas façanhas como pensamento, auto-conciência, etc. No caso dos homens, existem pessoas que têm maior habilidade para aprender certas tarefas, estas pessoas são chamadas de “mais inteligentes”. Será que a inteligência pode ser mensurada? Então por que não classificar a inteligência da formiga e do autômato como uma espécie de inteligência inferior à do ser humano, mas ainda assim inteligência?. Neste trabalho se apresenta um robô autônomo móvel considerado inteligente por apresentar comportamentos que, quando observados por um ser humano, demostram características de um nível de inteligência inferior. 17 1.6.2 Interface sistema-ambiente Pode-se estabelecer um conjunto mínimo de condições intrínsecas (denominadas Potenciais Singulares de Comportamento) para que um sistema possa ser considerado Artificial Inteligente, e um conjunto mínimo de condições, intrínsecas ao ambiente, para que possa ser considerado favorável ao referido sistema. No exemplo do trajeto de retorno realizado por uma formiga ao formigueiro, ilustra-se um sistema (formiga) perfeitamente adaptado a seu ambiente. Algumas propriedades ou hipóteses de potencial que permitem ao sistema realizar o trajeto são (Rezende, 1992): Ø P1 - Capacidade de internalização de objetivos: A formiga possui objetivos próprios, isto é, internalizados. Ela quer retornar ao formigueiro. Ø P2 - Capacidade de sentir e perceber seu meio ambiente: A formiga é capaz de sentir e perceber no seu ambiente externo impedimentos à sua caminhada em direção ao formigueiro. Ø P3 - Capacidade de modificar parcialmente os objetivos internalizados: Ao perceber uma situação inusitada, a formiga modifica parcialmente seus objetivos internalizados, porém a medida que a dificuldade passe a formiga retorna a priorizar o objetivo anterior. Ø P4 - Potencial para movimento intencional: Observa-se que todas as decisões são tomadas pela formiga e é ela quem dispara um macro processo de ativação de movimentos coordenados, intencionalmente, o que evidencia uma capacidade ou potencial para movimento intencional. Alguns autores colocam esta subdivisão como níveis de inteligência artificial. Existem outros potenciais intrínsecos, mas os quatro citados são suficientes para que um robô ou um sistema possa ser considerado inteligente. Na ausência de alguma das capacidades, a formiga 18 não teria capacidade por si só, de retornar ao formigueiro, o que indica que este sistema tem um certo nível de inteligência. As propriedades que fornecem condições para que o ambiente se constitua favorável a um referido sistema, são: Ø C1 - Permite sua auto-movimentação: O sistema tem que ser favorável para a própria movimentação. Ø C2 - Possuir energia alcançável pelo sistema: Há necessidade que o ambiente possua energia, e que o sistema possa sozinho ser capaz de alcançar tal energia. Ø C3 - Não possuir intempéries fatais ao sistema: O ambiente não precisa possuir substâncias nocivas ao sistema. Por exemplo no caso da formiga, não ter substancias tóxicas que a mate. Um autômato apesar de ser completamente diferente, a nível microscópico (“hardware”), do que uma formiga, poderia simular o simples comportamento de uma formiga retornando ao formigueiro. Para isso o autômato teria que contemplar minimamente os quatro potenciais acima citados e o ambiente no qual está desenvolvendo-se o comportamento, ainda teria que lhe ser favorável nas condições acima citadas. Com estas caraterísticas (condições) pode-se “assegurar” a correta adaptação de um sistema a um ambiente que lhe seja favorável. 1.7 Organização deste Trabalho A dissertação está organizada de acordo com os seguintes capítulos: ♦ O Capítulo 2 está dividido em duas partes: Na primeira parte são apresentados os microcontroladores em geral, critérios para a escolha do microcontrolador, descrição e funcionamento dos microcontroladores PIC (em particular o PIC16F84), e uma breve introdução ao Assembler do microcontrolador utilizado. Na segunda parte descreve-se os módulos, sensores e atuadores utilizados para a implementação do robô RAM-I. 19 ♦ No capítulo 3, é feita uma apresentação do princípio de percepção-ação e da Arquitetura Subsumption, desenvolvida no laboratório de inteligência artificial do MIT (Massachussets Institute of Technology), usadas na implementação de robôs autônomos móveis, alguns exemplos da implementação desta arquitetura em alguns robôs, e a descrição do modelo aplicado ao robô RAM-I. ♦ No capítulo 4, é feita uma modelagem matemática dos robôs móveis com rodas, incluindo a descrição dos tipos de rodas, restrições de movimento, e os modelos de estado derivados do modelamento das rodas. No inicio trata-se de generalizar o modelamento para robôs móveis com rodas mostrando vários exemplos. Depois é feita a modelagem para o robô RAM-I, a qual ajudará aos futuros usuários deste robô. ♦ No Capítulo 5, são apresentados e discutidos os resultados, mostrando-se primeiramente o robô implementado, e logo a seguir é mostrado o robô na execução de algumas tarefas num ambiente de trabalho. ♦ Finalmente, o Capítulo 6 apresenta as conclusões e sugestões para trabalhos futuros. 20 Capítulo 2 Concepção de um Robô Autônomo Móvel 2.1 Introdução Neste capitulo serão apresentados os materiais e métodos utilizados para o desenvolvimento do presente trabalho. O RAM-I é uma base móvel inteligente, implementada com módulos de “hardware” baseados no microcontrolador PIC 16F84 da série PIC da MICROCHIP. Na primeira parte se descreve os principais tipos de microcontroladores, critérios para a escolha do microcontrolador, descrição e funcionamento dos microcontroladores PIC (em particular o PIC16F84, escolhido para o RAM-I), e se faz uma introdução à programação em “Assembler” e às principais ferramentas para a programação do PIC. Na Segunda parte, descreve-se os módulos utilizados para a implementação do RAM-I. O primeiro módulo é o Sb Step Control, que é o encarregado de controlar os motores de passo, fazendo com que eles obedeçam os comandos simples: velocidade de giro, inversão de giro, parar os motores, etc. O segundo módulo é o Sb 9902-2, e este é o denominado “cérebro” do robô, por conter o microcontrolador PIC programado com a arquitetura de controle do mesmo. A última parte deste capitulo descreve os atuadores (motores de passo) e sensores empregados no RAM-I. 21 2.2 “Hardware” Computacional Os circuitos que conformam o controle do RAM-I estão baseados no microcontrolador PIC16F84 da empresa MICROCHIP. Este tipo de dispositivo têm varias vantagens sobre o “hardware” lógico: versatilidade, baixo consumo de potência, tamanho, etc. É importante notar que os microcontroladores e os microprocessadores introduzem uma ferramenta significativa à solução do problema de controle dos robôs: o “software”. O comportamento do robô baseado em “software”, poderá ser modificado simplesmente com a implementação de um novo programa sem necessidade de alterações físicas. Todas estas vantagens foram alcançadas com a utilização do microcontrolador PIC 16F84, no presente trabalho. É importante ter em mente que o “hardware” determina o potencial final de um robô, mas o que permite realizar este potencial é o trabalho do “software” (Jones, 1993). 2.3 Projetos com Microcontroladores Em poucas palavras pode-se dizer que um microcontrolador é um “pequeno” componente (dispositivo) eletrônico, dotado de uma “inteligência” programável, utilizado no controle de processos lógicos (Souza, 2000). Controle de processos pode ser definido como o controle de periféricos tais como: “leds”, botões, “displays” de segmentos, “displays” de cristal liquido (LCD), resistências, reles, sensores (pressão, temperatura, etc.), motores de passo, servo motores e outros periféricos. É usada também a palavra controle lógico pois a operação do sistema baseia-se nas ações lógicas que devem ser executadas, dependendo do estado dos periféricos de entrada e/ou saída. O controlador é programável pois a lógica da operação é estruturada na forma de um programa e gravada dentro do componente. Depois disso, toda vez que o microcontrolador for alimentado, o programa interno será executado. Quanto à “inteligência” do componente, podemos associa-la à Unidade Lógica Aritmética (ULA, em inglês ALU), que é a encarregada de 22 executar as operações matemáticas e lógicas. Quanto mais poderosa a ULA do componente, maior a sua capacidade de processar informações. O microprocessador é dito “pequeno” pois em uma única pastilha de silício encapsulada (popularmente chamada de CHIP ou CI) se tem todos os componentes necessários para que o controle de um processo seja possível. O microcontrolador está provido internamente de memória de programa, memória de dados, portas de entrada e/ou saída paralela, “timers” (ou contadores de tempo), contadores, comunicação serial, PWMs, conversores analógico-digital, etc. Esta é uma das caraterísticas fundamentais que diferencia os microcontroladores dos microprocessadores, pois estes últimos, apesar de possuírem uma ULA muito mais rápida e poderosa, não possuem todos estes recursos em uma única pastilha. Uma outra definição de microcontrolador é a de ser um microprocessador acrescido de endereçadores de I/Os e de memória, memória de programa (PROM, EPROM, EEPROM), memória RAM, tudo isto em uma única pastilha (CI). Atualmente muitos equipamentos de uso diário, tais como: eletrodomésticos, videocassetes, alarmes, celulares e brinquedos, entre outros, utilizam microcontroladores para a execução de suas funções básicas. As principais vantagens no uso de microcontroladores são a diminuição do custo e a diminuição de “hardware”. As vezes o uso dos microcontroladores não é viável já que não é recomendável o uso destes para rotinas simples, pois seria bem mais barato utilizar componentes convencionais (sistemas analógicos). Basicamente todos os microcontroladores de baixo custo, no mercado atual, são dispostos de forma semelhante. As principais diferenças entre eles são as seguintes: • Disposição do “hardware” interno: memória (RAM, FLASH, SPI, UART, etc..). • Capacidade de memória de programa (EPROM, OTP, FLASH). • Modo de gravação. • Mnemônicos do “Assembler”. 23 • E, principalmente: "O apoio dado pelo fabricante/distribuidor no início do projeto", fornecendo ferramentas, amostras, programas exemplo, apoio técnico, etc. Tudo isso é chamado de “Kit de Desenvolvimento”. A escolha correta do microcontrolador para um determinado projeto torna-se difícil dado que existe no mercado atual uma vasta variedade de tipos, famílias e fabricantes de microcontroladores, as quais devem ser bem estudadas antes de se iniciar o projeto. Devem ser tomadas em conta as seguintes considerações: • Qual é a capacidade do microcontrolador que se está precisando?. Que trabalho ele vai realizar?. • Número de I/Os necessários para o projeto. • “Hardware” interno disponível, por exemplo se possui uma UART (“Universal Assyncrhonous Receiver and Transmiter”) interna para rotinas de comunicação serial. • Se requer WATCHDOG (“cão de guarda”). • Facilidade de aquisição no mercado. • Custo do “Kit de Desenvolvimento”. • Custo final do produto. Após analisar estas considerações e outras que se apresentem devido à particularidade do projeto, é possível decidir-se pelo microcontrolador mais apropriado, mas só se terá certeza de ter atingido o objetivo principal do projeto (versatilidade), se dispor de um projeto que possa utilizar mais de um microcontrolador de famílias ou fabricantes diferentes, para evitar o inconveniente de ser informado que o microcontrolador está saindo de linha. Existem vários fabricantes de microcontroladores: Microchip, Intel, Motorola, National, Atmel, Siemens, Hitashi, TI, Toshiba, são alguns dos mais conhecidos. A Tabela 2.1 mostra um resumo das famílias de microcontroladores do fabricante MOTOROLA. 24 Tabela 2.1: Famílias e tipos de microcontroladores fabricados pela MOTOROLA Microcontrolador Família Tipo 8 bits 8 bits 8 bits 16 bits 16 bits 32 bits 32 bits 32 bits M68HC05 M68HC08 M68HC11 M68HC12 M68HC16 M68300 MPC500 MCORE Microcontroladores de 8 bits 68HC05 Microcontroladores de 8 bits 68HC08 Microcontroladores de 8 bits 68HC11 Família de produtos 68HC12 Família de microcontroladores 68HC16 Microcontroladores de 32 bits 683XX Microcontroladores de 32 bits Microcontroladores de 32 bits MCORE A Tabela 2.2 mostra um resumo das famílias e tipos de microcontroladores do fabricante INTEL. Além dos mostrados na tabela existem microcontroladores específicos para a linha automotiva. Tabela 2.2: Famílias e tipos de microcontroladores fabricados pela INTEL Microcontrolador Família Tipo Clássico (8 bits) De alta velocidade Memória RAM expandida Para ambientes especiais 8XC151AS / SB 8XC251AS / SB / SP / SQ 8XC251TA / TB / TP / TQ 8XC196KB 8XC196KC 8XC196KD 8XC196KR 8XC196KT 8XC196NT 8XC196NP 8XL196NP 80C196NU 80C196EA 8XC196MC/MH 8XC196MD MCS 51/151/251 MCS 51 MCS 51/151/251 MCS 151 MCS 51/151/251 MCS 251 MCS 96/296 MCS 96–HSIO* MCS 96/296 MCS 96–EPA** MCS 96/296 MCS 96 MCS 96/296 Família de produtos CAN*** (Controller Area Network) *High-Speed Input/Output, **Event Processor Array, ***Controller Area Network. 25 Um dos principais produtos da National Semiconductor é o microcontrolador da série COP8 (Processador Orientado ao Controle de 8 bits) bem difundido no Brasil. A Tabela 2.3 mostra um resumo das famílias de microcontroladores COP8 e seus diferentes tipos. Tabela 2.3: Famílias e tipos de microcontroladores COP8 fabricados pela National Semiconductor. Família Família básica em máscara Família com características em máscara Família OTP Família S Caraterísticas Dividido na Temperatura, Tamanho de memória e outras Caraterísticas (não são reprogramáveis). Orientadas a comunicações, não são reprogramáveis. Versão que permite um única programação. Família COP8AS Família COP8SG Família COP8AC Família COP8SB/ COP8CB A MICROCHIP inicia suas operações no Brasil pelos anos 90 através da sua parceira, a empresa Aplicações Eletrónicas Artimar Ltda, representante de várias empresas americanas no setor da eletroeletrônica. Apresenta-se na Tabela 2.4 um resumo das famílias de microcontroladores da série PIC (Peripheral Interface Controller). 26 Tabela 2.4: Famílias de microcontroladores PIC fabricados pela MICROCHIP. Microcontrolador Família 8 bits 8 bits 8 bits PIC12C5XX PIC12CEXX PIC12C67X 8 bits PIC12CE67X 8 bits 8 bits 8 bits 8 bits 8 bits PIC16C5X & PIC16HV540 PIC16C55X PIC16C6X PIC16C62X PIC16C64X & PIC16C66X 8 bits PIC16CE62X 8 bits 8 bits 8 bits PIC16C7X PIC16C71X PIC16C43X 8 bits PIC16C78X 8 bits PIC16C7XX 8 bits 8 bits 8 bits 8 bits 8 bits 8 bits 8 bits PIC16C77X PIC16F87X PIC16X8X PIC16F7X PIC17C4X PIC17C7XX PIC18F0XX PIC18FXX2 PIC18FXX8 PIC18FX32 PIC18FXX31 PIC18FXX5 PIC18FXX30 Caraterística 8 pinos 8 pinos com memória de dados EEPROM 8 pinos com conversor A/D 8 pinos com conversor A/D e memória de dados EEPROM EPROM/ROM EPROM 18 pinos com EPROM Com EPROM e comparador analógico Com comparador analógico, memória de dados EEPROM Com conversor A/D 18 pinos com conversor A/D 18/20 pinos com bus LIN Com conversor programável A/D, D/A, amplificador operacional. Com conversor A/D, de USB, PS/2 e aplicações seriais do dispositivo. 28/40 pinos com conversor A/D de 12 bits 28/40 pinos, FLASH, com conversor A/D de 10 bits 18 pinos, FLASH/EEPROM 28/40 pinos, FLASH EEPROM/ROM, de alta performance De arquitetura realçada 8 pinos, FLASH, EEPROM, A/D e PWN Com proteção de código, EEPROM, modo SLEEP Filtros, duas máscaras, buffers 2RX 28/40 pinos, FLASH, EEPROM, com modo baixo de potência, com conversor A/D de 10 bits 28/40 pinos, para o controle de motores, EEPROM, com modo baixo de potência, com conversor A/D de 10 bits 28/40 pinos, FLASH, com conversor A/D de 10 bits 18/20 pinos, para o controle de motores, EEPROM, com modulo PWM de 3 fases 27 Depois de estudar a imensa variedade de microcontroladores e além disso as características principais dos mesmos, tem-se de reduzir os candidatos a aqueles que são oferecidos no mercado nacional. O preço do microcontrolador, como foi dito anteriormente, tem pouca influencia na escolha pois geralmente o dispositivo (CHIP) é de baixo custo. Um dos fatores que pesam mais na hora da escolha é o apoio do fabricante no inicio do projeto: informações, cursos, programas exemplo, custo do “hardware” de gravação (gravador). Geralmente o fabricante oferece no seu “site” o “software” necessário para o desenvolvimento do projeto, mas nem todo “software” é sem custo. Aqueles microcontroladores que estejam mais difundidos com certeza serão os primeiros escolhidos. O PIC16F84, bastante difundido no Brasil, é um microcontrolador da família PIC16X8X com memória de dados e programa tipo FLASH (reprogramável), com 18 pinos, tamanho standard de qualquer CI de 18 pinos que facilita o desenho do “hardware”. Ele tem 13 portas de entrada ou saída, suficientes para o projeto. Possui um “set” de 35 instruções, ótimo para ser usado no aprendizado e desenvolvimento (prototipagem) de programas de controle de motores. O “Kit de Desenvolvimento” não é de custo elevado, com muita informação, e exemplos da sua utilização. Além disto, o PIC pertence a um família grande de microcontroladores, os que poderiam satisfazer futuras necessidades, sem precisar de mudanças significativas na programação. Por todas estas razões o PIC16F84A foi o microcontrolador escolhido para ser usado na implementação do RAM-I. 2.4 Microcontroladores PIC da MICROCHIP O PIC é um microcontrolador que teve suas origens no ano de 1965, quando a companhia GI (General Instruments), formou a Divisão de Microeletrônica. Na década 70 a GI criou um dos primeiros processadores de 16 bits chamado CP16000. Este tinha uma certa deficiência no processamento de entradas/saídas. Então a GI projetou e construiu um Controlador de Interface Periférica (em inglês Peripheral Interface Controller, ou PIC). Ele tinha que ser bem rápido e possuir um conjunto de instruções muito pequeno. O CP16000 não teve muito sucesso, porem o PIC evoluiu para o PIC16C5X. Com o tempo esta divisão se transformaria na Arizona Microchip Technology desenvolvendo várias versões do PIC, sendo a versão com EEPROM (Electrical 28 Erasable PROM, EPROM apagável eletricamente) a mais indicada para o desenvolvimento de aplicações (Escola Virtual Solbet, 2000). O dispositivo mais avançado disponível hoje da série PIC e que ao mesmo tempo reúne uma série de características adequadas ao uso do mesmo em pequenas series de produtos, facilitando o estudo dos microcontroladores, é o PIC16F84 Os microcontroladores PIC apresentam uma estrutura de maquina interna do tipo Harvard, enquanto grande parte dos microcontroladores tradicionais apresenta uma arquitetura do tipo Von-Neumann. A diferença está na forma como os dados e o programa são processados pelo microcontrolador. Na arquitetura tradicional, tipo Von-Neumann, existe apenas um barramento (bus) interno (geralmente de 8 bits), por onde passam as instruções e os dados. Na arquitetura Harvard existem dois barramentos internos, sendo um de dados e outro de instruções. No PIC , o barramento de dados é de 8 bits e o de instruções pode ser de 12, 14 ou 16 bits, dependendo do microcontrolador, permitindo que enquanto uma instrução é executada outra seja “buscada” (lida) da memória, o que torna o processamento mais rápido. Outra vantagem desta arquitetura está no barramento de instruções, que sendo maior do que 8 bits, já inclui o dado e o local onde ela vai operar (quando for necessário), o que possibilita que apenas uma posição de memória seja utilizada por instrução, economizando assim muita memória do programa. Os PICs utilizam uma tecnologia chamada RISC, Reduced Instruction Set Computer (Computador com “set” de instruções reduzido), possuindo cerca de 35 instruções (o número correto varia de acordo com o microcontrolador), muito menos do que os microcontroladores convencionais que chegam a possuir mais de 100 instruções. Isto torna o aprendizado muito mais fácil e dinâmico, mas requer também maior habilidade do programador para construir funções que não possuam instruções diretas. 2.4.1 Estrutura Interna No diagrama de blocos da Figura 2.1 (Souza, 2000) podem ser visualizadas as diversas partes que compõem o microcontrolador PIC16F84. Nela se observa claramente como o ULA 29 (Unidade Lógica Aritmética, em inglês ALU) está diretamente ligada ao registrador W (“Work reg”). No canto superior esquerdo se tem a memória do programa (“Program Memory”), saindo deste bloco temos o barramento de 14 bits (“Program Bus 14”). Ao meio se encontra a memória de dados (RAM) com seu barramento de 8 bits (“Data bus 8”). Ao lado direito o primeiro periférico, a EEPROM (memória de dados não volátil). Outros periféricos podem ser também observados, tais como: o timer (TMRO) e as portas paralelas (I/O Ports). Observe-se que ao timer está ligado um pino do microcontrolador (RA4/TOCK); este pino, em conjunto com o timer, forma o contador externo. No centro está o registrador STATUS (STATUS reg). Algumas informações importantes sobre as operações aritméticas da ULA ficam armazenadas neste registrador. Na parte superior se têm o contador de linhas de programa (Program Counter) e a pilha de 8 níveis (Stack). Entre todos os periféricos a comunicação é feita por meio de um barramento de 8 vias. Alem destes dispositivos existem os circuitos internos de reset, osciladores e o Watch dog Timer (WDT). Figura 2.1: Diagrama interno do PIC 16F84. 30 Na figura 2.2 é mostrado o diagrama de blocos simplificado do microcontrolador. O PC (contador de programa) é onde está armazenado o endereço da instrução que será executada. Após cada instrução o valor do PC é alterado para passar a indicar o endereço da próxima instrução. No caso da instrução CALL e no atendimento das interrupções o microcontrolador deve manter a informação do endereço de retorno, para saber aonde ir quando voltar da subrotina. Este endereço de retorno é armazenado no STACK. No caso do PIC16F84 é permitido o alinhamento de até oito subrotinas ou interrupções. A ALU interpreta e executa os programas armazenados na área de programas. A ALU trabalha em estreito relacionamento com o registro W, onde grande parte das operações são realizadas. Os demais blocos selecionados são os responsáveis pela sincronização das operações dentro do microcontrolador. Figura 2.2: Diagrama em blocos simplificado do PIC. 31 Nos microcontroladores PIC, o sinal de relógio (“clock”) é internamente dividido por quatro. Por tanto, para um clock externo de 4MHz, se tem um clock interno de 1MHz, e consequentemente cada ciclo de maquina dura 1 µs (Souza, 2000). A divisão do clock por quatro forma as fases Q1, Q2, Q3 e Q4. O contador de programa é incrementado automaticamente na fase Q1 do ciclo da maquina, então a instrução seguinte é buscada da memória de programa e armazenada no registrador de instruções no ciclo Q4. Ela é codificada e executada no próximo ciclo, no intermedio de Q1 ate Q4. Esta caraterística de buscar a informação num ciclo da maquina e executa-la no próximo é conhecida como PIPELINE, ela permite que quase todas as instruções sejam executadas em apenas um ciclo, gastando assim 1µs (para um clock de 4MHz), e tornando o sistema muito mais rápido. No caso de instruções que geram “saltos” no contador de programas (Program Counter), como chamadas de rotinas e retornos, quando são executadas o PIPELINE deve primeiramente ser limpo para depois ser carregado novamente com o endereço correto, consumindo para isso dois ciclos de máquina. O conceito de PIPELINE só é possível graças à arquitetura “Harvard”. Como será visto na parte da programação, o entendimento da duração das instruções será usado para definir os tempos de espera das múltiplas partes do programa. A figura 2.3 mostra as divisões do ciclo nas 4 fases (Q1 a Q4) e o funcionamento do PIC. Figura 2.3: Esquema dos ciclos de máquina no PIC. 32 O PIC possui barramentos diferenciados para as memórias de programa e de dados. Estas memórias são completamente separadas. No caso do PIC16F84, utilizado no presente trabalho, existe uma terceira memória: a memória não volátil EEPROM. Devido à estruturação tipo Harvard do PIC, a memória de programa pode ser de 12, 14 ou 16 bits. O tamanho desta memória também varia de modelo para modelo. Na maioria dos modelos essa memória é do tipo EPROM, que só pode ser gravada uma vez para PIC’s normais, ou gravada varias vezes no caso de PIC’s janelados (que podem ser apagados por meio de luz ultravioleta). Existe ainda modelos que possuem a memória de programa do tipo EEPROM, que pode ser gravada varias vezes sem necessidade de apagar a gravação anterior. Estes PIC’s são muito mais fáceis de trabalhar e são usados no desenvolvimento de sistemas. Quando o programa é desviado para o começo de uma rotina por meio de uma instrução correta, o endereço seguinte ao ponto que estava sendo rodado é armazenado na pilha (STACK, local separado da memória de programação), para que, ao fim da rotina, o programa possa retornar. O tamanho da pilha também varia de acordo com o modelo do PIC. A memória de dados do sistema é a RAM, que é utilizada para guardar todas as variáveis e registradores utilizados pelo programa. Esta memória armazena dados de 8 bits e é volátil , ou seja que quando o PIC for desligado ela será automaticamente perdida. Ela está dividida em dois grupos: registadores especiais e registradores de uso geral (Souza, 2000). Como já foi dito anteriormente, alguns modelos do PIC possuem ainda uma terceira memória que também pode ser utilizada pelo usuário para guardar dados. Entretanto, diferente da memória de dados, esta é uma EEPROM, isto é uma memória não volátil, que consegue manter as informações mesmo sem alimentação. Os modelos que não possuem esta memória internamente podem utilizar este recurso por intermedio de uma memória EEPROM externa interligada ao microcontrolador por I/O’s, mas neste caso precisa-se também implementar rotinas para possibilitar a escrita e leitura de dados. 33 2.4.2 O PIC 16F84 Na escolha do microcontrolador procurou-se um modelo que fosse versátil, compacto e poderoso. Assim chegou-se à série PIC16F84 da MICROCHIP, por ser um dispositivo computacional extremamente adequado para experimentação e para pequenos projetos. O PIC16F84 possui as seguintes caraterísticas básicas: • Microcontrolador de 18 pinos, o que facilita a montagem de “hardware” experimental; • 13 portas configuráveis como entradas ou saídas. • 4 interrupções disponíveis (TMRO, Externa, Mudança de estado e EEPROM) • Memória de programação EEPROM FLASH, que permite a gravação do programa diversas vezes, com até 1 000 000 de ciclos de apagamento e escrita, com retenção garantida por mais de 40 anos. Esta gravação pode ser feita sem a desmontagem do CHIP do “hardware”. • Memória EEPROM (não volátil) interna • Via de programação com 14 bits e 35 instruções. • Sistema de proteção de código na EEPROM. (Impossibilita que outras pessoas leiam seu código). Uma grande vantagem da família PIC é que todos os modelos possuem um conjunto (“set”) de instruções bem parecido, Uma outra vantagem é o fato de manter muitas semelhanças entre suas caraterísticas básicas, o que torna mais fácil a migração para um outro modelo da família PIC. Figura 2.4: O PIC 16F84. 34 O PIC 16F84 possui um total de 13 I/Os separados em dois grupos denominados PORTAS. Desta forma temos a porta A (PORTA) e a porta B (PORTB). O PORTA possui 5 pinos que podem ser configurados como entradas ou saídas e seus nomes são definidos como RA0, RA1, RA2, RA3 e RA4. O pino referente ao RA4 pode ser configurado também para incrementar o contador TMR0. O PORTB possui 8 pinos configuráveis como entrada ou saída, sendo seus nomes RB0 a RB7. O RB0 pode ser utilizado também para gerar a interrupção externa , assim como os pinos RB4, RB5, RB6 e RB7 podem gerar a interrupção por mudança de estado. Para que o microcontrolador possa funcionar é preciso ligar ao pino 5 o GND (Vss) e ao pino 14 os +5Vcc (Vdd) de tensão de alimentação nominal. O valor da tensão de alimentação depende do modelo estudado. No caso do PIC 16F84 ele vai de 2.0 a 6.0 Vcc. O pino 4, denominado MCLR (Master Clear externo), é quem recebendo um nível baixo (GND) reseta o programa e assim paralisa o processo. Ao ser colocado em nível alto (+5Vcc) a execução do programa será retomada do ponto inicial. O oscilador deve ser ligado aos pinos 16 e 15 respetivamente. O PIC pode operar com 4 tipos de osciladores. Estas configurações são necessárias para que o circuito opere com uma grande faixa de freqüências (32 KHz a 10 MHz), e com diferentes dispositivos osciladores. • Osciladores a cristal de baixa potência (LP) de 32 KHz a 200 KHz. • Osciladores a cristal/ressonadores cerâmicos convencionais (XT) de 2MHz a 4MHz. • Osciladores a cristal/ressonadores cerâmicos de alta freqüência (HS) de 8MHz a 10 MHz. • Osciladores a ressistor/capacitor (RC) A escolha do tipo de oscilador depende das necessidades de nossa aplicação. Assim, se as temporizações não são críticas o Oscilador RC dá o menor custo. Um modo interessante de usar o PIC é com um oscilador externo. Embora utilize um maior número de componentes, esta opção permite um sincronismo entre vários PICs alimentados com o mesmo clock. 35 Para os modos LP, XT, e HS o circuito básico é sempre o mesmo, com variações nos componentes em função da freqüência de trabalho e uso de cristais ou ressonadores cerâmicos. A Tabela 2.5 apresenta os valores recomendados para os componentes e a figura 2.5 mostra o circuito básico externo do oscilador no PIC 16F84 (Microchip Technology Inc., 1998). Tabela 2.5: Valores recomendados para os capacitores do oscilador Modo XT XT XT HS HS LP LP XT XT XT HS HS Freqüência 455 KHz(ressonador) 2.0 MHz(ressonador) 4.0 MHz(ressonador) 8.0 MHz(ressonador) 10 MHz(ressonador) 32 KHz(cristal) 200 KHz(cristal) 100 KHz(cristal) 2.0 MHz(cristal) 4.0 MHz(cristal) 4.0 MHz(cristal) 10 MHz(cristal) C1 47-100pF 15-33pF 15-33pF 15-33pF 15-33pF 68-100pF 15-33pF 100-150pF 15-33pF 15-33pF 15-33pF 15-33pF C2 47-100pF 15-33pF 15-33pF 15-33pF 15-33pF 68-100pF 15-33pF 100-150p 15-33pF 15-33pF 15-33pF 15-33pF Figura 2.5: Circuito do oscilador do PIC 16F84. Para o caso de Osciladores RC, apresentados na figura 2.6, a freqüência de operação será dependente dos valores de R e C, da fonte de alimentação, da temperatura ambiente e do circuito integrado utilizado. Este circuito não é usado senão para sistemas onde o custo e não a 36 estabilidade da freqüência de oscilação for o mais importante. Os valores do resistor devem de estar entre 100 KΩ e 3KΩ e o capacitor deve tomar valores entre 20 pF e 330 pF, Figura 2.6: Circuito para oscilador RC do PIC 16F84. Tabela 2.6: Caraterísticas elétricas e outras do PIC16F84 CARATERÍSTICAS ELÉTRICAS E OUTRAS DO PIC16F84 Temperatura de trabalho Temperatura de armazenamento Tensão de trabalho Voltagem máxima no pino Vdd (em relação ao Vss) Voltagem máxima no pino MCLR (em relação ao Vss) Voltagem máxima nos demais pinos (em relação ao Vss) Dissipação máxima de energia Corrente máxima de saída no pino Vss Corrente máxima de entrada no pino Vdd Corrente máxima de entrada de um pino (quando em Vss) Corrente máxima de saída de um pino (quando em Vdd) Corrente máxima de entrada do PORTA Corrente máxima de saída do PORTA Corrente máxima de entrada do PORTB Corrente máxima de saída do PORTB -55°C até +125°C -65°C até +150°C 2.0V a 6.0V -0.3V até 7.5V -0.3V até 14.0V -0.6V até (Vdd+0.6V) 800 mW 150 mA 100 mA 25 mA 20 mA 80 mA 50 mA 150 mA 100 mA Os mapas das memórias são mostrados, tanto da memória de programa, figura 2.7 como da memória de dados, figura 2.8. 37 2.4.3 Os Registradores Especiais Tem-se falado sobre as possíveis configurações que podem ser feitas para definir as portas como entradas ou saídas, ativar as interrupções, ativar a contagem do TMRO, etc. O PIC possui uma serie de registradores especiais que são denominados SRF (Special Function Registers), os quais servem para guardar a configuração e o estado de funcionamento atual da máquina. Os SRFs são de 8 bits de comprimento e o seu endereço esta alocado na área da memória de dados. Na Tabela 2.7 são apresentados os registradores especiais. Tabela 2.7: Endereços dos registradores do PIC16F84 Nome Endereço EEADR EECON1 EECON2 EEDATA FSR INDF INTCON OPTION PCL PCLATH PORTA PORTB STATUS TMR0 TRISA TRISB 09h 88h 89h 08h 04h/84h 00h/80h 0Bh/8Bh 81h 02h/82h 0Ah/8Ah 05h 06h 03h/83h 01h 85h 86h 38 Figura 2.7: Mapa da memória de programa e STACK do PIC 16F84A. Figura 2.8: Mapa da memória de dados do PIC 16F84A. 39 2.4.4 “Set” de Instruções Para facilitar a leitura dos programas e também a iniciação na programação dos microcontroladores PICs da MICROCHIP é conveniente entender corretamente os termos utilizados na construção dos nomes das instruções e seus argumentos. Ø Work: Trata-se de um registrador temporário para as operações da ULA. No “assembler” ele é conhecido como W, e é um registro acumulador. Ø File: Refere-se a um registrador (posição de memória) de nome de argumento “f”. Utiliza-se a letra F para representa-lo na instrução. Ø Literal: Ele é um número qualquer que pode ser escrito, na forma: decimal (escrito no assembler como .XX ou D‘XX’), hexadecimal (escrito no assembler como 0xXX ou H‘XX’) ou binário (escrito no assembler como B‘XXXXXXXX’), de nome “k”. Utiliza-se a letra L para representa-lo na instrução. Ø Destino: Este é o local onde deve ser armazenado o resultado da operação, este pode ser F ou W. Ø Bit: Refere-se a um bit especifico dentro de um byte, o nome de argumento dele é “b”. Utiliza-se a letra B para representa-lo na instrução. Ø Teste: Quando se requer testar o estado de um bit, quer dizer descobrir se ele e ZERO ou UM. Utiliza-se a letra T para representa-lo na instrução. Ø Skip: É utilizada para criar desvios na programação, pulando ou não a próxima linha dada uma condição. Utiliza-se a letra S para representa-lo na instrução. Ø Set: Refere-se ao ato de setar um bit, isto é torna-lo equivalente a UM. Utiliza-se a letra S para representa-lo na instrução. 40 Ø Clear: Refere-se ao ato de limpar um bit, isto é torna-lo equivalente a ZERO. Utiliza-se a letra C para representa-lo na instrução. Ø Zero: Algumas instruções podem gerar desvios se o resultado da operação efetuada for ZERO. Utiliza-se a letra Z na instrução para indicar tal condição. Existem vários outros termos, mas eles são específicos das ações realizadas pelas instruções, e são em parte auto explicados: ADD é soma, AND é “E” lógica, etc. Como foi dito neste capítulo, o PIC 16F84 possui 35 instruções. Elas podem ser organizadas em quatro grupos conforme as suas aplicações: Operações com registradores, Tabela 2.8, Operações com literais, Tabela 2.9, Operações com bits, Tabela 2.10, Controles, Tabela 2.11. Tabela 2.8: Resumo das Instruções do PIC, Operações com registradores. Instrução Arg. ADDWF f,d ANDWF f,d CRLF COMF DECF f f,d f,d DECFSZ f,d INCF f,d INCFSZ f,d IORWF f,d MOVF MOVWF RLF RRF SUBWF f,d f f,d f,d f,d SWAPF f,d XORWF f,d Descrição Soma W e f, guardando o resultado em d. Lógica “E” entre W e f guardando o resultado em d Limpa f Calcula o complemento de f, guardando-o em d Decrementa f, guardando o resultado em d. Decrementa f, guardando o resultado em d e pula a próxima linha se o resultado for zero. Incrementa f, guardando o resultado em d. Incrementa f, guardando o resultado em d e pula a próxima linha se o resultado for zero. Lógica “OU” entre W e f guardando o resultado em d Move f para d (copia) Move W para f (copia) Rotaciona f em 1 bit para a esquerda. Rotaciona f em 1 bit para a direita. Subtrai W de f (f-W), guardando o resultado em d. Executa uma inversão entre as partes alta e baixa de f, guardando o resultado em d. Lógica “OU exclusivo” entre W e f guardando o resultado em d. 41 Bit do STATUS afetado C, DC, Z, Z Z Z Z Nenhum Z Nenhum Z Nenhum Nenhum C C Nenhum Z Z Tabela 2.9: Resumo das Instruções do PIC, Operações com literais. Instrução Arg. ADDLW k ANDLW k IORLW k MOVLW k SUBLW k XORLW k Descrição Soma k e W, guardando o resultado em W. Lógica “E” entre k e W guardando o resultado em W Lógica “OU” entre k e W guardando o resultado em W. Move k para W. Subtrai W de k (k-W), guardando o resultado em W. Lógica “OU exclusivo” entre k e W guardando o resultado em W. Bit do STATUS afetado C, DC, Z Z Z Nenhum C, DC, Z Z Tabela 2.10: Resumo das Instruções do PIC, Operações com bits. Instrução Arg. BCF BSF f,b f,b BTFSC f,b BTFSS f,b Descrição Impõe ZERO ao bit b do registrador f. Impõe UM ao bit b do registrador f. Testa o bit b do registrador f, e pula a próxima linha se ele for ZERO. Testa o bit b do registrador f, e pula a próxima linha se ele for UM. Bit do STATUS afetado Nenhum Nenhum Nenhum Nenhum Tabela 2.11: Resumo das Instruções do PIC,Controles. Instrução Arg. CLRW NOP CALL CLRWD T GOTO RETFIE RETLW RETURN R R K - SLEEP - - Descrição Limpa W. Gasta um ciclo de máquina sem fazer nada. Executa a rotina R. Limpa o registrador WDT para não acontecer o reset. Desvia para o ponto R, mudando o PC Retorna de uma instrução. Retorna de uma rotina com k em W. Retorna de uma rotina, sem afetar W. Coloca o PIC em modo sleep (dormido) para economia de energia. 42 Bit do STATUS afetado Z Nenhum /TO,/PD Nenhum Nenhum Nenhum Nenhum /TO,/PD 2.4.5 Introdução à Ferramenta MPLAB O MPLAB é um programa para computador que roda sobre a plataforma Windows, e é usado como ambiente de desenvolvimento de programas para microcontroladores PIC da MICROCHIP. É uma ferramenta muito poderosa. Ele junta no mesmo ambiente o gerenciamento de projetos, compilação, simulação, emulação e gravação do CHIP. O manual para esta ferramenta de desenvolvimento está no site da MICROCHIP. Mesmo assim, é apresentada esta ferramenta devido à grande utilidade que ela teve no projeto. Ao iniciar o MPLAB se tem acesso ao ambiente de trabalho global. Trata-se de uma área para abertura das janelas de trabalho, com um menu superior. Abaixo dele se têm uma barra de ferramentas, com diversos icones relativos a funções especificas. O primeiro ícone do lado esquerdo muda as barras de ferramentas disponíveis. Na parte inferior está a barra de status (figura 2.9). Figura 2.9: Tela inicial do ambiente de trabalho MPLAB. Para poder trabalhar neste ambiente não basta o arquivo de código fonte. É necessário ter outras informações para que o sistema possa ser compilado e executado. O MPLAB usa para isto o conceito de “projeto”. Define-se o conceito de projeto como o arquivo que guarda todas as informações necessárias ao sistema em desenvolvimento. Para que o MPLAB possa funcionar corretamente tem que ser aberto o projeto correspondente. 43 Figura 2.10: Tela de composição do projeto no MPLAB. Figura 2.11: Ambiente de trabalho completo do MPLAB. 2.4.6 Programador Sb Microlab O módulo de desenvolvimento Sb Microlab visa permitir ao experimentador ou integrador de sistemas, a construção de um ambiente para programação e experimentação com o microcontrolador PIC16F84. Com este módulo, um computador pessoal (PC) e o “software” 44 adequado, o projetista estará equipado para o desenvolvimento de circuitos baseados neste microcontrolador. O desenvolvimento de uma aplicação baseada em microcontroladores envolve duas fases: Projeto do “hardware” do sistema e Projeto do “software” do sistema. Na implementação do “software” é usado, como já foi dito, o “software” MPLAB, disponível gratuitamente no “site” do fabricante do PIC, em http://www.microchip.com Para a gravação do programa no PIC alvo e teste do sistema (parte do Projeto do “hardware” do sistema) o Sb Microlab é a ferramenta ideal, pois ele permite a monitoração de saídas e possui led’s para o teste do programa do PIC16F84 alvo. O sistema se interliga a um PC através de um cabo serial com conector DB9 fêmea. O protocolo de “hardware” da RS232-C é completado na placa de circuito impresso. O Sb Microlab opera conjuntamente com o “software” Sbprog40 que deve ser executado sob o sistema operacional Windows95 ou superior, previamente instalado no computador. O Sbprog40 transferirá um arquivo .hex de 8bits, padrão de saída dos programas assembler, para a memória de programas do PIC16F84. Este arquivo .hex é gerado pelo assembler do MPLAB ou outro assembler semelhante. No Anexo A.2 se têm o diagrama eletrônico do módulo e na figura 2.12 se mostra a disposição dos componentes Figura 2.12: Placa do módulo Sb Microlab para a programação do PIC16F84. 45 O SbProg40 é um “software” simples que permite gravar na memória de programas do PIC16F84 um programa qualquer, desde que este já esteja compilado num arquivo .hex. Na figura 2.13 é mostrada a janela de iniciação do SbProg40. Figura 2.13: Tela de apresentação do Sb Prog40. 2.5 Controle em Tempo Real Até agora foram apresentados os fundamentos do “software” do microcontrolador, e também, como eles são “suportados” pelo “hardware”. A seguir será mostrado como devem ser unidos o “software” e o “hardware”, construindo blocos com determinadas estratégias para se obter o controle em tempo real no robô. Existem três estratégias para escrever um “software” que possa responder a estímulos externos em tempo real. “Polling” (sondagem) é o método onde “loops” do “software” continuamente verificam os pinos de entrada, mantendo ocupado o microcontrolador, mesmo que nenhum evento externo esteja acontecendo. O seguinte método, o “Interrupt driven”, é mais eficiente. Neste método o evento externo cria um sinal que direciona o microcontrolador a pospor qualquer tarefa que esteja realizando e responder ao evento/estimulo imediatamente. A terceira estratégia, “Input Capture”, pode ser usada se o microcontrolador possui um “hardware” 46 especial, conhecido como registrador de captura de entrada. O processador nunca é interrompido, (Jones, 1993). Estos conceitos serão explicados a seguir com ajuda de alguns exemplos. • Polling: Requer monitoramento de uma entrada e determina uma ação imediatamente após o evento/estimulo de interesse ter acontecido. Por exemplo, medir o tempo de propagação de um pulso emitido por um sonar. Esta tarefa é importante para medir a diferença entre o tempo em que o pulso foi enviado e seu tempo de retorno. Na implementação de uma subrotina assume-se que a saída do receptor de ultra-som está conectada a uma porta (PORTA0), a qual passa ao nível ALTO quando um eco é detectado. Na inicialização do pulso (som) do sonar um registro determinado é zerado para começar a contagem do tempo de espera. Será este registro o encarregado de armazenar o valor dos ciclos gastos na espera do eco do sonar. Esta quantidade de ciclos será usado, por exemplo, na determinação da distancia a um obstáculo. Para que o programa seja o suficientemente robusto, na subrotina tem que ser considerada uma saída eventual do “loop” (tempo limite de espera pelo eco), no caso do eco não voltar. • Interrupts: Na estratégia anterior o microcontrolador fica esperando por um evento acontecer. Nesta estratégia o microcontrolador toma uma determinada ação (executa instruções) quando um evento/estimulo atual ocorre (isto é chamado de interrupção). Uma interrupção é um evento/estimulo que provoca automaticamente uma resposta no microcontrolador. O código que responde ao evento é chamado de “rotina de interrupção”. Após a execução da rotina de interrupção o microcontrolador volta à linha onde parou antes da interrupção e continua com a execução do programa principal. O microcontrolador pode fazer isso graças ao fato de ter armazenado o endereço da linha em execução do programa no STACK. • Input Capture: O trabalho que foi necessário nas duas estratégias anteriores é desnecessário quando temos microcontroladores que facilitem a captura de entradas, e assim o cálculo do tempo de retorno do pulso do sonar, sem precisar de rotinas de interrupção. O próprio “hardware” pode capturar o tempo quando o PORTA0 adquire um nível ALTO. 47 2.6 Módulo Sb Step Control O módulo Sb Step Control permite o controle remoto, via interface serial, de até dois motores de passo do tipo unipolar, com cinco ou seis fios. Cada bobina pode ser alimentada com até 12 V, 500 mA por enrolamento e permite controlar a velocidade e a direção de giro dos dois motores de passo através de um computador. A alimentação do módulo deve de ser realizada com uma fonte de 12Vcc, com capacidade de 1 Ampère. O protocolo de comunicação utiliza apenas caracteres ASCII, de modo que podem ser realizados testes utilizando apenas um emulador de terminais, como o hiperterminal do Windows, ou qualquer outro similar. O microcontrolador utilizado é o PIC16F84, de modo que o firmware pode ser atualizado sem necessidade da compra de outro microcontrolador. 2.6.1 Caraterísticas do controlador Este módulo possui as seguintes características básicas: 1. Consegue controlar dois motores de passo de quatro bobinas cada um, a uma tensão máxima de 12V e uma corrente máxima de 500 mA por bobina. 2. Alimentação de 12 V, 1 A. 3. Comunicação serial RS232-C, 1200, 8, N, 1 (1200 bauds, 8 bits de dados, sem paridade e 1 Stop Bit). 4. Protocolo de comunicação com comandos para controle individual dos motores. Teste de conexão. 5. Possui um microcontrolador PIC16F84 Na Tabela 2.12 são mostrados os comandos usados no protocolo de comunicação para o controle dos motores de passo. Estes são reconhecidos após o recebimento de um caracter <CR> 48 Tabela 2.12: Comandos usados pelo módulo Sb Step Control para o controle dos motores. Comando Parâmetro Ação Estabelece a duração do passo do motor 0 Estabelece a duração do passo do B motor 1 C Liga ambos motores D Desliga ambos motores E Motor ZERO no sentido horário Motor ZERO no sentido antihorário F Nenhum (default) G Nenhum Motor UM no sentido horário Motor UM no sentido antihorário H Nenhum (default) Solicita o envio do pronpt para o PC I Nenhum controle J Nenhum Liga motor ZERO K Nenhum Desliga motor ZERO L Nenhum Liga motor UM M Nenhum Desliga motor UM * Cada unidade do parâmetro eqüivale a 4 milisegundos de duração. A 2.6.2 NNN qualquer valor entre 1 e 255* NNN qualquer valor entre 1 e 255* Nenhum Nenhum Nenhum Descrição do controlador Sb Step Control No esquema do circuito eletrônico do Sb Step Control, (Anexo A.3) pode-se observar três componentes principais. Estes são os circuitos integrados MAX232CPE (Maxim Integrated Products, 2000), ULN2803A (SGS Thomson Microelectronics, 1997)e o PIC16F84 (Microchip Technology Inc., 1998). Para que o módulo possa se comunicar com outros módulos ou PCs possui uma interface do tipo RS232-C. utilizando o integrado MAX232CPE. O ULN2803A é um CI com oito transistores do tipo Darlington, saída de corrente de até 500 mA funcionando como driver dos motores de passo. O 78L05 é um regulador da tensão, e é o encarregado de fornecer os 5V necessários para a alimentação dos CI (National Semiconductor Corporation, 2000). 49 No Sb Step Control existem um total de cinco conectores. O conector JP2 para a alimentação +12V e GND. JP3 e JP4 são os conectores dos motores de passo com quatro bobinas do tipo unipolar com cinco ou seis fios. O conector JP1 esta interligado à PORTA do PIC bits 4, 3 e 2 (estas portas não são utilizadas e estão livres para o uso), e um conector tipo DB9 fêmea, para a interface. Ver a figura 2.14. Figura 2.14: Placa do módulo Sb Step Control para controlar motores de passo. 2.7 Módulo Sb 9902_2 O módulo Sb 9902_2 é um “hardware” usado para a construção de equipamentos dedicados com processamento digital. Esta baseado no PIC16F84-10P, operando com um cristal de 10MHz. As portas RB0 a RB7 e RA2 a RA5 estão disponíveis. Este módulo incorpora uma interface RS232-C padrão, com um conector DB9. A alimentação pode ser realizada com qualquer tensão continua entre 8 e 25V, ocorrendo a estabilização na própria placa. A programação poderia ser realizada na própria placa, sem necessidade da retirada do circuito. Adicionalmente o módulo Sb 9902_2 permite construir um sistema microprocessado baseado no PIC16F84 e um conversor analógico-digital (A/D). Também pode se implementar uma interface RS232-C, com um protocolo de comunicação que utilize apenas caracteres ASCII, de modo a permitir a ligação a computadores ou display´s inteligentes. Um exemplo de utilização do módulo esta na aquisição remota de dados. 50 2.7.1 Caraterísticas do Módulo Sb 9902_2 Este módulo possui as seguintes características básicas: 1. CPU PIC16F84 operando com um cristal de 10MHz. 2. 9 bits de I/O digital. 3. Entrada analógica 0-5v, oito bits. 4. Comunicação serial RS232-C. 5. Alimentação com tensões entre 8-25V. 6. Portas do PIC livres para o uso respectivo. 2.7.2 Descrição do Módulo Sb 9902_2 No esquema do circuito eletrônico do módulo Sb 9902_2, (Anexo A.4) pode-se observar três componentes principais, estes são os circuitos integrados: MAX232CPE (Maxim Integrated Products, 2000), PIC16F84 (Microchip Technology Inc., 1998) e ADC0831 (National Semiconductor Corporation, 1999). O integrado MAX232CPE é utilizado para a comunicação com outros módulos ou PCs (interface do tipo RS232-C). O ADC0931 é um conversor analógico-digital (A/D) com I/Os em serie, desenhado para permitir uma fácil interface com alguns microcontroladores. Também existe na placa um outro componente, o 78L05, que é um regulador de voltagem. Ele é o encarregado de fornecer os 5V necessários para a alimentação dos CI. No Sb9902-2 existe um total de quatro conectores: Um conector tipo DB9 fêmea, para a interface serial. Se for necessário utilizar um conector de 25 pinos, e possível utilizar um “plug” conversor (ou adaptador). Consultar no Anexo A.5 o SB Fast Card. 51 O conector JP1 serve para a gravação “in circuit” do microcontrolador PIC16F84. Isto quer dizer que o PIC, como já foi dito anteriormente, pode ser gravado no mesmo módulo, sem precisar ser retirado da placa. Na Tabela 2.13 é mostrada a configuração deste conector. Tabela 2.13: Pinos do conector JP1 para a gravação “in circuit” do módulo Sb Step Control. Pino do conector Função JP1-1 JP1-2 JP1-3 JP1-4 JP1-5 Vcc RB7 RB6 /MCLR GND O conector JP2 serve para isolar a fonte de alimentação durante o procedimento de gravação “in circuit”, na mesma placa do módulo. O conector JP3 serve para o interfaceamento do módulo Sb 9902-2 com os diversos dispositivos a ser utilizados, Tabela 2.14. Tabela 2.14: Pinos do conector JP3 para o interfaceamento do módulo Sb Step Control. Pino do conector Função JP3-1 JP3-3 : JP3-5 JP3-7 JP1-9 JP3-11 : JP3-25 JP3-27 : JP3-33 JP3-2 : JP3-34 Vcc (8-25V) Entrada analógica Livre Livre RB7 : RB0 RA4 : RA2 GND Na figura 2.15 se mostra a placa do circuito impresso do módulo Sb 9902-2. 52 Figura 2.15: Placa do módulo Sb 9902-2, usado como “cérebro” do robô. 2.8 Implementação da Interface RS232-C Uma das funções de grande importância no projeto de sistemas de microcontroladores se refere à comunicação. Um dos sistemas de comunicação mais utilizados é a comunicação serial padrão RS232-C. Embora o PIC16F84 não possua a função de comunicação serial implementada por “hardware”, a implementação baseada em “software” é relativamente simples. A interface RS232-C possui níveis de tensão diferentes dos que freqüentemente são usados em lógica digital. O nível lógico ZERO é representado por um sinal de 12V, e o nível lógico UM por um sinal de –12V. Para realizar esta conversão de níveis a maneira mais pratica é o uso de um integrado especifico. O CI usado nos dois módulos é o MAX232CPE (Maxim Integrated Products, 2000). A RS232-C é uma interface assíncrona, ou seja, o dado é transmitido sem um sinal de sincronismo associado a cada bit. O sincronismo é obtido a partir da detecção de um bit inicial, chamado de Start Bit. A partir do Start Bit seguem-se de 5 a 8 bits de dados, um bit opcional de paridade e um Stop Bit que na realidade poderia ocupar o espaço de 1, 1.5, ou 2 bits. Um ponto importante na especificação de um enlace serial é a velocidade de transferência de dados. A velocidade de uma interface serial é dada normalmente em bits por segundo, ou bauds. As velocidades padronizadas são de 300, 600, 1200, 2400, 4800, 9600 e 19200 bauds. Por isso na literatura normalmente se terá especificações do tipo 2400, N, 8, 1 o que significa 2400 53 bauds (bits por segundo), sem paridade, oito bits de dados e 1 Stop Bit. No código do programa que implementa tanto o Controlador dos Motores Sb Step Control como o Módulo Sb 9902_2 opera-se com as seguintes especificações: 1200, N, 8, 1, permitindo que os dois módulos se comuniquem entre si. Com estas especificações um byte de dados (8 bits) transmitido, é “envolvido” por um bit inicial em 0 (ZERO Start Bit), e um bit final em 1 (UM Stop Bit). Se não houverem bytes adicionais a transmitir a linha deve ficar em nível lógico UM. É importante ter presente que na interface RS232-C, o nível lógico UM corresponde à -12V. O byte é transmitido com o bit 0 (bit menos significativo do byte) em primeiro lugar. A duração de um bit depende da velocidade com a qual esteja-se transmitindo, conforme se mostra na Tabela 2.15. Este tempo de duração é importante na implementação da subrotina encarregada da transmissão de dados, nos programas principais dos PICs. Se deve procurar amostrar o bit bem no meio do intervalo, tendo assim segurança de estar amostrando um bit corretamente. Tabela 2.15: Tempo de duração de um bit em relação as velocidades da interface RS232-C Velocidade Duração 300 600 1200 2400 4800 9600 19200 3.33 ms. 1.67 ms. 833 µs. 417 µs. 208 µs. 104 µs. 52.1 µs. Gerar um protocolo RS232-C é muito simples. Se gera em primeiro lugar um Start Bit, para isto se faz um bit de uma porta, por exemplo o PORTA0, igual a ZERO. Se espera por um tempo equivalente ao tempo de duração de um bit (dado pela tabela anterior). A partir deste instante se envia o byte desejado, bit a bit, lembrando sempre de enviar o menos significativo em primeiro 54 lugar, esperando sempre que cada bit enviado tenha a duração adequada. Por ultimo enviamos um bit com UM. No programa implementado no RAM-I se gera o intervalo de um bit (duração do tempo de um bit) através de um “loop” de “software”. Ver no Anexo A.1 os programas implementados. Nesta contagem do tempo, é também importante ter presente os ciclos gastos pelos comandos do PIC, como já foi visto no inicio deste capitulo, na parte da apresentação do PIC. 2.9 Os Sensores Uma das principais características dos robôs móveis considerados inteligentes é o uso de sensores externos que os tornam capazes de operar em ambientes desestruturados. Tais sensores permitem ao robô autônomo extrair informações do ambiente levando-o a reagir às mudanças do mesmo de forma inteligente (Rezende, 1992). A entrada de informações em um sistema inteligente ocorre sempre por meio de sensores. A informação dos sensores é sempre enviada ao módulo de processamento sensorial do sistema inteligente, que transformará os sinais oriundos dos sensores em informação útil ao sistema (Suárez, 2000). Sistemas com pouca ou nenhuma capacidade sensorial externa, geralmente são limitados a operações de sequência fixa em ambientes altamente estruturados e não podem fornecer nenhum grau de autonomia substancial ou adaptabilidade (Rezende, 1992). Assim sendo, pode-se perceber que um robô sem sensores não é capaz de lidar devidamente com mudanças em seu ambiente. Existem em robótica diversos modos de classificar os sensores (Ferreira, 1991), como por exemplo em sensores de percepção interna e de percepção externa ao robô. Outra classificação dos sensores para robótica móvel os divide em: sensores de luz (fotoresistores, detectores de proximidade com infravermelho), sensores de força (microchaves, resistências sensíveis à força), sensores de som (microfones, soar), sensores de posição e orientação (“encoders”, giroscopios, 55 sensores de inclinação, bússola), sensores “internos” (nível de bateria, corrente, temperatura) (Jones, 1993). Os sensores de percepção externa encontrados na robótica podem ser classificados da seguinte forma (GSI, 2001): sensores de toque, sensores de distâncias, sensores de proximidade e sensores de visão. 2.9.1 Sensores de Toque Sensores de toque (tato) são dispositivos que indicam o contato entre eles próprios e algum outro objeto. Normalmente são usados em robôs industriais ou manipuladores. A informação de toque pode ser usada, por exemplo, para a localização e reconhecimento de objetos, indicando ainda a magnitude da força de contato entre os dois. Um dos objetivos de se usar sensores deste tipo é identificar e controlar diretamente a interação entre o robô e o ambiente onde ele se encontra. 2.9.2 Sensores de Distância São dispositivos que medem a distância entre um ponto de referência (normalmente outro sensor) e os objetos no campo de atuação do mesmo. Tais sensores são usados na navegação de robôs e no desvio de obstáculos, onde a sua utilização consiste em estimar as distâncias aos objetos mais próximos, em aplicações onde a localização desses objetos é necessária. Existem várias técnicas para efetuar os cálculos para determinar essa distância: o método da triangulação, a abordagem da luz estruturada e a técnica dos ultra-sons. Os sensores de distância mais utilizados nos robôs móveis autônomos inteligentes (Rezende, 1992) são os sensores de ultrasom. 56 Objeto D = B.tanθ D Linha de base θ Receptor Emissor B Figura 2.16: Exemplo de um sensor de distância. 2.9.3 Sensores de Proximidade Os sensores de distância discutidos anteriormente estimam a distância entre o sensor e um determinado objeto. Os sensores de proximidade, por outro lado, têm geralmente uma saída binária que indica a presença de um objeto a uma distância pré-definida. Os sensores de proximidades mais utilizados nos robôs móveis autônomos inteligentes (Rezende, 1992) são sensores de infravermelho. Em algumas aplicações é suficiente determinar a presença (ou ausência) de um objeto em uma certa posição no lugar de medir a distância ao objeto (Bradshaw, 1990). Embora este tipo de sensor não devolva a distância entre ele e um objeto qualquer, eles podem identificar se algo está presente ou não, dentro do seu cone de detecção (Jones, 1993). Emissor de luz de diodo Lente Transmissora Lente Receptora Fotodiodo Superfície Detectada Figura 2.17: Exemplo de um sensor de proximidade. 57 2.9.4 Sensores de Visão O uso destes sensores tem despertado o interesse de muitos pesquisadores e é atualmente uma das áreas de pesquisa mais ativas (Han, 1994) (Ohya, 1998). O avanço das pesquisas em sistemas de visão tornou possível o surgimento de robôs que interagem com o ambiente, recebendo informações de diversas formas para processá-las e, em função delas, executar determinadas tarefas. A recepção e obtenção de informações do meio é feita pelos “olhos” do robô, ou seja, por uma câmara de televisão e/ou algum outro sensor juntamente com o equipamento de digitalização e “hardware/software” necessários para o interfaceamento entre os mesmos. Pode-se concluir que uma exigência fundamental para a solução do problema de navegação (Bradshaw, 1990) é a existência de um sistema sensorial, permitindo a aquisição dos dados necessários para uma descrição do ambiente do robô móvel em detalhes suficientes para o controle do seu movimento. 2.10 Motores Um motor elétrico converte a energia elétrica em mecânica. Existem uma ampla variedade de motores para uso em robótica: motores eletromagnéticos a corrente contínua (DC), motores eletromagnéticos a corrente alternada (AC) e as variações de cada um (Jones, 1993). Em adição aos motores electromagnéticos DC e AC, existe um outro tipo de motor que não é eletromagnético. Este é o motor ultra-sônico piezoeléctrico, que tem como uma das suas caraterísticas girar a baixa velocidade com um maior torque. Os motores eletrostáticos são micromáquinas que trabalham com o principio de atração de cargas. Em pequenas escalas forças eletrostáticas podem ser relativamente fortes. SMA (“Shape Memory Alloy”), ligas com memória de forma, também são usadas como atuadores para robótica. 58 Os motores DC são usados na robótica móvel porque a fonte de energia neles é tipicamente uma bateria DC. Dentro deste tipo de motores se encontram os motores de passo e os “servo motores”. Este termo é usado numa variedade de contextos. O contexto empregado neste trabalho é o de um servo motor DC (motor de precisão, no qual se pode controlar a sua velocidade e/ou posição, usualmente caraterizado por possuir três conexões). O motor de passo é um dispositivo usado para converter pulsos elétricos num movimento mecânico rotacional discreto, (Thomson Airpax, 1995). Em linhas gerais o motor de passo é um atuador do tipo digital. Na operação mais típica, a cada pulso recebido da unidade de controle, as correntes em suas fases são chaveadas e o rotor do motor avança ou recua um passo. Eles exibem três estágios: parados, ativados com o rotor travado (bobinas energizadas) ou girando em etapas. No que se refere ao seu funcionamento, os motores de passo podem ser comparados aos síncronos, ou seja, um campo rotativo (neste caso gerado pela eletrônica de controle) faz girar um rotor magnético (figura 2.18). Tais motores foram subdivididos de acordo com a forma em que é gerado o campo rotativo (enrolamento bipolar ou unipolar no estator) e do material empregado na confecção do rotor. Os mais usados são os unipolares, geralmente de quatro bobinas. Neles, cada fase consiste de um enrolamento com derivação central, ou mesmos de dois enrolamentos separados, de forma que o campo magnético possa ser invertido sem a necessidade de se inverter o sentido da corrente. Os motores de passo possuem algumas caraterísticas próprias que os diferencia dos motores comuns (Braga, 1999): • Os motores de passo funcionam como dispositivos posicionadores, pois podem parar numa posição perfeitamente controlada. • Os motores de passo também funcionam como motores de velocidade perfeitamente controlada, sendo energizados numa determinada ordem. 59 • Eles podem ter o seu eixo posicionado em um ângulo proporcional ao número de impulsos na entrada. • Os erros que ocorrem no posicionamento de seu eixo são muito pequenos e não são cumulativos. Um motor de passo pode ser posicionado com a precisão de 1 milésimo de radiano. • O controle sem realimentação (“open loop”) é possível devido ao uso de sinais digitais para esta finalidade. • As respostas à partida, à parada e à reversão são muito rápidas. Figura 2.18: Motor de passo magnético permanente. O ângulo do passo do motor é variável (desde 0.72° até 90°), alguns ângulos de passo padronizados são: 3.6° (100 ppv), 7.5° (48 ppv), 15° (24 ppv), 18° (20 ppv). O torque produzido por um motor de passo específico depende de vários fatores: duração do passo, corrente aplicada ao enrolamento e o projeto do “drive”. 60 A curva caraterística Torque-Velocidade do motor de passo é a chave para a seleção correta do tipo de motor e o melhor método de controle. Na figura 2.19 se tem a curva caraterística do motor de passo Thomson Airpax 57L048B L/R Stepper. Figura 2.19: Curva caraterística Torque/Velocidade do motor de passo 57L048B L/R. Os motores de passo são formados por quatro bobinas que devem ser excitadas com uma certa ordem, de acordo com o posicionamento desejado. O modo de acionamento normal é uma seqüência de quatro passos mostrada na figura 2.20. Figura 2.20: Esquema da seqüência de ligação de 4 passos. 61 Na figura 2.21 se mostra os modos de ligação unipolar e bipolar e o esquema da seqüência de ligação dos motores de passo unipolares e bipolares. Figura 2.21: Esquema da seqüência de ligação de motores de passo unipolares e bipolares. No robô RAM-I foi utilizado o motor de passo do fabricante TAMAGAWA SEIKI CO LTD. De 12V, 0.16A/φ (Amperios por Fase), 75Ω , 100 S/R (ppv, passos por volta) da série TS3012N5005. Estes motores são correntemente encontrados em periféricos de computadores, se caraterizam por ter uma ampla versatilidade, e a possibilidade de aplicação de controle em malha aberta. A velocidade e posição são diretamente controladas pela freqüência e número de pulsos enviados. Tais características, aliadas à disponibilidade de alguns destes motores, determinou a utilização dos mesmos no robô. No Anexo A.6 se tem os dados técnicos de uma série de motores de passo semelhante à utilizada no RAM-I. 62 2.11 Baterias Para um robô móvel ser dito autônomo (em energia), é necessário que possua uma fonte de alimentação (potência) que seja capaz de armazenar energia suficiente para permitir ao robô executar um trabalho útil, e que seja embarcada no próprio robô. As baterias são uma solução comum ao problemas de armazenamento de energia em robôs móveis. Uma bateria converte energia química em energia elétrica. São apresentados, a seguir algumas caraterísticas importantes (Jones, 1993): • Recarregáveis: Uma unidade que gera energia elétrica através de uma reação química e que não pode ser recarregada é uma célula primaria. Uma que pode ser recarregada é dita de secundária ou bateria de armazenamento. • Densidade de Energia (Wh/kg): É a máxima quantidade de energia por unidade de massa. • Capacidade (Amp-hora ou mA-h): É a energia armazenada na célula. Ela é o produto da Densidade de Energia vezes a massa da bateria. • Voltagem (V): Esta é uma característica particular da reação química na bateria, dependendo do estado de carga da célula. • Resistência Interna (Ω ): Quando se faz um corto circuito, a corrente fornecida por uma bateria é limitada pela resistência interna da mesma. • Taxa de descarga (mA): É a taxa na que uma bateria é descarregada. A taxa máxima de descarga é limitada pela resistência interna da bateria. • Vida útil: As baterias perdem carga mesmo quando não estiverem conectadas a uma carga externa. A vida útil é uma medida de quão rapidamente esto ocorre. • Dependência da temperatura: Muitas das propriedades, em particular a capacidade disponível e a vida útil, são afetadas pela temperatura. 63 Uma bateria ideal tem que ter uma alta Densidade de Energia, manter uma voltagem constante e possuir uma baixa resistência interna. A informação mostrada na Tabela 2.16 pode servir como uma guia para a escolha segundo uma determinada aplicação. Tabela 2.16: Comparação de características para a seleção dos tipos e tamanhos de baterias. Bateria Recarrega Densidade Energia (Whr/Kgr) Voltagem da célula (V) Alkaline Não 130 1.5 Lead-Acid Sim 40 2.0 Lithium Não 300 3.0 Mercury Não 120 1.35 NiCd Sim 38 1.2 NiMH Sim 57 1.3 Silver Não 130 1.6 Zinc-Air Não 310 1.4 Carbon-Zinc Não 75 1.5 Capacidade (mAh) AA-1400 C-4500 D-10000 C-1.2 a 120Ah A-1800 C-5000 D-14000 Coin-190 AA-1400 C-1800 D-4000 AA-1100 4/3A-2300 Coin-180 D-600 Resistência Interna (Ω ) Comentários 0.1 Bateria primaria. 0.006 Variedade de tamanhos 0.3 Densidade de energia boa, alto custo. 10 0.009 Resistência interna baixa. Densidade de Energia boa. 10 Alta densidade de energia, tamanhos limitados Barato mas obsoleto Para o robô RAM-I, foi escolhido um “pack” de baterias de NiCd, das seguintes características: 38Whr/kg, 1.2V p/cela, 500 mAh, de baixa resistência interna, bateria disponível no mercado, assim como um recarregador especial adaptado aos 12V do “pack” de baterias. 64 Capítulo 3 Arquitetura Subsumption 3.1 Introdução Nos anos oitenta surgiu um grupo de pesquisadores, cujo nome de maior destaque é Rodney Brooks, pesquisador do Artificial Intelligence Lab. do Massachussets Institute of Technology (MIT), que acreditaram que o nível de inteligência humana é muito complexa e pouco entendida para ser decomposta corretamente (Brooks, 1991). O grupo propôs uma arquitetura totalmente diferente para agentes inteligentes autônomos (Maes, 1990), dando uma outra alternativa ao problema de planejamento e modelagem do sistema de controle de robôs autônomos móveis. Claro está que esta arquitetura poderia ser usada também para outras aplicações. Neste capítulo será feita uma apresentação do princípio de percepção-ação e da Arquitetura Subsumption, utilizados na implementação de robôs autônomos móveis. Serão também apresentados alguns exemplos de implementação desta arquitetura, e a descrição do modelo aplicado ao robô RAM-I. 3.2 Percepção-Ação O princípio de percepção-ação implementado utilizando a Arquitetura Subsumption rejeita a representação do conhecimento como base fundamental de Sistemas Artificiais inteligentes. A idéia se baseia no princípio de que quando a inteligência é abordada de uma maneira incremental, isto é, por camadas adicionais, em que cada uma delas é produtora de uma atividade ou 65 comportamento específico completo (no sentido de que a atividade produzida por uma camada é independente das produzidas por outras camadas), e com estrita ênfase na interface dos sistema com seu ambiente real através da percepção (do ambiente pelo sistema) e da ação (do sistema em relação ao ambiente), a ênfase da representação do conhecimento desaparece. Em outras palavras, o sistema percebe modificações no ambiente e reage à esta percepção, (Brooks, 1991). 3.3 Divisão por Níveis Funcionais Na abordagem tradicional, para se construir sistemas de controle para robôs autônomos móveis, é feita a divisão do controle em unidades funcionais (figura 3.1). Cada unidade funcional está intimamente ligada aos outros níveis vizinhos, de tal forma que o sistema tem que ser projetado de uma forma completa, pois um nível sozinho não é capaz de realizar nenhuma controle dos motores execuçao da tarefa planejamento modelamento sensores percepção atividade. Para se adicionar uma nova atividade, é preciso alterar todo o projeto. atuadores Figura 3.1: Divisão tradicional do sistema de controle em módulos funcionais. 3.4 Divisão por Níveis de Atividades A Arquitetura Subsumption difere notavelmente da maneira tradicional de dividir o controle em módulos funcionais: percepção, planejamento, modelamento, etc. Ao invés disso organiza o agente móvel como um conjunto de camadas que representam uma tarefa ou comportamento completo (figura 3.2). 66 planejar mudanças no mundo identificar objetos monitorar mudanças sensores construir mapas atuadores explorar um local vagar evitar obstáculos Figura 3.2: Exemplo de divisão do sistema em atividades. A divisão em camadas de atividades permite acrescentar um comportamento quando este for necessário, construindo a nova camada e interfaceando-a com o sistema. A idéia é construir um sistema autônomo completo, muito simples e testá-lo no mundo real (ver figura 3.3). camada 3 camada 2 camada 1 sensores camada 0 atuadores Figura 3.3: Arquitetura Subsumption. O termo Arquitetura Subsumption tem origem no fato de que o nível mais elevado assume o papel das camadas inferiores, quando uma determinada configuração dos sensores indica uma situação propicia para sua atuação. O nível acima suprime o fluxo de dados da camada inferior. O sistema pode ser separado em qualquer nível e as camadas inferiores continuarão formando um sistema operacional completo (Rezende, 1992) Com relação à utilização da metodologia de decompor o sistema em camadas de comportamentos, pode-se inferir o seguinte: 67 1. Atividades simples dos níveis inferiores podem provocar reações rápidas, devido a que as camadas não utilizam representações complexas do mundo. O sistema está baseado no principio de percepção-ação. A idéia é sentir o ambiente freqüentemente e assim ter uma idéia atualizada do que acontece. 2. Dado que se tem múltiplas atividades paralelas, existe uma menor possibilidade de que qualquer mudança de estado do ambiente provoque um colapso total do sistema. No máximo, incapacitaria algumas camadas do sistema. 3. Cada camada de atividade pode ser imaginada como tendo seu próprio propósito implícito. A idéia principal é usar o mundo como seu próprio modelo e, continuamente, adaptar cada objetivo às condições atuais do ambiente real. 4. A função do robô está implícita em suas camadas. 3.5 Exemplos da Implementação da Arquitetura Subsumption Três exemplos de implementação da Arquitetura Subsumption serão descritos. A primeira foi usada por Rodney Brooks em um robô móvel do Labotary AI no MIT, conhecido como ALLEN (Brooks, 1986). A Segunda foi realizada por Sridhar Mehadevan e Jonathan Connel em um robô chamado OBELIX do IBM T. J Watson Reserach Center (Rezende, 1992). A terceira foi feita por Marcos Rezende F. no robô MINEIRIN do Centro de Ciências Exatas e Tecnologia da Universidade Federal de Uberlandia (Rezende, 1992). A pesar delas serem implementações da mesma Arquitetura existem notáveis diferenças. 3.5.1 Implementação da Arquitetura Subsumption no Robô ALLEN. Rodney A. Brooks desenvolveu vários robôs móveis utilizando a metodologia da decomposição em camadas de atividades, obtendo comportamentos e composição incremental através da depuração do mundo real. 68 Cada camada, na Arquitetura Subsumption, é composta de uma rede de topologia fixa de máquinas de estado finito simples. Cada máquina de estado finito tem uma quantidade de estados, um ou dois registros internos e acesso às máquinas computacionais simples que podem fazer cálculos, como por exemplo soma de vetores. Máquinas de estado finito são circuitos lógicos seqüenciais nos quais as saídas não dependem apenas das entradas presentes, mas também até certo ponto, da história das entradas. Cada estágio através do qual uma máquina de estado finito avança é chamado um estado. As máquinas de estado finito são assíncronas, enviando e recebendo mensagens de tamanho fixo por meio de fios (mensagens de 1 bit para robôs pequenos e de 24 bits para os maiores). Estes fios que transportam as mensagens poderão ser virtuais (simulados por “software”) ou físicos (Rezende, 1992). Não há um controle central. As máquinas de estado finito são ativadas pelos dados das mensagens que recebem dos sensores. A mudança de um estado, na máquina de estado finito, ocorre quando chega uma mensagem ou quando o tempo determinado para este estado termina. As máquinas de estado finito têm acesso aos conteúdos das mensagens e podem dar respostas. As camadas são combinadas através de mecanismos chamados supressão e inibição, conforme ilustra a figura 3.4 Tanto na supressão como na inibição, quando uma nova camada é adicionada, ocorre uma ligação entre seus fios e os das camadas existentes. Uma constante de tempo pré-definida é associada a cada ligação. No caso da supressão, a ligação ocorre na entrada da máquina de estado finito. Se uma mensagem chega no fio supressor, ela é direcionada para a porta de entrada da maquina de estado finito, como se estivesse chegando pelo fio que conduz o sinal de entrada. Qualquer nova mensagem sobre o fio existente é suprimida, rejeitada, pelo período de tempo especificado pela constante de tempo. Um módulo para implementar camadas de comportamento tem entradas e saídas. Sinais de entrada podem ser suprimidos e substituídos pelo sinal supressor. Sinais de saída podem ser inibidos. 69 inibidor 1 3 entradas saídas s 10 supressor reset Figura 3.4: Modulo para implementar camadas de comportamento com entradas e saídas. O robô ALLEN tem três camadas. Possui um conjunto de doze sonares ultra-sônicos, os quais dão uma medida de profundidade a cada segundo. Na figura 3.5 é ilustrado uma leitura dos sensores do ALLEN. Pode-se observar que algumas radiações de ultra-som não retornam ao emissor, indicando a não existência de obstáculos na proximidade do robô. Figura 3.5: Robô ALLEN recebendo a leitura dos doze sensores de ultra-som. A seguir descreve-se o funcionamento das três camadas utilizadas no robô ALLEN: A camada de nível mais baixo é a CAMADA ZERO. Esta implementa um comportamento que faz o robô evitar a colisão com obstáculos. Ele consegue evitar obstáculos tanto parados como em movimento. 70 A máquina de estado finito chamada de SONAR converte, a cada segundo, a leitura dos sensores de ultra-som em coordenas polares, e cria um mapa instantâneo. Esta leitura é transmitida às máquinas de estado finito COLISÃO e REPULSÃO. COLISÃO verifica se tem algo fixo adiante. Se houver , envia uma mensagem de parada à máquina de estado finito PARA FRENTE. Em simultâneo REPULSÃO calcula uma força repulsiva sobre o robô que é enviada para a máquina de estado finito FUGIR, quem indica a direção e o sentido para a máquina de estado finito VIRAR, a qual faz o robô virar na direção oposta ao do objeto repulsivo. Finalmente a máquina PARA FRENTE comanda de novo o robô até receber uma mensagem de parada. Esta camada permite ao robô ALLEN ficar no meio de uma sala vazia, afastar-se logo se alguém vier na sua direção, e parar se for em direção a um obstáculo muito próximo, cumprindo assim o seu objetivo de evitar bater ou ser atingidos por objetos. Esta camada está representada na figura 3.6. ROBÔ ROBÔ ROBÔ REPULSÃO FUGIR VIRAR MENSAGEM FORÇA SONAR P/ FRENTE COLISÃO PARAR ENCODER Figura 3.6: Camada ZERO do robô móvel ALLEN. A próxima camada, CAMADA UM, faz o robô vagar quando não está evitando obstáculos. A máquina de estado finito VAGAR gera uma direção randômica para o robô a cada dez minutos. A máquina EVITAR recebe esta direção como uma força atrativa que é adicionada à força repulsiva fornecida pela máquina de estado finito REPULSÃO. O resultado desta soma serve para suprimir o resultado do nível mais baixo, forçando o robô a ir em uma direção próxima à fornecida pela máquina VAGAR, porem ao mesmo tempo evitando obstáculos (figura 3.7). 71 VAGAR MENSAGEM EVITAR MENSAGEM ROBÔ ROBÔ ROBÔ REPULSÃO FUGIR S 20 VIRAR MENSAGEM FORÇA SONAR P/ FRENTE COLISÃO PARAR ENCODER Figura 3.7: Camada ZERO e camada UM do robô móvel ALLEN. A figura 3.8 é uma representação do mundo em duas dimensões usada para simular o comportamento do robô quando está sendo controlado pelas camadas ZERO e UM. Figura 3.8: Trajetória do robô quando controlado pelas camadas ZERO (evitar obstáculos) e UM (vaguear). A terceira camada, CAMADA DOIS, incrementa a capacidade de fazer o robô explorar. A máquina de estado finito QUANDO-OLHAR, percebe quando o robô não está ocupado movimentando-se e ativa a máquina DESCOBRIR, descobridora de espaço livre, e inibe o comportamento VAGUEAR. Quando um caminho é observado, é enviado à máquina PLANEJAMENTO que planeja a trajetória enviando uma direção para a máquina EVITAR. Desta forma o nível mais baixo continua agindo. Isto pode levar o robô a uma direção diferente 72 da planejada. Para que o robô persiga o objetivo planejado o caminho real do robô é monitorado pela máquina INTEIRAR, que envia estimativas atualizadas à máquina PLANEJAMENTO. Esta máquina age de maneira diferente, forçando o robô para a direção desejada e assim compensando os desvios causados pelos obstáculos, realizados pela camada inferior. ROBÔ ocupado EXPLORAR DESCOBRIR INTEIRAR condidato QUANDO OLHAR VAGUEAR EVITAR percurso VAGAR ROBÔ inicia olhar 1 75 S 15 REPULSÃO inicia OLHAR PLANEJA MENTO encoder EVITAR ROBÔ S 20 FUGIR VIRAR ESTADO ROBÔ ocupado FORÇA SONAR P/ FRENTE COLISÃO PARAR ENCODER Figura 3.9: Conjunto das três camadas utilizadas no robô ALLEN. Figura 3.10: Trajetórias do robô ALLEN controlado pelas três camadas ZERO (evitar obstáculos), UM (vaguear) e DOIS (explorar). 73 3.5.2 Implementação da Arquitetura Subsumption no Robô OBELIX. Manhadevan e Connell implementaram esta Arquitetura no robô OBELIX. Como é mostrado na figura 3.11, uma Arquitetura do estilo Subsumption opera através da divisão do sistema de controle central em um número de pequenos processos paralelos e concorrentes. Cada um desses comportamentos usa um subconjunto de dados avaliados pelos sensores para controlar os parâmetros de saída. Uma rede de fios arbitrária ou um bloco de controle de prioridade combina os resultados individuais dando o comando aos atuadores. VIRAR UMA ESQUINA SEGUIR UMA PESSOA RESOLUÇÃO DE CONFLITOS PERCORRER CORREDOR EVITAR COLISÃO SENSORES ATUADORES Figura 3.11: Arquitetura Subsumption composta de caminhos paralelos e uma rede de resolução de conflitos. Nesta implementação cada camada de controle consiste de um módulo, que gera um comportamento específico no robô. Um módulo tem dois componentes internos: O bloco PLANO DE AÇÃO diz o que fazer com uma informação sensorial atualizada, e o bloco PREDICADO DE APLICABILIDADE diz quando fazer, cancelando o plano quando seus avisos são questionáveis ou sem sentido (Rezende, 1992). Para se construir um sistema de controle usando a Arquitetura Subsumption, as tarefas globais são divididas primeiramente em um numero de subtarefas. Depois, para cada subtarefa, dispositivos convenientes são projetados com planos de geração de ação e condições de aplicabilidade. Então as ordens de prioridades dos comportamentos são definidas permitindo ao sistema resolver algum conflito que possa existir entre as camadas. 74 O robô OBELIX conta com oito sensores, voltados sempre na direção do movimento. O número de movimentos foi limitado a cinco, o robô pode ir para frente, virar para direita ou esquerda com duas possibilidades de ângulo (22° e 45°). Ele nunca para ou se movimenta para traz. Os principais sensores são de ultra-som, quatro na frente e dois nas laterais, e um infravermelho na frente. Também possui um sensor para detectar o nível de corrente dos seus motores, porque a sua tarefa de nível mais elevado, empurrar caixas, exige o contato com obstáculos que podem imobilizá-lo. A principal tarefa do OBELIX é empurrar caixas, o que pode ser dividido em três subtarefas: 1. Encontrar uma caixa. 2. Empurrar uma caixa através de uma sala 3. Livrar-se de situações embaraçosas, como por exemplo empurrar uma caixa para um canto ou tentar empurrar um objeto fixo como uma parede. não forçar s empurrar s encontrar atuadores sensores Figura 3.12: Camadas no sistema de controle do robô OBELIX. Da figura 3.12 pode se inferir que o comportamento NÃO-FORÇAR é o de prioridade mais elevada. Se o robô está em uma situação embaraçosa é importante tirar o robô desta situação de perigo. O comportamento EMPURRAR tem a próxima prioridade. Se ele esta empurrando uma caixa então ele continuará enquanto puder. 75 Por último, a tarefa ENCONTRAR é a de menor prioridade. Se ele estiver sem perigo e livre de caixa, percorre o espaço procurando uma caixa. Uma forma interessante de obter a ordem de prioridades nos comportamentos é examinar a seqüência em que elas se tornarão aplicáveis. No inicio o robô precisa encontrar uma caixa, menor ordem de prioridade, para depois empurrá-la. Finalmente, se encontrar um obstáculo na frente, ele precisa parar de empurrar para não danificar-se, maior ordem de prioridade. 3.5.3 Implementação da Arquitetura Subsumption no Robô MINEIRIN Rezende implementou esta Arquitetura no robô MINEIRIN. Neste robô são montadas três camadas (figura 3.13): 1. EVITAR obstáculos. 2. VAGAR sem direção fixa. 3. ENCONTRAR objetivo para reenergização. O comportamento EVITAR é o de prioridade mis elevada. Se o robô está para colidir com um obstáculo ele deve evitá-lo. Quando o robô não está evitando nenhum obstáculo ele fica parado, se alguém tenta se aproximar dele, ele se afasta. Por períodos de tempo programados de 30 em 30 segundos o robô verifica se não está ativa a camada EVITAR obstáculos e, então, gera um movimento aleatório para o robô ficar VAGUEANDO no local. A camada ENCONTRAR, quando percebe que as baterias do robô estão descarregadas, ativa um procedimento que tenta encontrar o local de recarga. Este comportamento gera direções randômicas, até que o sensor de infravermelho indique a direção correta que o robô deve seguir. Sua potencialidade se verifica no caso de encontrar um obstáculo. Ele tentará evita-lo e continuar o seu percurso em direção ao alvo. 76 evitar s encontrar s vagar atuadores sensores Figura 3.13: Camadas no sistema de controle do robô MINEIRIN. 3.5.4 Descrição das Camadas Implementadas no Robô RAM-I O robô RAM-I, construído no Departamento de Mecânica Computacional, e que será descrito nos seguintes capítulos, teve a sua estratégia de controle implementada usando Arquitetura Subsumption a fim de testar a sua capacidade. Ele apresenta um comportamento simples com duas tarefas específicas. A de VAGAR num determinado ambiente tendo para este fim que EVITAR os possíveis obstáculos que impedem o seu livre deslocamento. Neste robô são montadas duas camadas (figura 3.14): 1. EVITAR obstáculos. 2. VAGAR sem direção fixa. O comportamento EVITAR é o de prioridade mis elevada. Se o robô está para colidir com um obstáculo ele deve evitá-lo. Quando o robô não está evitando nenhum obstáculo está ativa a camada VAGAR, a qual gera uma trajetória retilínea do robô no local. Quando ligado, o robô é comandado pela camada de prioridade mais baixa, VAGAR, e começa a andar em linha reta. Neste estado, ele não é afetado por eventuais perturbações que alterem a sua direção, como por exemplo escorregamento das rodas. O robô permanece neste estado até que a camada de nível mas elevado, EVITAR, é ativada pela presença de um obstáculo. 77 Quando a camada EVITAR é ativada, o robô identifica se o obstáculo é um objeto ou uma depressão, e a sua localização (direita ou esquerda). Em qualquer um destes casos o robô efetua uma manobra para evitar o obstáculo, retrocedendo e girando para o lado oposto ao do obstáculo encontrado. evitar s vagar sensoes atuadores Figura 3.14: Camadas no sistema de controle do robô RAM-I inicio Inicialização das variáveis Inicialização dos motores Sem chão à esquerda Recua e vira para direita Sem chão à direita Recua e vira para esquerda Batida à esquerda Recua para direita Batida à direita Recua para esquerda Figura 3.15: Diagrama de fluxo do programa implementado no robô RAM-I 78 Capítulo 4 Modelagem de Robôs Móveis 4.1 Introdução Este capítulo será dividido em duas partes: A primeira parte abordará a modelagem matemática dos robôs móveis com rodas, incluindo a descrição dos tipos de rodas, restrições de movimento e os modelos de estado derivados do modelamento das rodas. Inicialmente trata-se de generalizar o modelamento para robôs móveis com rodas mostrando vários exemplos, e depois é feita uma aplicação particular para o caso do robô móvel RAM-I. Na Segunda parte é feita uma introdução das definições chaves e teoremas de não-holonomicidade. Esta é feita porque os robôs móveis sobre rodas são sistemas mecânicos não-holonômicos. Atingiu-se atualmente um progresso significativo no planejamento do movimento de robôs móveis com rodas (carros). Estes veículos têm muitas aplicações potenciais, mas o seu planejamento é dificultoso pois são objeto de restrições de rolamento, as quais limitam as possíveis direções do movimento. Eles não podem mover-se lateralmente, mas podem ir para a frente ou para trás em trajetórias curvas, a fim de girar. Manobras complicadas podem ser requeridas para se mover de uma configuração a uma outra próxima. Veículos dirigidos a leme como navios e aviões são objeto de restrições similares. Tais restrições, que limitam a possível direção do movimento num ponto, mas que podem ser “desfeitas” por manobras locais , são chamadas de não-holonômicas. 79 4.2 Modelo Cinemático de uma Base Móvel 4.2.1 A Postura do Robô Os robôs em estudo são considerados compostos de corpos rígidos, equipados com rodas indeformáveis e se movimentam em um plano horizontal. Na figura 4.1 vemos a posição do robô numa base inercial {0,I1,I2} fixa no plano de movimento e um ponto de referência P, onde um referencial móvel {X1,X2} é fixado. I2 X2 X1 Θ y corpo do robô P I1 x Figura 4.1: Definição da postura do robô móvel. Nesta figura: • x, y são as coordenadas do ponto P de referência na base inercial, isto é, OP = x I 1 + y I 2 • θ é a orientação da base {P, X1, X2} em relação à base inercial {0,I1,I2}. 80 Pode-se então definir um vetor ξ que descreve a postura do robô. x ξ = y θ (4.1) cosθ sen θ 0 R (θ ) = − sen θ cosθ 0 0 1 0 (4.2) e a matriz ortogonal de rotação: Esta matriz transforma (rotaciona) uma coordenada escrita no sistema inercial AI = {x, y,0} , para o sistema móvel solidario à base móvel Am = R (θ ) AI . 4.2.2 Descrição das Rodas O robô implementado se desloca sobre rodas. Por essa razão o comportamento das mesmas têm um papel importante no modelo. A seguir é apresentada a descrição de alguns tipos de rodas e as suas caraterísticas. Considera-se que as rodas, durante o movimento, permanecem no plano vertical e giram em torno do seu eixo horizontal, que pode permanecer fixo ou variar em relação ao chassi do robô. A seguir, descreve-se as duas classes de rodas segundo Campion (1996): as convencionais e as suecas. Considere-se que o contato dessas com o chão, se dá através de um único ponto no plano. Para as rodas convencionais, o contato entre a roda e o chão é suposto para satisfazer o rolamento puro sem escorregamento: isto significa que a velocidade do ponto de contato é igual a zero. Por tanto, as suas componentes, a velocidade paralela e a velocidade ortogonal ao plano da roda, são iguais a zero. 81 Para as rodas suecas, só uma componente da velocidade do ponto de contato da roda com o chão é considerada igual a zero ao longo do movimento. A direção desta componente é arbitraria, mas é fixa com respeito à orientação da roda. Ø Rodas Convencionais. Como já foi dito, par as rodas convencionais não existe deslizamento no ponto de contato entre a roda e o chão satisfazendo a condição de rolamento puro. As rodas convencionais podem ser classificadas em três tipos: 1. Rodas Fixas: O centro da roda, denotado por A, é um ponto fixo no chassi do robô (figura 4.2). A posição de A na base {X1,X2} é descrita através das coordenadas polares PA = l e α . A orientação do plano da roda em relação a PA é representado por um ângulo fixo β, a rotação da roda em relação ao seu eixo horizontal é denotado por ϕ (t), e o raio da roda é r. A posição da roda no plano é então caracterizada pelas constantes α , β, l, r, e pelo ângulo de rotação em torno do seu próprio eixo ϕ (t). Com esta descrição, as componentes de velocidade nos pontos de contato são denotados através das seguintes restrições. • Ao longo do plano da roda [− sin(α + β) cos(α + β) l cos β]R(θ )ξ&+ rϕ& = 0 (4.3) • Ortogonal ao plano da roda [cos(α + β) sin(α + β) lsinβ]R(θ )ξ& = 0 82 (4.4) Figura 4.2: Rodas convencionais fixas e orientadas no centro 2. Rodas Orientadas no Centro: Seu movimento em relação ao sistema de referência é uma rotação em torno de um eixo vertical passando através do seu centro, A construção é a mesma que para as rodas fixas (figura 4.2), porém, o ângulo β(t), não é mas constante. Ele pode ser alterado ao longo do tempo. A posição da roda é caracterizada pelas constantes α , l, r e seu movimento em relação ao sistema de referência móvel por dois ângulos variantes com o tempo ϕ (t), β(t). As equações cinemáticas de restrição ao movimento possuem a mesma forma que para as rodas fixas: • Ao longo do plano da roda [− sin(α + β) cos(α + β) l cos β]R(θ )ξ&+ rϕ& = 0 (4.5) • Ortogonal ao plano da roda [cos(α + β) sin(α + β) lsinβ]R(θ )ξ& = 0 83 (4.6) 3. Rodas Orientadas Fora do Centro: Possuem orientação em relação ao chassi do robô, mas a rotação do plano da roda se dá em torno do eixo vertical que não passa pelo seu centro B. O eixo da roda está conectado ao chassi do robô pela haste rígida AB, a qual pode girar em torno do eixo vertical que passa por A. A distância entre o centro da roda e o eixo vertical que passa por A é expressa por d (figura 4.3). A posição da roda é descrita por quatro constantes α , l, r e d, e seu movimento em relação ao sistema de referência por dois ângulos variantes com o tempo, ϕ (t) e β(t). As equações cinemáticas, para tais rodas, são as seguintes: • Ao longo do plano da roda [− sin(α + β) cos(α + β) l cos β]R(θ )ξ&+ rϕ& = 0 (4.7) • Ortogonal ao plano da roda [cos(α + &= 0 β) sin(α + β) d + lsinβ]R (θ )ξ&+ dβ X2 roda B β d Α chassi do robô α X1 Figura 4.3: Rodas convencionais orientadas fora do centro. 84 (4.8) Ø Rodas Suecas Neste caso somente uma das componentes da velocidade do ponto de contato da roda com o chão é considerada igual a zero, diferentemente das rodas convencionais onde todas as componentes da velocidade do ponto de contato são consideradas iguais a zero, ao longo do movimento. A posição da roda com relação ao sistema de referência móvel é descrito como para as rodas convencionais fixas, por três parâmetros constantes, α, β, l. Só um parâmetro mais é requerido para caracterizar a direção em relação ao plano da roda, segundo a qual a componente da velocidade no ponto de contato é zero, e será o ângulo γ. A equação de restrição cinemática é escrita da seguinte forma. • Ao longo da direção representada por γna figura 4.4 [− sin(α + β+ γ) cos(α + β+ γ) l cos( β+ γ)]R (θ )ξ&+ r cos γ ϕ =0 X2 β γ Α α X1 Figura 4.4: Rodas Suecas. 85 (4.9) Tabela 4.1: Restrições cinemáticas para cada classe de rodas Rodas Fixas Ao longo do plano da roda: [− sin(α + β) cos(α + β) l cos β]R(θ )ξ&+ rϕ& = 0 Ortogonal ao plano da roda: [cos(α + β) sin(α + β) lsinβ]R(θ )ξ& = 0 Rodas Orientadas no centro Ao longo do plano da roda: [− sin(α + β) cos(α + β) l cos β]R(θ )ξ&+ rϕ& = 0 Ortogonal ao plano da roda: [cos(α + β) sin(α + β) lsinβ]R(θ )ξ& = 0 Rodas Orientadas fora do Centro Ao longo do plano da roda: [− sin(α + β) cos(α + β) l cos β]R(θ )ξ&+ rϕ& = 0 Ortogonal ao plano da roda: &= 0 [cos(α + β) sin(α + β) d + lsinβ]R(θ )ξ&+ dβ Rodas Suecas Ao longo da direção representada por γ: [− sin(α + β+ γ) cos(α + β+ γ) l cos( β+ γ)]R(θ )ξ&+ r cos γϕ = 0 4.2.3 (4.3) (4.4) (4.5) (4.6) (4.7) (4.8) (4.9) Mobilidade e Classificação dos Robôs Móveis. Um robô móvel pode ser equipado com N rodas podendo ter N f rodas fixas, N c rodas convencionais orientadas no centro, N fc orientadas fora do centro, e N sw rodas suecas. N = N f + N c + N fc + N sw A configuração do robô no plano cartesiano é completamente descrita pelos seguintes vetores de coordenadas. Postura Coordenada angular x ξ = y . θ βc (t ) e βfc (t ) 86 Coordenadas de rotação ϕ f (t ) ϕ (t ) ϕ = c , ângulos de rotação das rodas em torno do centro. ϕ ( t ) fc ϕ sw (t ) Os sub-índices indicam respectivamente: f - roda fixa; c – orientada no centro; fc – orientada fora do centro; sw - roda sueca. O conjunto {ξ , βc (t ), βfc (t ), ϕ } é chamado de coordenadas de configuração, sendo o número de coordenadas de configuração igual a: N f + 2 N c + 2 N fc + N sw + 3 As equações de restrições cinemáticas (Tabela 4.1), podem ser resumidas em uma forma matricial compacta: J 1 ( βc , βfc ) R(θ )ξ&+ J 2ϕ& = 0 (4.10) C1 ( βc , βfc ) R(θ )ξ& + C2ϕ& = 0 (4.11) Com as seguintes definições: J1 f J ( β) J 1 (βc βfc )= 1 f c ; J 2 = diag (r , r cos γ) . J1 fc ( βfc ) J 1sw J 1 f , J 1c , J fc , J sw são matrizes com dimensões ( N f x 3), ( N c x 3), ( N fc x 3), ( N sw x 3), respectivamente, cuja forma vem diretamente das equações das restrições ao longo do plano da roda (4,3), (4,5), (4,7), (4,9). J2 é uma matriz (N x N) cuja diagonal são os raios das rodas, exceto para o raio das rodas suecas o qual é multiplicado por cos γ. 87 C1 f 0 C1 (βc βfc )= C1 f ( βc ) ; C2 = 0 C ( β ) C 1 fc fc 2 fc C1 f , C1c , C1 fc são matrizes com dimensões ( N f x 3), ( N c x 3), ( N fc x 3), cuja forma vem diretamente das restrições na direção ortogonal ao plano da roda. C2fc é uma matriz diagonal constante com elementos iguais a d, parâmetro das Nfc rodas orientadas fora do centro. Pode-se introduzir a seguinte suposição com respeito à configuração das roda suecas: A1:Para cada roda sueca: γ≠ π π . O valor de γ= corresponderá a direção da componente 2 2 zero da velocidade que é ortogonal ao plano da roda. Tal roda seria sujeita a uma restrição idêntica à restrição de não escorregamento das rodas convencionais, daí o beneficio de implementar rodas suecas. Considerando as (Nf +Nc) primeiras equações de (4.11), pode-se escrevê-las explicitamente como: C1 f R(θ )ξ& = 0 (4.12) C1c ( βc ) R (θ )ξ& = 0 (4.13) * Essas equações implicam que o vetor R(θ)ξ& pertence ao espaço nulo da matriz C1 ( βc ) definida como: C * C1 ( βc ) = 1 f C1c ( βc ) [ * R(θ )ξ&∈ N C1 ( βc ) 88 ] (4.14) (4.15) [ ] Sabe-se, assim, que o posto (rank) da matriz C1 ( βc ) ≤3 e depende do projeto do robô [ ] * * móvel. Se C1 ( βc ) = 3 então R (θ )ξ& = 0 e qualquer movimento no plano é impossível. Uma interpretação geométrica das equações (4.12) e (4.13) é que em cada instante o movimento do robô pode ser visto como uma rotação em torno do centro instantâneo de rotação (CIR) cuja posição relativa ao sistema de referência móvel pode ser variável com o tempo. Em cada instante também o vetor de velocidade de qualquer ponto no chassi do robô é perpendicular à linha reta que une este ponto ao CIR. Esto é ilustrado na figura 4.5 e é equivalente à condição de posto [C1* ( βc )] ≤2 . X1 CIR Figura 4.5: Centro instantâneo de rotação (CIR) O grau de mobilidade para um robô móvel pode então ser definido da seguinte forma δm = dim N [C1* ( βc )] = 3 − posto[C1* ( βc )] O posto[C1c ( βc )] é o número de rodas convencionais orientadas no centro que podem ser guiadas independentemente para dirigir o robô. Este número é chamado de grau de dirigibilidade δ: s δs = posto[C1c ( βc )] 89 Pode-se agrupar os robôs móveis não singulares ou não-degenerados em cinco classes diferentes de interesse prático, de acordo com o grau de mobilidade δm e de dirigibilidade δ. s As classes são separadas de acordo com o par ( δm , δ). s Tabela 4.2: Classes de robôs móveis de acordo com ( δm , δ) s δm 3 2 2 1 1 δs 0 0 1 1 2 Essas classes são formadas devido às seguintes condições sobre δm e δ: s • O grau de mobilidade δm satisfaz a inequação 1 ≤δm ≤3 (4.16) Os limites indicam o número máximo de graus de liberdade que o robô pode ter no plano, as translações nas direciones x, y e a rotação θ , e como mínimo um movimento possível. • O grau de dirigibilidade δs satisfaz a inequação 1 ≤δs ≤ 2 (4.17) O limite superior aplica-se para os robôs sem rodas fixas (Nf = 0), e o inferior corresponde aos robôs sem rodas convencionais orientadas no centro (Nc = 0). • Alem disso satisfaz a inequação 2 ≤δm + δs ≤3 90 (4.18) Não existem classes onde δm + δ= 1, pois corresponderiam a uma rotação em torno do s CIR (Centro Instantâneo de Rotação) fixo. Também não se admitem classes onde δm >2, e δ=2, s para que o robô não apresente uma estrutura singular. Serão apresentados a seguir exemplos de robôs móveis para ilustrar os tipos de estruturas não singulares. Será centrada a atenção em robôs móveis com três rodas (Campion, 1996). • Tipo (3,0): Robô omnidirecional com rodas suecas, O robô considerado tem três rodas localizadas nos vértices do chassi, o qual tem a forma de um triângulo equilátero. RODAS α sueca 1 sueca 2 sueca 3 π/3 π 5π/3 β 0 0 0 γ 0 0 0 L L L L Suas restrições tomam a forma (4.10) onde: − J1 = [ J 1sw ]= 3 2 0 3 2 1 L 2 − 1 L , J 2 = diag (r ) 1 L 2 L P X2 X1 Figura 4.6: Robô Omnidirecional tipo (3,0), três rodas suecas 91 • Tipo (3,0): Robô omnidirecional com rodas orientadas fora do centro, O robô considerado tem três rodas convencionais orientadas fora do centro, como mostra a figura 4.7. As restrições tomam a forma (4.10) e (4.11) onde: − sinβfc1 J 1 = J 1 fc (βfc ) = sinβfc 2 cos β fc 3 [ ] cos βfc1 C1 = C1 fc (βfc ) = − cos βfc 2 sinβ fc 3 [ ] RODAS 1fc 2fc 3fc cos βfc1 − cos βfc 2 sinβfc 3 sinβfc1 − sinβfc 2 − cos βfc 3 α 0 π 3π/2 L cos βfc1 L cos βfc 2 , J 2 = diag (r ) L cos βfc 3 d + Lsinβfc1 d + Lsinβfc 2 , C 2 = C 2 fc = diag ( d ) d + Lsinβfc 3 [ ] β - L L L L L P X2 X1 Figura 4.7: Robô omnidirecional, tipo (3,0), com três rodas orientadas fora do centro. • Tipo (2,0): Robô com duas rodas convencionais fixas no mesmo eixo e uma roda convencional orientada fora do centro, como mostra a figura 4.8. As restrições tomam a forma (4.10) e (4.11) onde: 92 0 J 1 f J1 = = 0 J 1 fc cos β fc 3 1 C1 f C1 = C = − 1 1 fc sinβ fc 3 RODAS 1f 2f 3fc L , J 2 = diag (r ) L cos βfc 3 1 L −1 sinβfc 3 0 0 0 , C2 = 0 d d + Lsinβfc 3 0 0 − cos βfc 3 α 0 π 3π/2 β 0 0 - L L L L L P X2 X1 Figura 4.8: Robô tipo (2,0). • Tipo (2,1): Robô com uma roda orientada no centro e duas rodas orientadas fora do centro, como mostra a figura 4.9. As restrições tomam a forma (4.10) e (4.11) onde: sinβc1 cos βc1 l cos βc1 J1c (βc1 ) π π J1 = = sinβfc 2 + − cosβfc 2 + l cos βfc 2 , J 2 = diag (r ) 4 4 J 1 fc (βfc 2 , βfc 3 ) π π − sinβ − sinβ − l cos βfc 3 fc 3 fc 3 4 4 93 cos βc1 sinβc1 lsinβc1 C1c (βc1 ) π π = cosβfc 2 + − sinβfc 2 + d + lsinβfc 2 , C1 = 4 4 C1 fc (βfc 2 , βfc 3 ) π π − cos βfc 3 − sinβfc 3 − d + lsinβfc 3 4 4 0 C2 = diag ( d ) RODAS α β L 1c 2fc 3fc 0 5π/4 7π/4 - 0 2L 2L L X2 P X1 Figura 4.9: Robô tipo (2,1). • Tipo (1,1): Robô com duas rodas fixas no mesmo eixo e uma roda orientada no centro, por exemplo triciclos para crianças, como mostra a figura 4.10. As restrições tomam a forma (4.10) e (4.11) onde: 94 0 J 1 f J1 = = 0 J 1c cos β c3 L −1 sinβc 3 1 C1 f C1 = = − 1 C 1c sinβ c3 RODAS 1f 2f 3c L , J 2 = diag (r ) L cos βc 3 1 0 0 − cos βc 3 α 0 π 3π/2 0 , C2 = 0 d + Lsinβc 3 0 β 0 0 - L L L L L X2 P Figura 4.10: Robô tipo (1,1). • Tipo (1,2): Robô com duas rodas orientadas no centro e uma roda orientada fora do centro, como mostra a figura 4.11. As restrições tomam a forma (4.10) e (4.11) onde: − sinβc1 J 1c (βc1 , βc 2 ) J1 = J (β ) = sinβc 2 1 fc fc 3 cos β fc 3 cos βc1 C1c (βc1 , βc 2 ) C1 = C (β ) = − cos βc 2 1 fc fc 3 sinβ fc 3 cos βc1 − cos βc 2 sinβfc 3 sinβc1 − sinβc 2 − cos βfc 3 95 L cos βc1 L cos βc 2 , J 2 = diag (r ) L cos βfc 3 Lsinβc1 0 0 Lsinβc 2 , C2 = C = 0 2 fc Lsinβfc 3 d RODAS 1fc 2fc 3fc α 0 π 3π/2 β - L L L L L X2 P X1 X1 Figura 4.11: Robô tipo (1,2). 4.2.4 Modelo Cinemático de Postura São modelos matemáticos de estado que dão uma descrição geral dos robôs móveis, permitindo que se discuta as propriedades de manobra do robô. Possibilitam uma análise do robô dentro do contexto de sistemas não-holonômicos. Permite inferir sobre conceitos de Mobilidade, Dirigibilidade e Manobrabilidade do robô móvel [ ] * Como é descrito pela equação (4.15), R(θ )ξ&∈ N C1 ( βc ) , conclui-se que para qualquer instante de tempo t, existe um vetor variante no tempo η (t ) , entrada de controle, tal que: ξ& = R T (θ ) ∑ ( βc )η 96 (4.19) A dimensão do vetor η (t ) é o grau de mobilidade δm do robô. Quando o robô não tem rodas orientáveis ao centro ( δs = 0 ou N c = 0 ) a matriz Σ é constante e: ξ& = R T (θ ) ∑ η (4.20) De outra forma o modelo pode ser descrito pela equação 3.19 com: & =ζ β c (4.21) As expressões acima podem ser consideradas como a representação no espaço de estados do sistema (chamado modelo cinemático de postura), onde a coordenada de postura ξ e (possivelmente) a coordenada angular βc são variáveis de estado, enquanto η e ζ são consideradas como as entradas de controle. Esta interpretação deve entretanto ser tomada com cuidado. Em um sistema físico as verdadeiras entradas de controle são os torques dos motores, fornecidos pelos motores embarcados: O modelo cinemático do espaço de estados é de fato só um subsistema do modelo dinâmico geral O modelo cinemático de postura escrito de uma forma compacta fica: z& = B ( z )u Se Nc = 0 z = ξ; B( z ) = R T (θ ) ∑ u =η Se Nc ≠ 0 97 ξ z= βc R T (θ ) ∑ B( z ) = 0 η u= ς 0 1 Para cada classe de robô móvel entre as definidas na Tabela 4.3, existe um modelo cinemático de postura diferente. Os robôs da mesma classe podem ser representados pelo mesmo modelo, variando a posição do ponto P e do referencial (X1,X2). Para cada robô móvel com rodas pertencente à mesma classe, o modelo cinemático de postura é genérico. Para um robô móvel com rodas é sempre possível selecionar o ponto de referencia P e a base (X1,X2) solidário ao chassi do robô de tal modo que o modelo cinemático de postura tome exatamente a forma correspondente ao tipo de robô dado na Tabela 4.3. • Para o tipo de robô (3,0) o ponto de referência P e a base (X1,X2) podem ser escolhidos arbitrariamente. • Para o tipo de robô (2,0) o ponto de referência P é escolhido como um ponto do eixo das rodas fixas, com X1 alinhado ao longo deste eixo, ver exemplo da figura 4.8. • Para o tipo de robô (2,1), selecionamos uma das rodas centradas e P é escolhido como o centro de esta roda, com (X1,X2) escolhido arbitrariamente, ver exemplo na figura 4.9. • Para o tipo de robô (1,1) se seleciona uma das rodas centradas, P é a interseção da linha perpendicular que passa pelo centro da roda centrada selecionada, com o eixo comum das rodas fixas. L e a longitude de esta perpendicular. Ver o exemplo da figura 4.10. 98 • Para o tipo de robô (1,2) se seleciona duas rodas orientáveis centradas. P é escolhido como o ponto médio da distancia entre os centros destas duas rodas, com X1 alinhado ao longo da linha que junta estes centros: L é a distancia media entre estes centros. Ver o exemplo da figura 4.11. Tabela 4:3: Modelos cinemáticos de postura genéricos para robôs móveis com rodas. Σ(βc) ou Σ TIPO z (3,0) x y θ (2,0) x y θ (2,1) x y θ βc1 − sinβc1 0 cos βc1 0 0 1 (1,1) x y θ βc 3 0 Lsinβc 3 cos β c3 (1,2) x y θ βc1 βc 2 Modelo cinemático de postura z& = B( z )u x& cosθ y& = sinθ θ& 0 Matriz Identidade x& − sinθ 0 η1 y& = cosθ 0 η 2 θ& 0 1 0 0 1 0 0 1 − 2 Lsinβc1 sinβc 2 Lsin( βc1 + βc 2 ) sin( β − β ) c2 c1 − sinθ 0 η1 cosθ 0 η 2 0 1 η3 x& − sin(θ + βc1 ) y& cos(θ + βc1 ) θ& = 0 β & 0 c1 0 0 1 0 0 η1 0 η 2 0 ζ 1 1 x& − Lsinθsinβc 3 y& L cos θsinβc 3 θ& = cos β c3 β & 0 c3 0 0 η1 ζ 0 1 1 − L( sinβc1sin(θ + βc 2 ) x& + sinβ sin(θ + β )) c2 c1 y& L( sinβc1 cos(θ + βc 2 ) θ& = + sinβ cos(θ + β )) c2 c1 sin ( β − β ) & c2 c1 βc1 β 0 & c2 0 99 0 0 η1 0 0 ζ 1 0 0 ζ 2 1 0 0 1 O grau de mobilidade δ m é o primeiro critério de manobrabilidade, mas não expressa a totalidade dos graus de liberdade que podem ser manipulados pelas entradas de controle η e ζ , mas somente as diretamente manipuladas pelas entradas η . O grau de manobrabilidade de um robô móvel pode ser definido como o número de graus de liberdade que podem ser diretamente manipulados com as entradas de controle η e ζ , instantaneamente, a partir da configuração do robô em um dado momento, sem redirecionar qualquer de suas rodas, e está definido pela seguinte equação: δM = δm + δs com o grau de dirigibilidade δ s adicionando os graus de liberdade manipulados pela entrada ζ . A manobrabilidade de um Robô móvel a rodas depende de δM , mas também do modo como está integrado ( δm , δ). Portanto dois índices são necessários para caraterizar esta s manobrabilidade: δM e δm ou equivalentemente δm e δ. s Dois robôs com o mesmo δ M mas com diferente δm não são equivalentes. 4.2.5 Modelo Cinemático de Configuração O modelo cinemático referente à postura, que se viu no item anterior, não envolve as & e ϕ& . O modelo ciemático de configuração relaciona tais velocidades angulares e de rotação β fc variáveis de estado. Das equações (4.10) e (4.11) temos: ϕ& = − J 2− 1 J 1 ( βc , βfc ) R(θ )ξ& & = − C − 1 C ( β ) R(θ )ξ& β fc 2 fc fc1 fc 100 Combinando estas equações com o modelo cinemático de postura (4.19) e (4.21), as & e ϕ& são: equações de estado para β fc ϕ& = E ( βc , βfc )Σ( βc )η (4.22) & = D( β )Σ( β)η β fc fc c (4.23) Onde: D( βfc ) = − C 2− 1fc C1 fc ( βfc ) E ( βc , βfc ) = − J 2− 1 J 1 ( βc , βfc ) Observe-se também que essas matrizes satisfazem as seguintes equações: J 1 ( βc , βfc ) + J 2 E ( βc , βfc ) = 0 (4.24) C1 fc ( βfc ) + C 2 fc D ( βfc ) = 0 (4.25) O modelo cinemático de configuração do robô se escreve a partir da definição de q como vetor de coordenadas de configuração ξ β q= c βfc ϕ A evolução das coordenadas de configuração pode ser descrita pela seguinte equação compacta, resultado das equações (4.19), (4.21), (4.22) e (4.23), chamado de modelo cinemático de configuração (Campion, 1996): q& = S ( q )u (4.26) Onde R T (θ ) ∑ ( βC ) 0 S (q) = D ( βc ) ∑ ( βc ) E ( βc , βfc ) ∑ ( βc ) 101 0 I η ,e u= 0 ζ 0 (4.27) 4.3 O Modelo do Robô RAM-I Como o principal objetivo deste trabalho é deixar uma plataforma de testes para outras pesquisas, será apresentado nesta seção o modelamento que se aplica ao robô construído, o que poderia ser útil para futuros usuários. 4.3.1 Descrição do Robô RAM-I O RAM-I é um robô móvel de base retangular de 0,18 m por 0,16 m. Possui duas rodas convencionais fixas no chassi com eixos colineares, paralelos ao lado menor, com raio de 0,035 m, e uma roda orientada fora do centro como apoio, sem nenhum controle, a qual não será tomada em conta para o seu modelo cinemático. O controle de direção é realizado através da variação da velocidade de rotação das rodas fixas (motrizes). A figura 4.12 esquematiza o chassi do robô. corpo do robô X2 20mm r=35mm 180mm L=85mm rodas fixas roda orientada fora do centro 160mm Figura 4.12: O chassi do robô RAM-I. 102 X1 4.3.2 Modelo Cinemático de Postura do RAM-I. Considera-se o robô como livre, movendo-se numa superfície lisa, e um ponto fixo P dentro do robô. Pode-se modelar este robô como se fosse um objeto retangular movendo-se no espaço, como mostrado na figura 4.13. Num espaço livre pode-se direcionar o robô a uma posição com uma orientação. Portanto o espaço de configuração tem três dimensões, duas de translação e uma de rotação. Esta configuração foi mostrada no começo por ξ(x,y,θ), onde x e y são as coordenadas do ponto médio P, entre as duas rodas motrizes, na base inercial e θ ∈ [0,2π] é o ângulo entre o eixo x da base inercial e o eixo principal do robô, variante durante o movimento. Consequentemente, o movimento é restringido pela equação (Latombe, 1996): y&cosθ − x&sinθ = 0 Esta restrição não-holonômica diz que o robô somente pode mover-se na direção normal ao eixo das rodas motrizes, satisfazendo as condições de rolamento puro e não escorregamento (Fierro, 1998). Da Tabela 4.3, o modelo cinemático de postura para os robôs moveis pertencentes á classe (2,0) tipo “char” à qual pertence o RAM-I é: x& − sinθ 0 η1 y& = cos θ 0 η 2 θ& 0 1 Esta é a equação cinemática de movimento em termos de velocidade linear e velocidade angular, onde η1 ≤Vmax e η 2 ≤Wmax . Vmax , Wmax são as velocidades maximas linear e ângular do ponto P que se deseja controlar. Uma restrição não-holonômica é uma equação não integrável que envolve os parâmetros de configuração e as suas derivadas (parâmetros de velocidade). Tais restrições não reduzem o espaço de configuração atingível pelo robô, mas reduzem a dimensão do espaço dos possíveis 103 movimentos diferencias (por exemplo o espaço das direções da velocidade) em alguma dada configuração (Latombe, 1996). 2 X I2 γ y P 1 X corpo do robô θ I1 x Figura 4.13: Coordenadas do robô móvel RAM-I. 4.3.3 Modelo Cinemático de Configuração do RAM-I Varias configurações de motorização para robôs do tipo (2,0), “char”, que usam dois motores, são possíveis para este tipo de robô, (Campion, 1996): 1. Dois motores de rotação nas rodas 1 e 2; 2. Um motor para a orientação da roda 3, e um para a rotação da roda 2 (ou 1), providenciando d > L 2 ; 2 3. Dois motores (orientação e rotação) na roda 3 orientada fora do centro, providenciando d < L. onde: as rodas 1 e 2 são rodas convencionais fixas, a roda 3 é uma roda convencional orientada fora do centro, L é a distância média (ponto P) entre as rodas convencionais fixas, d é a distância 104 entre o centro da roda convencional orientada fora do centro e o eixo vertical que passa pelo ponto de união do conjunto com o chassi (figura 4.3) Dado que no RAM-I se adotou uma configuração de motorização com dois motores de passo, os quais controlam as rodas fixas independentemente, e não se exerce nenhum controle na roda orientada fora do centro, esta roda segue a rota determinada pelas rodas fixas, comportandose como uma roda passiva (escrava). Pode-se assumir que o movimento desta roda pode ser ignorado na dinâmica do robô móvel (Yang, 1999). Esta roda não será levada em conta para o modelamento do robô. Tabela 4.4: Parâmetros do modelo tipo “Char” do robô RAM-I RODAS L α R β ϕ Roda 1 Roda 2 L L 0 π r r 0 0 ϕ1 ϕ2 onde α , r, l, são constantes; βe ϕ são variáveis com o tempo; L= 0.085m e r= 0.035m. As restrições cinemáticas têm a forma (4.10) e (4.11) J1 f 0 1 L J1 = = J 1 fc 0 − 1 L r 0 J2 = 0 r 1 0 0 C1 = − 1 0 0 0 C2 = 0 Temos o modelo cinemático de configuração genérico, equações (4.26) e (4.27): 105 q& = S ( q )u R T (θ ) ∑ ( βC ) 0 S (q) = D ( βc ) ∑ ( βc ) E ( βc , βfc ) ∑ ( βc ) 0 I η ,e u= 0 ς 0 O vetor de estado q é definido como: ξ β q= c βfc ϕ Como não será considerada a roda de apoio, as expressões são reduzidas para: R T (θ ) ∑ ( βc ) 0 ξ& η1 0 I = η 2 ϕ& E∑ 0 (4.28) onde : − 1 / r E = J 2− 1 J 1 = 0 0 0 1 − L 0 − 1 / r = − 1/ r 0 − 1 L 0 1 / r − L / r − L / r 0 0 0 − 1 / r − L / r = − 1 / r − L / r E∑ = 1 0 0 1 / r − L / r 0 1 1 / r − L / r Agora se tem q& = S ( q )u 106 x& − sinθ y& cosθ & θ = 0 ϕ& − 1 / r 1 ϕ&2 1/ r 0 0 η1 1 η2 − L / r − L/r (4.29) onde η1 é a velocidade longitudinal e η 2 é a velocidade de rotação do robô em relação ao referencial inercial ; ϕ&1 e ϕ&2 são as velocidades de rotação das rodas. É apresentado um outro modelo cinemático de configuração para o robô (2,0) que foi obtido pela parametrização do movimento do robô em relação à trajetória realizada. Este modelo é escrito em relação à base móvel e diferente do convencional onde a referência é o sistema inercial (Victorino, 1998). x& y& − 1 y 0 − (c + x)η1 & θ = ϕ& 0 1 η 2 1 λ− 1 ϕ&2 (4.30) onde c é a distância de um ponto fixo no chassi do robô, que se pretende controlar, à origem do sistema de referencia móvel solidário ao robô. Neste modelo, o vetor de entradas é relacionado às velocidades das rodas da seguinte forma: η1 ϕ&1 = λ η 2 ϕ&2 r λ= 2 r 2 L 107 r 2 r − 2L Admitindo a matriz λcomo não singular, pode-se trabalhar com qualquer parâmetro ( η1 , η 2 ) ou ( ϕ&1 , ϕ&2 ) como entradas de controle. Usando a mesma matriz λ, uma outra forma de se escrever o modelo cinemático de configuração se dá quando as velocidades das rodas ( ϕ&1 , ϕ&2 ) são consideradas como entradas de controle. r − sinθ 2 x& r y& = cos θ θ& 2 r 2L − r sinθ 2 ϕ& r cos θ 1 2 ϕ&2 r − 2L (4.31) Existe uma relação finita entre θ e a posição angular das rodas ϕ&1 e ϕ&2 : θ= r ( ϕ 1 - ϕ 2 ) + Const. 2L A derivada desta relação inicial é dita holonômica. As duas primeiras relações são nãoholonômicas, pois nenhuma relação finita pode ser obtida através delas, elas não sendo integráveis. Como comentário sobre os vários tipo de restrições importantes para veículos que o projetista em robótica móvel terá de lidar (Triggs, 1993) se tem: Ø Restrições de configuração: Restringem a possível configuração estática do veículo, delimitando regiões de trabalho (obstáculos, objetos físicos). Ø Restrições dinâmicas: Restringem os valores das quantidades diferencias tais como velocidade, aceleração e curvatura do trajeto. 108 Ø Restrições do tipo Integral: Limitam valores integrais tais como: tempo de execução, consumo de recursos para uma determinada tarefa. Ø Restrições de Planejamento: São significativos quando há interação com objetos em movimento no ambiente de trabalho do veículo. Ø Restrições Diferenciais : São igualdades com restrições de velocidade ou de manobras, por exemplo o estacionamento de um veículo. As principais restrições diferenciáveis são holonômicas ou integráveis e não-holonômicas ou não integráveis. Os robôs móveis com rodas pertencem, em geral, aos sistemas mecânicos ditos não holonômicos ou não integráveis. É possível saber “apriori” quando uma restrição ou um sistema de equações é não integrável. Uma forma de verificar a integrabilidade de sistemas é denominado de teorema de Frobenius, (Victorino, 1998). “O sistema x& = B ( x )u é completamente integrável se: Posto (B2....Bn)=Posto (B1 B2 ...Bn[Bi,Bj])” onde Bi, i=1...n, são colunas de B(x) e [ Bi, Bj ] = ∇ BjBi − ∇ BiBj , operador matemático chamado de colchete de Lie (“Lie Bracket”). O entendimento do teorema ficará claro com uma aplicação ao modelo de estado do Robô móvel, onde se constatará que o mesmo não é integrável e assim não-holonômico. O modelo cinemático de postura do robô RAM-I é: z& = B ( z )u x − sinθ 0 ; u = η1 z = y ; B( z ) = cos θ 0 η 2 θ 0 1 109 − sinθ 0 B1 = cosθ ; B2 = 0 0 1 B3 = [ B1 , B2 ]= (∇ B2 ) B1 − (∇ B1 ) B2 0 0 0− sinθ cosθ − B3 = 0 0 0 0 0 0 0 0 0 − cosθ 0 0 0 − sinθ 0 0 0 0 1 − cosθ cosθ B3 = 0 − sinθ = − sinθ 0 0 Então − sinθ 0 cosθ − sinθ 0 Posto cosθ 0 − sinθ = 3 > Posto cosθ 0 1 0 1 0 1 Portanto, pode-se concluir pelo modelo de Frobenius que o modelo de estado do Robô RAM-I é não-holonômico. 110 Capítulo 5 Resultados e Conclusões Neste capítulo será apresentado o robô RAM-I resultado do trabalho desenvolvido durante esta dissertação de mestrado. Ele servirá como plataforma de testes dos futuros trabalhos na área da robótica móvel autônoma. Será apresentado o robô em algumas configurações especiais aqui denominadas tarefas. Neste capítulo também se faz um resumo das conclusões que foram optidas no transcurso do desenvolvimento do RAM-I. Finalmente se apresentarão algumas propostas para trabalhos futuros. O robô RAM-I foi construído no Departamento de Mecânica Computacional (DMC) da Faculdade de Engenharia Mecânica da Universidade Estadual de Campinas. 5.1 Robô Autônomo Móvel Inteligente: RAM-I O RAM-I é um robô autônomo móvel inteligente desenvolvido utilizando a Arquitetura Subsumption e o principio percepção-ação, mostrado na figura 5.1. Está conformado por uma base retangular de 0,18 m por 0,16 m, possui duas rodas convencionais fixadas ao chassi com os eixos colineares, paralelos ao lado menor, com raio de 0,035 m, e uma roda orientada fora do centro como apoio. O mecanismo de motorização está conformado por dois motores de passo TAMAGAWA SEIKI acoplados diretamente às rodas fixas. O controle de direção é realizado através da variação da velocidade de rotação das rodas fixas (motrizes) e/ou a inversão de giro dos motores. 111 Este robô foi construído utilizando dois módulos baseados no microcontrolador PIC16F84, o Sb Step Control, controlador dos motores, e o Sb 9902_2 com o programa do sistema de controle total do robô. A este módulo estão conectados quatro sensores de toque, dois na frente (detecção de obstáculos) e os outros dois na parte inferior (figura 5.3) na procura de depressões e assim sentir a eventual “perda” de chão e se proteger contra quedas. Figura 5.1: Robô RAM-I . O sistema de alimentação esta conformado por um “pack” de baterias de 12V. recarregáveis, o qual fornece ao robô a autonomia energética necessária à realização das suas tarefas programadas. 5.1.1 Características do Robô RAM-I Ø Dimensões físicas: § Altura: 10 cm; § Base: 17.5 cm por 18 cm; § Peso: 2 Kg; 112 Figura 5.2: Detalhes do Robô RAM-I . Ø Cinemática: § Direção: através do controle da velocidade de rotação das rodas; § Redução: 1:1; § Velocidade 3.3 m/min § Motores de passo: 3,6° por passo (100 ppv); Ø Energia: § Baterias: “pack” de baterias recarregáveis de NiCd, 38 Wh/Kg, 12 V, 500mA; § Autonomia: 1 hora em funcionamento continuo; 113 Ø Sensores: § Sensor de toque para obstáculos: duas chaves liga desliga na forma de “bigode”; § Sensor de depressões: dois sensores do tipo “fim de curso” com molas; Sensores de batida Roda passiva Rodas motrizes Sensores de depressão Figura 5.3: Vistas de frente e de lado do Robô RAM-I: motores, sensores de toque e rodas. Módulo 9902_2 Pack de baterias Motores de passo Módulo Step Control Figura 5.4: Vistas superior e inferior do Robô RAM-I: módulos, motores, sensores, bateria. 114 Ø Controladores: § Baseados no microcontrolador PIC16F84 da MICROCHIP; § Programação em “Assembler” da MICROCHIP; § Comunicação entre os módulos via cabo (interface RS232-C); § Controle em “tempo real”; § Módulo Sb 9902_2 com capacidade para receber até 13 entradas de sinal dos sensores externos. § Restrições na capacidade da memória RAM do microcontrolador PIC16F84. Como exemplo, foi programada uma tarefa simples, descrita a seguir. Esta tarefa poderá ser alterada de acordo com as necessidades de futuros trabalhos. A arquitetura de controle foi idealizada em base à Arquitetura Subsumption atendendo os requerimentos das tarefas implementadas VAGAR e EVITAR, descritas no capitulo 3 como camadas implementadas no robô RAM-I. 5.2 Testes e Resultados com o Robô RAM-I Para verificar a capacidade do robô de servir como uma plataforma de testes e assim cumprir as tarefas implementadas, um conjunto de testes foram propostos: 1. Vagar num ambiente estruturado. 2. Desviar obstáculos que impedem o livre transcurso do robô. 3. Afastar-se do perigo de perder o chão. 5.2.1 Vagar Livremente num Ambiente Estruturado e desviar Obstáculos Nestes primeiros testes o robô RAM-I foi colocado no centro de um ambiente determinado e deixado vagar livremente. O ambiente é apropriado ao uso do robô, formado por uma superfície lisa, sem grandes depressões e com alguns obstáculos. 115 Nesta caso a camada VAGAR comanda o robô fazendo com que ele se desloque pelo ambiente em trajetórias retas. Nesta estado ele não é afetado por eventuais perturbações que alterem a sua direção. O robô permanece neste estado até que a camada de nível mais elevado, EVITAR, seja ativada pela presença de um obstáculo. Quando a camada EVITAR é ativada, o robô identifica se o sensor que a ativou é um sensor de depressão (neste ambiente só existem obstáculos fixos). Depois desta verificação, o robô verifica se o obstáculo está na frente-esquerda ou na frente-direita, para determinar a manobra adequada. Se a batida for pela direita, o robô recua e vira para esquerda, se for pela esquerda o robô recua e vira para direita, diminuindo assim a possibilidade de bater de novo com o mesmo obstáculo. A manobra de recuar e virar pode ser compreendido melhor pelos comandos: inverter motores, diminuir velocidade da roda do lado da batida (esquerda ou direita), após certo tempo, continuar com o trajeto. Verificou-se também nestes testes, a “reação” do robô quando os dois sensores de obstáculos da frente são ativados ao mesmo tempo. O robô age de acordo com a programação das camadas implementadas. A manobra de nível mais elevado no robô, é a manobra de recuar e virar para direita. Sendo ativados os dois sensores ao mesmo tempo, o robô sempre virará e recuará primeiro pela direita até a direção indicada pela estratégia implementada para o sensor de obstáculo. 5.2.2 Afastar-se do Perigo, Perder o Chão. Os robôs autônomos móveis tem que se desenvolver em ambientes diversos, desde laboratórios de pesquisa a terrenos inóspitos em planetas distantes, e assim enfrentar perigos iminentes apresentados pelo próprio ambiente. Tais perigos põem em risco a “vida” do robô, perigos como por exemplo a “perda” do chão ou a proximidade de alguma borda que indique o termino da superfície. Um exemplo típico deste perigo está na queda do robô pelas escadas de um laboratório. 116 O robô RAM-I está provido de dois sensores chamados de “sensores de depressão” localizados na frente das duas rodas motrizes, de modo a evitar a que o robô possa cair numa depressão. Neste segundo teste o robô RAM-I foi colocado no centro de um ambiente estruturado e deixado vagar livremente. O ambiente é um ambiente apropriado ao uso do robô, com uma superfície lisa (mesa). Para a realização deste teste foi preciso montar o ambiente simulando eventuais obstáculos (paredes) de um lado e do outro bordas que indicam o fim da superfície do ambiente. Figura 5.5: Robô autônomo móvel RAM-I no ambiente de testes. Uma vez ligado, a camada VAGAR comanda o robô fazendo com que ele se desloque pelo ambiente em trajetórias retas. Neste estado, ele não é afetado por eventuais perturbações que alterem a sua direção. O robô permanece neste estado até que a camada de nível mais elevado, EVITAR, seja ativada pela presença de um obstáculo ou uma depressão. 117 Quando a camada EVITAR é ativada, o robô identifica se o sensor que fio ativado é um sensor de depressão. O robô depois verifica se a depressão está na frente-esquerda ou na frentedireita, e determina a manobra adequada. Se a batida for à direita, o robô recua e vira para esquerda, se for à esquerda o robô recua e vira para direita, diminuindo assim a possibilidade de se encontrar de novo com a mesma “depressão”. A manobra de recuar e virar é composta de: inverter motores, diminuir velocidade da roda do lado do sensor ativado (esquerda ou direita), após algum tempo, continuar com o trajeto. A direção que o robô toma é diferente da que tomaria se fosse simplesmente um obstáculo na frente. Esta nova direção procura afastar o robô da “depressão” por esta ser um perigo à segurança do robô. Verificou-se nestes testes, a “reação” do robô quando os dois sensores de depressão são ativados ao mesmo tempo. O robô age de acordo com a programação das camadas implementadas. A manobra de nível mais elevado no robô, é a manobra de recuar e virar para direita. Sendo ativados os dois sensores ao mesmo tempo o robô sempre virará e recuará primeiro para a direita. Verificou-se também nestes testes, a “reação” do robô quando dois tipos de sensores diferentes são ativados ao mesmo tempo, sensores de depressão e sensores de obstáculos. O robô age de acordo com a programação das camadas implementadas. A manobra de nível mais elevado no robô, é a manobra ativada pelos sensores de depressão. O robô então procura se afastar do perigo iminente de não ter chão na frente. Sendo ativados os sensores de depressão e de obstáculo ao mesmo tempo, o robô sempre virará e recuará na direção indicada pelo sensor de depressão. 118 5.3 Conclusões O objetivo proposto neste trabalho foi alcançado: implementar um robô autônomo móvel inteligente utilizando a Arquitetura de controle Subsumption, para ser usado como base de testes em futuros trabalhos na área da robótica móvel autônoma. Foi estudado o problema da validação de experimentos com robôs autônomos móveis, sendo proposto a implementação destes para uma “verdadeira” validação dos resultados. A implementação do projeto é simples e flexível, de modo a permitir ao robô RAM-I se converter numa plataforma de testes para novos componentes: motores, sensores, controladores, baterias. Para a implementação escolheu-se dois módulos (módulos de “Hardware”) baseados no microcontrolador PIC16F84, um deles para o controle dos motores de passo e o outro como “cérebro”. A comunicação entre eles é feita através de um cabo (interface RS232-C). No robô RAM-I, dois comportamentos bem definidos foram implementados: EVITAR e VAGAR. A ordem nas camadas foi estabelecida como sendo a de mais alta prioridade a EVITAR, para cada camada um predicado de aplicabilidade foi definido utilizando como base a configuração dos sensores. Pode se definir a Arquitetura Subsumption, como sendo a divisão do sistema de controle do robô em vários processos pequenos paralelos e concorrentes chamados de camadas, os quais simulam certo tipo de “comportamento”. Eles avaliam os dados dos sensores para assim controlar os parâmetros de saída. Esta Arquitetura demostrou ser uma abordagem prática e eficiente para se construir robôs autônomos móveis inteligentes. Existem estratégias para escrever “software” que possa responder a estímulos externos em tempo real. O robô RAM-I, possui um controle em tempo real utilizando um método onde 119 “loops” de “software” continuamente verificam as entradas do microcontrolador (sensoriamento por sondeio), chamado de “polling”. O robô autônomo móvel RAM-I, por sua configuração, pertence aos Sistemas Mecânicos ditos de não-holonômicos, caraterizados pelas restrições cinemáticas não integráveis. Logo, eles não podem ser estabilizados com as mesmas leis de controle com realimentação de estados. 5.4 Trabalhos futuros No robô RAM-I poderiam ser introduzidas muitas modificações, sendo este o seu objetivo. A seguir, serão apresentadas algumas das propostas sugeridas para futuros trabalhos: Ø Implementação de um novo módulo para o “cérebro” com um outro microcontrolador PIC da MICROCHIP que facilite a aquisição de dados, maior capacidade de memória, número maior de portas disponíveis. Ø Utilização de outros tipos de sensores: ultrasom, infravermelho, ou mesmo uma câmera digital como auxílio à teleoperação, ou mesmo para a visualização do funcionamento do sistema. Ø Implementação de um sistema de comunicação via rádio. Ø Utilização de outros tipos de motores como por exemplo motor ultra-sónico. Ø Uso de outras Arquiteturas de Controle baseados em diferentes teorias, como por exempto redes neurais, lógica Fuzzy. Ø Implementação de um “software” (Linguagem C) para a interação entre um computador e o robô autônomo móvel, no caso de testes experimentais que requeiram o uso de maior capacidade de memória. Esta interação poderia ser obtida via cabo, radio, ou por sinal infravermelho. 120 Ø Desenvolvimento de um programa de simulação para o robô autônomo móvel, visando a simulação dos comportamentos, navegação, controle de trajetória. Ø Acoplar novos dispositivos, como por exemplo braços manipuladores, sobre a plataforma do RAM-I. Ø Construção de um novo protótipo utilizando tecnologia das micromáquinas. Este seria um mini robô. 121 Referências Bibliográficas Aihara, C. K. Projeto e Implantação de Plataforma Didática Aplicada ao Ensino e Pesquisa em Automação. Campinas - SP: Faculdade de Engenharia Mecânica, Universidade Estadual de Campinas, 2000, 92 p. Dissertação (Mestrado) Andrade, José F. A. de; Mendeleck, A.; Zampieri, Douglas E. Geração de Trajetórias para Robôs Móveis Autônomos Usando Redes Neurais Artificiais. In: V Congresso Brasileiro de Redes Neurais, Rio de Janeiro - RJ, Brasil. Anais... abril 2001. p. 571-576 Bernardes, L.H. Microcontrolador National COP8. Saber Eletrônica, São Paulo, v. 1, n. 308, p 411, setembro 1998. Bradshaw, A. Sensors for Mobile Robots. Measurement + Control, v. 23, p. 48-52, march 1990 Braga, N.C. Motores de passo. Saber Eletrônica, São Paulo, v. 1, n. 323, p 4-6, dezembro 1999. Braga, N.C. Controlando motores de passo. Saber Eletrônica, São Paulo, v. 1, n. 314, p 48-53, março 1999. Brooks, R. A. Intelligence Without Reason. In: IJCAI-91, Morgan Kaufmann, San Mateo CA USA. Proceedings..., p. 569-595, 1991. Brooks, R. A. A Robust Layered Control System for a Mobile Robot, IEEE Journal of Robotics and Automation, v. 2, n.1, p. 14-23; Março 1986. 122 Brooks, R. A., Intelligence Without Representation, Artificial Intelligence Journal, p. 139 – 159, 1991. Campion, G., et al. Structural properiesanda classification of kinematic and dynamic models of wheeled mobile robots, IEEE Trans. robotic and automation, v. 12, n.1, p. 47-62; 1996. Costa, S. E. Estudo e Implementação de Sistema de Controle de direção para Veículo Autoguiado. Campinas - SP: Faculdade de Engenharia Elétrica, UNICAMP, 1993. 125p. Dissertação (Mestrado) Craig, J. Introduction to robotics: mechanics and control. U.S.A: Addison-Weslwy Publishing Company, 1986. 450 p. Doughty, S. Mechanics of machines. New York: J. Wiley, 1988. 467p. Escola Virtual Solbet v.2.1, PIC Básico: Solbet Ltda. Treinamento Profissional, [2000]. 1 CDROM. Windows 95-98 NT. Ferreira, Edson de P. Robótica Básica. Rio de Janeiro: Versão Preliminar Publicada para a V Escola Brasileiro - Argentina de Informática, janeiro 1991. Fierro, R; Lewis, F. L. Control of a Nonholonomic Mobile Robot Using Neural networks. IEEE Transactions on Neural Networks, v. 9, n. 4, july 1998. Flynn, Anita M. et al. Cirujia del Mañana: Micromotores y Microrobots. Cirujia del Mañana, 1996. (Tomorrow´s Surgery, January 29, 1995) Disponível na Internet. http://wwwfacmed.unam.mix/bmnd/testocompleto/laparosc/flynn.pdf 13 de dezembro de 1999. 123 Gat, E. Towards principled experimental study of autonomous mobile robots. Kluwer Academic Publishers, v. 2, p. 179-189, Março 1995. GSI, DIN - UEM. Grupo de Sistemas Inteligentes. Departamento de Informática - Universidade Estadual de Maringá. Fevereiro de 2001. Material descrito na homepage. Disponível na Internet: http://www.din.uem.br/~ia/1024x768/index.html Han, Min-Hong; Rhee, Sang-Yong. Navigation Control for a Mobile Robot. Journal of Robotic Systems, v. 11, n. 3, p. 169-179, 1994 Jetto, Leopoldo; Longhi, Sauro; Venturini, Giuseppe. Development and Experimental Validation of na Adaptive Extended Kalman Filter for the Localization of Mobile Robot. IEEE Transactions on Robotics and Automation, v. 15, n. 2, p. 219-228, April 1999 Jones, Joseph L.; Flynn, Anita M. Mobile Robots – Inspiration to Implementation. Wellesley, Massachusetts: A. K. Peters Ltd., 1993, 345 p. Laumond, J. P. Robot Motion Planning and Control. Lectures Notes in Control and Information Sciences 229, Springer, 1998, 343 p. Disponível na Internet: http://www.laas.fr/~jpl/book.html Latombe, Jean-Claude. Robot Motion Planning. Massachusetts: Kluwer Academic Publishers, 1996, 651 p. Machado, J. A. T. ; Rodrigues, C.M.B.; Silva, F. M. Sistemas Robóticos de Locomoção Quadrúpede e Hexápode. Revista Robótica e Automatização, n. 30, fevereiro 1998. Maes, P., Brooks R. A. Learning to Coordinate Behaviors, AAAI Journal, p. 796--802 Agosto 1990. 124 Marto, A. G. Motores Ultra-sônicos: Princípios de Funcionamento e Características. Guaratinguetá: Faculdade de Engenharia de Guaratinguetá, Universidade Estadual Paulista, 1997. 130 p. Dissertação (Mestrado) Maxim Integrated Products, MAXIM +5V-Powered, Multichannel RS-232 Drivers/Receivers, May 2000, Disponível em: www.electromelec.co.uk/max232cpe.htm. Acesso em: 7 Julho 2001. Microchip Technology Inc., PIC16F84A. September 1998, Disponível em http://www.microchip.com/0/lit/pline/picmicro/families/16f8x/devices/16f84a/index.htm Acesso em: Julho 2000. Microchip Technology Inc., MPLAB, IDE, SIMULATOR, EDITOR: User`s Guie, U.S.A., 2000. 284 p. Muir, P. F, Modelling and control of wheeled mobile robots. Pittsburgh, PA, USA: Department of Electric and Computer Engineering and Robotics Institute, Carnegie Mellon University, 1998. 335 p. These (PhD.) National Semiconductor Corporation, Converters with Multiplexer ADC0831/ADC0832/ADC0834/ADC0838 8-Bit A/D Options. August 1999, Disponível em: http://national.com/pf/AD/ADC0831.html. Acesso em: 8 Julho 2001. National Semiconductor Corporation, LM78LXX Series 3-Terminal Positive Regulators. November 2000, Disponível em: http://national.com/pf/LM/LM78L05.html. Acesso em: 8 Julho 2001. Yang, Jung-Min; Kim, Jong-Hwan. Slidind Mode Control for Trajectory Tracking of Nonholonomic Wheeled Mobile Robots. IEEE Transactions on Robotics and Automation, v. 15, p. 578-587, 1999 125 Ohya, Akihisa; Kosaka, Akio; Kak, Avinash. Vision-Based Navigation by a Mobile Robot with Obstacle Avoidance Using Single-Camara Vision and Ultrasonic Sensing. IEEE Transactions on Robotics and Automation, v. 14, n. 6, p. 969-978, 1998 Passeto, F. Desenvolvimento de uma Aplicativo para Simulação e Controle de Manipuladores Robóticos com ênfase em Aplicações Didáticas. Campinas - SP: Faculdade de Engenharia Mecânica, Universidade Estadual de Campinas, 2000, 102 p. Dissertação (Mestrado) Rezende, Marcos F. de. Desenvolvimento de um Robô Móvel Autônomo Inteligente Utilizando a Arquitetura de Assunção. Uberlândia - MG: Centro de Ciências Exatas e Tecnologia, Universidade Federal de Uberlândia, 1992. 102 p. Dissertação (Mestrado) Sandia Technology, A Quarterly Research & Development Journal, v. 2, n. 2, 21 p. summer 2000. Segenreich, Solly.; Vargas, Juan. Uma nova Tecnologia para acionamento de motores de passo operando em micropasso. Congresso Nacional de Engenharia Mecânica - CONEM 2000, Natal, Anais do CONEM 2000., 2000, v.CDROM SGS Thomson Microelectronics. ULN2801A-ULN2802A-ULN2803A-ULN2804A-ULN2805A, September 1997, Disponível em: http://us.st.com/stonline/books/pdf/docs/1536.pdf. Acesso em: 8 Julho 2001. Souza, D. Desbravando o PIC. São Paulo: Érica Ltda, 2000, 200 p. Solbet Microcontroladores e Robótica Ltda. Sb Microlab V. 2.0: manual de operações e manutenção, São Paulo, 2000. 16 p. Solbet Microcontroladores e Robótica Ltda. Sb StepControl V. 1.0: manual de operações e manutenção, São Paulo, 2000. 12 p. 126 Solbet Microcontroladores e Robótica Ltda. KITs 9901_1 & 9901_2 V. 1.1: manual de montagem e operação, São Paulo, 2000. 14 p. Spong, M. Robot Dynamics and Control. New York: John Wiley & Sons, 1989. 336 p. Suárez, Lizet L. Conhecimento Sensorial - Uma Análise Segundo a Perspectiva da Semiótica Computacional. Campinas - SP: Faculdade de Engenharia Elétrica e de Computação, UNICAMP, 2000. 144 p. Dissertação (Mestrado) Takiguchi, J. et al. Study of autonomous mobile system in outdoor enviroment. In: IEEE International Conference On Robotics Andautomation, 3, 1998, Leuvem. Proceeding... Leuven IEEE 1998, p. 2416-2421. Triggs, Bills Motion Planning for Nonholonomic Vehicles: Na Introduction, 1993. Disponível na Internet. http://www.inrialpes.fr/movi/people/Triggs/abstracts.html#Triggs:nonhol93 12 de março de 2001. Thomson Airpax. Product Selection and engineering Guide: catálogo. New York 1995. 41 p. Tourino, Sérgio; Álvares, Alberto. Desenvolvimento de um robô móvel autônomo teleoperado via internet. Congresso Nacional de Engenharia Mecânica - CONEM 2000, Natal, Anais do CONEM 2000., 2000, v. CDROM Victorino, A. C. Controle de Trajetória e estabilização de Robôs Móveis Não-Holonômicos. Campinas-SP: Faculdade de Engenharia Mecânica, UNICAMP, 1998. Dissertação (Mestrado) Viera, A. Desenvolvimento e Implementação de controle de Trajetória Continua em Robô Industrial de Alto Desempenho. Campinas - SP : Faculdade de Engenharia Elétrica, UNICAMP, 1996. Tese (Doutorado). 127 Anexos A.1: Programa ;****************************************************************************************** ; ;nome:sensafaz10.asm ; ;objetivo: implementar (programar) as tarefas do cérebro ; ;ação: Este programa contem a Arquitetura de Controle implementado no “cérebro” para um robô ; com dois sensores de toque e dois sensores de depressão na frente. ; O robô recua e vira para esquerda quando acionado o sensor direito, quando acionado o ; sensor direito recua e vira para esquerda ; A estratégia do robô quando acionados os sensores de depressão é de recuar e dar ; volta para esquerda ou para direita conforme a estratégia para depois voltar a ; caminhar livremente. ; ;descrição das portas ;RA0: ;RA1:saida RS232-C ;RA2: ;RA3: ;RA4: ; ;RB0: ;RB1: ;RB2: ;RB3: ;RB4: entrada do sensor esquerdo ;RB5: entrada do sensor direito ;RB6: entrada do sensor de depressao esquerdo ;RB7: entrada do sensor de depressao direito ;freqüência do cristal: 10 MHz ;autor: Justo Emilio Alvarez Jácobo ;versão do MPLAB: 3.40.00 ;sinal RS232-C, 1200,N,8,1 ; ;****************************************************************************************** ; ; sensor_depre_esq sensor_ depre _dir ; ; sensor_esq sensor_dir ; *************** ; * * * * ; roda esq * * * * roda dir ; (motor0) * * * * (motor1) ; * * * * ; * * ; * * ; * * ; * * ; * * ; *************** 128 ; ;****************************************************************************************** ; configuração do Assembler e microcontrolador ;****************************************************************************************** LIST P=PIC16F84 ;seleciona o tipo de controlador #include <p16F84.inc> ;definições do processador ;****************************************************************************************** ; configuração da CPU ; CP(ON,OFF)proteção do softwarePWRTE (ON,OFF) temporizador alimentação ; WDT(ON,OFF) temporizador watchdog OSC (HS,LP, RC, XT) seleção oscilador ;****************************************************************************************** __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC ;****************************************************************************************** ; definições ;****************************************************************************************** #define BANK0 BCF STATUS,RP0 #define BANK1 BSF STATUS,RP0 #define SAIDA_RS PORTA,1 #define SENSOR_ESQ PORTB,4 #define SENSOR_DIR PORTB,5 #define SENSOR_DEPRE_ESQ PORTB,6 #define SENSOR_DEPRE_DIR PORTB,7 RESET INT VELO_INIC ;lado esquerdo do robô ;flags para informar o estado ;0 -> livre ;1 -> obstáculo na frente ;lado direito do robô ;flags para informar o estado ;0 -> livre ;1 -> obstáculo na frente ;frente esquerdo do robo ;flags para informar o estado ;0 -> livre ;1 -> depressao na frente ;frente direito do robo ;flags para informar o estado ;0 -> livre ;1 -> depressao na frente sensor sensor sensor sensor EQU 0X0000 ; ponto de reset da CPU EQU 0X0004 ; ponto de desvio de interrupção da CPU EQU .100 ;#define DEBUG ; válido para simulação ;****************************************************************************************** ; declaração das variáveis ;****************************************************************************************** cblock 0x0c w_temp status_temp nIndex valorTx cont1 cont2 cont3 cont4 cont5 cont6 int_cont1 int_cont2 int_cont3 int_cont4 ;contador usado para incrementar tempo entre as tarefas sensores temp d; lixeira endc ;****************************************************************************************** ; declaração das macros ;****************************************************************************************** 129 ; não há macros neste programa ;****************************************************************************************** ; inicio do código ;****************************************************************************************** org RESET goto INICIO ;****************************************************************************************** ; inicio da interrupção ;****************************************************************************************** ; ; ; ; -------------------------------------------------------------org INT -------------------------------------------------------------SEM INTERRUPCOES -------------------------------------------------------------RETFIE ;****************************************************************************************** ; rotinas e subrotinas ;****************************************************************************************** ;-----------------------------------------------------------------------------------------; SUBROTINAS DE INICIALIZACAO DOS MOTORES ;-----------------------------------------------------------------------------------------; inicializa os motores numa outra velocidade diferente do default dado pelo Step Control ;-----------------------------------------------------------------------------------------inic_motores ;default do robô movlw 'D' call envia ;para os motores para enviar as novas velocidades ao mesmo ;tempo e assim o motor 1 não fique retrasado call inic_motor0 call inic_motor1 movlw call movlw call 'F' envia 'G' envia ;M0 no sentido antihorário ;M1 no sentido horário movlw 'C' call envia ;ativa os motores de novo return ;(ultimo return) da função inic_motores inic_motor0 movlw 'A' call envia2 return ;do inic_motor0 inic_motor1 movlw 'B' call envia2 return ;do inic_motor1 ;-----------------------------------------------------------------------------------------; subprograma encarregado de enviar a constante da vel_inic (neste caso 10) ;-----------------------------------------------------------------------------------------envia2 call tx ;transmite o primeiro comando que tenho no W clrf nIndex loop2 movf nIndex,W call tabela2 movwf temp movf temp,F btfsc STATUS,Z ;se fim da mensagem return ;se terminou de enviar a mensagem volta @@@ call tx incf nIndex,F 130 goto loop2 ;-----------------------------------------------------------------------------------------tabela2 ;valor da velocidade default inicial dos motores (neste caso 10) addwf PCL,F retlw '1' retlw '0' retlw 0x0d retlw 0x0a retlw 0 ;-----------------------------------------------------------------------------------------; SUBROTINAS DE GIRO DO ROBO ;-----------------------------------------------------------------------------------------recua_dir movlw 'D' ;para os motores call envia movlw 'E' ;M0 sentido H (horário) call envia movlw 'H' ;M1 sentido AH (antihorário) call envia movlw 'C' ;liga motores call envia call espera12 movlw 'F' ;M0 no sentido AH para virar no mesmo eixo a direita call envia call espera12 call inic_motores return ;retorno de recua_dir ;----------------------------------------------------------------------------------recua_esq movlw 'D' ;para os motores call envia movlw 'E' ;M0 sentido H call envia movlw 'H' ;M1 sentido AH call envia movlw 'C' ;liga motores call envia call espera12 movlw 'G' ;M1 no sentido H para virar no mesmo eixo a esquerda call envia call espera12 call inic_motores return ;retorno de recua_esq ;----------------------------------------------------------------------------------afasta_por_dir movlw 'D' ;para os motores call envia movlw 'E' ;M0 sentido H call envia movlw 'H' ;M1 sentido AH call envia movlw 'C' ;liga motores call envia call espera12 movlw 'F' ;M0 no sentido AH para virar no mesmo eixo a direita call envia call espera12 call espera12 call inic_motores return ;retorno de afasta_por_dir ;----------------------------------------------------------------------------afasta_por_esq movlw 'D' call envia movlw 'E' call envia ;para os motores ;M0 sentido H 131 movlw 'H' ;M1 sentido AH call envia movlw 'C' ;liga motores call envia call espera12 movlw 'G' ;M1 no sentido H para virar no mesmo eixo por esquerda call envia call espera12 call espera12 call inic_motores return ;retorno de afasta_por_esq ;----------------------------------------------------------------------------------parada movlw 'D' ;para os motores call envia movlw 'E' ;M0 sentido horario call envia movlw 'H' ;M1 sentido antihorario call envia movlw 'C' ;liga os motores call envia call espera12 call inic_motores return ; retorno de parada ;-----------------------------------------------------------------------------------------; subprograma encarregado de enviar a velocidade de retardo do motor que gira a menor velo ; exemplo: quando este recue (100), o outro motor estará na velocidade default (10) ; este subprograma não está sendo usado, o robô gira no mesmo eixo ;-----------------------------------------------------------------------------------------envia3 call tx ;transmite o primeiro comando que eu tenho no W clrf nIndex loop3 movf nIndex,W call tabela3 movwf temp movf temp,F btfsc STATUS,Z ;se fim de mensagem return ;se terminou de enviar a mensagem volta @@@ call tx incf nIndex,F goto loop3 ;-----------------------------------------------------------------------------------------tabela3 ;valor da velocidade do motor que esta recuando a menor velocidade (100) addwf PCL,F retlw '1' retlw '0' retlw '0' retlw 0x0d retlw 0x0a retlw 0 ;-----------------------------------------------------------------------------------------; SUBROTINAS DE ENVIO DE COMANDOS PARA O STEP CONTROL ;-----------------------------------------------------------------------------------------envia call tx ; transmite o primeiro comando que eu tenho no W clrf nIndex loop1 movf nIndex,W call tabela1 movwf temp movf temp,F btfsc STATUS,Z ;se fim de mesagem return ;se terminou de enviar a mensagem, volta @@@ call tx incf nIndex,F goto loop1 ;------------------------------------------------------------------------------------------ 132 tabela1 addwf PCL,F retlw 0x0d retlw 0x0a retlw 0 ;-----------------------------------------------------------------------------------------tx movwf valorTx bcf SAIDA_RS ;start bit call delayBit call tx1 call delayBit call tx1 call delayBit call tx1 call delayBit call tx1 call delayBit call tx1 call delayBit call tx1 call delayBit call tx1 call delayBit call tx1 call delayBit bsf SAIDA_RS call delayBit ;stop bit return ;-----------------------------------------------------------------------------------------tx1 rrf valorTx,F btfsc STATUS,C ;se carry=1, transmite bit em 1 goto bit1 bcf SAIDA_RS return bit1 bsf SAIDA_RS return ;-----------------------------------------------------------------------------------------; ESPERA PELO TEMPO DE UM BIT A 1200 BAUDS ;-----------------------------------------------------------------------------------------#ifdef DEBUG delayBit return #else delayBit ; Dados para o tempo de amostragem do sinal de transmissão ; -------------------------------------------------------movlw d'13' movwf cont1 movlw d'51' movwf cont2 ; -------------------------------------------------------movf cont1,W movwf int_cont1 ;contador interno esp1 movf cont2,W movwf int_cont2 esp2 decfsz int_cont2,F goto esp2 decfsz int_cont1,F goto esp1 return #endif ;-----------------------------------------------------------------------------------------; TEMPOS DE ESPERA ENTRE AS TAREFAS ;-----------------------------------------------------------------------------------------espera12 movlw d'26' movwf cont5 esp11 decfsz cont5,F 133 goto esp12 return esp12 call espera goto esp11 ;-----------------------------------------------------------------------------------------espera bsf SAIDA_RS ;nível default = 1 movlw d'255' movwf cont3 movlw d'255' movwf cont4 ;-----------------------------------------------------------------------------------------;espera movf cont3,W movwf int_cont3 ;contador interno esp3 movf cont4,W movwf int_cont4 esp4 decfsz int_cont4,F goto esp4 decfsz int_cont3,F goto esp3 return ;****************************************************************************************** ; INICIO DO PROGRAMA ;****************************************************************************************** INICIO BANK1 movlw B'11111111' ; porta RB4, programada como sensor movwf (TRISB & 0x07F) ; 7 -> 1 RB7 ENTRADA DO SENSOR DE DEPRESSAO DIREITO ; 6 -> 1 RB6 ENTRADA DO SENSOR DE DEPRESSAO ESQUERDO ; 5 -> 1 RB5 ENTRADA DO SENSOR DIREITO ; 4 -> 1 RB4 ENTRADA DO SENSOR ESQUERDO ; 3 -> 1 RB3 CONFIGURADO PARA ENTRADA ; 2 -> 1 RB2 CONFIGURADO PARA ENTRADA ; 1 -> 1 RB1 CONFIGURADO PARA ENTRADA ; 0 -> 1 RB0 CONFIGURADO PARA ENTRADA movlw B'11111101' ; programa porta RA1 programada como saida movwf (TRISA & 0x07F) ; 7 -> 1 ; 6 -> 1 ; 5 -> 1 ; 4 -> 1 ; 3 -> 1 ; 2 -> 1 ; 1 -> 0 RA1 CONFIGURADO PARA SAIDA ; 0 -> 1 BANK0 ;****************************************************************************************** ; INICIALIZAÇÃO DAS VARIÁVEIS ;****************************************************************************************** ; nada ;****************************************************************************************** ; ROTINA PRINCIPAL ;****************************************************************************************** main ; ; bsf SAIDA_RS ;nivel default = 1 saida da comunicacao serial call inic_motores movlw 'i' call envia ;--------------------------------------------------------------------------------;LEITURA DOS SENSORES UM A UM ;--------------------------------------------------------------------------------- main1 movf PORTB,w movwf sensores btfss SENSOR_DEPRE_ESQ ;interruptor pressionado (NF)? goto sim_depre_esq ; sim esta =0 (depressão na esquerda, cuidado!) 134 btfss SENSOR_DEPRE_DIR;interruptor pressionado (NF)? goto sim_depre_dir ; sim esta =0 (depressão na direita, cuidado!) btfsc SENSOR_ESQ ;interruptor pressionado (NF)? goto sim_obs_esq ; sim esta =1 (obstáculo) btfsc SENSOR_DIR ; não esta =0 interruptor pressionado (NF)? pula se e 0 goto sim_obs_dir ; sim esta =1 (obstáculo) goto main1 ;-----------------------------------------------------------------------------------------simesta_esq call recua_dir goto main1 simesta_dir call recua_esq goto main1 sim_depre_esq call afasta_por_dir ; movlw 'D' ; call envia ; movlw 'I' ; call envia goto main1 sim_depre_dir call afasta_por_esq ; movlw 'E' ; call envia ; movlw 'S' ; call envia goto main1 ;-----------------------------------------------------------------------------------------END ;****************************************************************************************** 135 A.2: Diagrama eletrônico do SbMicrolab Cortesia da Solbet Microcontroladores e Robótica http://www.solbet.com 136 A.3: Diagrama eletrônico do Sb Step Control Cortesia da Solbet Microcontroladores e Robótica http://www.solbet.com 137 A.4: Diagrama eletrônico do Módulo 9902_2 Cortesia da Solbet Microcontroladores e CGC00.946.876/0001-25 Insc. Estadual: 244.559.200.110 138 Robótica http://www.solbet.com A.5: Portas de Comunicação PC Sb Fast Card Cortesia da Solbet Microcontroladores e Robótica http://www.solbet.com 139 A.6: Series 4SQ Stepper Motors 1.8 ° Thomson Airpax Mechatronics Thomson Airpax Mechatronics, Product Selection and Engineering Guide, 1995 (Series 4SQ Stepper Motors 1.8 °) 140