instituto politécnico da guarda robonovaipg - robô...

54

Upload: phungliem

Post on 28-Jan-2019

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto
Page 2: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

Instituto Politécnico da GuardaEscola Superior de Tecnologia e Gestão

RobonovaIPG - Robô Interativo Autónomo

Marco Vaz Almeidano1008644

Projeto de Informática do curso Engenharia Informática

15 de Novembro de 2012

Page 3: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto
Page 4: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

Instituto Politécnico da GuardaEscola Superior de Tecnologia e Gestão

RobonovaIPG - Robô Interativo Autónomo

Marco Vaz Almeidano1008644

Projeto de Informática do curso Engenharia Informática

Orientador: Professor Carlos Carreto

15 de Novembro de 2012

Page 5: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

Agradecimentos

Primeiro que tudo gostaria de agradecer ao Professor Carlos Carreto por ser o meuorientador e me ter dado a oportunidade de poder fazer parte do desenvolvimentodeste Projeto.

Gostaria também de agradecer ao Instituto Politécnico da Guarda por me ter dadomeios e ter fornecido todo o hardware utilizado para a criação e montagem do robô,que é a peça mais importante deste projeto.

Por �m gostaria de agradecer ao professor Luís Miguel Lopes Lourenço por terdispensado tempo e conhecimentos na criação de uma nova cabeça para o robô.

Num contexto mais pessoal quero ainda agradecer aos meus amigos e à minha famíliapor todo o apoio que me deram nesta ultima fase académica da minha aprendizagem.

i

Page 6: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

Resumo

Com a evolução da tecnologia no campo da robótica, a interatividade de um robôcom um ser humano é cada vez mais um ferramenta utilizada no dia-a-dia. Nesteprojeto re�ecte-se essa mesma ideia através da criação de um robô que é capaz derealizar a tarefa de tirar fotogra�as a pessoas que se colocam à sua frente.Este relatório descreve o trabalho que foi realizado no âmbito da unidade curricularProjeto de Informática na Licenciatura em Engenharia Informática da Escola Supe-rior de Tecnologia e Gestão da Guarda que consiste na criação de um robô interativoe autónomo.Após o estudo, procedeu-se ao desenvolvimento de uma aplicação desktop que faza interligação de todos os componentes utilizados para a criação do projeto, taiscomo o robô, uma câmara de vídeo e a aplicação em si. Esta aplicação permiteque o robô seja completamente autónomo e capaz de interagir com um utilizadorsem qualquer necessidade de introdução de comandos ou ordens por parte de umadministrador. Esta aplicação foi desenvolvida em C# na plataforma Visual Studio2010 e a programação do robô foi feita na linguagem roboBASIC num software como mesmo nome.

Palavras Chave

Robonova, OpenCV, Facebook, Interação Humano-Robô

ii

Page 7: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

Abstract

With the current evolution of technology in the �eld of robothics, the interactivityof a robot with a human being has a growing importance in the day-by-day basis. Inthis project, that same idea is re�ect with the creation of a robot which is capableof taking pictures to people that stand in front of it.This report describes the work that has been done in under the course Projeto deInformática, on Computer Science in the school Escola Superior de Tecnologia eGestão da Guarda, that consists in the programation of a interactive robot. Thisaplication was developed in C# in the Visual Studio 2010 platform and the robotcoding was made in roboBASIC on a software with the same name.

Key words

Robonova, OpenCV, Facebook, Interação Humano-Robô

iii

Page 8: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

Conteúdo

1 Introdução 2

1.1 Motivação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.2 Solução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.3 Contribuição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.4 Estrutura do documento . . . . . . . . . . . . . . . . . . . . . . . . . 41.5 De�nição do problema . . . . . . . . . . . . . . . . . . . . . . . . . . 51.6 Objectivos previstos . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2 Estado da arte 7

3 Metodologia e resultados esperados 9

3.1 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93.2 Descrição das tarefas . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

4 Análise de Requisitos 11

4.1 Diagrama de Blocos de Hardware . . . . . . . . . . . . . . . . . . . . 114.2 Diagrama de Blocos de Software . . . . . . . . . . . . . . . . . . . . . 12

5 Implementação da solução 13

5.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135.2 Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

5.2.1 Aplicação Principal . . . . . . . . . . . . . . . . . . . . . . . . 145.2.2 Biblioteca Facebook . . . . . . . . . . . . . . . . . . . . . . . 165.2.3 Biblioteca OpenCV . . . . . . . . . . . . . . . . . . . . . . . . 175.2.4 Bibliotecas .NET framework . . . . . . . . . . . . . . . . . . . 195.2.5 Software roboBASIC . . . . . . . . . . . . . . . . . . . . . . . 20

5.3 Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245.3.1 Robonova-I . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245.3.2 Giroscópio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275.3.3 Sensor de queda . . . . . . . . . . . . . . . . . . . . . . . . . . 285.3.4 Sensor infravermelhos de distância . . . . . . . . . . . . . . . . 295.3.5 Câmara de vídeo . . . . . . . . . . . . . . . . . . . . . . . . . 30

6 Conclusões e trabalho futuro 33

6.1 Conclusões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336.2 Trabalho Futuro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

iv

Page 9: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

A Programa principal 36

B Programa roboBASIC 40

Page 10: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

Lista de Figuras

1.1 Hitec Robonova-I. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

3.1 Mapa de Gantt. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

4.1 Diagrama de blocos das componentes de Hardware. . . . . . . . . . . 114.2 Diagrama de blocos das componentes de Software. . . . . . . . . . . . 12

5.1 Programa principal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145.2 Fluxograma do programa principal. . . . . . . . . . . . . . . . . . . . 155.3 Carregamento de teste no Facebook R©. . . . . . . . . . . . . . . . . . 175.4 Algumas funções do OpenCV. . . . . . . . . . . . . . . . . . . . . . . 185.5 Fluxograma roboBASIC. . . . . . . . . . . . . . . . . . . . . . . . . . 205.6 Leitura de motores em tempo real. . . . . . . . . . . . . . . . . . . . 215.7 Hitec Robonova-I. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245.8 Servomotor HSR-8498. . . . . . . . . . . . . . . . . . . . . . . . . . . 255.9 Placa de controlo MR-C3024. . . . . . . . . . . . . . . . . . . . . . . 265.10 Giroscópio Piezo Gyro PK3 . . . . . . . . . . . . . . . . . . . . . . . 275.11 Sensor de queda do Robonova-I . . . . . . . . . . . . . . . . . . . . . 285.12 Sensor de distância GP2D12 . . . . . . . . . . . . . . . . . . . . . . . 295.13 Câmara de vídeo de vídeo wireless. . . . . . . . . . . . . . . . . . . . 305.14 Modelo da nova cabeça. . . . . . . . . . . . . . . . . . . . . . . . . . 31

6.1 Sistema �nal com todos os componentes de hardware. . . . . . . . . . 34

vi

Page 11: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

Glossário

C# � Linguagem de programação orientada a objetos.

roboBASIC � Linguagem de programação do robô.

.NET� é uma iniciativa da empresa Microsoft, que visa uma plataforma única para

desenvolvimento e execução de sistemas e aplicações. Todo e qualquer código gerado

para .NET pode ser executado em qualquer dispositivo que possua um framework

de tal plataforma.

wrapper� é um layer de código que traduz a interface de uma biblioteca existente

para um interface compatível.

Assembly� é uma notação legível por humanos para o código de máquina que uma

arquitectura de computador especí�ca usa, utilizada para programar dispositivos

computacionais, como micro-processadores e micro-controladores.

vii

Page 12: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

Capítulo 1

Introdução

Nos tempos que correm a tecnologia faz parte do quotidiano, sendo os robôs umagrande fatia desta evolução tecnológica. Há uma necessidade crescente de automa-tizar processos que são realizados mais lentamente por uma pessoa normal ou quepodem pôr em risco o estado de saúde de um ser humano. Isto faz com que haja umdesenvolvimento de ferramentas e aplicações que utilizem robôs para efectuar estastarefas.

Falando agora um pouco da origem do conceito e da palavra, um robô é uma ma-nipulador reprogramável, multi-funcional, projectado para mover materiais, peças,ferramentas ou dispositivos especiais em movimentos variáveis programados para arealização de uma variedade de tarefas.[6] O termo robô teve sua origem numa peçateatral de Karel Capek em 1921, intitulada "R.U.R. (Rossum's Universal Robots)"e vem da palavra checa "robota"que signi�ca "escravo".[1]

O desenvolvimento inicial dos robôs baseou-se no esforço de automatizar as opera-ções industriais. Este esforço começou no século XVIII, na indústria têxtil, com oaparecimento dos primeiros teares mecânicos. Com o contínuo progresso da revolu-ção industrial, as fábricas procuraram equipar-se com máquinas capazes de realizare reproduzir, automaticamente, determinadas tarefas. No entanto, a criação deverdadeiros robôs não foi possível até à invenção do computador em 1940, e dos su-cessivos aperfeiçoamentos das partes que o constituem, nomeadamente, em relaçãoà dimensão.[2]

Foi também em meados do milénio passado que Assimov criou as leis robóticas emque descreve um conjunto de três leis que os robô devem obedecer para podereminteragir com os seres humanos. Estas leis foram futuramente interpretadas comosendo apenas leis �ccionais já que actualmente os robôs não existem para seremcópias exactas de um ser humano ou para serem uma nova espécie que possa pensarpor si mesma.[3]

1

Page 13: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

2 CAPÍTULO 1. INTRODUÇÃO

De qualquer forma o robô utilizado neste projeto é um robô já existente no mercadodenominado de Robonova-I (�gura 1.1) que tem como objectivo ajudar na criaçãode projectos educacionais.

Figura 1.1: Hitec Robonova-I.

Este robô, após a sua programação, é capaz de interagir com um ser humano deforma completamente autónoma obedecendo a um determinado conjunto de regrasimpostas pelo programador. Neste projeto o robô foi programado para ser capaz detirar fotogra�as, através duma câmara acopolada a este, movimentar-se utilizandoos seus motores das pernas e braços e também interagir com o utilizador, utilizandoa sintetização de voz para facilitar a comunicação. Vai ser utilizada a rede social doFacebook para fazer o carregamento da imagens online.

1.1 Motivação

A motivação original do projeto foi o desenvolvimento de uma aplicação revoluci-onária no mercado corrente, capaz de competir com as aplicações mais simples jáexistentes no campo da interação humano-robótica. Sendo um mercado em cons-tante desenvolvimento, há uma forte motivação para acompanhar o crescimento

Page 14: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

1.2. SOLUÇÃO 3

rápido das tecnologias interativas e aproveitando a oportunidade de apoiar o desen-volvimento tecnológico neste ramo e no ramo das redes sociais.

A motivação pessoal para o desenvolvimento deste projeto é a possibilidade de cons-truir um robô autónomo capaz de interagir com uma ou mais pessoas e captar umaimagem facial sem qualquer intervenção humana. O mundo da robótica é muito fas-cinante e vasto o que me levou a um crescente interesse pela matéria, principalmenteapós a criação e programação de robô para o concurso do Robô Bombeiro em 2012.Além disso o que mais me cativou foi a oportunidade de programar na linguagemC#, que sendo orientada a objetos a torna simples, e�caz e uma das minhas pre-feridas. Também o facto de ter de aprender uma nova forma de programação paraum robô, que neste caso é o roboBASIC, me apelou, já que é um forma de estendero meu conhecimento em programação.

1.2 Solução

A solução encontrada para a proposta que foi feita e de acordo com os requisi-tos pedidos e pretendidos foi a criação de uma aplicação desktop em C# que visacontrolar todos os aspectos da solução pretendida, tais como detecção de faces, car-regamento de imagens para uma rede social e controlo autónomo do robô. Para istoser possível vai ser utilizada uma variedade de bibliotecas freeware já existentes nomercado corrente que vão ser propriamente incluídas na aplicação. Estas bibliotecassão bastante completas e possibilitam-me criar uma aplicação simples e e�ciente.

1.3 Contribuição

A contribuição principal deste trabalho é o desenvolvimento, implementação e testesde uma aplicação de controlo de um robô interativo autónomo possibilitando assima criação de um completo sistema de captura de imagens faciais capaz de carregá-lasdirectamente para uma rede social sem ser necessário a introdução de comandos porparte de um utilizador.

1.4 Estrutura do documento

O documento compreende cinco capítulos, para além da presente introdução.No segundo capítulo é apresentado o estado da arte, onde fazemos referencia aalgumas das aplicações já existentes no mercado.No terceiro capítulo é descrita a metodologia a seguir e descrição das tarefas.No quarto capítulo é descrita a análise pormenorizada dos requisitos necessários daminha aplicação.No quinto capítulo descreve-se a implementação da solução proposta.Finalmente, no capítulo seis, são apresentadas as conclusões mais relevantes dotrabalho, e as perspectivas de desenvolvimento que se pretendem efectuar no futuro.

Page 15: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

4 CAPÍTULO 1. INTRODUÇÃO

1.5 De�nição do problema

Desenvolver uma aplicação capaz de interagir com um robô programável e capaz deo tornar completamente autónomo e interativo. A aplicação vai ter que ter ser capazde controlar o robô de modo a que este não necessite de qualquer introdução ou en-vio de comandos por parte de uma pessoa. Vai capturar imagens da câmara e fazera detecção de faces em tempo real para determinar se é possível tirar um fotogra�aou não e após esta captura, a aplicação vai fazer o carregamento automático para arede social Facebook. Vai ser possível à aplicação enviar automaticamente coman-dos para o robô no caso serem detectadas uma ou mais pessoas. A aplicação devepossuir todas as bibliotecas necessárias na pasta da aplicação para não ser requisi-tada nenhuma instalação extra ao utilizador. O programa deverá também recorreràs bibliotecas de sintetização de voz da Microsoft para ter forma de comunicar como utilizador.

Quanto à programação do robô, que vai ser feita em roboBASIC, vai ter responderprontamente aos comandos enviados pela aplicação principal. Vai ter também quemanter o robô numa posição estável e ter forma de detectar se ocorreu uma queda,à qual deve responder com o retorno do robô à sua posição ideal.

Os problemas iniciais que foram necessários resolver para a criação da aplicação sãoos seguintes:

• Como fazer a comunicação entre duas plataformas completamente diferentes.

• Como efectuar a detecção de um pessoa que passa a frente do robô.

• Como detectar faces para saber a altura exacta em que se tira a fotogra�a.

• Como fazer o carregamento de fotogra�as para uma rede social.

• Detectar uma eventual queda do robô.

1.6 Objectivos previstos

Os objectivos que pretendo atingir são:

• Tirar fotogra�as a quem se coloca à frente do robô.

• Colocar as fotogra�as na rede social Facebook.

• Manter o robô numa posição estável de forma a evitar quedas.

• Sintetizar voz arti�cial para a intereção com o utilizador.

• O robô efectuar movimentos de forma a facilitar esta intereção com o utiliza-dor.

Page 16: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

Capítulo 2

Estado da arte

Como a robótica é uma área que actualmente está a sofrer uma grande evoluçãoexiste uma imensa quantidade de aplicações dedicadas à sua crescente autonomia einteratividade com o ser humano. Existem aplicações que fazem com que os robôsrelembrem um ser humano em aspecto e acções, e também aplicações que permitemao um computador comunicar �uentemente com um ser humano através de texto ouvoz.

Uma destas aplicações é o CleverBot, uma espécie de um robô desenvolvido pararesponder e comunicar com uma pessoa numa conversa contínua e estruturada. Esterobô tem uma inteligência arti�cial bastante desenvolvida e consegue aprender novasfalar através da interacção com seres humanos. Há um estudo que diz que este robôtem respostas 59.3% humanas, enquanto que uma pessoa, nesse mesmo estudo, temrespostas 63% humanas[5]. Apesar de a diferença não ser muito grande, ainda seconsegue distinguir entre um robô e uma pessoa.

Na rede social do Facebook há um crescente número de aplicações desenvolvidas porutilizadores. Uma dessas aplicações é o Instagram, que por sua vez serve tambémpara fazer o carregamento de fotogra�as para redes sociais. Esta aplicação, original-mente desenvolvida para Android, permite a um utilizador registado no Facebookaplicar um �ltro directamente nas suas fotogra�as e compartilha-las directamenteonline. Este �ltro vai desde uma simples mudança de côr para preto-e-branco até�ltros avançados utilizados por fotógrafos pro�ssionais.

Existe uma inúmera quantidade de aplicações no campo da robótica e basicamentevivemos num mundo robotizado em que seria quase impossível viver como vive-mos actualmente, sem a existência de robôs, seja na área da indústria, na área dainvestigação ou na área do entretenimento.

5

Page 17: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto
Page 18: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

Capítulo 3

Metodologia e resultados esperados

3.1 Metodologia

A metodologia escolhida e utilizada para desenvolver, implementar e testar a apli-cação desktop foi o Desenvolvimento Ágil. Esta abordagem interactiva faz com queo cliente avalie o incremento do Software com alguma periodicidade, sendo que re-ceber um feedback constante torna-se bom para a equipa de trabalho pois facilitaas adaptações ao processo de desenvolvimento.

Os princípios do processo de Desenvolvimento Ágil são:

1. Indivíduos e interacções em vez de processos e ferramentas - Existiu sempreuma cooperação constante entre nós e o cliente em vez de mantermos a análiseinicial de requisitos.

2. Software a funcionar em vez de documentação abrangente - Ao longo do pe-ríodo de desenvolvimento da aplicação fomos tendo em conta, sempre quepossível, uma aplicação funcional para mostrar ao cliente, com o objectivo deo cliente nos dizer se era o pretendido ou o que faltava.

3. Colaboração do cliente em vez de negociação de contratos - O cliente estevesempre presente no desenvolvimento do projeto, assim garantíamos que está-vamos a avançar sempre no mesmo sentido.

4. Resposta a modi�cações em vez de seguir um plano - Foram feitas enumerasalterações nos requisitos do projeto ao longo do seu desenvolvimento, e nóstentámos sempre responder com e�cácia e rapidez.

O desenvolvimento ágil não descarta os métodos tradicionais tais como documen-tações, ferramentas e processos, planeamentos e negociações, mas procura dar aesses itens uma cotação secundária perante indivíduos e interacções, o bom funcio-namento de Software, colaboração do cliente e respostas e�cazes às mudanças. Umainteracção constante da parte do cliente é uma mais valia para qualquer projeto, poresses motivos deve ser um método a utilizar.

7

Page 19: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

8 CAPÍTULO 3. METODOLOGIA E RESULTADOS ESPERADOS

3.2 Descrição das tarefas

As principais tarefas de desenvolvimento da aplicação são:

• Tarefa 1 � Análise dos requisitos.

• Tarefa 2 � Pesquisa e obtenção de documentação.

• Tarefa 3 � Implementação da solução proposta.

• Tarefa 4 � Elaboração do relatório.

O Mapa de Gantt, da �gura 3.1 mostra como decorreu o desenvolvimento do projeto.

Figura 3.1: Mapa de Gantt.

Page 20: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

Capítulo 4

Análise de Requisitos

4.1 Diagrama de Blocos de Hardware

O diagrama de blocos de hardware da �gura 4.1 apresenta o �uxo de informaçãoentre todas as componentes de hardware e o modo como elas interagem. Servepara representar o objectos de estudo bem como a sua relação entre o ambiente.Descreve a ideia geral do sistema através de um recurso visual facilitando assim asua compreensão.

Figura 4.1: Diagrama de blocos das componentes de Hardware.

9

Page 21: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

10 CAPÍTULO 4. ANÁLISE DE REQUISITOS

4.2 Diagrama de Blocos de Software

O diagrama de blocos de hardware da �gura 4.2 mostra a organização e as ligaçõesentre a aplicação e as várias bibliotecas utilizadas. Este diagrama mostra que aaplicação é dependente das bibliotecas para o funcionamento correto.

Figura 4.2: Diagrama de blocos das componentes de Software.

As bibliotecas utilizadas neste diagrama de serão mais tarde pormenorizadas nocapítulo 5.

Page 22: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

Capítulo 5

Implementação da solução

5.1 Introdução

Uma vez que foi feito um estudo aprofundado na análise de requisitos era necessáriocomeçar a desenvolver o programa com ajuda das várias bibliotecas freeware jáexistentes e juntar todas as peças de hardware do robô e câmara para haver umasintonia completa entre a aplicação e todo o hardware utilizado. Este capitulo vaiser dividido em duas secções denominadas de Software e Hardware onde se explicarápormenorizadamente todas as componentes utilizadas no projeto.

Na secção de Software serão descritas todas as bibliotecas utilizadas assim como seexplica a metodologia utilizada na criação do programa principal. Foram resumidasas várias interacções entre as bibliotecas e a aplicação e serão descritos todos osmétodos utilizados de cada uma das bibliotecas. Nesta secção também será explicadoum pouco da programação do robô e os algoritmos utilizados na programação deste.

Na secção de Hardware serão descritas todas as componentes físicas deste projetoque são o robô, a câmara, o sensor infravermelhos que mede distâncias até um corpoquente e os vários cabos utilizados na comunicação entre o robô e o computador emque a aplicação está a correr. Todos os pormenores de cada um deste componentesserão descritos do modo mais simples possível.

Durante a implementação teve-se sempre em mente o resultado pretendido mastentei utilizar os métodos de criação de software mais fácil e e�cazmente possível demodo a fazer um programa com qualidade, rapidez e e�cácia.

11

Page 23: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

12 CAPÍTULO 5. IMPLEMENTAÇÃO DA SOLUÇÃO

5.2 Software

5.2.1 Aplicação Principal

Vou começar por descrever a aplicação principal e mais tarde explicarei as váriascomponentes desta. A aplicação principal tem como objectivo juntar as funcionali-dades de todas as bibliotecas utilizadas e criar as várias interacções entre estas. Vaiter um design simples onde aparece simplesmente a imagem capturada da câmara eum rectângulo à volta das faces detectadas não permitindo qualquer interacção doutilizador com a aplicação. No inicio da de�nição do problema era suposto a aplica-ção permitir a introdução de comandos na aplicação mas tal não foi implementadona solução �nal.Segue-se uma captura de ecrã da aplicação demonstrando o que foi descrito ante-riormente, uma aplicação com uma interface muito simples, com uma fotogra�a deuma pessoa onde está a ser detectada a face.

Figura 5.1: Programa principal.

Page 24: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

5.2. SOFTWARE 13

O programa principal vai ter o seguinte funcionamento:

• Procura uma pessoa que coloque à frente do robô, utilizando o sensor infra-vermelhos. Este passo é repetido até se encontrar uma pessoa.

• Procura a face da pessoa. Se não encontrar a face num determinado períodode tempo, volta ao primeiro passo.

• Veri�ca a distância da face, através do calculo do tamanho do rectângulocircundante.

• Se a face está muito perto, é pedido ao utilizador para se colocar um poucomais longe (através de voz e movimentação do robô).

• Se a face está muito longe, é pedido ao utilizador para se aproximar.

• Se a face estiver a uma distância dentro dos limites, é tirada uma fotogra�a eé guardada no computador.

• A fotogra�a é depois automaticamente colocada no Facebook.

• Volta ao inicio do programa.

Em seguida encontra-se o �uxograma dos passos descritos anteriormente.

Figura 5.2: Fluxograma do programa principal.

Page 25: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

14 CAPÍTULO 5. IMPLEMENTAÇÃO DA SOLUÇÃO

O código deste programa encontra-se anexado no �nal relatório.

5.2.2 Biblioteca Facebook

O Facebook R© é uma rede social que permite a partilha de informações, fotogra�as,vídeos, etc... O Facebook R© tem vindo a ser uma crescente forma de comunicação epartilha social, sendo uma das redes sociais mais utilizadas actualmente. O uso deuma rede social neste projeto tem como propósito a partilha de todas as fotogra�astiradas por esta aplicação, para que sejam possíveis ser visualizadas pelo publicogeral sem qualquer restrição. Foi escolhido o Facebook R© para este projeto, porquerealmente é uma das redes mais activas actualmente e grande parte dos utilizadoresdesta aplicação deverão ter acesso a uma conta no Facebook R©.

Para ser possível o acesso ao Facebook R© através da minha aplicação foi necessárioutilizar uma biblioteca freeware já existente no mercado, denominada de Facebo-okSDK. Esta biblioteca vai ser utilizada para efectuar todas as interacções entre aaplicação e a rede social do Facebook R©. Para esta funcionar é necessário obter umaccess token para aceder ao utilizador em questão, que no caso deste projeto é orobonova.ipg. Para obter o token é primeiro necessário efectuar o login na conta,que nesta aplicação é feito automaticamente e em background já que os dados foramintroduzidos anteriormente no código fonte. Após a autenticação é possível recorrera uma série de comandos que possibilitam, com por exemplo, o carregamento deimagens, post na wall do utilizador, likes, etc...

Neste caso vai ser apenas utilizada para fazer o carregamento directo da imagemcapturada da câmara para o feed do utilizador, possibilitando a todos os utiliza-dores do Facebook a sua visualização. Primeiro é criado uma instância da classeFacebookClient que recebe como parâmetro o access token obtido anteriormente.Depois é utilizado o comando Post, que recebe como parâmetros o caminho da ima-gem e a mensagem que a vai acompanhar. O resultado deste comando é uma variávelque contem informação sobre a execução, como por exemplo, se o carregamento foicompleto com sucesso ou se ocorreu algum erro.

FacebookClient fb = new FacebookClient("token");dynamic result = fb.Post("me/photos", new {message = "Teste", �le} );

Page 26: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

5.2. SOFTWARE 15

Segue-se um exemplo de um carregamento de uma imagem feito através da minhaaplicação:

Figura 5.3: Carregamento de teste no Facebook R©.

5.2.3 Biblioteca OpenCV

A biblioteca OpenCV é uma das bibliotecas freeware, de tratamento de imagem,mais utilizadas no mercado, já que é uma biblioteca bastante completa e documen-tada. O nome da biblioteca vem de Open (livre, freeware) + CV, que é uma siglade Computer Vision, que signi�ca Visão Computacional em português.

Ao utilizarmos esta biblioteca temos acesso a um imenso número de ferramentasque permite ao computador interpretar uma imagem do mundo real e devolver, porexemplo, um determinado conjunto de formas geométricas que foram detectadas naimagem, na forma de instâncias de classes, que podem ser posteriormente utilizadaspara outros objectivos, tais como serem desenhados no ecrã.

Segue-se uma imagem que contém uma pequena amostra das funções do OpenCV.

Page 27: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

16 CAPÍTULO 5. IMPLEMENTAÇÃO DA SOLUÇÃO

Figura 5.4: Algumas funções do OpenCV.

Como se pode ver na imagem, o OpenCV permite a deteção de objetos em temporeal, aplicação de transformações geométricas a imagens, segmentação, processa-mento de imagem, imagens 3D, entre muitas outras funções.

Neste projeto, sendo codi�cado em C#, não foi possível utilizar a biblioteca OpenCVjá que esta foi especi�camente desenhada para programar em C ou C++. Para serpossível utilizar o OpenCV tive de recorrer a um wrapper já existente e que me dáacesso a todos os comandos existentes na biblioteca OpenCV.O EmguCV é um .NET wrapper para a biblioteca OpenCV e neste projeto foiutilizado para obter acesso às imagens transmitidas pela câmara e também paraproceder à detecção facial em tempo real.O acesso às imagens da câmara é feito através da classe Capture, que é um objectoque contém os métodos de leitura das imagens em tempo real. O método utilizado,pertencente à classe Capture, é o QueryFrame que não recebe parâmetro e devolveum objecto Image que posteriormente vai ser copiado para a janela da aplicaçãoprincipal.

capture = new Capture(0);imageBox1.Image = capture.QueryFrame();

Para a detecção facial é utilizado um objecto CascadeClassi�er que vai receber comoparâmetro um �cheiro Haar, que por sua vez, contém as informações de milharesde faces, o que permite a comparação entre a imagem actual e esses dados. Todosos dados da imagem são comparados com os dados contidos no �cheiro Haar, ese houver uma ou mais correspondências, o objecto CascadeClassi�er devolve ascoordenadas das faces, sendo assim possível representá-las como um rectângulo.

Page 28: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

5.2. SOFTWARE 17

5.2.4 Bibliotecas .NET framework

As bibliotecas que se seguem são bibliotecas já incluídas no .NET framework.

Speech Synthesizer

Devido à necessidade da interactividade do robô com o utilizador, decidi recorrer àsintetização de voz arti�cial para possibilitar ao robô uma comunicação mais simplese e�caz, do que seria apenas a movimentação de braços ou sinalização através deLEDs.Por isso recorri à biblioteca da Microsoft, denominado de Speech Synthesizer, que éuma biblioteca que possibilita a sintetização de voz arti�cial. Procedi à criação deum objecto SpeechSynthesizer, no qual foi chamado o comando Speak, que recebecomo parâmetro de entrada a frase que se deseja sintetizar, e a reproduz para osistema de som prede�nido do Windows.

SpeechSynthesizer speaker = new SpeechSynthesizer();speaker.Speak("Hello world");

Como se pode veri�car é muito simples de usar e vai ter grande impacto na aplicação�nal.

System IO

Como a aplicação e o robô são programados em dois ambientes completamentediferentes, havia a necessidade de arranjar uma forma de comunicação universal quepossibilitasse a comunicação entre estes. A única forma que o robô possibilita é acomunicação através do protocolo RS-232, que é utilizado pelas porta série.Este protocolo já vem implementado na linguagem roboBASIC mas era necessárioarranjar forma de o utilizar na linguagem C#. A forma que eu encontrei foi recorrera uma biblioteca já existente e criada pela Microsoft, denominada de System.IO.A biblioteca System IO é uma biblioteca que permite o acesso às portal Serial docomputador, que vai ser a forma de comunicação entre o robô e a aplicação principal.Inicialmente é criado um objecto SerialPort com as de�nições que querem ser usadasnesta aplicação. Esse objecto tem métodos para a leitura da porta serial e para oenvio de dados através desta.Segue-se um exemplo da utilização desta biblioteca, onde é feito o envio da letra"A"através da porta série COM1:

SerialPort sp = new SerialPort("COM1", 9600, Parity.None, 8 , StopBits.One);sp.WriteLine("A");

Page 29: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

18 CAPÍTULO 5. IMPLEMENTAÇÃO DA SOLUÇÃO

5.2.5 Software roboBASIC

Para se efectuar a customização e programação do robô foi necessário recorrer auma nova linguagem denominada por roboBASIC. Esta linguagem contém todos osmétodos que permitem aceder e efectuar alterações em todos os componentes dorobô. É uma linguagem simples e de baixo nível que fazer relembrar Assembly. Emcada linha código é chamado um "método"e em seguida são introduzidos os seusparâmetro, se necessário.Neste projeto foi utilizada para o controlo de todos os motores do robô, leitura desensores, estabilidade do robô e leitura/escrita de dados na porta série.A imagem que se segue representa o �uxograma da aplicação codi�cada no roboBA-SIC.

Figura 5.5: Fluxograma roboBASIC.

O código fonte desta aplicação encontra-se em anexo no �nal do presente relatório.

Page 30: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

5.2. SOFTWARE 19

Segue-se um pequeno exemplo que em primeiro lugar modi�ca velocidade de repro-dução de musica para 230BPM e em seguida reproduz as notas CDE:

TEMPO 230

MUSIC "CDE"

Como se pode veri�car, a linguagem tem uma semântica muito simples e equiparávelao Assembly.O programa roboBASIC, que curiosamente tem o mesmo nome da linguagem deprogramação, foi o escolhido para efectuar a codi�cação e carregamento código parao robô. Além de facilitar estas duas tarefas, possibilita também a leitura em temporeal da posição de casa um dos servo-motores do robô e posteriormente a sua colo-cação no código fonte.Em baixo encontra-se uma imagem em que se pode veri�car a posição de cada umdos motores do robô:

Figura 5.6: Leitura de motores em tempo real.

Os motores estão divididos em subgrupos de 6, correspondendo cada grupo a cadaum dos membros. Ao clicar no botãoMove Insert de cada grupo, o programa originaas linhas de código que fazem com que os motores sejam colocados nessa posiçãoquando estas forem executadas. O comandoMOVE recebe como primeiro parâmetroo grupo que se deseja mover e os seis seguintes as posições em que desejam colocaros motores. Por exemplo:

MOVE G6A, 85, 165, 140, 79, 135, 100

MOVE G6B, 181, 18, 13, 63, 138, 100

MOVE G6C, 158, 32, 14, 59, 79, 100

MOVE G6D, 91, 10, 62, 100, 93, 100

Page 31: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

20 CAPÍTULO 5. IMPLEMENTAÇÃO DA SOLUÇÃO

Os grupos A e B correspondem aos membros superiores e os grupos C e D aosmembros inferiores. Quando estas linhas de código são executadas, colocam o robôna sua posição vertical inicial.O código que foi utilizado na programação do robô é em grande parte movimentaçãode motores para as suas diferentes posições. Além disso, apenas envia o valor dosensor de distância, recebe comandos para mudar de posição através da porta sériee detecta um eventual queda. Os restante cálculos são efectuado pela aplicaçãoprincipal.

Para a comunicação através do protocolo RS-232 são utilizado dois comandos, ERXe ETX. O comando ERX, que é o comando de recepção de dados, recebe três parâ-metros: em primeiro recebe a velocidade de recepção, em segundo lugar a variávelonde se deseja guardar o recebido e por ultimo a label de destino no caso de terocorrido um erro. As labels funcionam de igual forma que o Assembly, em que oprograma pode chamá-las em qualquer altura da execução e as linhas imediatamentea seguir à label são executadas.Segue-se um pequeno programa que reproduz uma musica quando recebe dados naporta série:

DIM B AS BYTEread:ERX 9600, B, readMUSIC "CDE"GOTO read

Como se pode ver, o programa quando é executado cria uma variável B onde vaiguardar o valor recebido. Depois começa a tentar ler a porta série e se não forpossível volta sempre para o mesmo comando até o conseguir. Quando �nalmentereproduz a musica o programa volta à label read que reinicia a execução.O comando ETX, que serve para enviar dados, tem apenas dois parâmetros: avelocidade de transmissão e os dados a serem transmitidos (obrigatoriamente dotamanho de 1 byte).

DIM B AS BYTEB = &H41ETX 9600, B

Este programa envia através da porta série o valor hexadecimal 41, que correspondeao código ASCII da letra A.

Page 32: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

5.2. SOFTWARE 21

Outro comando de grande relevância é o comando AD(x) que lê o valor de umadeterminada porta analógica (o valor é colocado no lugar da letra x) e a guardanuma variável. O comando A = AD(1) guarda o valor da porta analógica 1 navariável A. Este comando vai ser utilizado para ler os valores dos sensores utilizadosno robô, que são o sensor de distância e o sensor de queda.

Existem também comandos de operação de variáveis tais como o AND, OR, XOR,etc.. ou também comandos para criação de ciclos e condições tais como IF THENELSE e WHILE. Existe uma inúmera quantidade de comandos que podem ser uti-lizados para a programação do Robonova-I mas não me parece relevante descrevermais nenhum. A programação do robô foi de�nitivamente o maior obstáculo nesteprojeto já que tive a necessidade de aprender uma nova linguagem e um novo am-biente de programação. Apesar de ser complicado ao inicio torna-se simples ao �mde algum tempo, já que também já sabia programar em Assembly e as semelhançassão evidentes.Este software e linguagem de programação foram desenvolvidos pela empresa Hitec,que é também a empresa que desenvolveu o robô utilizado no projeto, o Robonova-I.Tem como objectivo a introdução de controlo e programação de robôs num ambientemais educacional e ajuda a introduzir alguns conceitos de robótica. A documentaçãodesta aplicação encontra-se no site o�cial da Hitec (http://www.hitecrcd.co.jp/)[4].

Page 33: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

22 CAPÍTULO 5. IMPLEMENTAÇÃO DA SOLUÇÃO

5.3 Hardware

Neste secção descreve-se o mais detalhadamente possível todas as componentes físi-cas utilizadas na criação deste projeto. Estas componentes incluem o robô, a câmarae os sensores necessário para detectar pessoas e manter o robô numa posição estável.

5.3.1 Robonova-I

Esta é a peça mais valiosa e mais importante do projeto. É um robô desenvolvidopela empresa Hitec e tem como �m a introdução educacional ao mundo da robótica.

Figura 5.7: Hitec Robonova-I.

O robô é constituído por 16 servo-motores, uma placa de controlo que contém umprocessador, uma bateria de pequena dimensão e uma estrutura em metal que servede suporte a todos os componentes.

Page 34: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

5.3. HARDWARE 23

Servomotores

Servomotor é uma máquina, mecânica ou electromecânica, que apresenta movimentoproporcional a um comando, em vez de girar ou se mover livremente sem um controlomais efectivo de posição como a maioria dos motores; servo-motores são dispositivosde malha fechada, ou seja: recebem um sinal de controle, veri�cam a posição actual,actuam no sistema indo para a posição desejada. Em contraste com os motorescontínuos que giram inde�nidamente, o eixo dos servo motores possui a liberdadede apenas cerca de 180 graus mas são mais precisos quanto à posição.No Robonova-I existem 16 no total, estando distribuídos da seguinte forma: 3 servo-motores para cada membro superior e 5 servo-motores para cada membro inferior.São servo-motores HSR-8498 e são produzidos também pela empresa Hitec.Para o meu projeto, foi criada uma nova cabeça para o robô onde se encontra alojadaa câmara de vídeo.

Figura 5.8: Servomotor HSR-8498.

Especi�cações:

• Interface: Protocolo HMI

• Voltagem de operação: 4.8V até 6.0V

• Ângulo de operação: 180o

• Torque (6.0V): 10kg/cm

• Velocidade (6.0V): 0.20 seg/60o

• Peso: 55g

• Tamanho: 40 x 20 x 37mm

Page 35: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

24 CAPÍTULO 5. IMPLEMENTAÇÃO DA SOLUÇÃO

Placa de Controlo

Para o robô ser programado, é necessário existir um centro de computação no robô eum lugar para alojar o programa codi�cado pelo utilizador. É nesta pequena placa,que se encontra na parte anterior do robô, que ocorrem todos os cálculos e é ondese encontra guardado o programa feito em roboBASIC.No Robonova-I é utilizada a placa MR-C3024 e tem uma grande variedade de portasde entrada e saída, desde 24 portas de servo-motores até 16 portas de entrada paraacessórios tais como giroscópios ou sensores de queda.

Figura 5.9: Placa de controlo MR-C3024.

Especi�cações:

• CPU: Atmel ATMEGA128 8bit RISC

• Portas IO: 24

• Portas servo: 24

• Portas analógicas: 8

• Memória para programas: 32KBytes

• Controlo de LCD

• Comunicação em série RS-232

Page 36: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

5.3. HARDWARE 25

5.3.2 Giroscópio

Para o robô se manter numa posição estável, é necessário recorrer a um sensordenominado por giroscópio. Este sensor consegue detectar qual a sua posição ac-tual, relativamente ao robô, e ao detectar alterações efectua pequenos ajustes nosservomotores para que o robô seja mantido sempre na posição vertical.No meu projeto utilizei um giroscópio Piezo Gyro PK3. Tem capacidade para de-tectar alterações apenas numa direcção, que no meu robô vai ser para frente e paratrás.

Figura 5.10: Giroscópio Piezo Gyro PK3

Especi�cações:

• Voltagem de operação: 4.8V até 6.0V

• Corrente (a 4.8V): 10mA

• Temperatura: -5oC até 60oC

• Peso: 7g

• Tamanho: 26 x 27 x 11mm

Page 37: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

26 CAPÍTULO 5. IMPLEMENTAÇÃO DA SOLUÇÃO

5.3.3 Sensor de queda

No caso de uma eventual queda do robô, apesar de o giroscópio detectar pequenasvariações na inclinação do robô, não consegue detectar uma queda. Para isso foiutilizado um pequeno sensor, produzido também pela empresa Hitec, chamado deRobonova-I Tilt Sensor, ou sensor de queda.Este sensor consegue detectar qualquer tipo de queda, quer seja para a frente, paratrás ou para qualquer um dos lados e informar o robô.

Figura 5.11: Sensor de queda do Robonova-I

Especi�cações:

• Voltagem de operação: 3V até 6.0V

• Corrente (a 5V): 1mA

• Temperatura: -30oC até 60oC

• Resolução: <0.1o

• Ângulo de medida: -60o a +60o

• Peso: 5g

• Tamanho: 15 x 19 x 12mm

Page 38: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

5.3. HARDWARE 27

5.3.4 Sensor infravermelhos de distância

Para ser detectada uma pessoas que passa à frente do robô utilizou-se um sensorinfravermelhos que consegue detectar qualquer tipo de corpo quente que emita ondasinfravermelhas.Foi utilizado um sensor GP2D12 produzido pela empresa Sharp. Este sensor conse-gue detectar objectos até 80 centímetros de distância.

Figura 5.12: Sensor de distância GP2D12

Especi�cações:

• Voltagem de operação: 4.5V até 5.5V

• Corrente (a 5V): 50mA

• Temperatura: -10oC até 60oC

• Distância: de 10cm a 80cm

• Peso: 12g

• Tamanho: 44 x 13 x 14 mm

Page 39: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

28 CAPÍTULO 5. IMPLEMENTAÇÃO DA SOLUÇÃO

5.3.5 Câmara de vídeo

Para se fazer a detecção de faces e captura de imagens foi utilizada uma câmara devídeo de vídeo wireless, que foi mais tarde acoplada ao robô através da construçãode uma nova cabeça.As imagens capturadas pela câmara são enviadas para um receptor de ondas rá-dio que por sua vez as envia para o programa principal através da porta USB docomputador.

Figura 5.13: Câmara de vídeo de vídeo wireless.

Especi�cações da câmara:

• Iluminação: 1 Lux

• Frequência: 1.2MHz

• Voltagem: 8V

• Alcance do sinal: 100 metros

• Resolução: 640x480 pixeis

• Peso: 18g

• Tamanho: 27 x 32 x 21mm

Page 40: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

5.3. HARDWARE 29

Esta cabeça foi desenhada pelo professor Luís Miguel Lourenço e foi imprimida naimpressora 3D do Laboratório de Prototipagem Rápida do IPG. Foi desenhada nosoftware AutoCAD 3D, da AutoDesk.

Figura 5.14: Modelo da nova cabeça.

Page 41: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto
Page 42: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

Capítulo 6

Conclusões e trabalho futuro

6.1 Conclusões

Após a �nalização do projeto, conclui-se que todos os objetivos iniciais foram cum-pridos, à exepção da deteção de quedas do robô. Isto deveu-se à má ou imprópriadocumentação que acompanhava o sensor de queda no acto da sua aquisição. Mesmoapós extensivos testes e troca de sensores não foi possível �nalizar este objetivo.

Em relação ao hardware utilizado ao longo do projeto, todo ele facultado pelo Insti-tuto Politécnico da Guarda, foi de fácil manuseamento apesar do pequeno problemacom o sensor de queda. Foi possível a interação entre todos estes componentes oque levou a um desenvolvimento simples e e�caz.

As bibliotecas que foram implementadas neste projeto estavam também extensiva-mente documentadas, o que permitiu a sua introdução no projeto sem qualquer tipode problema. Sendo todas estas codi�cadas em C#, à exepção do OpenCV, que porsua vez tem um wrapper de fácil utilização, tornou-se mais simples a interação entretodas elas sem ser necessário recorrer a outras linguagens. A maior di�culdade foiencontrar forma de efectuar a comunicação entre a aplicação principal e o softwarede programação do robô, que após uma pesquisa de protocolos utilizados pela duasplataformas, a escolha da comunicação serial foi óbvia.

Segue-se uma imagem do sistema �nal onde estão representados todos os compo-nentes de hardware utilizados neste projeto.

31

Page 43: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

32 CAPÍTULO 6. CONCLUSÕES E TRABALHO FUTURO

Figura 6.1: Sistema �nal com todos os componentes de hardware.

6.2 Trabalho Futuro

Como trabalho futuro de modo a tornar a aplicação o mais completa possível, se-ria possibilitar ao administrador da aplicação uma maior customização do robô efacultar-lhe acesso a comandos de controlo deste, tais como comandos de movimen-tos, ajustes na posição do robô ou visualização de fotogra�as já captadas com estaaplicação.

Para além de novos comandos na aplicação, seria óptimo fazer também um "up-grade"ao hardware e tornar o robô completamente wireless, ou seja, remover qual-quer cabo que esteja a conectá-lo à alimentação ou ao PC, como o cabo série, atravésda utilização de um dispositivo bluethoot para a comunicação entre o PC e o Robo-nova. Para isto ser possível seria necessário encontrar também uma nova forma dealimentação do robô de câmara, já que a bateria utilizada actualmente é volumosae pesada, o que retirar mobilidade ao robô.

Poderão ser também implementados novos sensores, tais como um sensor de tem-peratura para não confundir objectos "frios", que passem à frente do robô, compessoas, que emitem calor. Um outro sensor possível, seria um sensor sonoro paraajustar o volume de emissão de voz sintetizada consoante o barulho exterior ao robô.

Page 44: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

Bibliogra�a

[1] Isaac Assimov. The vocabulary of science �ction. Asimov's Science Fiction,1979.

[2] Citi. História da robótica. http://www.citi.pt/. Visitado a 15 de Novembro de2012.

[3] Desconhecido. A história da robótica. ftp://novell.demec.ufmg.br/. Visitado a15 de Novembro de 2012.

[4] Hitec. Robobasic command instruction manual v2.10.http://www.hitecrcd.co.jp/support/down/software/pdf/roboBASIC Visitado a14 de Novembro de 2012.

[5] India Techniche 2011, IIT Guwahati. Cleverbot comes very close to passing theturing test. http://cleverbot.com/human. 3 de Setembro de 2011.

[6] Carnegie Mellon University. The robotics institute. http://www.ri.cmu.edu/.Visitado a 15 de Novembro de 2012.

33

Page 45: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto
Page 46: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

Apêndice A

Programa principal

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using Emgu.CV;using Emgu.CV.UI;using Emgu.CV.Structure;using Emgu.Util;using System.Speech.Synthesis;using Facebook;using System.IO;using Emgu.CV.CvEnum;using System.Diagnostics;using System.Media;using System.IO.Ports;namespace RobonovaIPG{public partial class Form1 : Form{Capture capture;SpeechSynthesizer speaker = new SpeechSynthesizer();FacebookClient fb;private HaarCascade haar;private Rectangle rect;private Stopwatch sw = new Stopwatch();private bool fotografar = false;private int framessemface = 0;private int framescomface = 0;SerialPort sp;

35

Page 47: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

36 APÊNDICE A. PROGRAMA PRINCIPAL

public Form1(){InitializeComponent();capture = new Capture(0);Application.Idle += ProcessFrame;fb = new FacebookClient("token");Directory.CreateDirectory("fotos");sp = new SerialPort("COM1");sp.BaudRate = 9600;sp.Parity = Parity.None;sp.StopBits = StopBits.One;sp.DataBits = 8;sp.Handshake = Handshake.None;try{sp.Open();sp.ReadTimeout = 500;}catch (System.Exception ex){}}private void CarregarFoto(){DateTime dt = DateTime.Now;string imgname = "rnipg"+ dt.ToString("ddMMyyyyHHmmss") + ".jpg";capture.QueryFrame().Rotate(270, new Bgr()).Save(@"fotos

"+ imgname);string attachementPath = @"fotos

"+ imgname;(new SoundPlayer(@"camera.wav")).Play();using (var �le = new FacebookMediaStream{ContentType = "image/jpeg",FileName = Path.GetFileName(attachementPath)}.SetValue(File.OpenRead(attachementPath))){dynamic result = fb.Post("me/photos",new { message = "Carregamento efectuado a partir do RobonovaIPG", �le });}}private void Form1_Load(object sender, EventArgs e){haar = new HaarCascade("haarcascade_frontalface_default.xml");sw.Start();}

Page 48: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

37

private void ProcessFrame(object sender, EventArgs arg){Image<Bgr, Byte> ImageFrame = capture.QueryFrame();double i = 270;ImageFrame = ImageFrame.Rotate(i, new Bgr());if (ImageFrame != null){Image<Gray, byte> grayframe = ImageFrame.Convert<Gray, byte>();var faces = grayframe.DetectHaarCascade(haar, 1.4, 4,HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, new Size(25, 25))[0];foreach (var face in faces){rect = face.rect;ImageFrame.Draw(face.rect, new Bgr(Color.Green), 3);break;}}imageBox1.Image = ImageFrame;if (rect.Height == 0 || rect.Width == 0){if (sw.ElapsedMilliseconds > 3000){framessemface++;framescomface = 0;}}else{if (sw.ElapsedMilliseconds > 5000){if (rect.Height < 150 || rect.Width < 150){ fotografar = false;speaker.SpeakAsync("You are too far. Please come closer.");sw.Restart();sp.Write("A");}else if (rect.Height > 250 || rect.Width > 250){fotografar = false;speaker.SpeakAsync("You are too close. Please step back.");sw.Restart();sp.Write("B");}else{if (fotografar)

Page 49: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

38 APÊNDICE A. PROGRAMA PRINCIPAL

{fotografar = false;CarregarFoto();}else{speaker.SpeakAsync("Perfect. Hold still!");fotografar = true;sw.Restart();}}}}rect = new Rectangle(0, 0, 0, 0);}}}

Page 50: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

Apêndice B

Programa roboBASIC

DIM B AS INTEGERDIM A AS INTEGERDIM NDET AS INTEGERDIM DET AS INTEGERDIM PS AS BYTEHIGHSPEED SETONDIR G6A,1,0,0,1,0,0DIR G6B,1,1,1,1,1,1DIR G6C,0,0,0,0,0,0DIR G6D,0,1,1,0,1,0'== motor start position read ===================TEMPO 230MUSIC "CDE"GETMOTORSET G24,1,1,1,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,1,1,0SPEED 2MOTOR G24NDET = 5DET = 0GOSUB standard_pose�======gyro code FOR forward-backward stability with leg shifts AND arm

swings======�GYROSET tells both LEG SERVO sets TO initialize�tell gyro 1 TO a�ect ankle AND knee servos. zeros are FOR una�ected servosGYROSET G6A, 0, 1, 1, 0, 0, 0GYROSET G6D, 0, 1, 1, 0, 0, 0'�tell both ARM SERVO sets TO initialize�tell gyro 1 TO a�ect shoulder servos ON each arm, again zeros are FOR unaf-

fected servosGYROSET G6B, 1, 0, 0, 0, 0, 0 'gyro1=shoulder, the rest are ZERO FOR NOT

being used...GYROSET G6C, 1, 0, 0, 0, 0, 0 'gyro1=shoulder, nada... =================================�GYRODIR tells leg sets direction of movement

39

Page 51: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

40 APÊNDICE B. PROGRAMA ROBOBASIC

�moves knee SERVO forward OR back depending ON direction of push, hencevalue of 1

�AND the ankle slot is set TO ZERO FOR backward movement. Yes, zerosmatter here.

GYRODIR G6A,0,0,1,0,0,0GYRODIR G6D,0,0,1,0,0,0'�tell arm sets direction of movement�moves shoulders forward OR backward depending ON direction of pushGYRODIR G6B,0,0,0,0,0,0GYRODIR G6C,0,0,0,0,0,0�=======================================================================�GYROSENSE tells leg sets their sensitivity, 0 - 255.�use this along with the gain adjustment screw ON the gyro TO perfect balancingGYROSENSE G6A, 0,240,240, 0, 0, 0GYROSENSE G6D, 0,240,240, 0, 0, 0'�tell arm sets their sensitivity, 0 - 255.�use this along with the gain adjustment screw ON the gyro TO perfect arm

swingsGYROSENSE G6B, 60,0,0, 0, 0, 0GYROSENSE G6C, 60,0,0, 0, 0, 0�=======================================================================MAIN:GOSUB readsensorGOSUB readerxGOTO MAINreadsensor:B = AD (1)IF B < 4 THEN B = 4B = B - 3B = 6787 / BIF B > 70 OR B < 20 THENGOSUB forarangeELSEGOSUB dentrorangeENDIFRETURNreaderx:ERX 9600, PS, readfailIF PS = &H42 THENGOSUB toofarELSEIF PS = &H41 THENGOSUB toocloseELSEIF PS = &H43 THENGOSUB hello

Page 52: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

41

ENDIFRETURNreadfail:RETURNforarange:B = 0NDET = NDET +1IF NDET = 3 THENMUSIC "EDC"DET = 0ENDIFRETURNdentrorange:DET = DET + 1IF DET = 3 THENMUSIC "CDE"NDET = 0ENDIFRETURNstandard_pose:MOVE G6A, 100, 76, 145, 93, 100, 100MOVE G6D, 100, 76, 145, 93, 100, 100MOVE G6B, 100, 30, 80, 100, 100, 100MOVE G6C, 100, 30, 80, 100, 100, 100WAITRETURNtoofar:MOVE G6B,189, 29, 81, 100, 100, 100MOVE G6C,189, 34, 83, 100, 100, 100WAITMOVE G6B,188, 104, 92, 100, 100, 100MOVE G6C,189, 100, 95, 100, 100, 100WAITGOSUB standard_poseRETURNtooclose:MOVE G6B,189, 29, 81, 100, 100, 100MOVE G6C,189, 34, 83, 100, 100, 100WAITMOVE G6C,188, 21, 21, 100, 100, 100MOVE G6B,188, 18, 27, 100, 100, 100WAITGOSUB standard_poseRETURNhello:RETURN

Page 53: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

42 APÊNDICE B. PROGRAMA ROBOBASIC

SPEED 10MOVE G6A,100, 130, 120, 80, 110, 100MOVE G6D,100, 130, 120, 80, 110, 100MOVE G6B,150, 160, 10, 100, 100, 100MOVE G6C,150, 160, 10, 100, 100, 100WAITMOVE G6A, 80, 155, 85, 150, 150, 100MOVE G6D, 80, 155, 85, 150, 150, 100MOVE G6B,185, 40, 60, 100, 100, 100MOVE G6C,185, 40, 60, 100, 100, 100WAITMOVE G6A, 75, 165, 55, 165, 155, 100MOVE G6D, 75, 165, 55, 165, 155, 100MOVE G6B,185, 10, 100, 100, 100, 100MOVE G6C,185, 10, 100, 100, 100, 100WAITMOVE G6A, 60, 165, 30, 165, 155, 100MOVE G6D, 60, 165, 30, 165, 155, 100MOVE G6B,170, 10, 100, 100, 100, 100MOVE G6C,170, 10, 100, 100, 100, 100WAITMOVE G6A, 60, 165, 25, 160, 145, 100MOVE G6D, 60, 165, 25, 160, 145, 100MOVE G6B,150, 60, 90, 100, 100, 100MOVE G6C,150, 60, 90, 100, 100, 100WAITMOVE G6A,100, 155, 25, 140, 100, 100MOVE G6D,100, 155, 25, 140, 100, 100MOVE G6B,130, 50, 85, 100, 100, 100MOVE G6C,130, 50, 85, 100, 100, 100WAITGOSUB standard_posebackward_standup:SPEED 10MOVE G6A,100, 10, 100, 115, 100, 100MOVE G6D,100, 10, 100, 115, 100, 100MOVE G6B,100, 130, 10, 100, 100, 100MOVE G6C,100, 130, 10, 100, 100, 100WAITMOVE G6A,100, 10, 83, 140, 100, 100MOVE G6D,100, 10, 83, 140, 100, 100MOVE G6B, 20, 130, 10, 100, 100, 100MOVE G6C, 20, 130, 10, 100, 100, 100WAITMOVE G6A,100, 126, 60, 50, 100, 100MOVE G6D,100, 126, 60, 50, 100, 100

Page 54: Instituto Politécnico da Guarda RobonovaIPG - Robô ...bdigital.ipg.pt/dspace/bitstream/10314/1799/1/Marco Almeida_1008644... · De qualquer forma o robô utilizado neste projeto

43

MOVE G6B, 20, 30, 90, 100, 100, 100MOVE G6C, 20, 30, 90, 100, 100, 100WAITMOVE G6A,100, 165, 70, 15, 100, 100MOVE G6D,100, 165, 70, 15, 100, 100MOVE G6B, 30, 20, 95, 100, 100, 100MOVE G6C, 30, 20, 95, 100, 100, 100WAITMOVE G6A,100, 165, 40, 100, 100, 100MOVE G6D,100, 165, 40, 100, 100, 100MOVE G6B,110, 70, 50, 100, 100, 100MOVE G6C,110, 70, 50, 100, 100, 100WAITGOSUB standard_poseRETURN