DESENVOLVIMENTO DE UM MANIPULADOR COM DOIS GRAUS DE LIBERDADE CONTROLADO REMOTAMENTE VIA INTERNET

Post on 20-Mar-2016

33 views 0 download

description

DESENVOLVIMENTO DE UM MANIPULADOR COM DOIS GRAUS DE LIBERDADE CONTROLADO REMOTAMENTE VIA INTERNET. Por Alberto José Alvares Luiz Sérgio Jordão Romariz Júnior GRACO - Grupo de Automação e Controle - Engenharia Mecânica - UnB http://www.graco.unb.br/robwebcam - PowerPoint PPT Presentation

Transcript of DESENVOLVIMENTO DE UM MANIPULADOR COM DOIS GRAUS DE LIBERDADE CONTROLADO REMOTAMENTE VIA INTERNET

DESENVOLVIMENTO DE UM MANIPULADOR COM DOIS

GRAUS DE LIBERDADE CONTROLADO REMOTAMENTE

VIA INTERNET

PorPorAlberto José Alvares Alberto José Alvares

Luiz Sérgio Jordão Romariz JúniorLuiz Sérgio Jordão Romariz JúniorGRACO - Grupo de Automação e Controle - Engenharia GRACO - Grupo de Automação e Controle - Engenharia

Mecânica - UnBMecânica - UnBhttp://www.graco.unb.br/robwebcam http://www.graco.unb.br/robwebcam

alvares@graco.unb.br & luiz@graco.unb.bralvares@graco.unb.br & luiz@graco.unb.br

Introdução - TeleoperaTeleoperação

Algumas Vantagens do Controle Remoto - TeleoperaAlgumas Vantagens do Controle Remoto - Teleoperação:: Mover objetos a distância;Mover objetos a distância; Otimizar o uso de transportes, materiais e pessoas;Otimizar o uso de transportes, materiais e pessoas; Atuar em ambientes perigosos;Atuar em ambientes perigosos; Minimizar os custos.Minimizar os custos.

Exemplos de Aplicações na Internet - TeleRobotics:Exemplos de Aplicações na Internet - TeleRobotics: Telerobot Telerobot (Un. Western Australia(Un. Western Australia - - http://telerobot.mech.uwa.edu.auhttp://telerobot.mech.uwa.edu.au););

Bradford Robotic Telescope Observatory;Bradford Robotic Telescope Observatory; WebRobot - RobWebLink (http://www.graco.unb.br);WebRobot - RobWebLink (http://www.graco.unb.br); Observação do tempo nos EUA.Observação do tempo nos EUA.

TeleoperaTeleoperação - Exemplo http://telerobot.mech.uwa.edu.auhttp://telerobot.mech.uwa.edu.au

DESENVOLVIMENTO DE UM MANIPULADOR COM DOIS

GRAUS DE LIBERDADE CONTROLADO REMOTAMENTE

VIA INTERNET

PorPorAlberto José Alvares Alberto José Alvares

Luiz Sérgio Jordão Romariz JúniorLuiz Sérgio Jordão Romariz JúniorGRACO - Grupo de Automação e Controle - Engenharia GRACO - Grupo de Automação e Controle - Engenharia

Mecânica - UnBMecânica - UnBhttp://www.graco.unb.br/robwebcam http://www.graco.unb.br/robwebcam

alvares@graco.unb.br & luiz@graco.unb.bralvares@graco.unb.br & luiz@graco.unb.br

Introdução - TeleoperaTeleoperação

Algumas Vantagens do Controle Remoto - TeleoperaAlgumas Vantagens do Controle Remoto - Teleoperação:: Mover objetos a distância;Mover objetos a distância; Otimizar o uso de transportes, materiais e pessoas;Otimizar o uso de transportes, materiais e pessoas; Atuar em ambientes perigosos;Atuar em ambientes perigosos; Minimizar os custos.Minimizar os custos.

Exemplos de Aplicações na Internet - TeleRobotics:Exemplos de Aplicações na Internet - TeleRobotics: Telerobot Telerobot (Un. Western Australia(Un. Western Australia - - http://telerobot.mech.uwa.edu.auhttp://telerobot.mech.uwa.edu.au););

Bradford Robotic Telescope Observatory;Bradford Robotic Telescope Observatory; WebRobot - RobWebLink (http://www.graco.unb.br);WebRobot - RobWebLink (http://www.graco.unb.br); Observação do tempo nos EUA.Observação do tempo nos EUA.

TeleoperaTeleoperação - Exemplo http://telerobot.mech.uwa.edu.auhttp://telerobot.mech.uwa.edu.au

TeleoperaTeleoperação - Exemplo http://webrobot.graco.unb.brhttp://webrobot.graco.unb.br

Arquitetura do Sistema

Concepção e implementação de um sistema para controlar remotamente um manipulador com 2 graus de liberdade;

Via de controle: Internet; Posiciona uma câmera de vídeo para

adquirir imagens e vídeo “on-line”; Sistema RobWebCam - Robotic Web Camera.

Arquitetura do Sistema

Internet - TCP/IP

Internet e Linguagens de programação TCP/IP;TCP/IP; HTML;HTML; CGI;CGI; JAVA.JAVA.

TeleoperaçãoTeleoperação

Projeto RobWebCam

Considerações de ProjetoConsiderações de Projeto Arquitetura aberta e de baixo custo;Arquitetura aberta e de baixo custo; Manipulador com 2 GDL;Manipulador com 2 GDL; Manipulador deverá suportar a câmera de vídeo Manipulador deverá suportar a câmera de vídeo

(SunVideo ou QuickCam);(SunVideo ou QuickCam); 90º - vertical, 180º - horizontal;90º - vertical, 180º - horizontal; Acionamento por motores de passo.Acionamento por motores de passo.

Projeto RobWebCam

ManipuladorManipulador Requisitos Funcionais e Topologias;

Projeto RobWebCam

Dimensionamento da Estrutura;

Projeto RobWebCam

Dimensionamento dos Motores de Passo;

Torque X w

0,0000

0,0500

0,1000

0,1500

0,2000

0,2500

0,3000

0,3500

0,4000

0,000 2,000 4,000 6,000 8,000 10,000 12,000

velocidade angular (rad/s)

Torq

ue (N

.m)

Projeto RobWebCam

Alimentação dos MotoresAlimentação dos Motores Transformador;Transformador; Fonte de Tensão;Fonte de Tensão; Drive de Potência.Drive de Potência.

Projeto RobWebCam

Projeto RobWebCam

Sistema Operacional LINUX:Sistema Operacional LINUX: Multiusuário e multitarefa;Multiusuário e multitarefa; Arquitetura cliente/servidor;Arquitetura cliente/servidor; Protocolo TCP/IP (Internet);Protocolo TCP/IP (Internet); Servidor de câmera de vídeo já disponível;Servidor de câmera de vídeo já disponível; Ter documentação de fácil acesso;Ter documentação de fácil acesso; Sistema aberto e de baixo custo;Sistema aberto e de baixo custo; Facilidade para acessar a porta paralela e serial;Facilidade para acessar a porta paralela e serial; Tem uma boa variedade de compiladores e outros Tem uma boa variedade de compiladores e outros

tipos de programas que rodam em sua plataforma do tipos de programas que rodam em sua plataforma do tipo PC, Sparc, Alpha, entre outras.tipo PC, Sparc, Alpha, entre outras.

Projeto RobWebCam

Captura de Vídeo e ImagemCaptura de Vídeo e Imagem Driver WebCam para Servidor WWW: Driver WebCam para Servidor WWW:

Tecnologia Serverpush - Netscape;Tecnologia Serverpush - Netscape; Câmera SunVideo - Frame Grabber Câmera SunVideo - Frame Grabber (http://serpens.enm.unb.br);(http://serpens.enm.unb.br);

Câmera QuickCam - Connectix Câmera QuickCam - Connectix (http://omega.enm.unb.br).(http://omega.enm.unb.br).

Programas voltados para InternetProgramas voltados para Internet CGI - Common Gateway Interface (C++);CGI - Common Gateway Interface (C++); Java;Java; HTML e Servidor WWW.HTML e Servidor WWW.

Projeto RobWebCam

Programa Interfac.c

#include <fcntl.h>#include <fcntl.h> #include <unistd.h>#include <unistd.h> #include <errno.h>#include <errno.h> #include <stdio.h>#include <stdio.h> #include <time.h>#include <time.h> /* class Interface versao para Linux / Unix. A classe Interface prove uma base de comunicacao para a classe Motor /* class Interface versao para Linux / Unix. A classe Interface prove uma base de comunicacao para a classe Motor controlar um motor de passo ligado a porta paralela. Esta implementacao utiliza o comando "open", e pode ser usada controlar um motor de passo ligado a porta paralela. Esta implementacao utiliza o comando "open", e pode ser usada

para acessopara acesso a porta paralela sem acesso de ROOT. */a porta paralela sem acesso de ROOT. */ class Interface { private:class Interface { private: intint porta;porta; public:public: Interface ();Interface (); // construtor// construtor ~Interface ();~Interface (); // destrutor// destrutor void void send (int n);send (int n); void void waiting (int t); };waiting (int t); }; Interface :: Interface ()Interface :: Interface () // Construtor abre o acesso a porta paralela do computador// Construtor abre o acesso a porta paralela do computador {{ porta = open ("/dev/lp1",O_WRONLY|O_NONBLOCK,0);porta = open ("/dev/lp1",O_WRONLY|O_NONBLOCK,0); if (porta < 0) {if (porta < 0) { printf ("Porta nao disponivel!\n");printf ("Porta nao disponivel!\n"); exit (0); }}exit (0); }} Interface :: ~Interface ()Interface :: ~Interface () // Destrutor que fecha o acesso a porta paralela do computador// Destrutor que fecha o acesso a porta paralela do computador { close (porta); }{ close (porta); } void Interface :: send (int n)void Interface :: send (int n) // Envia o inteiro n para a porta paralela// Envia o inteiro n para a porta paralela {{ char cbuf = (char) n; int ibuf;char cbuf = (char) n; int ibuf; if (write (porta,&cbuf,1) != 1) {if (write (porta,&cbuf,1) != 1) { printf ("Erro na porta.");printf ("Erro na porta."); exit (0); }}exit (0); }} void Interface :: waiting (int t)void Interface :: waiting (int t) // Faz uma interrupcao de t milisegundos no sistema// Faz uma interrupcao de t milisegundos no sistema {{ usleep (t*1000); }usleep (t*1000); }

Programa Motor.c

#include "c:\prog\tourino\interfac.cpp"#include "c:\prog\tourino\interfac.cpp" // Classe que define o objeto motor. Utiliza a classe Interface (interfac.cpp). espera-se que nao seja mudada para a // Classe que define o objeto motor. Utiliza a classe Interface (interfac.cpp). espera-se que nao seja mudada para a

versao Linux.versao Linux. int motor1_s [4] = {0x01,0x02,0x04,0x08},int motor1_s [4] = {0x01,0x02,0x04,0x08}, motor2_s [4] = {0x10,0x20,0x40,0x80}, motor2_s [4] = {0x10,0x20,0x40,0x80}, motor1_d [4] = {0x09,0x03,0x06,0x0C},motor1_d [4] = {0x09,0x03,0x06,0x0C}, motor2_d [4] = {0x90,0x30,0x60,0xC0};motor2_d [4] = {0x90,0x30,0x60,0xC0}; class Motor {class Motor { private:private: intint numero,intervalo, tipo_excitacao, excitacao [4], ultima_excitacao;numero,intervalo, tipo_excitacao, excitacao [4], ultima_excitacao; floatfloat precisao;precisao; public:public: voidvoid set (int n);set (int n); // define o motor usado// define o motor usado void void precision (float p);precision (float p); // define a precisao do motor// define a precisao do motor void void delay (int tempo);delay (int tempo); // define o intervalo entre passos// define o intervalo entre passos void void turn (int angle);turn (int angle); // gira angulo// gira angulo voidvoid wait (int time);wait (int time); // espera tempo excitado// espera tempo excitado voidvoid sstep (void);sstep (void); // define excitacao simples// define excitacao simples voidvoid dstep (void);dstep (void); // define excitacao dupla// define excitacao dupla void off (void);void off (void); // desliga a excitacao do motor };// desliga a excitacao do motor }; void Motor :: set (int n)void Motor :: set (int n) {{ numero = n;numero = n; if (tipo_excitacao) dstep (); else sstep (); }if (tipo_excitacao) dstep (); else sstep (); } void Motor :: sstep (void)void Motor :: sstep (void) {{ if (numero == 0) { excitacao [0] = motor1_s [0] | motor2_s [0];if (numero == 0) { excitacao [0] = motor1_s [0] | motor2_s [0]; excitacao [1] = motor1_s [1] | motor2_s [1];excitacao [1] = motor1_s [1] | motor2_s [1]; excitacao [2] = motor1_s [2] | motor2_s [2];excitacao [2] = motor1_s [2] | motor2_s [2]; excitacao [3] = motor1_s [3] | motor2_s [3]; }excitacao [3] = motor1_s [3] | motor2_s [3]; } if (numero == 1) { excitacao [0] = motor1_s [0];if (numero == 1) { excitacao [0] = motor1_s [0]; excitacao [1] = motor1_s [1];excitacao [1] = motor1_s [1]; excitacao [2] = motor1_s [2];excitacao [2] = motor1_s [2]; excitacao [3] = motor1_s [3]; }excitacao [3] = motor1_s [3]; } if (numero == 2) {if (numero == 2) {

Programa CGI

#include <stdio.h>#include <stdio.h> #include "interfac.C"#include "interfac.C" #include "motor.C"#include "motor.C" #include <string.h>#include <string.h> #include <stdlib.h>#include <stdlib.h> char nome[80] = "teste.mot";char nome[80] = "teste.mot"; void Le_comanda (void)void Le_comanda (void) { int inteiro; float real;{ int inteiro; float real; FILE *arquivo; char comando[5],parametro [5]; class Motor M;FILE *arquivo; char comando[5],parametro [5]; class Motor M; if ((arquivo = fopen (nome,"rt")) == NULL) { puts ("Arquivo nao existe."); exit (0); }if ((arquivo = fopen (nome,"rt")) == NULL) { puts ("Arquivo nao existe."); exit (0); } while (fscanf (arquivo,"%s",&comando) > 0) {while (fscanf (arquivo,"%s",&comando) > 0) { if (strcmp (comando,"S") == 0) {if (strcmp (comando,"S") == 0) { fscanf (arquivo,"%s",&parametro);fscanf (arquivo,"%s",&parametro); inteiro = atoi (parametro); M.set (inteiro); }inteiro = atoi (parametro); M.set (inteiro); } if (strcmp (comando,"P") == 0) {if (strcmp (comando,"P") == 0) { fscanf (arquivo,"%s",&parametro);fscanf (arquivo,"%s",&parametro); real = atof (parametro); M.precision (real); }real = atof (parametro); M.precision (real); } if (strcmp (comando,"D") == 0) {if (strcmp (comando,"D") == 0) { fscanf (arquivo,"%s",&parametro);fscanf (arquivo,"%s",&parametro); inteiro = atoi (parametro); M.delay (inteiro);}inteiro = atoi (parametro); M.delay (inteiro);} if (strcmp (comando,"T") == 0) {if (strcmp (comando,"T") == 0) { fscanf (arquivo,"%s",&parametro);fscanf (arquivo,"%s",&parametro); inteiro = atoi (parametro); M.turn (inteiro);}inteiro = atoi (parametro); M.turn (inteiro);} if (strcmp (comando,"W") == 0) {if (strcmp (comando,"W") == 0) { fscanf (arquivo,"%s",&parametro);fscanf (arquivo,"%s",&parametro); inteiro = atoi (parametro);inteiro = atoi (parametro); M.wait (inteiro); }M.wait (inteiro); } if (strcmp (comando,"SS") == 0) M.sstep ();if (strcmp (comando,"SS") == 0) M.sstep (); if (strcmp (comando,"DS") == 0) M.dstep ();if (strcmp (comando,"DS") == 0) M.dstep (); if (strcmp (comando,"O") == 0) M.off ();}if (strcmp (comando,"O") == 0) M.off ();} fclose (arquivo); } int main (int argc,char *argv []) {fclose (arquivo); } int main (int argc,char *argv []) { printf("Content-type: text/plain \n\n");printf("Content-type: text/plain \n\n"); Le_comanda (); }Le_comanda (); }

MANIPULADOR- Parte física do manipulador;- Motores de passo;- Placa com o circuito lógico e

de potência;- Transformador;- Câmera de vídeo da SUN.

SERVIDOR DO GRACO- Servidor WebCam;- Página do sistema;- SO SOLARIS.

SERVIDOR GATE- Programas de controle em CGI;- Porta paralela conectada ao

manipulador;- Roteador;- SO LINUX.

CLIENTE- Browser (tipo Netscape);- Visualização e controle;

POSICIONAMENTODO

MANIPULADOR

IMAGEMDA

CÂMERA

FRAME 1

FRAME 2

INTERNET

PARALELA lp0

TCP/IP

TCP/IP

CABO DE VÍDEO

Avaliação do Sistema

Testes de Velocidade;Testes de Velocidade; Testes de Acionamento Remoto;Testes de Acionamento Remoto;

Na UnB;Na UnB; Fora da Rede da UnB.Fora da Rede da UnB.

Otimizações;Otimizações; Funcionamento por Um Ano;Funcionamento por Um Ano; Sistema em Processo de Patenteamento.Sistema em Processo de Patenteamento.

Conclusão

Inédito no Brasil;Inédito no Brasil; Apto as Aplicações Propostas;Apto as Aplicações Propostas; Atendeu aos Requisitos Iniciais;Atendeu aos Requisitos Iniciais; Possibilidade de Otimizações;Possibilidade de Otimizações; Várias Aplicações Possíveis;Várias Aplicações Possíveis; Objetivos Alcançados;Objetivos Alcançados; RobWebLink - RobWebLink - Controle de Rôbo ABB com 6GL.Controle de Rôbo ABB com 6GL.

TeleoperaTeleoperação - Exemplo http://webrobot.graco.unb.brhttp://webrobot.graco.unb.br

Arquitetura do Sistema

Concepção e implementação de um sistema para controlar remotamente um manipulador com 2 graus de liberdade;

Via de controle: Internet; Posiciona uma câmera de vídeo para

adquirir imagens e vídeo “on-line”; Sistema RobWebCam - Robotic Web Camera.

Arquitetura do Sistema

Internet - TCP/IP

Internet e Linguagens de programação TCP/IP;TCP/IP; HTML;HTML; CGI;CGI; JAVA.JAVA.

TeleoperaçãoTeleoperação

Projeto RobWebCam

Considerações de ProjetoConsiderações de Projeto Arquitetura aberta e de baixo custo;Arquitetura aberta e de baixo custo; Manipulador com 2 GDL;Manipulador com 2 GDL; Manipulador deverá suportar a câmera de vídeo Manipulador deverá suportar a câmera de vídeo

(SunVideo ou QuickCam);(SunVideo ou QuickCam); 90º - vertical, 180º - horizontal;90º - vertical, 180º - horizontal; Acionamento por motores de passo.Acionamento por motores de passo.

Projeto RobWebCam

ManipuladorManipulador Requisitos Funcionais e Topologias;

Projeto RobWebCam

Dimensionamento da Estrutura;

Projeto RobWebCam

Dimensionamento dos Motores de Passo;

Torque X w

0,0000

0,0500

0,1000

0,1500

0,2000

0,2500

0,3000

0,3500

0,4000

0,000 2,000 4,000 6,000 8,000 10,000 12,000

velocidade angular (rad/s)

Torq

ue (N

.m)

Projeto RobWebCam

Alimentação dos MotoresAlimentação dos Motores Transformador;Transformador; Fonte de Tensão;Fonte de Tensão; Drive de Potência.Drive de Potência.

Projeto RobWebCam

Projeto RobWebCam

Sistema Operacional LINUX:Sistema Operacional LINUX: Multiusuário e multitarefa;Multiusuário e multitarefa; Arquitetura cliente/servidor;Arquitetura cliente/servidor; Protocolo TCP/IP (Internet);Protocolo TCP/IP (Internet); Servidor de câmera de vídeo já disponível;Servidor de câmera de vídeo já disponível; Ter documentação de fácil acesso;Ter documentação de fácil acesso; Sistema aberto e de baixo custo;Sistema aberto e de baixo custo; Facilidade para acessar a porta paralela e serial;Facilidade para acessar a porta paralela e serial; Tem uma boa variedade de compiladores e outros Tem uma boa variedade de compiladores e outros

tipos de programas que rodam em sua plataforma do tipos de programas que rodam em sua plataforma do tipo PC, Sparc, Alpha, entre outras.tipo PC, Sparc, Alpha, entre outras.

Projeto RobWebCam

Captura de Vídeo e ImagemCaptura de Vídeo e Imagem Driver WebCam para Servidor WWW: Driver WebCam para Servidor WWW:

Tecnologia Serverpush - Netscape;Tecnologia Serverpush - Netscape; Câmera SunVideo - Frame Grabber Câmera SunVideo - Frame Grabber (http://serpens.enm.unb.br);(http://serpens.enm.unb.br);

Câmera QuickCam - Connectix Câmera QuickCam - Connectix (http://omega.enm.unb.br).(http://omega.enm.unb.br).

Programas voltados para InternetProgramas voltados para Internet CGI - Common Gateway Interface (C++);CGI - Common Gateway Interface (C++); Java;Java; HTML e Servidor WWW.HTML e Servidor WWW.

Projeto RobWebCam

Programa Interfac.c

#include <fcntl.h>#include <fcntl.h> #include <unistd.h>#include <unistd.h> #include <errno.h>#include <errno.h> #include <stdio.h>#include <stdio.h> #include <time.h>#include <time.h> /* class Interface versao para Linux / Unix. A classe Interface prove uma base de comunicacao para a classe Motor /* class Interface versao para Linux / Unix. A classe Interface prove uma base de comunicacao para a classe Motor controlar um motor de passo ligado a porta paralela. Esta implementacao utiliza o comando "open", e pode ser usada controlar um motor de passo ligado a porta paralela. Esta implementacao utiliza o comando "open", e pode ser usada

para acessopara acesso a porta paralela sem acesso de ROOT. */a porta paralela sem acesso de ROOT. */ class Interface { private:class Interface { private: intint porta;porta; public:public: Interface ();Interface (); // construtor// construtor ~Interface ();~Interface (); // destrutor// destrutor void void send (int n);send (int n); void void waiting (int t); };waiting (int t); }; Interface :: Interface ()Interface :: Interface () // Construtor abre o acesso a porta paralela do computador// Construtor abre o acesso a porta paralela do computador {{ porta = open ("/dev/lp1",O_WRONLY|O_NONBLOCK,0);porta = open ("/dev/lp1",O_WRONLY|O_NONBLOCK,0); if (porta < 0) {if (porta < 0) { printf ("Porta nao disponivel!\n");printf ("Porta nao disponivel!\n"); exit (0); }}exit (0); }} Interface :: ~Interface ()Interface :: ~Interface () // Destrutor que fecha o acesso a porta paralela do computador// Destrutor que fecha o acesso a porta paralela do computador { close (porta); }{ close (porta); } void Interface :: send (int n)void Interface :: send (int n) // Envia o inteiro n para a porta paralela// Envia o inteiro n para a porta paralela {{ char cbuf = (char) n; int ibuf;char cbuf = (char) n; int ibuf; if (write (porta,&cbuf,1) != 1) {if (write (porta,&cbuf,1) != 1) { printf ("Erro na porta.");printf ("Erro na porta."); exit (0); }}exit (0); }} void Interface :: waiting (int t)void Interface :: waiting (int t) // Faz uma interrupcao de t milisegundos no sistema// Faz uma interrupcao de t milisegundos no sistema {{ usleep (t*1000); }usleep (t*1000); }

Programa Motor.c

#include "c:\prog\tourino\interfac.cpp"#include "c:\prog\tourino\interfac.cpp" // Classe que define o objeto motor. Utiliza a classe Interface (interfac.cpp). espera-se que nao seja mudada para a // Classe que define o objeto motor. Utiliza a classe Interface (interfac.cpp). espera-se que nao seja mudada para a

versao Linux.versao Linux. int motor1_s [4] = {0x01,0x02,0x04,0x08},int motor1_s [4] = {0x01,0x02,0x04,0x08}, motor2_s [4] = {0x10,0x20,0x40,0x80}, motor2_s [4] = {0x10,0x20,0x40,0x80}, motor1_d [4] = {0x09,0x03,0x06,0x0C},motor1_d [4] = {0x09,0x03,0x06,0x0C}, motor2_d [4] = {0x90,0x30,0x60,0xC0};motor2_d [4] = {0x90,0x30,0x60,0xC0}; class Motor {class Motor { private:private: intint numero,intervalo, tipo_excitacao, excitacao [4], ultima_excitacao;numero,intervalo, tipo_excitacao, excitacao [4], ultima_excitacao; floatfloat precisao;precisao; public:public: voidvoid set (int n);set (int n); // define o motor usado// define o motor usado void void precision (float p);precision (float p); // define a precisao do motor// define a precisao do motor void void delay (int tempo);delay (int tempo); // define o intervalo entre passos// define o intervalo entre passos void void turn (int angle);turn (int angle); // gira angulo// gira angulo voidvoid wait (int time);wait (int time); // espera tempo excitado// espera tempo excitado voidvoid sstep (void);sstep (void); // define excitacao simples// define excitacao simples voidvoid dstep (void);dstep (void); // define excitacao dupla// define excitacao dupla void off (void);void off (void); // desliga a excitacao do motor };// desliga a excitacao do motor }; void Motor :: set (int n)void Motor :: set (int n) {{ numero = n;numero = n; if (tipo_excitacao) dstep (); else sstep (); }if (tipo_excitacao) dstep (); else sstep (); } void Motor :: sstep (void)void Motor :: sstep (void) {{ if (numero == 0) { excitacao [0] = motor1_s [0] | motor2_s [0];if (numero == 0) { excitacao [0] = motor1_s [0] | motor2_s [0]; excitacao [1] = motor1_s [1] | motor2_s [1];excitacao [1] = motor1_s [1] | motor2_s [1]; excitacao [2] = motor1_s [2] | motor2_s [2];excitacao [2] = motor1_s [2] | motor2_s [2]; excitacao [3] = motor1_s [3] | motor2_s [3]; }excitacao [3] = motor1_s [3] | motor2_s [3]; } if (numero == 1) { excitacao [0] = motor1_s [0];if (numero == 1) { excitacao [0] = motor1_s [0]; excitacao [1] = motor1_s [1];excitacao [1] = motor1_s [1]; excitacao [2] = motor1_s [2];excitacao [2] = motor1_s [2]; excitacao [3] = motor1_s [3]; }excitacao [3] = motor1_s [3]; } if (numero == 2) {if (numero == 2) {

Programa CGI

#include <stdio.h>#include <stdio.h> #include "interfac.C"#include "interfac.C" #include "motor.C"#include "motor.C" #include <string.h>#include <string.h> #include <stdlib.h>#include <stdlib.h> char nome[80] = "teste.mot";char nome[80] = "teste.mot"; void Le_comanda (void)void Le_comanda (void) { int inteiro; float real;{ int inteiro; float real; FILE *arquivo; char comando[5],parametro [5]; class Motor M;FILE *arquivo; char comando[5],parametro [5]; class Motor M; if ((arquivo = fopen (nome,"rt")) == NULL) { puts ("Arquivo nao existe."); exit (0); }if ((arquivo = fopen (nome,"rt")) == NULL) { puts ("Arquivo nao existe."); exit (0); } while (fscanf (arquivo,"%s",&comando) > 0) {while (fscanf (arquivo,"%s",&comando) > 0) { if (strcmp (comando,"S") == 0) {if (strcmp (comando,"S") == 0) { fscanf (arquivo,"%s",&parametro);fscanf (arquivo,"%s",&parametro); inteiro = atoi (parametro); M.set (inteiro); }inteiro = atoi (parametro); M.set (inteiro); } if (strcmp (comando,"P") == 0) {if (strcmp (comando,"P") == 0) { fscanf (arquivo,"%s",&parametro);fscanf (arquivo,"%s",&parametro); real = atof (parametro); M.precision (real); }real = atof (parametro); M.precision (real); } if (strcmp (comando,"D") == 0) {if (strcmp (comando,"D") == 0) { fscanf (arquivo,"%s",&parametro);fscanf (arquivo,"%s",&parametro); inteiro = atoi (parametro); M.delay (inteiro);}inteiro = atoi (parametro); M.delay (inteiro);} if (strcmp (comando,"T") == 0) {if (strcmp (comando,"T") == 0) { fscanf (arquivo,"%s",&parametro);fscanf (arquivo,"%s",&parametro); inteiro = atoi (parametro); M.turn (inteiro);}inteiro = atoi (parametro); M.turn (inteiro);} if (strcmp (comando,"W") == 0) {if (strcmp (comando,"W") == 0) { fscanf (arquivo,"%s",&parametro);fscanf (arquivo,"%s",&parametro); inteiro = atoi (parametro);inteiro = atoi (parametro); M.wait (inteiro); }M.wait (inteiro); } if (strcmp (comando,"SS") == 0) M.sstep ();if (strcmp (comando,"SS") == 0) M.sstep (); if (strcmp (comando,"DS") == 0) M.dstep ();if (strcmp (comando,"DS") == 0) M.dstep (); if (strcmp (comando,"O") == 0) M.off ();}if (strcmp (comando,"O") == 0) M.off ();} fclose (arquivo); } int main (int argc,char *argv []) {fclose (arquivo); } int main (int argc,char *argv []) { printf("Content-type: text/plain \n\n");printf("Content-type: text/plain \n\n"); Le_comanda (); }Le_comanda (); }

MANIPULADOR- Parte física do manipulador;- Motores de passo;- Placa com o circuito lógico e

de potência;- Transformador;- Câmera de vídeo da SUN.

SERVIDOR DO GRACO- Servidor WebCam;- Página do sistema;- SO SOLARIS.

SERVIDOR GATE- Programas de controle em CGI;- Porta paralela conectada ao

manipulador;- Roteador;- SO LINUX.

CLIENTE- Browser (tipo Netscape);- Visualização e controle;

POSICIONAMENTODO

MANIPULADOR

IMAGEMDA

CÂMERA

FRAME 1

FRAME 2

INTERNET

PARALELA lp0

TCP/IP

TCP/IP

CABO DE VÍDEO

Avaliação do Sistema

Testes de Velocidade;Testes de Velocidade; Testes de Acionamento Remoto;Testes de Acionamento Remoto;

Na UnB;Na UnB; Fora da Rede da UnB.Fora da Rede da UnB.

Otimizações;Otimizações; Funcionamento por Um Ano;Funcionamento por Um Ano; Sistema em Processo de Patenteamento.Sistema em Processo de Patenteamento.

Conclusão

Inédito no Brasil;Inédito no Brasil; Apto as Aplicações Propostas;Apto as Aplicações Propostas; Atendeu aos Requisitos Iniciais;Atendeu aos Requisitos Iniciais; Possibilidade de Otimizações;Possibilidade de Otimizações; Várias Aplicações Possíveis;Várias Aplicações Possíveis; Objetivos Alcançados;Objetivos Alcançados; RobWebLink - RobWebLink - Controle de Rôbo ABB com 6GL.Controle de Rôbo ABB com 6GL.