Anda di halaman 1dari 61

Universidade de So Paulo - Escola Politcnica

Departamento de Engenharia Mecnica


Desenvolvimento de linguagem de
Programao para Robs Mveis
Autor :
Valdir Grassi Junior
Trabalho de Graduo
Engenharia Mecnica Automao e Sistemas
Orientador :
Jun Okamoto Jr.
EPUSP - 1998
1
ndice
NDICE........................................................................................................................................................1
1. INTRODUO......................................................................................................................................3
2. OBJETIVO .............................................................................................................................................4
3. ROBS MVEIS...................................................................................................................................5
4. DEFINIO DOS COMANDOS DA LINGUAGEM DE PROGRAMAO................................7
5. PROJETO DO SISTEMA DE CONTROLE DE POSIO E VELOCIDADE............................17
5.1 MODELO DINMICO DA PLANTA .......................................................................................................17
5.1.1 Modelo dinmico mecnico do rob........................................................................................17
5.1.2 Modelo Dinmico do Motor DC..............................................................................................20
5.1.3 Caractersticas do Motor DC e do Rob Mvel.......................................................................21
5.1.4 Torque de Carga (T
L
)...............................................................................................................22
5.2 PROJETO DO CONTROLE DE POSIO................................................................................................22
5.3 RESULTADOS DA SIMULAO DO CONTROLE DE POSIO...............................................................27
5.4 DISCRETIZAO DO CONTROLADOR DE POSIO.............................................................................31
5.5 CONTROLE DE VELOCIDADE.............................................................................................................37
6. IMPLEMENTAO DE COMANDOS ............................................................................................40
6.1 SISTEMA DE CONTROLE EM TEMPO REAL.........................................................................................40
6.2 ROTINAS DE INTERFACE COM O USURIO.........................................................................................43
6.2.1 Reconhecimento de Comandos ................................................................................................43
6.2.2 Manipulao de Valores ASCII, Hexadecimal, e Decimal ......................................................45
6.2.3 Modos de Operao - SET MODE <0,1,2> ............................................................................45
6.2.4 Help (?) ....................................................................................................................................46
6.2.5 Tecla Ctrl-X e Ctrl-Z................................................................................................................46
6.3 CONTROLE DE POSIO COMANDOS DE MOVIMENTO...................................................................46
6.3.1 Acelerao ...............................................................................................................................47
6.3.2 Clculo de Posio Absoluta Atual..........................................................................................47
6.3.3 Comando MOVE, MOVEREL, e MOVEABS ...........................................................................48
6.3.4 Funes Seno, Coseno, Arco Tangente, e Teorema de Pitgoras............................................49
6.3.5 Clculo de Posio Comando MOVE...................................................................................50
6.4 SET DE PARMETROS........................................................................................................................51
6.5 COMANDOS DE EXIBIO.................................................................................................................51
6.5 MOVIMENTO ATRAVS DO JOYSTICK SET JOYSTICK.................................................................52
2
6.6 TABELA DE PONTOS..........................................................................................................................52
6.6.1 SET TABLE..............................................................................................................................52
6.6.2 MOVETAB ...............................................................................................................................53
6.6.3 LOADTAB e UPLOADTAB......................................................................................................54
6.7 PROGRAMAO................................................................................................................................54
6.7.2 RUN..........................................................................................................................................55
6.7.3 IFEQ, IFNE, IFGT, etc, e GOTO.............................................................................................56
6.7.4 SET VAR, INC, e DEC .............................................................................................................56
6.7.5 CLEAR, LIST e EDIT...............................................................................................................57
6.7.6 Comandos de Espera ...............................................................................................................57
6.7.7 LOAD e UPLOAD....................................................................................................................57
6.8 SUGESTES PARA IMPLEMENTAO FUTURA...................................................................................57
7. CONCLUSO.......................................................................................................................................59
8. REFERNCIAS BIBLIOGRFICAS................................................................................................60
3
1. Introduo
No ano de 1994 foi iniciado no Departamento de Engenharia Mecnica da
Universidade de So Paulo um projeto denominado Base Mvel. Este projeto foi
realizado por alunos de graduao sob a orientao do Prof. Dr. Jun Okamoto Jr., e
constituiu-se na elaborao e construo de um veculo de pequeno porte do tipo AGV
destinado a transportar sensores em um laboratrio para a realizao de pesquisas na
rea de viso.
Este projeto teve continuidade nos anos seguintes, onde se deu a elaborao de
um hardware eletrnico para controle deste rob mvel, e tambm um software
constitudos de comandos bsicos para interface do usurio com o hardware eletrnico
do rob.
A Base Mvel foi projetada para se deslocar no plano bidimensional, sendo que
possui um formato cilndrico, e dotada de trs rodas motoras que esteram ao mesmo
tempo. Desta forma possui a capacidade de fazer curvas em canto vivo.
O acionamento das rodas feito por dois motores, um motor de passo que
realiza o esteramento das rodas, e um motor DC responsvel pela translao da base
mvel no plano. Entre cada motor e as rodas existe um sistema de reduo composto de
polias de correia dentada e engrenagens.
O hardware eletrnico da Base Mvel possui os seguintes componentes
principais : microcontrolador 8032, driver PWM, driver de motor de passo,
comunicao serial com PC, interface para joystick e sistema para contagem dos pulsos
vindos do encoder do motor DC. O programa de controle da Base Mvel armazenado
em uma EPROM, sendo que o sistema possui uma memria RAM para armazenar
dados temporrios. Todo este hardware eletrnico foi projetado de maneira a ser
compacto para que seja embarcado na Base Mvel.
Alm do hardware eletrnico, se encontrava desenvolvido um software dotado
de comandos e funes bsicas que funcionam em um sistema de tempo real. Estes
comandos e funes so simples e permitem, por exemplo, escrever uma palavra no
driver de PWM ou de motor de passo, permitem uma contagem de 32 bits dos pulsos de
encoder, visualizar continuamente os valores de encoder e posio da alavanca do
joystick, j havia disponvel tambm uma estrutura de programa em tempo real, no
entanto, estes comandos no eram suficientes para controle adequado do movimento do
rob.
4
2. Objetivo
Para que se tenha o controle adequado do movimento de um rob mvel,
especificamente a Base Mvel, necessrio possuir um conjunto de comandos que
permitam a um usurio fazer com que o rob se movimente da maneira desejada.
Tambm interessante que se possa construir programas que descrevam a determinada
trajetria que o rob deve seguir. Para tanto necessrio ter uma linguagem de
programao para o rob. Como esta linguagem e os comandos pertencentes a ela ainda
no tinham sido desenvolvidos e implementados para a Base Mvel, ela no era capaz
ainda de se movimentar por trajetrias pr-definidas.
O objetivo deste projeto justamente desenvolver uma linguagem de
programao para um rob mvel, sendo que esta linguagem seja composta de
comandos de alto nvel que devem ser executados em uma estrutura de software de
tempo real.
Os comandos pertencentes linguagem de programao sero implementados e
testados na Base Mvel. Os comandos de movimento devem ser de fcil uso pelo
usurio, sendo que representem de maneira adequada a trajetria que o rob deve fazer.
Estes comandos devem usar um sistema de controle de posio em malha fechada com
realimentao dada pelo encoder. Tambm desejvel que alm da posiibilidade de se
descrever trajetrias atravs de programas, se use o joystick para movimentar o rob, e
tambm que seja possvel a captura de pontos para formao de uma tabela que possa
ser reproduzida posteriormente, fazendo com que o rob passe pelos pontos capturados.
5
3. Robs Mveis
Existe uma variedade muito grande de robs mveis, e eles se diferenciam entre
si pela construo mecnica e pelo hardware eletrnico. A parte mecnica do rob
fundamental para definir onde ele poder se locomover e o que poder ser capaz de
fazer ou no. Por exemplo, existem robs mveis que se deslocam atravs de "patas",
tentando reproduzir o movimento que insetos como aranha ou formiga fazem. Estes
robs so construdos para que possam se deslocar em solos irregulares, e so capazes
de se transpor obstculos como pequenas pedras. Existem robs mveis submarinos,
que precisam se locomover em trs dimenses. Estes robs so usados para atingir
profundidades elevadas onde dificilmente o homem pode ir. Podemos encontrar ainda
robs mveis que possuem esteiras, como tanques de guerra, e robs mveis que
possuem quatro rodas, sendo que as duas rodas dianteiras possuem trao independente
e a diferena de velocidade entre elas faz com que o rob faa curvas. Tambm existem
robs mveis com trs rodas, como um triciclo, sendo que a da frente motora e pode
mudar a direo do rob.
Como se pode ver, podem ser feitas muitas variaes nas caractersticas
mecnicas dos robs, e assim construir um que se adequa melhor a aplicao desejada.
Para cada tipo de rob, a implementao dos comandos e da linguagem proposta
neste trabalho ser diferente, pois ela depende das caractersticas construtivas, e tambm
do hardware eletrnico do rob. Desta forma, ser desenvolvido e implementados
comandos para a Base Mvel. No entanto, o algoritmo de alguns comandos, a estrutura
do software de controle, a estrutura da linguagem de programao, e as rotinas para
reconhecimento desta linguagem podem ser aproveitadas e usadas em outros tipos de
robs mveis.
Os robs mveis podem possuir uma srie de sensores, e a partir dos sinais
recebidos por eles, usando um sistema de inteligncia artificial, o rob pode tomar
decises e ento se locomover. Isto usado quando se deseja explorar lugares
desconhecidos que o homem no pode ir, como regies prximas a vulces, ou
superfcies de outros planetas como Marte. Tambm usado para que permita ao rob
desviar de obstculos que eventualmente podem haver na sua trajetria, evitando assim
acidentes. Em relao metodologia usada para mover tais robs usando sistemas
inteligentes, existem duas teorias principais : o mtodo tradicional, e o mtodo baseado
em comportamento proposto por Rodney Brooks.
6
O mtodo tradicional se baseia em coletar informaes atravs dos sensores,
construir uma representao do modelo do mundo em volta do rob atravs da fuso dos
dados coletados pelos sensores, e ento planejar as aes baseado no modelo adquirido.
Por exemplo: o rob atravs de uma camera de vdeo capta a imagem do que est a sua
frente, ento feito uma anlise deste sinal, da percebe-se que existe um obstculo na
sua frente e que este obstculo tm uma largura 'x' , a partir deste dado feito uma
mudana na trajetria para que o rob desvie deste obstculo.
O mtodo proposto por Brooks no faz a fuso dos dados coletados pelos
sensores, e nem um modelo do mundo exterior ao rob. Este mtodo se baseia em
programar vrios comportamentos que o rob deve ter em resposta a algo, estes
comportamentos possuem um nvel hierrquico, e comportamentos que possuem um
nvel hierrquico alto, quando ativados, so executados em preferncia queles de nvel
mais baixo. Isto no quer dizer que os comportamentos de nvel hierrquico inferior no
deixem de ser gerados, mas eles no so executados quando um comportamento de
nvel alto est ativado. Como ilustrao, suponha que o comportamento de nvel mais
baixo habilite uma ao de andar para qualquer lugar e o de nvel mais alto inicia um
comportamento de seguir a luz, ento normalmente, o rob ir andar sem rumo,
movendo-se aleatoriamente. No entanto, quando algum apontar uma lanterna para o
rob, o comportamento de andar aleatoriamente ser ignorado em detrimento do
comportamento de seguir a luz que acaba de ser ativado e possui nvel maior. O rob ir
ento seguir em direo luz at que a lanterna seja apagada, quando o comportamento
de andar sem rumo ir voltar a ter preferncia. Uma observao que deve ser feita que
mesmo quando o comportamento de seguir a luz estava ativado, o outro comportamento
tambm estava sendo gerado mas no estava sendo executado pois no tem a
preferncia.
O projeto que ser desenvolvido este ano, no possui nenhuma caracterstica de
inteligncia artificial, embora posteriormente a este trabalho podem ser feitas pesquisas
nesta rea, podendo utiliz-lo como ponto de partida. No entanto, neste trabalho, deseja-
se que a trajetria do rob mvel que estiver sendo controlado seja bem definida, e esta
seja especificada pelo usurio. Desta forma, este trabalho se enquadra com maior
facilidade no mtodo tradicional de controle utilizando inteligncia artificial, j que ser
desenvolvido os comando para que se possa programar uma trajetria definida,
conhecido o caminho.
7
4. Definio dos Comandos da Linguagem de Programao
A primeira tarefa a ser realizada a de definir o projeto. Para isto deve-se definir
como ser a interface do usurio com o rob mvel, para que possa haver a
programao do rob, e a execuo de comandos associados ao movimento do rob e
captura de dados. Esta interface pode ser determinada definindo-se os comandos que
faro parte tanto da linguagem de programao como do software de controle, e tambm
definindo-se a sintaxe destes comandos.
Como neste trabalho h um grande interesse em implementar a linguagem de
programao na Base Mvel, optou-se por no se aprofundar no estudo de sintaxes de
linguagens de programao, sendo que ao se definir a sintaxe, utilizou-se o
conhecimento sobre linguagens de programao existentes como basic, C, e pascal.
Tambm baseou-se nos comandos disponveis em programas de desenho como
AutoCAD para definio dos comandos. Como se quer descrever trajetrias do rob, e o
que se faz em programas como o AutoCAD descrever desenhos, ou trajetrias,
atravs de vrios comandos, optou-se por se basear no conjunto de funes e parmetros
exigidos por elas disponveis em tal software.
Um outro fator importante que entrou na deciso de como seria a sintaxe foi a
facilidade ou no de se reconhecer o comando e os parmetros a partir da linha de
comando digitada, j que a rotina de reconhecimento dos comandos segundo a sintaxe
especificada deve ser implementada pois o reconhecimento deles no imediato. O
usurio entra atravs do teclado a linha de comando, esta fica armazenada em uma
string de caracteres e depois esta string deve ser interpretada e retirado os parmetros e
o comando.
Baseado nos fatores descritos acima, definiu-se os comandos que faro parte da
linguagem de programao, e do software de controle do rob mvel. Juntamente com a
definio destes comandos, j se determinou como seria a interface do usurio com o
programa de controle e programao da Base Mvel.
Os comandos definidos podem ser divididos por tipos de comandos, estes podem
ser :
Comandos de Set de Parmetros : Estes comandos definem o valor de
constantes usadas nos demais comandos, ou ento habilitam e desabilitam o
funcionamento de alguns dos modos de operao do rob ou do software de
controle. Os comandos so os seguintes :
8
SET MODE <0,1,2> : Seleciona o modo de operao do software de
controle do rob. Os modos de operao possveis so : modo normal
(0), modo de programao (1), e modo de manuteno (2). Cada
comando pode ser definido para funcionar ou no em cada modo de
operao. O modo default o modo normal, sendo que o modo de
programao usado para editar programas, e o modo de manuteno
para ter acesso valores de constantes internas ao sistema de controle,
tais como valor do encoder, ou valor do eixo do joystick.
SET JOYSTICK <0,1> : Este comando desabilita (0) ou habilita (1) o
modo de movimento do rob atravs do joystick.
SET TABLE <0,1> : Habilita (1) ou desabilita (0) a capturao de
pontos para formar uma tabela que poder posteriormente ser seguida.
Os pontos podem ser capturados pressionando um boto do joystick,
por exemplo. A tabela armazenada na memria e depois pode ser
salva em arquivo.
SET TRANSMAXVEL <value> : Define o valor da velocidade
mxima de translao do rob mvel em mm/s. Esta velocidade
servir como base para os comandos de movimento, j que o
parmetro que define a velocidade nestes comandos, expresso em
porcentagem da velocidade mxima.
SET TRANSVEL <value> : Define a velocidade default em
porcentagem da velocidade mxima a ser usada nos comandos de
movimento.
SET ROTMAXVEL <value> : Define a velocidade mxima de
esteramento das rodas. Assim como a velocidade mxima de
translao, este parmetro serve de base para os comandos de
movimento.
SET ROTVEL <value> : Define a velocidade de esteramento das
rodas expresso em porcentagem de velocidade mxima.
SET POSITION <value1> <value2> : Define a posio absoluta atual
do rob. Os parmetros 1 e 2 representam as coordenadas da posio,
respectivamente 'x' e 'y' se o sistema atual for cartesiano, e 'r' e '' se o
sistema for o de coordenadas polares.
9
SET COORDENATE <0,1> : Define o sistema de coordenadas atual
como sendo cartesiano (0), ou polar (1).
Comandos de Movimento : So comandos que fazem com que o rob mvel
se movimente, ou deixe de se movimentar at que uma condio seja
satisfeita. Estes comandos so :
MOVEABS <valor1> <valor2> <valor3> : Este comando faz com que
o rob se desloque para uma posio absoluta dada pelos dois
primeiros parmetros, com uma velocidade dada pelo terceiro
parmetro que expressa em porcentagem da velocidade mxima pr-
definida. O terceiro parmetro opcional, e quando omitido
substitudo pelo valor da velocidade default tambm pr-definida. Os
parmetros 1 e 2 so respectivamente as coordenadas 'x' e 'y' da
posio final quando o sistema de coordenadas ativo o sistema
cartesiano, e so as coordenadas 'r' e '' quando o sistema ativo o de
coordenadas polares;
MOVEREL <valor1> <valor2> <valor3> : Este comando faz com que
o rob se desloque para uma coordenada relativa. Os parmetros
seguem a mesma regra do comando anterior.
MOVE <valor1> <valor2> : Este comando realiza apenas uma
translao simples de uma distncia dada pelo parmetro 1 com uma
velocidade dada pelo parmetro 2 expressa em porcentagem da
velocidade mxima.
ROTATE <valor1> <valor2> : Este comando realiza uma mudana na
direo das rodas de um valor dado pelo parmetro 1 expresso em
graus com uma velocidade dada pelo parmetro 2 expressa em
porcentagem da velocidade mxima de rotao das rodas.
MOVETAB <value1> : Faz com que o rob descreva uma trajetria
que passe pelos pontos definidos em uma tabela previamente
carregada pelo usurio. A trajetria descrita consciste em fazer uma
interpolao linear entre os pontos, para isso estes pontos so
armazenados de forma que representem distancias relativas em x e y.
A velocidade utilizada a velocidade definida no parmetro 1.
RUN : Executa programa carregado na memria.
10
WAITTIME <value> : Faz com que o rob espere na posio atual
durante um determinado tempo definido pelo parmetro do comando.
WAITBUTTON : Faz com que o rob espere na posio atual at que
seja pressionado um boto do joystick.
WAITKEY : Faz com que o rob espere na posio atual at ser
pressionado uma tecla do keyboard.
OBS: Nos comandos de movimento, todos os parmetros de
velocidade se omitidos ou iguais a zero, so substituidos pela
velocidade default. Os parmetros de posio so sempre expresssos
em milmetros, e os de velocidade em porcentagem de velocidade
mxima.
Comandos de Exibio : So comandos que mostram parmetros e
informaes sobre o rob ao usurio. Estes comandos so :
SHOW VELOCITY : Mostra velocidade atual do rob
SHOW CVELOCITY : Mostra continuamente na tela a velocidade do
rob at que seja pressionado ctrl-x.
SHOW POSITION : Mostra posio atual do rob
SHOW CPOSITION : Mostra continuamente na tela a posio do
rob at que seja pressionado ctrl-x.
SHOW PARAMETERS : Mostra os parmetros definidos pelo
usurio, como velocidades mximas, velocidades default, mostra se
modo joystick ativo ou inativo, etc.
? (HELP) : Mostra um texto explicativo dos comandos disponveis no
modo atual de operao.
Comandos de Manuteno : So comandos que funcionam apenas no modo
de manuteno. Eles so :
CENC : Comando do modo de manuteno que mostra continuamente
o valor do encoder at que seja pressionado ctrl-x.
READENC : Mostra o valor atual do encoder.
CJOY : Mostra continuamente o valor da posio do eixo do joystick
at que seja pressionado ctrl-x.
READJOY <0,1> : Mostra o valor atual do eixo 'x'(0) ou 'y'(1) do
11
joystick
PWM <value1> <value2> : Escreve uma palavra dada pelo parmetro
1 no driver de PWM definido pelo nmero dado pelo parmetro 2.
Comandos de Load e Upload de arquivos : So comandos que gravam e lem
arquivos de programas e tabelas. Os comandos so :
LOAD : Carrega arquivo de programa.
LOADTAB : Carrega arquivo de tabela. Este tipo de arquivo possui o
seguinte formato : Cada valor deve ser colocado em uma linha
diferente sendo que a primeira linha deve conter a coordenada X, e a
segunda a coordenada Y, e assim por diante. Desta forma a cada duas
linhas do arquivo, obtenho uma posio relativa diferente.
UPLOAD : Salva arquivo de programa.
UPLOADTAB : Salva arquivo de tabela no formato definido acima.
Comandos de Edio de programas : So comandos que funcionam no modo
de programao e servem para editar programas carregados na memria. Os
comandos so :
<value> <string_de_comando> : Quando se entra no modo de
programao e se comea a linha de comando com um nmero, a
string digitada posteriormente ao nmero inserida na linha dada por
este nmero. Conforme o usurio for inserindo linhas de programa,
estas vo sendo interpretadas e armazenadas na memria do rob. O
usurio pode inseri-las em qualquer ordem, sendo que elas so
internamente ordenadas pelo valor da linha. A execuo normal do
programa segue a sequncia numrica das linhas, da de menor valor
para a de maior valor. Exemplo de insero de comando : 20
MOVEABS 10 15 - aqui o comando MOVEABS colocado na linha
de nmero 20 do programa. Obs: definiu-se que o valor de linha no
pode ser zero.
CLEAR <value> : Apaga a linha cujo nmero se entrou como
parmetro. Caso o parmetro seja nulo, ou omitido, todo o programa
apagado.
LIST <value> : Mostra a linha de programa desejada. Se o parmetro
for omitido ou nulo, o programa todo mostrado.
12
Comandos de Controle de programas : At agora foram definidos os
comandos do software de controle, e os comandos que podero ser inseridos
no corpo de um programa para executar movimentos, ou setar parmetros. No
entanto existem comandos que fazem a tarefa de controlar a execuo do
programa, e estes comandos esto definidos a seguir :
SETVAR <var_number> <number> : O programa permite utilizar 10
variveis internas que so usadas como contadores. Estas variveis
podem ser incrementadas, decrementadas, e pode-se atribuir valores a
elas. Esta funo atribui um valor dado pelo parametro 2 (number) a
um contador referenciado pelo parametro 1 (var_number). Os
contadores so referenciados por nmeros de 0 a 9 (cada contador
possui um nmero). Exemplo : SET VAR 0 10 - Atribui valor 10 ao
contador 0.
INC <var_number> : Incrementa o contador var_number.
DEC <var_number> : Decrementa o contador var_number.
GOTO <value> : Muda a sequncia de execuo dos comandos
pulando para a linha definida pelo parmetro dado.
IFEQ <var_number> <number> <line_number> : Este comando faz
uma comparao do valor contido na varivel interna de ndice
var_number com o valor entrado no campo number. Se os dois
valores forem iguais, ento a sequncia de execuo desviada para a
linha de nmero line_number.
IFGT <var_number> <number> <line_number> : Se valor em
var_number maior que number ento vai para linha
line_number.
IFGE <var_number> <number> <line_number> : Se valor em
var_number maior ou igual a number ento vai para linha
line_number.
IFLT <var_number> <number> <line_number> : Se valor em
var_number menor que number ento vai para linha
line_number.
IFLE <var_number> <number> <line_number> : Se valor em
var_number menor ou igual a number ento vai para linha
13
line_number.
IFNE <var_number> <number> <line_number> : Se valor em
var_number diferente de number ento vai para linha
line_number.
Observao : Todos os comandos apresentados aqui so usados
apenas em programas, portanto devem ser precedidos do nmero da
linha.
Observao final quanto aos comandos : Todas os parmetros de posio
devem estar em milmetros, e os parmetros de velocidade em porcentagem
de velocidade, com exceo do comando se ajuste da velocidade mxima de
translao, onde a velocidade dada por mm/s. importante observar que
para todos os comandos aqui definidos existe um modo em que ele pode
operar. Na tabela 1 se encontra a relao de todos os comandos definidos, e
em que modo de operao estes comandos podem ser executados.
Considerao em relao a funcionalidade do sistema : Na tabela 2 se
encontra quando determinados comandos no podem ser acionados em
funo de outros comandos. Exemplo : o comando MOVE no pode ser
acionado quando no terminou o movimento de um outro comando MOVE.
Assim como esta restrio, a tabela 2 mostra as restries existentes. Tambm
importante informar que pressionando a tecla ctrl-z, o sistema resetado, e
inicializado novamente.
A interface do usurio com o software de controle feita atravs de interface
serial. O esquema a seguir mostra o exemplo de como a interface do sistema com o
usurio. Observe que para cada modo de operao, usado um prompt diferente.
Pode-se perceber pelo exemplo dado, de como a interface com o usurio.
Como resultado de trabalhos anteriores, j havia sido implementado grande parte dos
elementos da interface como prompt, backspace, cabealho, etc. No entanto o sistema
no apresentava todos os componentes de interface necessrios, sendo que algumas
rotinas que no estavam disponveis foram desenvolvidas. Estas rotinas vo desde
reconhecimento de comandos segundo a sintaxe definida, at impresso de nmeros
inteiros em decimal, o que no imediato para o sistema. Grande parte do sistema de
controle de execuo de comandos tambm teve de ser implementada neste projeto.
14
Alguns detalhes de implementao sero mostrados posteriormente.
Exemplo de Interface
Projeto Base Movel - EPUSP
Software de Controle - 1998
>SHOW POSITION
X:0 Y:0
>SET POSITION 100 200
>MOVEREL 200 400 80
>SET MODE 1
Program Mode
$10 SET POSITION 0 0
$20 SET VAR 1 0
$30 MOVEABS 500 500 80
$40 WAITTIME 30
$50 MOVEREL -500 0 30
$60 MOVEREL 0 -500 40
$70 INC 1
$80 IFNE 1 5 30
$SET MODE 0
Normal Mode
>RUN
Running Program
>SET MODE 2
Maintenance Mode
# PWM 0 7F
Tabela 1 - Relao dos comandos, e modo de execuo em que so aceitos.
Modo de Execuo
Comandos
Normal ( > ) Programao ( $ ) Manuteno ( $ )
Comandos de Set de Parmetros
SET MODE
SET JOYSTICK --- ---
SET TABLE --- ---
SET TRANSMAXVEL COM ---
SET TRANSVEL COM ---
SET ROTMAXVEL COM ---
SET ROTVEL COM ---
SET POSITION COM ---
SET COORDENATE COM ---
Modo de
Programao
Modo
Normal
Modo de
Manuteno
Modo de
Programa
Prompt
Cabealho
15
Tabela 1 (cont.) - Relao dos comandos, e modo de execuo em que so aceitos.
Modo de Execuo
Comandos
Normal ( > ) Programao ( $ ) Manuteno ( $ )
Comandos de Movimento
MOVEABS COM ---
MOVEREL COM ---
MOVE COM
ROTATE COM
MOVETAB COM ---
RUN --- ---
WAITTIME --- COM ---
WAITBUTTON --- COM ---
WAITKEY --- COM ---
Comandos de Exibio
SHOW VELOCITY --- ---
SHOW CVELOCITY --- ---
SHOW POSITION --- ---
SHOW CPOSITION --- ---
SHOW PARAMETERS --- ---
? (HELP)
Comandos de Load e Upload
LOAD --- ---
LOADTAB --- ---
UPLOAD --- ---
UPLOADTAB --- ---
Comandos de Edio
LIST --- ---
CLEAR --- ---
DEL --- ---
<value> <comando> --- ---
Comandos de Manuteno
CJOY --- ---
CENC --- ---
READENC --- ---
READJOY --- ---
PWM --- ---
16
Tabela 1 (cont.) - Relao dos comandos, e modo de execuo em que so aceitos.
Modo de Execuo
Comandos
Normal ( > ) Programao ( $ ) Manuteno ( # )
Comandos de Controle de Programa
SET VAR --- COM ---
INC --- COM ---
DEC --- COM ---
IFNE, IFEQ, IFGE, --- COM ---
GOTO --- COM ---
END --- COM ---
Obs: Na coluna de Modo de programao, quando est marcado COM significa que o
comando s pode ser usado no corpo de um programa como linha de comando.
significa que o comando executado.
Tabela 2 Restrio quanto ao uso de alguns comandos em certas situaes do sistema.
Ao que est sendo acontecendo no rob
Comando que se
deseja executar
Modo Joystick
ligado
Executando
Programa
Executando
Tabela
Rob em
movimento
SET JOYSTICK 1 --- --- --- ---
RUN --- --- --- ---
MOVE --- --- ---
MOVEREL --- --- ---
MOVEABS --- --- ---
MOVETAB --- --- ---
SET POSITION --- ---
SET TRANSMAXVEL --- --- ---
SET MODE --- --- --- ---
LOAD, LOADTAB --- --- --- ---
PWM --- --- --- ---
OBS: : indica que comando pode ser executado
--- : indica que no pode ser executado
17
5. Projeto do Sistema de Controle de Posio e Velocidade
O movimento de translao da Base Mvel efetuado por um motor DC. Desta
forma, necessrio que haja um controle em malha fechada da posio do rob. Este
sistema de controle de posio ser utilizado por todos os comandos de movimento que
realizam uma translao do rob.
Para obter o sistema de controle de posio, primeiramente modelou-se a Base
Mvel com o motor DC, feito isto, projetou-se um controlador de posio com o auxlio
do programa Matlab. Foram feitos ento simulaes do modelo, e ento discretizou-se o
controlador para se obter a equao de diferenas dele. A partir desta equao possvel
a implementao do controle de posio na Base Mvel.
O detalhamento das etapas feitas se encontra a seguir.
5.1 Modelo dinmico da planta
Para se chegar ao modelo dinmico da Base Mvel, modelou-se o motor DC e
tambm a parte mecnica do rob.
5.1.1 Modelo dinmico mecnico do rob
O modelo dinmico do rob quando este acelera, pode ser determinado pela seguinte
sequncia de clculos :
Sabendo-se que o torque resultante em uma roda igual a inrcia angular vezes a
variao de velocidade angular dela; temos que em uma das rodas do rob :
T J
d
dt
M R d
dt
R
R R
1
2
3
+

onde, J
R
a inrcia da roda (kg.m
2
)
M a massa do rob (kg)
R o raio da roda (m)

R
a velocidade angular da roda (rad/s)
18
No par de engrenagens que liga a roda s polias, temos :
T
T
R
R
T
R
R
M R
J
d
dt
R
R 1
2
1
2
2
2
1
2
3

_
,


+

_
,


onde, R
1
o raio da engrenagem maior
R
2
o raio da engrenagem menor
Nas expresses acima, foram desprezadas as inrcias das engrenagens
Em uma das polias movidas :
dt
d
J J
3
R M
R
R
T
dt
d
J T T
P
P R
2
2
1
2
3
P
P 2 3

1
1
]
1

,
_

,
_


onde, J
P
a inrcia da polia movida (kg.m
2
)

P
a velocidade angular na polia movida (rad/s)
Devido a relao de transmisso nas polias dentadas, o torque na polia motora :
T
T
R
R
T
R
R
M R
R
R
J J
R
R
d
dt
R P
P
4
3
4
3
4
2
1
2
2 2
1
2
4
3
3
3 3

_
,
+

_
,
+

1
]
1

onde, R
4
o raio da polia menor (motora)
R
3
o raio da polia maior (movida)
Na polia motora, tm-se :
T T J
d
dt
PM
PM
5 4


T
R
R
R
R
M R
R
R
R
R
J J
R
R
J
d
dt
R P PM
PM
5
2
1
2
4
3
2
2 2
1
2
4
3
2
4
3
2
3 3

_
,

_
,
+

_
,

_
,
+

_
,
+

1
]
1

19
onde, J
PM
a inrcia da polia motora (kg.m
2
)

PM
a velocidade angular na polia motora (rad/s)
Antes de chegar ao motor, existe um planetrio. Ento o torque fica :
T
i
T
PL
6 5
1

T
R R
R
R
R R
R
J
R
J
i dt
R P PM
PL
6
2
1
2
4
3
2
2 2
1
2
4
3
2
4
3
2 2
3
1

_
,

_
,
+

_
,

_
,
+

_
,
+

1
]
1

_
,


onde, i
PL
a relao de transmisso do planetrio (i
PL
> 1)
a velocidade angular do motor
Pode-se escrever a expresso acima da seguinte forma :
T J
d
dt
EQ 6


Finalmente, a equao de torque no motor levando-se em conta a inrcia do rob
fica :
( ) T T J
d
dt
T J J
d
dt
e M e M EQ
+
6

onde, J
M
a inrcia do motor (kg.m
2
)
T
e
o torque eltrico
Portanto a inrcia equivalente do rob, pode ser dada pela seguinte expresso :
J
R
R
R
R i
M R
R
R
R
R i
J J
R
R i
J
i
EQ
PL PL
R P
PL
PM
PL

_
,

_
,

_
,
+

_
,

_
,

_
,
+

_
,

_
,
+

_
,

2
1
2
4
3
2 2
2 2
1
2
4
3
2 2
4
3
2 2 2
1
3
1
3
1 1
Como em relao massa do rob, as inrcias das polias so de ordem de grandeza
inferior, pode-se desprez-las para efeitos de projeto do controlador de posio.
Portanto nesta expresso, considera-se apenas o termo envolvendo a massa :
J
R
R
R
R i
M R
EQ
PL

_
,

_
,

_
,

2
1
2
4
3
2 2
2
1
20
5.1.2 Modelo Dinmico do Motor DC
Pode-se representar uma mquina de corrente contnua da seguinte forma :
Figura 1 - Esquema de motor de corrente contnua
Nomenclatura :
V
a
- Tenso da armadura
i
a
- Corrente de armadura ou de torque
e
a
- Fora contra-eletromotriz
V
f
- Tenso de excitao ou de campo
i
f
- Corrente de excitao ou de campo
L
a
- indutncia de armadura
R
a
- Resistncia de armadura
L
f
- Indutncia de campo
R
f
- resistncia de campo
As equaes dinmicas so :
+


+ +
+
B
dt
d
J T T
e
dt
di
L i R V
dt
di
L i R V
L e
a
a
a a a a
f
f f f f
onde : T
e
o torque eltrico (Nm)
T
L
o torque de carga (Nm)
21
J = J
M
+ J
EQ
( Inrcia do motor + Inrcia equivalente do rob ) (Nm)
B um tipo de atrito expresso em Nm/(rad/s)
a rotao do motor em rad/s
Para motores de corrente contnua com ims permanentes, V
f
= R
f
. i
f
, e o fluxo
constante. Portanto pode-se dizer que :
T
e
= K
t
. i
a
e
a
= K
e
.
Fazendo a Transformada de La Place nestas equaes, tem-se :
) s ( I K ) s ( T
) s ( W K ) s ( e
) s ( W B s ) s ( W J ) s ( T ) s ( T
) s ( e s ) s ( I L ) s ( I R ) s ( V
a t e
e a
L e
a a a a a a


+
+ +
Manipulando as equaes acima, chega-se :
) s J B (
) s ( T ) s ( T
) s ( W
) s L R (
) s ( T ) s ( V
) s ( I
L e
a a
L a
a
+

Podemos expressar as equaes na forma do seguinte grafo :


Figura 2 - Diagrama de blocos do Modelo da Mquina de Corrente Contnua
5.1.3 Caractersticas do Motor DC e do Rob Mvel
O motor DC usado na Base Mvel um motor de 15 Watt da Maxon Motor. O
nmero deste motor o 966, e segundo o catlogo do fabricante ele possui as seguintes
caractersticas :
22
Voltagem nominal : 12 V
Resistncia de terminal (R
a
) : 3.18 Ohm
Constante de torque (K
T
) : 23x10
-3
Nm/A
Constante eltrica (K
E
) : 23x10
-3
V/(rad/s)
Inrcia do rotor (J
M
) : 2,43x10
-6
kg.m
2
Indutncia do terminal (L
a
) : 0.53x10
-3
H
A Base Mvel possui as seguintes caractersticas :
Massa (M) : 7,2 kg
Raio das rodas (R) : 41x10
-3
m
R
2
/R
1
(relao de transmisso das engrenagens) : 4
R
4
/R
3
(relao de transmisso das polias) : 1.25
i
PL
(relao de transmisso no planetrio) : 5.2
J
EQ
= 1,8x10
-5
5.1.4 Torque de Carga (T
L
)
Admitindo-se que B = 0, quando no h variao de velocidade : T
L
= T
E
= K
T
.i
a
Portanto, mediu-se a corrente quando a velocidade mxima no motor, e a partir
da calculou-se o torque de carga. A corrente observada foi da ordem de 0.4 A. Ento,
como K
T
= 23.0x10
-3
N/A , conclui-se que o torque de carga da ordem de 0.0092 N.
Admitiu-se que este torque constante.
5.2 Projeto do Controle de Posio
Simplificando o diagrama de blocos do motor, chega-se a seguinte expresso
que descreve a planta :
G s
K
J L s R J L B s R B K K
T
a a a a T e
( )
( ) ( ) ( )

+ + + +
2
onde, J a inrcia do motor somado com a inrcia do rob
Pode-se admitir para este motor que sua indutncia zero, j que o valor desta
muito inferior em comparao com o valor do termo envolvendo resistncia e inrcia.
Tambm se considerou B = 0 para este problema.
Portanto, pode-se simplificar a expresso para :
G s
K
R J s K K
T
a T e
( )
+
23
O sistema em malha fechada de posio fica sendo :
Figura 3 - Planta simplificada com ganhos de PWM e relao de transmisso
Onde PWM significa um ganho que transforma valores entre -128 e 128 em
valores entre -12 e 12, que a tenso de alimentao do motor. R/n o ganho que
transforma angulo em rad do eixo do motor em distncia em metro percorrida pela roda.
A funo de transferncia em malha aberta da planta, se adicionarmos um ganho
K antes do PWM, fica :
X s
Xr s X s
K K K R
n R J s K K s
PWM T
a T e
( )
( ) ( ) ( )


+
2
Para os valores dados anteriormente, com n = 4x1,25x5,2 ; e K
PWM
= 9,375x10
-2
:
X s
X s X s
K
s s
r
( )
( ) ( )
,
( , )


+
0 0523
8 14
desejvel que a resposta em regime deste sistema com um controlador
proporcional K, para uma entrada rampa, seja menor que 1%, ento pode-se tirar que :

+

1
]
1


lim ( ( ) ( )) lim
( )
( )
( ( ) ( ))
,
s s
s Xr s X s s
Xr s
X s
Xr s X s
0 0
1
0 01
Para X
r
(s) = 1/s
2
, temos que :

+
+ +

lim
( , )
, ,
,
s
s
s s K
0
2
8 14
8 14 0 0523
0 01
Portanto : K > 15557
Rescrevendo a funo de transferncia em malha aberta da planta com este controlador
proporcional, fica :
G s K
s s
( )
( , )

+
815
8 14
No entanto, a resposta a rampa unitria apresenta uma oscilao inicial e final,
como verifica-se na figura 4 .
24
Figura 4 - Grfico da planta com controlador proporcional resposta rampa
Para diminuir esta oscilao, escolheu-se projetar um controlador do tipo phase-
lead, que ir funcionar juntamente com o ganho K projetado acima. Este controlador
possui a seguinte forma :
G s
T s
T s
C
( )
( )
( )

+
+
1
1

A funo de malha aberta fica sendo :
G s G s
s s
T s
T s
c
( ) ( )
( , )
( )
( )

+

+
+
815
8 14
1
1

A equao caracterstica de malha fechada, ou seja, o denominador da funo de
malha fechada
G s G s
G s G s
C
C
( ) ( )
( ) ( )

+ 1
:
s.(s+8,14)(1+T.s) + 815.(1+.T.s) = 0
Dividindo por s
2
+ 8,14.s + 815 , fica :
1
815
8 14 1 815
0 +

+ + +

T s
s s T s ( , ) ( )
Escolhe-se valores de T, para plotar o root-locus da expresso :
815
8 14 1 815

+ + +
T s
s s T s ( , ) ( )
Chegou-se a um valor de T = 0,005. Que apresentou um root-locus bom para que
seja determinado um que resultasse em um baixo sobresinal.
O grfico do root locus obtido, est na figura 5 .
25
Figura 5 - Root locus para T=0,005
A regio que se deseja que o sistema trabalhe, est ampliada na figura abaixo :
Figura 6 - Regio do root locus que se deseja que os polos se localizem
A partir desta figura determinou-se o valor de como sendo ao valor em que
ocorre o cruzamento das linhas. Portanto :
= 11,4
Com estes valores, a resposta a degrau unitrio pode ser vista na figura 7 .
26
Figura 7 - Resposta degrau unitrio do sistema controlado
Observa-se que o sistema possui um alto tempo de resposta, com um sobresinal
de 10%.
Para uma entrada rampa unitria, com velocidade de 0,5 m/s. A resposta obtida
foi a seguinte :
Figura 8 - Resposta entrada rampa do sistema controlado
Observa-se que a resposta teve a caracterstica desejada, com sobresinal dentro
dos 1% que havia sido especificado.
Portanto, planta do controlador a seguinte :
G s
s
s
C
( )
,
,

+
+
1 0 057
1 0 005
E existe um ganho proporcional de K = 15557
27
5.3 Resultados da Simulao do Controle de Posio
Para simular como seria o comportamento do rob com este controlador,
utilizou-se o simulink como ferramenta. No modelo, foi considerado o torque de carga
T
L
, tambm foi considerado a saturao no PWM, e tambm uma regio, que foi
verificada na prtica, onde para um valor de entrada no h resposta de movimento no
motor.
O modelo criado para simulao se encontra na figura 9. Nesta, o ganho K1 o
ganho do controlador, K2 o ganho do PWM, e K3 o ganho da relao de transmisso
que transforma em velocidade do motor em rad/s para velocidade na roda em m/s.
O bloco denominado PWM contm um saturador, e blocos que simulam a regio
onde no existe resposta. O bloco aberto pode ser visto na figura 10.
Figura 9 - Modelo usado na simulao
Figura 10 - Bloco do PWM com saturao
O bloco de motor corresponde ao modelo dinmico apresentado na figura 3.
Aps as simulaes, verificou-se que o resultadose encontrava dentro do
esperado, sendo assim, os valores dos ganhos so :
28
K1 = 15557;
K2 = 9.375x10
-2
;
K3 = 1.577x10
-3
;
O sinal de entrada utilizado foi uma rampa de posio que corresponde a uma
velocidade de 0,5 m/s. O grfico do sinal de entrada :
Figura 11 - Entrada usada na simulao
Foram plotados grficos de tenso de alimentao do motor (V
a
), velocidade do
rob (w), posio do rob (x), e corrente no motor (I
a
).
Os resultados obtidos se encontram nas figuras abaixo :
Figura 12 - Grfico da tenso com saturao
29
Figura 13 - Grfico da corrente
Figura 14 - Grfico da velocidade
Figura 15 - Grfico da posio
30
Se no houvesse saturao nos 12 V, os resultados seriam :
Figura 16 - Grfico da tenso sem a saturao
Figura 17 - Grfico da corrente
Figura 18 - Grfico da velocidade
31
Figura 19 - Grfico da posio
5.4 Discretizao do Controlador de Posio
O controlador possui a seguinte funo de transferncia :
G s K
T s
T s
c
( )
( )
( )

+
+
1
1

Utilizando-se o mtodo de transformao bilinear, ou seja, fazendo-se a seguinte
substituio : s
T
z
z
a

_
,

2 1
1
1
1
, onde T
a
o perodo de amostragem; pode-se obter a
expresso do controlador discretizado. Fazendo esta substituio chega-se a :
( )
G z K
T T T T z
T T T T z
c
a a
a a

+ +
+ +

1
]
1

( ) ( )
( ) ( )
2 2
2 2
1
1

Esta expresso pode ser escrita como :
) z ( Y z ) T 2 T ( ) z ( Y ) T 2 T ( )] z ( U z ) T 2 T ( ) z ( U ) T 2 T [( K
1
a a
1
a a
+ + + +

Transformando para equao de diferenas, a expresso acima fica :
y
T T
T T
y K
T T
T T
u K
T T
T T
u
atual
a
a
anterior
a
a
atual
a
a
anterior


+
+
+
+
+

+

( )
( )
( )
( )
( )
( )
2
2
2
2
2
2

Para T = 0,005 , = 11,4 :
anterior
a
a
atual
a
a
anterior
a
a
atual
u
) 01 , 0 T (
) 114 , 0 T (
K u
) 01 , 0 T (
) 114 , 0 T (
K y
) 01 , 0 T (
) 01 , 0 T (
y
+

+
+
+
+
+


Para T
a
= 5 ms :
anterior atual anterior atual
u 27 , 7 K u 93 , 7 K y 33 , 0 y +
Para T
a
= 7,5 ms :
anterior atual anterior atual
u 09 , 6 K u 94 , 6 K y 143 , 0 y +
32
Sendo que y a sada do controlador, u a entrada do controlador, e K o
ganho do controlador que foi determinado como sendo K=15557.
A expresso determinada anteriormente pode ser usada para a implementao do
controlador no rob mvel, no entanto na expresso a entrada u deve ser dada em metro.
No rob mvel, o que utilizado para determinar a posio so pulsos de
encoder, e a cada rotao do motor, so gerados 500 pulsos de encoder.
Ento, um deslocamento de 1 metro do rob equivale a 50464 pulsos.
Uma outra relao importante, que para um perodo de amostragem T
a
, uma
velocidade do rob de 1 m/s equivale a medir uma variao de 50465T
a
.
Para converter a expresso que d o resultado da sada do controlador a fim de
que a entrada, que o erro entre a referncia e a posio real atual, possa ser dada em
pulsos de encoder, deve-se transformar este valor de pulsos de encoder para metro. Isto
equivale a dividir os termos da expresso que so dependentes da entrada (u) por 50464.
Portanto, basta usar ao invs de K, um K = 15557/50464.
Ento, para a expresso fica :
Para 5 ms :
anterior atual anterior atual
u u y y + 24 , 2 44 , 2 33 , 0
Para 7,5 ms:
anterior atual anterior atual
u u y y + 88 , 1 14 , 2 14 , 0
Sendo que y a sada para o PMW, e u a entrada dada em pulsos de encoder.
Observe que ao implementar o algortmo deve-se saturar o valor da sada
calculado em 127 e 127.
Caso haja necessidade de calcular a expresso para outro perodo de
amostragem, ou at mesmo outro valor para os coeficientes da planta, basta seguir o
roteiro de calculo deixado nesta seo e estes valores podem ser mudados sem grandes
dificuldades.
O controle determinado aqui, foi implemtado sendo que se fez testes com
perodo de amostragem de 5 ms e de 7,5 ms, comparando os resultados obtidos com o
resultado de simulao. Os resultados obtidos para o movimento de 1 metro com
velocidade de 320 mm/s se encontram dos grficos seguintes, sendo que em vermelho
est o resultado de simulao, e em azul o resultado obtido com o rob.
33
Para 5 ms :
-0,2
0
0,2
0,4
0,6
0,8
1
1,2
0 0,5 1 1,5 2 2,5 3 3,5
Tempo (s)
P
o
s
i

o

(
m
)
Figura 20 - Grfico de posio observado (5 ms)
-15
-10
-5
0
5
10
15
0 0,5 1 1,5 2 2,5 3 3,5
Tempo (s)
T
e
n
s

o

(
V
)
Figura 21 - Grfico de tenso observado (5 ms)
34
-0,10
-0,05
0,00
0,05
0,10
0,15
0,20
0,25
0,30
0,35
0,40
0,45
0 0,5 1 1,5 2 2,5 3 3,5
Tempo (s)
V
e
l
o
c
i
d
a
d
e

(
m
/
s
)
Figura 22 - Grfico de velocidade observado (5 ms)
Para 7,5 ms :
-0,2
0
0,2
0,4
0,6
0,8
1
1,2
0 0,5 1 1,5 2 2,5 3 3,5
Tempo (s)
P
o
s
i

o

(
m
)
Figura 23 - Grfico de posio observado (7,5 ms)
35
-15
-10
-5
0
5
10
15
0 0,5 1 1,5 2 2,5 3 3,5
Tempo (s)
T
e
n
s

o

(
V
)
Figura 24 - Grfico de tenso observado (7,5 ms)
-0,10
0,00
0,10
0,20
0,30
0,40
0,50
0 0,5 1 1,5 2 2,5 3 3,5
Tempo (s)
V
e
l
o
c
i
d
a
d
e

(
m
/
s
)
Figura 25 - Grfico de velocidade observado (7,5 ms)
36
Tambm foi implementado um algortmo de acelerao, as respostas obtidas
para T
a
= 7,5 ms com acelerao foram as seguintes :
0
0.2
0.4
0.6
0.8
1
1.2
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5
Tempo (s)
P
o
s
i

o

(
m
)
Figura 26 - Grfico de posio observado (7,5 ms com acelerao)
-4
-2
0
2
4
6
8
10
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5
Tempo (s)
(

V

)
Figura 27 - Grfico de tenso observado (7,5 ms com acelerao)
37
-0.05
0.00
0.05
0.10
0.15
0.20
0.25
0.30
0.35
0.40
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5
Tempo (s)
V
e
l
o
c
i
d
a
d
e

(
m
/
s
)
Figura 28 - Grfico de velocidade observado (7,5 ms com acelerao)
5.5 Controle de Velocidade
Foi projetado tambm um controlador de velocidade para ser usado no
movimento por joystick. O controlador utilizado foi :
s
) s T (
K ) s ( G
C
+

Com o auxlio do Matlab, projetou-se este controlador, chegando aos seguintes
valores : T=10 e K=20.
Utilizou-se o modelo na figura 29 para simulao, e determinao dos valores de
T e K.
38
Figura 29 Modelo usado para simular controle de velocidade
No modelo, K1 representa a transformao da sada do controlador que um
valor de tenso, em valor que represente um valor de PWM, ou seja que obedea a
relao de 12 V equivale 128. Assim, possvel simular a saturao de tenso e outras
caractersticas do PWM. K2 = 1/K1, e K3 a converso de velocidade do motor em
rad/s para velocidade do rob em m/s.
Os resultados obtidos da simulao foram os seguintes :
Figura 30 - Grfico de velocidade
39
Figura 31 - Grfico de tenso
Figura 32 - Grfico de Corrente
Os resultados obtidos foram satisfatrios, sendo que a planta possui um tempo
de resposta bom para uma entrada degrau.
O controlador obtido foi discretizado pelo mtodo de tranformao bilinear, e
chegou-se a seguinte equao de diferenas :
anterior a atual a anterior atual
u ) 2 T T (
2
K
u ) T T 2 (
2
K
y y + + +
No entanto, do modo como foi projetado, a sada dada em tenso, e a entrada
dada em valor de velocidade em m/s. Por isso, deve-se transformar a sada em valor de
40
PWM, considerando o ganho K1 = 10,67 e alm disto, transformar a entrada em
diferena de pulsos de encoder. Como j foi dito, 1 m/s equivale a 50465T
a
, sendo
assim basta dividir a entrada por este valor. Fazendo estas duas correes, a expresso
fica :
a
anterior a atual a anterior atual
T 50465
67 , 10
u ) 2 T T (
2
K
u ) T T 2 (
2
K
y y

1
]
1

+ + +
Para T
a
= 5 ms :
anterior atual anterior atual
u 825 , 0 u 867 , 0 y y +
Para T
a
= 7,5 ms :
anterior atual anterior atual
u 545 , 0 u 585 , 0 y y +
6. Implementao de Comandos
Como j foi dito anteriormente, j existe um software com um sistema de
controle em tempo real que possui rotinas bsicas. Este software j se encontrava pronto
anteriormente ao incio deste trabalho, e os comandos e a linguagem de programao
definidas neste projeto sero implementados aproveitando a estrutura e as rotinas
bsicas que este software possui, fazendo-se as adaptaes e melhorias necessrias.
A linguagem de programao que foi utilizada o C, e o assembler do
microcontrolador da Base Mvel, ou seja, assembler da famlia 51 de
microcontroladores da Intel. Foi utilizado um software denominado "Dunfield
Development System" para compilar o programa em C gerando o cdigo em assembler
do microcontrolador, e assim ser possvel a gravao do software de controle em
EPROM.
A seguir sero abordados alguns aspectos importantes sobre a implemtao do
sistema de controle, comandos, e funes necessrios.
6.1 Sistema de Controle em Tempo Real
O software de controle da Base Mvel existente, j possuia caracterstica de
tempo real. No entanto, o sistema sofreu algumas melhorias, sendo que a sua estrutura
final para execuo dos comandos pode ser vista na figura 33.
O sistema pode ser dividido em duas partes principais : o programa principal, e a
rotina de tempo real.
No programa principal, ocorre a inicializao do sistema, e ento o programa
41
entra em um loop. Neste loop ocorre o reconhecimento de caracteres e de comandos,
caso um comando vlido seja entrado pelo usurio, o programa realiza a execuo do
comando teclado, este por sua vez pode ser do tipo comando contnuo (exemplo :
Mostra continuamente a posio do rob), ou de execuo imediata (exemplo : mostra a
posicao atual do rob).
Caso o comando seja do tipo contnuo, ocorre apenas a habilitao do comando,
que por sua vez executado de tempos em tempos na rea do programa que se destina a
execuo de comandos contnuos habilitados. Estes comandos contnuos no podem
fazer com que o fluxo do programa pare enquanto ele est sendo executado, pois pode
ocorrer que mais de um comando contnuo esteja acionado. Por isso existe a
necessidade de execut-los somente uma vez, caso habilitados, todas as vezes que ao
percorrer o loop principal se chegar a posio de execuo de comandos contnuos
habilitados. Por exemplo : Ao invz de fazer um loop que mostrasse continuamente a
posio do rob, o que se faz mostrar a posio atual do rob toda vez que o programa
passar pela rea de execuo de comando contnuo, e encontrar o comando contnuo que
mostra posio do rob habilitado.
Quando um comando contnuo (SHOW CPOSITION) entrado pelo usurio, a
habilitao deste comando ocorre ao se colocar o cdigo deste comando em uma pilha
de comandos contnuos habilitados. Quando o comando cancelado, o que ocorre
pressionando o crtl-x, o cdigo retirado da pilha.
Da mesma forma que existe o comando contnuo, tambm se implementou os
mdos de execuo, cujo taratamento se encotra na mesma rea e do mesmo modo que os
comandos contnuos. No entanto estes modos de execuo so habilitados por flags, e
no podem ser cancelados com o ctrl-x. Como exemplo desta ultima categoria est o
MOVETAB, o RUN, a verificao se um comando MOVE, MOVEREL, ou
MOVEABS j foi executado.
O bloco de reconhecimento de comandos faz a verificao se algum caracter foi
teclado, e se foi, ocorre a formao de uma linha de comando. Caso esta linha seja
completada, pelo pressionamento de um return ento o comando reconhecido
segundo a sintaxe estabelecida.
Caso no ocorra o pressionamento de nenhuma tecla, a execuo do programa
passa por este bloco sem execut-lo, e neste caso o fluxo cai na execuo de comandos
contnuos habilitados, j que no h comando imediato para ser executado, e nem
chamada de comando contnuo para habilitar flags. Depois da execuo dos comandos
42
contnuos habilitados, o programa volta para o reconhecedor de comandos.
Paralelo ao programa principal, ocorre a execuo da rotina de tempo real. Esta
rotina tm incio a cada perodo fixo de tempo. Assim tm-se o controle preciso do
tempo em que ela est sendo executada. Nesta rotina ocorre a leitura dos sensores como
encoder e joystick, ocorre o controle de posio e velocidade quando habilitados, ocorre
o clculo de posio atual e velocidade atual, e tambm ocorre o incremento de
contadores de interrupo. Estes contadores possuem a utilidade de fazer com que o
programa principal tenha uma noo de quanto tempo se passou. Atravs deles pode-se
ter um controle de tempo grosseiro no programa principal. As variveis de posio,
velocidade, joystick e encoder ficam disponveis para uso no programa principal. Nesta
rotina de tempo real tambm ocorre a captura de pontos para formar a tabela.
Ambas as partes do sistema de controle pode atuar no rob mvel de alguma
forma.
Programa Principal
Inicializao
do Sistema
Reconhecedor
de Comandos
Execuo de
Comandos
Contnuos
Habilitados
Habilitao de
Comandos
Contnuos
Execuo de
Comandos
Imediatos
Rob Mvel
Leitura de Encoder e
Joystick
Controle de
Velocidade e
Posio
Clculo de
Velocidade Atual, e
de Posio Atual
Contadores de
Interrupo
Fim
Tempo Real
Incio
Figura 33 Estrutura de Sistema de Tempo Real
43
6.2 Rotinas de Interface com o Usurio
Como j foi dito, muitos dos elementos de interface com o usurio, j haviam
sido implementados como prompt, backspace, cabealho, algumas rotinas de impresso,
converso de caracteres ASCII para hexadecimais e vice-versa, controle da transmisso
e recepo de caracteres pela serial, etc. No entanto o sistema no apresentava todos os
componentes de interface necessrios, principalmente a rotina de reconhecimento de
comandos, j que s neste trabalho foi definida uma sintaxe de comandos, e de
programao mais elaborada que deve ser reconhecida e interpretada pelo sistema.
Tambm foi necessrio desenvolver algumas rotinas de converso de caracteres, e de
impresso que no havia no sistema antigo, j que este trabalhava somente com
impresses em hexadecimal. A seguir ser explicado sobre as rotinas de interface que
foi necessrio desenvolver.
6.2.1 Reconhecimento de Comandos
Como visto no tem anterior, a funo de reconhecimento dos comandos
depende da sua sintaxe. O sistema deve possuir informaes sobre os comandos para
saber se o modo de execuo atual compatvel com o comando, e para isso no
desenvolvimento da rotina de reconhecimento de comandos foi proposta uma estrutura
que guarda no sistema de controle, todos os comandos definidos, bem como
informaes sobre estes comandos para que se possa saber se o comando entrado
compatvel com o modo atual, quantos parmetros ele possui, se comando contnuo ou
de execuo imediata, enfim, poder ter maior controle sobre o sistema e ser possvel de
identificar para o sistema, o comando teclado.
A estrutura proposta formada de dois campos : uma string que guarda o nome
do comando, e um campo de bits que guarda informaes sobre o comando. Para
guardar todos os comandos disponveis, faz-se um vetor cujos elementos so definidos
como sendo do tipo desta estrutura. Assim, pode-se ter cada comando associado ao
ndice do elemento no vetor onde ele foi definido.
A estrutura proposta a seguinte :
struct comdef {
char *name;
char typebits; };
44
Onde typebits o campo de bits que contm as informaes sobre o comando,
e cada bit possui o seguinte significado :
Um exemplo de como esta estrutura pode ser :
struct comdef Comandos[2];
Comandos[0].name = "SET MODE";
Comandos[0].type = 0xe1; /* Esta funo pode ser usada em todos os nveis,
de execuo imediata, e possui 1 parmetro */
Comandos[1].name = "CENC";
Comandos[1].type = 0x38; /* Esta funo funciona apenas no modo de
manuteno, de execuo contnua, e no possui parmetros,
e impede reconhecimento de caracteres que no sejam ctrl-x e ctrl-z */
A funo de reconhecimento de comando implementada pega o buffer de linha
de comando, e separa o nome do comando dos parmetros. Ento o nome de comando
digitado comparado com os nomes dos comandos existentes. A partir desta
comparao, identifica-se o comando digitado, e uma varivel recebe o cdigo deste
comando (ndice no vetor de comandos). Tambm so reconhecidos os parmetros,
transformando a string de parmetros em valores numricos. Com o cdigo do
comando, pode-se execut-lo no loop da rotina principal (ver diagrama da rotina do
sistema de controle em tempo real), sendo que ele pode ser executado imediatamente se
no for contnuo, ou pode ocorrer a habilitao dele, caso seja um comando contnuo.
Esta rotina de reconhecimento de comandos altera a varivel global usda no loop
principal denominada "comando" que guarda o cdigo do comando que deve ser
executado, a funo de reconhecimento tambm altera um vetor denominado
"parametros" para guardar os valores dos parmetros do comando reconhecidos que
deve ser executado. Estas duas variveis so responsveis pela execuo dos comandos.
Modo de programao
Nmero de Parmetros
Possvel de inserir em programas
Comando contnuo
Modo de manuteno
Modo normal
7 6 5 4 3 2 1 0
Impede reconhecimento de caracteres
45
Na mesma rotina de reconhecimento de caracteres pode ocorre a insero de
linhas em um programa. Esta insero ocorre quando o sistema est no modo de
programao e o primeiro caracter digitado um nmero, que corresponde a linha do
programa. Quando as condies anteriores so satisfeitas, esta rotina insere a linha
digitada no programa, e no retorna o cdigo do comando para o programa principal
(variavel comando), j que no desejado que se execute imediatamente a linha de
programa digitada.
Para armazenar um programa na memria, optou-se por uma lista ligada onde os
elementos representam cada linha do programa. Maiores informaes sero dadas na
seo de programao.
6.2.2 Manipulao de Valores ASCII, Hexadecimal, e Decimal
Foram implementadas rotinas auxiliares no sistema de controle que fazem a
converso de caracteres ASCII para valores hexadecimais e vice-versa. A converso de
uma string em ASCII para valor hexadecimal utilizada no reconhecimento de
parmetros entrados em hexadecimal no modo de manutno. O inverso , ou seja,
converso de valores hexadecimais em ASCII que pssa os representar usado para a
impresso de valores de encoder e joystick tambm no modo de manuteno.
Tambm foram implementadas rotinas que convertem valores (em hexadecimal)
para caracteres ASCII que representem o valor convertido em decimal. Existem duas
rotinas que foram implemtadas com esta finalidade, uma delas converte e imprime na
tela, a outra guarda o resultado em uma string que pode ser usada para outras
finalidades.
No modo normal e de programao, foi usado para reconhecer parmetros
digitados na forma decimal, uma funo j existente na bibliotca do compilador que
converte uma string de caracteres ASCII em um valor inteiro (atoi). Nestes modos, so
usados para a impresso de alguns valores, a funo que converte hexadecimal em
ASCII representando nmeros decimais citada acima.
6.2.3 Modos de Operao - SET MODE <0,1,2>
Para implementao do comando SET MODE foi preciso de uma varivel global
que pudesse guardar o valor do modo de operao atual, ou seja, que indicasse atravs
dos seus trs ltimos bits (da mesma forma que indicado na varivel de tipo de
46
comando) qual dos modos est ativado. Guardando o modo de execuo atual desta
forma, pode-se fazer uma simples operao lgica de AND entre a varivel que indica o
modo atual, e a varivel que indica o modo que o comando digitado pode operar, e
assim saber se o comando entrado pode ser executado ou no.
Para diferenciar na interface os trs modos de operao, optou-se por mostrar um
tipo de prompt diferente para cada modo, sendo assim exeiste um varivel que guarda o
prompt atual, e esta varivel alterada quando se muda de modo.
Esta funo tambm desliga o controle de posio e velocidade quando se entra
em modo de manutaeno e modo de programao, e religa o controle quando o modo
normal. Devido a esta funcionalidade, o comando no pode permitir mudano de modo
quando um movimento que requer controle de posio ou velociadde est sendo
executado.
6.2.4 Help (?)
Como parte de um dos comandos de interface, est disponvel um help que
depende do modo de operao atual. Basta pressionar ? para visualizar os comandos
que esto disponveis no modo corrente.
6.2.5 Tecla Ctrl-X e Ctrl-Z
Esta combinao de teclas especiais, juntamente com a tecla de help (?) so
tratadas de maneira diferente. Ou seja, elas no so armazenadas na linha de comando
como as teclas numricas e alfanumricas, e elas possuem funes especiais. No caso
do ctrl-x, ele serve para desabilitar comandos contnuos habilitados, e o ctrl-z serve para
resetar o sistema do rob. Estas duas teclas sempre se mantm funcionando mesmo que
o sistema esteja impedido de reconhecer caracteres pela execuo de algum comando
contnuo. J a tecla ?, tambm no colocada na linha de comando, e no instante do
seu pressionamento, o help mostrado.
6.3 Controle de Posio Comandos de Movimento
O controlador de posio projetado, como visto anteriormente, obteve um bom
resultado. Este sistema de controle de posio se mantm sempre acionado quando se
est no modo normal. No modo de manuteno e no modo de programao, como j foi
dito, o sistema de controle desligado, sendo que s funciona enquanto um comando de
movimento est sendo executado.
47
A seguir sero abordados alguns aspectos relevantes sobre o controle, sobre as
variveis e comandos envolvidos, e sobre os problemas enfrentados na implementao
dele.
6.3.1 Acelerao
Para implementar a acelerao, dividiu-se basicamente em dois casos :
O rob acelera, atinge a posio intermediria sem ter atingido a velocidade
de entrada e comea adesacelerar;
O rob acelera, atinge a velocidade definida, fica com velocidade constante,
e desacelera;
Foi definido uma flag que indica quando foi atingido a posicao intermediria do
movimento. Foi definido uma varivel que corresponde ao quanto deve-se somar na
referncia de posio. Esta varivel age como se fosse a velocidade pois a cada perodo
de interrupo, somado na referncia de posio o valor desta varivel. Esta
velocidade comea em zero e vai sendo incrementada de uma parcela fixa.
Tambm foram definidas flags que dizem quando o rob deve desacelerar,
quando est na primeira metade do movimento, quando est com velocidade constante,
e um contador para indicar quanto o rob andou em velocidade constante at a posio
intermediria.
O algortimo funciona assim : A varivel de velocidade comea em zero e vai
sendo incrementada a cada periodo de amostragem. Se o rob atingiu a posio
intermediria sem ter atingido a velocidade constante, comeca a desacelerar. Se o rob
estiver acelerando e atingir a velocidade constante definida, seta a flag de velocidade
constante e comea a incrementar o contador para saber se quanto deslocou at a metade
com velocidade constante. Atingindo a posio intemediria, comea a decrementar o
contador at chegar ao zero. Ento pode desacelerar.
Com este agortmo implementou-se a acelerao do rob, e os resultados podem
ser vistos nos grficos apresentados na seo de controle de posio.
6.3.2 Clculo de Posio Absoluta Atual
Para determinao da posio absoluta atual do rob, optou-se por fazer um
sistema que fosse possvel de determinar a posio de maneira rpida, sem perder muita
preciso, e que pudesse calcular a posio sempre que houvesse movimento do rob,
seja este movimento provocado por joystick, por atualo direta no motor, ou por
48
comandos como MOVE, ou MOVEABS.
Sendo assim, foi implementado na rotina de tempo real um algortmo que
calcula a variao da leitura do encoder entre duas interrupes (perodos de
amostragem onde se entra na rotina de tempo real) consecutivas. Caso esta variao for
diferente de zero, o sistema l a posio angular das rodas, e atualiza em variveis de 32
bits que guardam as posies absolutas, o quanto o rob se deslocou em X e em Y.
As posies absolutas so guardadas nestas variveis de 32 bits, e esto em
unidade de pulsos de encoder. Isto feito para que no se perca tempo e preciso na
converso de unidades, j que a leitura natural de posio feita em pulsos de encoder.
Desta maneira, as converses para milmetros so feitas no programa principal quando
se deseja mostrar ao usurio, ou fazer alguma operao interna com os valores em
milmetros.
Assim resolveu-se o problema do calculo da posio absoluta atual.
6.3.3 Comando MOVE, MOVEREL, e MOVEABS
A rotina de comando de movimento mais simples que se utiliza do controle de
posio a do comando MOVE. Este comando faz com que o rob se translade de uma
distncia dada pelo parmetro deste comando. Nesta rotina, a distncia entrada como
parmetro convertida de milmetros para nmero de pulsos de encoder, e ento
guardada em uma varivel que indica a posio relativa final em pulsos de encoder. O
valor do encoder no incio do movimento tambm guardado em outra varivel. Uma
referncia de posio gerada a cada interrupo, com base na porcentagem de
velocidade mxima que foi entrada como parmetro.
Sabendo-se o valor do encoder no incio do movimento, o valor do encoder no
instante atual, o valor da referncia, e o valor da posio relativa final em pulsos de
encoder, pode-se calcular o erro do controlador e assim fazer com que o sistema de
controle de posio funcione corretamente.
Para este comando, ainda se implementou uma flag que indica que o rob est
em movimento e no chegou sua posio final. A flag setada sempre que se inicia o
deslocamento, e resetada quando o rob atinge a posio final desejada (com uma
determinada preciso), e para de se mover. Esta flag muito til quando este comando
usado como um comando de programa, j que ela indica quando se pode comecar a
execuo de um novo comando do programa, ela tambm util pois indica ao sistema
que o rob est se movendo e o usurio no pode executar outro movimento enquanto
49
este no acabar.
Para implementar o comando MOVEABS, utilizou-se as variveis que indicam a
posio absoluta atual do rob, e tambm uma varivel que indica a direo das rodas.
Assim, quando uma coordenada entrada como parmetro do comando, e o sistema de
coordenadas o cartesiano, determina-se a partir da coordenada absoluta atual, qual o
deslocamento em X e em Y que o rob deve fazer. A partir destes valores chega-se a um
valor de ngulo que as rodas devem rotacionar, e um valor de distncia que o rob deve
se deslocar. Aps, usa-se duas funes bsicas de movimento que so ROTATE, e
MOVE. Quando a coordenada de entrada est no sistema polar, esta coordenada
transformada para cartesiana, e ento realiza-se o procedimento descrito acima. Da
forma com que foi implementado, o rob realiza a rotao das rodas de ngulos entre
-180 e +180, faz o deslocamento sempre na direo positiva, no entanto com uma
pequena alterao possvel fazer uma rotao somente entre 90 e +90 e ento ajustar
a direo do movimento, que seria negativa em alguns casos. Todos os clculos de
posio j esto preparados para este tipo de movimento.
O comando MOVEREL simples j que basta pegar o ngulo e a distncia
fornecidos como parmetros para o comando quando o sistema de coordenadas o
polar, ou determinar o ngulo e o deslocamento que o rob deve fazer a partir do
deslocamento em X e em Y passados como parmetros quando o sistema de
coordenadas cartesianos.
importante observar que os parmetros de entrada so inteiros em milimetros,
portanto no possvel movimentos superiores a 30 metros. Tambm ocorre esta
limitao quando se mostra a posio atual, no consegue-se mostrar posies maiores
que 30 metros.
6.3.4 Funes Seno, Coseno, Arco Tangente, e Teorema de Pitgoras
importante observar que os clculos envolvidos nas operaes de cculo de
posies descritas nos dois itens acima, usam funes como seno, cosseno, arco
tangente e teorema de Pitgoras. Isto nos causa um problema que o de operaes com
valores no inteiros, ou at mesmo menores que zero.
O microcontrolador, e at mesmo o compilador em C utilizado no possui
funes que usam ponto variveis de ponto flutuante, assim precisou-se trabalhar
sempre com valores inteiros.
Para clculo da hipotenusa usando os catetos, expandiu-se em srie at um termo
50
que obtive-se uma preciso de clculo razovel a expresso do teorema de pitgoras, j
que no havia disponvel a funo raiz quadrada. Trabalhou-se nestas funes, com
valores de entrada e sada em inteiros de 16 bits, no entanto no interior da funo
utilizou-se variveis de 32 bits, j que os valores precisavam ser elevados a potencia de
ordem dois ou trs.
As funes seno, cosseno foram implementadas usando uma tabela de coseno,
onde o ndice da tabela representa o angulo em grau, e o valor na tabela o cosseno
multiplicado por um valor que potncia de 2, no caso implementado, multiplicou-se
por 64. Usa-se potncia de 2 para facilitar as operaes de divises pois assim elas
podem ser feitas mais rapidamente. A tabela vai de 0 90 graus, variando de grau em
grau.
Para implementao da funo que retorna o angulo cujo o cateto oposto, cateto
adjacente e a hipotenusa so conhecidos,funo que se entitulou arco tangente, utilizou-
se a tabela de cosenos para determinar o angulo. Calculou-se o coseno, ou o seno,
dependendo de qual dos catetos era maior, multiplicou-se por 64, e procurou-se na
tabela, qual era o ndice que corresponde-se ao valor mais prximo, determinando assim
o angulo.
Observe que em todas as contas envolvendo estas funes, mesmo procurando
na sua implementao diminuir os erros de truncamento, este tipo de erro continua
existindo.
6.3.5 Clculo de Posio Comando MOVE
Como pode ser visto anteriormente, no clculo da posio atual absoluta a cada
interrupo de tempo real, ocorre muitos erros de arredondamento, pois ela se utiliza de
funes de seno e coseno para calcular o valor do incremento da posio em X e em Y,
alm do mais, este clculo feito com valores pequenos de pulsos de encoder (variao
de pulsos entre uma interrupo e outra) e assim acumula os erros ao longo do seu
movimento.
No entanto, quando se tm certeza de que o movimento ser uma reta, o que s
pode ser afirmado para os comandos MOVE, MOVEREL, e MOVEABS, ento pode-se
fazer o clculo da posio baseado na posio absoluta inicial, e no deslocamento em
pulsos de encoder durante o movimento. Este calculo de posio no impede que o
outro calculo seja realizado, mas quando executado um movimento do tipo citado, a
posio atual calculada com base em todo o movimento, e o valor da posio absoluta
51
final atualizada ao trmino deste clculo. Observe que no h duplicidade de variveis
de posio, e sim tudo atualizado em uma nica varivel.
Este algortmo faz com que o erro de truncamento diminua quando se tm
certeza de que o movimento ocorreu em linha reta, sem variao do angulo das rodas.
6.4 Set de Parmetros
Para guardar as velocidade de translao mxima e default, bem como as
velocidades de rotao mxima e default foram usadas variveis globais, que so
ajustadas atravs dos comandos: SET TRANSMAXVEL, SET TRANSVEL, SET
ROTMAXVEL, e SET ROTVEL respectivamente. O nico cuidado com estas funes
se d em relao a no deixar que os valores entrados pelo usurio sejem maiores que os
permitidos, e tambm no pode ser permitido setar a velocidade mxima quando o rob
est em movimento.
Os comandos SET JOYSTICK e SET TABLE sero discutidos posteriormente.
O comando SET COORDENATE apenas altera o valor de uma flag que indica
se o sistema est usando coordenadas cartesianas ou polares.
O comando SET MODE j foi discutido anteriormente.
6.5 Comandos de Exibio
Nesta categoria se encontra basicamente os comandos que permitem visualizar a
posio, a velocidade e o valor doss parmetros do sistema apresentados anteriormente.
Os comandos SHOW POSITION e SHOW CPOSITION convertem as variveis
de posio atual absoluta, de pulsos de encoder para milmetros, e imprimem na tela.
Os comandos SHOW VELOCITY e SHOW CVELOCITY fazem o mesmo com
a varivel que guarda a diferena na posio do encoder entre duas interrupes de
tempo real.
As converses so feitas seguindo a seguinte relao : 1m equivale a 50464
pulsos de encoder, e 1m/s equivale a uma variao de 50465T
a
, onde T
a
o perodo de
amostrage em segundos.
Quando a funo SHOW CVELOCITY ou SHOW CPOSITION acionada,
mostra-se continuamente a velocidade em valores decimais, e o sistema no reconhece
nenhum caracter digitado exceto 'ctrl-x' (cancela ultimo comando contnuo ativado) e
'crtl-z' (reseta rob).
52
6.5 Movimento atravs do J oystick SET J OYSTICK
O movimento do rob atravs do joystick habilitado e desabilitado atravs do
comando SET JOYSTICK. Este comando no um comando contnuo, pois ele no
pode ser cancelado por ctrl-x. Seu cdigo no vai para a pilha de comandos contnuos
sendo executados. No entanto, embora no seja um coando contnuo, seu funcionamento
semelhante, pois setada uma flag que ativa este comando, e ele ento executado na
mesma rea de programa que os comandos contnuos so executados. Optou-se por
fazer assim, para distinguir os comandos que podem ser cancelados por ctrl-x
(comandos contnuos) e os que tm carater contnuo mas no podem ser cancelados,
estes ltimos habilitados por flags. Uma vantagem das flags que elas so rpidas de
serem comparadas, e este tipo de comando normalmente coloca restries para a
execuo de outros comandos.
Quando o rob est neste modo, acionado um controle de velocidade, e
desligado o controle de posio, sendo que a referncia para o controlador obtida da
seguinte forma : o valor atual do eixo do joystick lido, e ento atravs de uma tabela
pego o valor de referncia, em porcentagem de velocidade mxima, para o controle de
velocidade. Este valor de referncia proporcional ao eixo do joystick. Desta forma se
obtm uma velocidade proporcional posio do eixo do joystick.
Como o controle de posio desligado, no possvel usar joystick quando se
est usando este controle, ou seja, quando rob em movimento, quando executando
programa, etc.
Para a rotao das rodas tambm feito uma rotina semelhante, no entanto no
se faz um controle de velocidade j que o motor de passo opera em malha aberta.
6.6 Tabela de Pontos
6.6.1 SET TABLE
Atravs do comando SET TABLE pode-se habilitar ou desabilitar o modo de
captura de posies para a construo de uma tabela. Como feito para o SET
JOYSTICK, utilizou-se uma flag que indicasse quando a captura est habilitada ou no.
Sendo assim, este comando no comando contnuo.
A captura dos pontos feita sempre que se aperta o boto, e preciso guardar o
ponto no instante que foi apertado o boto, por isso colocou-se a rotina de captura de
pontos na interrupo de tempo real. A captura dos pontos seria impossvel se no
53
houvesse o clculo da posio absoluta atual a cada perodo de amostragem, mesmo
quando o comando sendo executado descreve uma linha reta (MOVE).
Quando SET TABLE ligado, a posio absoluta atual em milmetros
calculada, e guardada em uma varivel auxiliar. Quando o boto pressionado, calcula-
se a posio atual em milmetros, e armazena-se em dois vetores o deslocamento em X e
em Y entre as duas posies. Ento o indice do vetor incrementado, e a posio
absoluta guardada novamente para ser possvel o calculo do deslocamento relativo no
prximo click de boto. Deve-se tomar cuidado para que no se passe do limite fsico de
memria, estourando o espao dos vetores de pontos.
Quando SET TABLE desligado, guarda-se o indice do final da tabela, para que
seja possvel controlar sua posterior execuo.
6.6.2 MOVETAB
Composta a tabela, esta pode ser reproduzida atravs do comando MOVETAB.
Como a tabela de pontos formada por posies relativas, j que o importante
a trajetria realizada, e no a posio absoluta desta trajetria, para a execuo da tabela
basta realizar um comando semelhante ao MOVEREL para coordenadas cartesianas
para cada conjunto de pontos X e Y capturados.
Quando MOVETAB executado, aciona-se uma flag a semelhana de SET
TABLE e de SET JOYSTICK, assim, no pode ser cancelado por ctrl-x. Entretanto, este
comando poderia ser implementado de maneira diferente como um comando contnuo, e
ento poder ser cancelado.
Aps ser setada aflag, o comando executado na rea de execuo de comandos
contnuos, sendo que executado o movimento relativo do rob para cada par de
pontos, no passando para o par seguinte enquanto o rob no executar todo o
movimento. Ao final da tabela indicada pela varivel de fim de tabela, a flag resetada.
importante observar que este comando pode ser usado dentro de um programa,
e se usado for a, o usurio possui o prompt para realizar comandos que sejam permitidos
enquanto se executa o MOVETAB.
54
6.6.3 LOADTAB e UPLOADTAB
Como os valores so armazenados em um espao da memria, estes podem ser
salvos em arquivo atravs do comando UPLOADTAB, enviando os pontos no formato
especificado. Tambm podem ser carregados de arquivo atravs do comando LOAD.
importante observar que da forma que foi implementado, estes dois comandos no
podem ser usados quando o rob estiver se movendo.
6.7 Programao
Para armazenar o programa na memria, optou-se por uma lista ligada onde os
elementos representam as linhas do programa. Cada elemento constitui de uma estrutura
que formada por uma varivel que guarda o valor da linha, outra varivel que guarda o
cdigo do comando, e um vetor para armazenar os parmetros do comando, e de um
ponteiro para o prximo elemento. Fazendo a armazenagem desta forma, pode-se
utilizar o algortmo de reconhecimento de comandos descrito anteriormente para
interpretar os comandos e armazen-los de forma interpretada na lista ligada que forma
o programa. Para utilizar o mesmo algortmo basta adicionar o reconhecimento do valor
da linha de programa antes do nome do comando, e fazendo com que os valores
interpretados sejam armazenados em um novo elemento da lista criado e que ser
inserido no programa posteriormente.
Neste algortmo de insero, verifica-se no tipo do comando reconhecido, se ele
pode ser inserido como comando em um programa, se no puder, ento no ocorre a
insero na lista ligada, e o elemento criado dinamicamente apagado.
Para administrar a lista ligada, foram implementadas rotinas que inserem,
buscam, e apagam elementos em uma lista ligada, sendo que a entrada destas rotinas
sempre o valor da linha, e a lista ligada se encontra sempre organizada por ordem
crescente desse valor. Tomou-se o devido cuidado para nunca inserir um elemento na
lista, se ela j possuir um elemento com o mesmo nmero de linha.
A estrutura que foi usada para a lista foi a seguinte :
struct ProgElement {
int Linha;
char Comando;
int Parametros[3];
struct ProgElemento *NextElemento };
onde :
Linha o valor da linha de programa do elemento;
Comando o cdigo do comando desta linha;
55
Parametros guarda os parametros digitados para o comando;
NextElemento o ponteiro para prximo elemento na lista.
importante observar que esta estrutura foi escolhida por vrios fatores. Um
deles porque ela semelhante maneira com que qualquer comando tratado, ou seja,
encontrando-se o cdigo correspondente ao comando, e guardando os parmetros em
variveis que so utilizadas no programa principal quando a rotina do comando est
sendo executada.
Outro fator est relacionado com o fato de que necessrio a execuo do
programa em tempo real, sendo que se tornaria complicado ter que interpretar o
programa no momento de sua execuo. Assim decidiu-se elaborar um linguagem que
fosse possvel de ser interpretada na medida que as linhas so inseridas, e que fosse
compatvel com a estrutura de comandos definida. Isto influenciou na escolha da
estrutura da linguagem, e nos comandos de controle de execuo, na medida que no
poderiam ser usados estruturas de if e while parecidas com a de C e Pascal, j que
este tipo de estrutura requer que aps a edio do programa, se faa uma interpretao e
compilao do programa para que se determine onde esto o fim do while e do if. A
soluo para a estrutura de linguagem foi apresentada anteriormente, na seo onde se
descreve a definio de comandos. Observe que os comandos de if definidos
apresentam como um dos parmetros, o nmero da linha para onde o programa deve ir
caso a comparao esteja correta.
Portanto, a forma como se definiu a estrutura da linguagem, o mtodo com que
o programa armazenado, e o interpretador de comandos, permite a execuo do
programa de maneira rpida e natural para o sistema de controle em tempo real
apresentado.
6.7.2 RUN
Para implementar o comando RUN, que responsvel pela execuo do
programa, foi necessrio definir um ponteiro que aponta para a linha do programa que
deve ser executada ("pLinhaAtual"), e uma flag que indica que o programa est sendo
executado. Uma vez iniciado a execuo do programa, o tratamento do RUN feito
como se fosse um comando contnuo, desabilitando o reconhecimento de caracteres,
entretanto do modo que foi implementado (por flag) ele no cancela a execuo com o
ctrl-x, mas pode ser feita uma alterao simples para que o comando RUN se torne um
56
comando contnuo. Sempre quando no h comando sendo executado, ou seja, j
acabou a execuo do comando anterior, a varivel "comando" que guarda o cdigo do
comando que deve ser executado recebe o cdigo do comando que se encontra na linha
de programa apontada pelo ponteiro "pLinhaAtual"; a varivel "parametros" tambm
recebe os valores dos parmetros da linha de programa apontada pelo mesmo ponteiro.
Feito isto, o ponteiro "pLinhaAtual" atualizado para o prximo ponteiro, e ento o
programa volta para o incio do loop, passando a executar o comando com o cdigo que
acabou de ser dado para a varivel "comando.
interessante observar que o sistema sabe que um comando acabou de ser
executado pois se este comando for de natureza imediata e no for de movimento, a
execuo dele acaba quando o programa chega na rea de execuo de comandos
contnuos habilitados, que onde o comando RUN se encontra. Caso o comomando seja
de movimento, o comando RUN s manda executar o prximo comando quando o rob
estiver parado, ou seja, quando acabar o movimento (flag que indica movimento do
rob resetada). O RUN tambm no manda executar um novo comando caso a flag de
MOVETAB estiver setada, isto impede que seja executado um novo comando ao
trmino do movimento do primeiro ponto da tabela (j que o MOVETAB possui vrios
comandos MOVEREL implcitos). Com isso, resolveu-se o problema de execuo do
programa.
6.7.3 IFEQ, IFNE, IFGT, etc, e GOTO
Os comandos do tipo IFEQ, IFNE, IFGT, etc, foram de simples implementao,
fazendo com que o valor de pLinhaAtual fosse alterado conforme o resultado da
comparao. Usou-se nestas rotinas a funo de busca na lista ligada.
O comando GOTO tambm altera o valor de pLinhaAtual como nos comandos
anteriores, com exceo da comparao que no existe.
6.7.4 SET VAR, INC, e DEC
Os comandos de SETVAR, INC, e DEC tambm so rotinas simples que alteram
o valor de elementos de um vetor usado para implementar os contadores internos do
programa.
Com os comandos de controle de execuo descritos neste tem e nos tens
anteriores pde-se definir a linguagem, e implementar a execuo de programas no
sistema de controle do rob.
57
6.7.5 CLEAR, LIST e EDIT
Na funo CLEAR foi usada basicamente a funo de apagar elemento da lista,
claro que primeiro verificado se o elemento existe.
O comando LIST utiliza o comando de encontrar elemento na lista, e tambm
um comando de imprimir comando na tela, nesta hora o cdigo do comando
decodificado, eseu nome impresso.
Para o comando EDIT, utilizou-se de funes que convertessem valores inteiros
em strings ASCII que representassem o valor em decimal, alm disso foi necessrio
copiar esta string para o buffer de linha de comando. Depois que o comando foi jogado
novamente para a linha de comando no formato de string, basta apag-lo da lista, pois
no caso do usurio fazer as mudanas necessrias e pressionar enter, sem ter apagado a
linha da lista, o sistema tentar inserir um elemento com um nmero de linha igual a um
existente. Por estes motivos, deve-se apagar o comando para que ele possa ser inserido
novamente depois de editado.
6.7.6 Comandos de Espera
Para a implementao do comando WAIT TIME usou-se um contador de
interrupes. Assim, o programa fica parado em um ponto at que o contador de
interrupes atinja o valor correspondente ao tempo desejado.
O comando WAIT KEY, e WAIT BUTTON no apresentaram problemas na
implementao, sendo que eles fazem com que o programa fique parado at que uma
tecla ou um boto respectivamente seja apertado.
6.7.7 LOAD e UPLOAD
Os comandos LOAD e UPLOAD so parecidos com os comandos LOADTAB e
UPLOADTAB, sendo assim, apresentam os mesmos problemas e os mesmos
algortmos.
6.8 Sugestes para Implementao Futura
Existem alguns comandos que podem ser modificados e outros comandos novos
que podem ser implementados, sem grandes alteraes no sistema. Alguns deles so :
SET ACCELERATION <1,0> : Liga ou desliga a celerao do rob;
Pode ser implementado um limite para o movimento do rob, de modo que
no permita que ele atinja a fronteira de 30 metros.
58
Pode-se fazer uma verso do MOVETAB para trabalhar com tabela em
coordenadas polares, o que facilitaria a execuo da tabela, pois os
parmetros seriam deslocamento e angulo de rotao. No foi feito isso na
captura de pontos, pois usaria as funes de arco tangente e a funo de
Teorema de Pitgoras que apresentam dentre as funes maiores erros
devido arredondamento, no entanto poderia ser feito e realizado testes para
verificar a preciso.
SHOW POSITION pode ser implementado para mostrar tanto coordenadas
cartesianas quanto coordenadas polares. Usa-se tambm as funes de arco
tangente e o teorema de Pitgoras.
Na implementao das rotinas de movimento (MOVE, MOVEABS,
MOVEREL) o rob realiza a rotao das rodas de angulos entre 180 e
+180, fazendo o deslocamento sempre na direo positiva. Poderia ser feito
uma rotao somente entre 90 e +90 e ento haveria o ajuste da direo do
movimento, que seria negativa em alguns casos. Todos os clculos de
posio j esto preparados para este tipo de movimento.
Estas so algumas das modificaes simples de serem feitas e que
acrescentariam alguns detalhes de funcionalidade ao sistema.
59
7. Concluso
Foi possvel desenvolver e implementar um software para sistema de controle de
movimento em tempo real de um rob mvel, sendo que para isso foram definidos
comandos de alto nvel suportados pelo sistema. Todos os comandos de alto nvel
propostos puderam ser implementados.
Desenvolveu-se uma linguagem de programao adequada para o sistema de
controle real do rob, de forma que possvel us-la para escrever programas que
descrevam trajetrias especficas.
Implementou-se com sucesso o controle de posio do rob, que usado nos
comandos de movimento. Tambm foi implementado rotinas que permitem o
movimento do rob atravs do joystick, sendo que possvel criar uma tabela de
posies medida que o usurio movimenta o rob e aperta o boto do joystick. Esta
tabela pode ser reproduzida posteriormente.
O controle de posio apresentou um bom resultado, sendo que possuindo as
equaes de diferena em funo do perodo de amostragem, fica fcil recalcular as
constantes das eqaes caso seja preciso alterar o perodo de amostragem.
O perodo de amostragem atualmente implementado foi o de 7,5 ms que
apresentou um resultado muito prximo ao de 5 ms, no perdendo muito desempenho
do controlador.
Portanto, com o software implementado obteve-se um sistema com uma
linguagem de programao no qual possvel fazer com que o rob se movimente
atravs de trajetrias definidas pelo usurio, bastando usar os comandos implementados
na programao.
60
8. Referncias Bibliogrficas
[1] Kuo, Benjamin C., Automatic Control System, 7th ed., New Jersey, Prentice
Hall, 1995
[2] Jones, Joseph L.; Flynn Anita M.; Mobile Robots - Inspiration to
Implementation, Wellesley, A. K. Peters, 1993
[3] Tashibana, Lus S.; Fujiwara, Renato; Trabalho de Formatura : Projeto
Base Mvel - 2a. Fase de Desenvolvimento do Hardware Eletrnico,
Departamento de Eng. Mecnica, EPUSP, 1995.
[4] Mak, Ronald; Writing Compilers & Interpreters - an Applied Approach,
New York, John Wiley & Sons, Inc, 1991.

Anda mungkin juga menyukai