Conforme ilustrado na Figura a seguir, o sistema é composto por três softwares:

software do sistema de aquisição de dados;

software do sistema de processamento principal;

software do sistema de processamento externo;

\fbox{\includegraphics[width=13cm]{arquitetura.eps}}

O software do sistema de aquisição de dados tem as funções de controlar o conversor analógico digital que está ligado aos giroscópios e acelerômetros, obter o valor do nível de tensão disponibilizado por cada um a uma determinada freqüência, converter as informações em um protocolo que pode utilizar uma codificação ASCII ou simplesmente dados do tipo inteiro e transmitir esses dados por RS232 através de um canal sem fio que utiliza a tecnologia BlueThooth.

Para isso conta com dois modos de funcionamento: Modo de configuração e modo de transmissão de dados. Como esse software foi desenvolvido e disponibilizado pela Sparkfun eletronics, sua arquitetura não está descrita neste trabalho.

O software do sistema de processamento principal deve ser capaz de interpretar comandos provindos de dispositivos externos por uma interface RS232 implementada por um canal sem fio BlueTooth , ou de um algoritmo de controle programado previamente; determinar as posições instantâneas de cada motor através do gerador de movimentos; controlar os motores para que executem os movimentos obtidos; além de determinar a postura e posição do robô através de um cálculo envolvendo os valores obtidos pelos giroscópios e acelerômetros, as informações referentes ao contato dos pés com o solo e a posição de cada motor. Prover uma interface para o carregamento de novos comandos e de algoritmos de Inteligência artificial também são requisitos desse software.

Um software que roda em um sistema de processamento externo, que pode ser um computador pessoal, tem como principal função prover uma interface amigável com o usuário para envio de comandos; deve prover a comunicação com o robô para a transferência de algoritmos e envio desses comandos; obter os sinais dos sensores disponibilizados pelo sistema de aquisição de dados e executar um processamento de sinais mais sofisticado; e produzir novos comandos através da associação dos comandos executados previamente, produzindo algoritmos na linguagem de programação C que será compilado para linguagem nativa do micro-controlador LPC 2124 e enviado ao sistema de processamento principal.

O código do sistema de processamento principal e sistema de processamento externo estão listados no apêndice \ref{apendice}. Segue uma breve descrição da implementação desses.

Software do Sistema de Processamento Principal

O software do sistema de processamento principal foi implementado na linguagem C com o auxílio da ferramenta $\mu$vision. Conforme ilustrado na Figura \ref{fig:modulosprincipal} o código está dividido em sete módulos descritos a seguir:

\fbox{\includegraphics[width=6cm]{modulosprincipal.eps}}

Uart - Esse módulo apresenta as rotinas responsáveis pela comunicação com o sistema de processamento externo e sistema de aquisição de dados. Para isso conta com rotinas de configuração, transmissão e recepção de dados para Uart0 e Uart1, que provêm a comunicação com cada sistema respectivamente.

Clock - Esse módulo apresenta funções de configuração do microcontrolador.

Main - O módulo Main determina o fluxo principal de processamento. Ele inicia com chamadas às rotinas de configuração dos outros módulos e, em seguida, entra em loop, executando uma máquina de estados capaz de receber os dados externos a partir de chamadas à rotinas do módulo Uart, interpretar comandos e executar as rotinas responsáveis por cada um deles que estão implementadas no módulo Movimentos.

Timer - O módulo timer é responsável pela configuração dos relógios do sistema e fazer a contagem de tempo para gerar o sinal de PWM para os motores. Para essa segunda função ele utiliza os 4 geradores de interrupção de cada um dos 2 timers do micro-controlador.

O primeiro gerador de interrupção é responsável pela subida do sinal de controle de todos os motores a cada período de 20 mS. Os outros 7 estão relacionados a variáveis controladas pelo módulo movimento e são responsáveis pela descida do sinal de controle de cada motor, determinando assim a largura de pulso desses.

Saida - Esse módulo possui funções de configuração dos pinos de entrada e saída de propósito geral do micro-controlador e determina o nível de tensão alto ou baixo em cada um dos pinos ligados ao circuito eletrônico de controle de cada motor e ainda a leitura dos pinos relacionados com os sensores de contato dos pés. Efetua a interface entre o micro-controlador e os circuitos externos.

Movimentos - Esse módulo possui a implementação das funções de comando que são chamadas pelo módulo main e determina o valor das variáveis que definem a posição de cada motor a partir de estruturas seqüenciais de movimento e posicionamento de motores que já foram previamente gravadas e podem ser modificadas ou adicionadas a qualquer momento.

Esse módulo é responsável por determinar a postura do robô, executando cálculos que tem como entrada os valores obtidos pelos sensores que são disponibilizados pelo módulo Uart e saída, e valores referentes ao ângulo de cada junta que estão disponíveis nas variáveis globais do sistema.

Para simplificação do processamento e não comprometimento do fluxo principal do programa o sistema de processamento efetua cálculos apenas referentes à postura do robô. Para isso os valores dos giroscópios são obtidos sem passar por rotinas de processamento digital de sinais, por causa disso surge um erro na informação da inclinação que cresce com o tempo. Para exclusão desse erro, em momentos que o robô se encontrar com os dois pés totalmente em contato com o solo ocorre uma pausa na atuação de todos os motores de forma a obter um sistema estático e uma leitura dos acelerômetros que contam apenas com a aceleração gravitacional permite a determinação da inclinação instantânea do sistema e um cálculo considerando a posição de todas as juntas determina a postura do robô.

Software do Sistema de Processamento Externo

O software do sistema de processamento externo que deve ser executado em um computador pessoal com sistema operacional Windows, foi desenvolvido com a ferramenta de programação visual Delphi 7.

Para efetuar a comunicação serial com o sistema de processamento principal e sistema de aquisição de dados foi utilizado um componente de código livre chamado comport \cite{comport:06}, que habilita a comunicação serial no protocolo RS232 através de funções da API do Windows.

O sistema conta com uma janela de configuração, onde podem ser determinados os parâmetros da comunicação como velocidade (BaudRate), Porta do PC, e formato dos pacotes de dados. Essa janela pode ser visualizada na Figura a seguir.

\fbox{\includegraphics[width=6cm]{remotoconfig.eps}}

Outra janela provê a interface de controle com o usuário e possui em sua parte principal controles para abertura e fechamento da porta de comunicação, um controle para execução da janela de configuração e controles para o envio de comandos que permitem o envio para a porta serial de strings no formato ASCII ou seqüência de comandos através de valores inteiros no sistema de numeração hexadecimal.

Um controle de formulários presente na segunda parte da janela de interface pode ser selecionado para exibir informações relativas ao ângulo de cada junta no formato ASCII ou através de valores hexadecimais ou ainda informações provenientes dos sensores, bastando para isso a seleção da respectiva porta de comunicação na janela de configuração.

Outro formulário presente no mesmo controle armazena a seqüência de comandos enviados ao robô e permite a edição gravação ou carregamento de seqüências de comandos. Esse formulário ainda apresenta controles para execução da seqüência de comandos a uma velocidade que pode ser determinada pelo temporizador. A janela de interface com o formulário de comandos habilitado pode ser visualizada na Figura a seguir.

\fbox{\includegraphics[width=13cm]{remotointerface.eps}}

As seqüências de comandos ainda podem se tornar um novo comando com a execução do controle [Criar Algoritmo] que gera um código, na linguagem C, que representa essa seqüência de comandos e é exibido no formulário [Algoritmo]. Esse código deve ser adicionado ao restante do código do módulo [Movimentos] e depois de compilado para a arquitetura do micro-controlador LPC 2124 deve ser carregado no sistema de processamento principal. Um mneumônico hexadecimal é associado a esse novo comando que poderá ser executado a qualquer momento.

Controle do Robô

De maneira a deixar o código acessível a qualquer programador, sobretudo aos que não têm conhecimentos a respeito da arquitetura de micro-controladores, permitir que os programas possam ser evoluídos através do reuso do código, e ainda, habilitar a portabilidade entre sistemas de processamento, todas as funcionalidades estão implementadas por funções modulares. Para melhor organização, as funcionalidades foram classificadas em cinco níveis de complexidade.<\p>

Em um nível de abstração mais baixo, denominado Nível de Configuração, existem funções que servem para configurar os registradores básicos do micro-controlador como direção dos pinos de entrada e saída ou período e marcação dos temporizadores. Dessa forma usuários que não possuem conhecimentos específicos sobre a programação de micro-controladores ficam capazes de desenvolver sistemas para o robô.

Funções que implementam necessidades básicas para o controle dos mecanismos do robô, como modulação dos sinais dos motores (PWM), leitura e escrita de comandos na serial ou pinos de entrada e saída, e que independem da arquitetura do micro-controlador, formam o segundo nível de abstração denominado Nível de Configuração.

O Nível de Comandos é constituído por funções que independem do conhecimento técnico da arquitetura do robô para serem executadas. Utilizando-as o usuário pode solicitar a movimentação de qualquer motor para determinada posição, solicitar informação dos sensores, comandar o levantamento de uma perna ou simplesmente requerer que o robô ande.

Todas as funções são implementadas a partir da combinação de outras do mesmo nível de abstração ou de um nível mais baixo e podem sempre originar novas funcionalidades.

Mais dois níveis estão definidos por implementações capazes de interpretar informações fornecidas pelos sensores e selecionar comandos para desempenhar tarefas, são elas: o Nível de Controle que provê comandos reativos; e o Nível de Inteligência que disponibiliza funcionalidades deliberativas.

Conforme descrito nas subseções anteriores, as funções originais estão implementadas no software do sistema de processamento principal. A Tabela a seguir apresenta o cabeçalho de algumas funções e o nível de abstração. Em itálico estão funções que ainda não foram implementadas.

\begin{table}[ht] \centering \caption{Comandos por Nível de Abstração}\label{tab:comandos} \begin{tabular}{|p{4cm}|p{10cm}|} \hline Nível & Comandos \\ \hline Inteligência Artificial & {\it FacaGol; }{\it JoguePartida; }{\it CorteGrama; }{\it ConvivaComHumano;} \\ \hline Controle & {\it Equilibre; }{\it AtravessaSala; }{\it Inclina; }{\it ChuteBola; }{\it DesvieAdversario;} \\ \hline Comandos & PosicionaMotor; IncrementaMotor; DecrementaMotor; Incrementa10Motor; Decrementa10Motor; Agaixa; Levanta; LevantaPernaDireita; AgaixaPAndar; PrimeiroPasso; AndaFrente; {\it Corra; }{\it ViraEsquerda; }{\it Chuta;} \\ \hline Implementação & Espera; Uart0EnviarChar; Uart0EnviarString; Uart0ReceberChar; Uart0ReceberString;InverteSaida1..7; LigaSaida1..7; DesligaSaida1..7; VerificarEntradas; ConfigurarMotores; \\ \hline Configuração & ConfiguraClock; GetCClock; GetPClock; ConfiguraTimer0; ConfiguraTimer1; ConfiguraUart0; ConfiguraSaidas; \\ \hline \end{tabular} \end{table}

Usuários experientes podem executar essas funções a partir de chamadas no próprio sistema de processamento principal, garantindo assim a autonomia do robô que executará todos os comandos sem a dependência de nenhum sistema externo.

Para facilitar a depuração dos comandos e para o robô estar acessível a usuários que não pretendem utilizar ferramentas de programação específicas para determinados micro-controladores, todas as funções a partir do Nível de Comandos podem ser executadas através do sistema de processamento externo, que também garante a possibilidade de criação de novos comandos.

Bibliotecas para diversas linguagens de programação de alto nível estão sendo desenvolvidas e os comandos ainda podem ser executados por Palm Tops ou aparelhos celulares com a tecnologia Blue Tooth.

;

 

Download

Sistema de Processamento Principal 1.0

Sistema de Controle Remoto 1.0

Bibliotecas para Controle Remoto 1.01

Simulador 1.0

Copyleft 2007 www.robolivre.com

Todos os direitos liberados e garantidos pelas licenças Gnu FDL e Gnu GPL respectivamente.