desenvolvimento de um manipulador com dois graus de liberdade controlado remotamente via internet
Post on 20-Mar-2016
36 Views
Preview:
DESCRIPTION
TRANSCRIPT
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",¶metro);fscanf (arquivo,"%s",¶metro); 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",¶metro);fscanf (arquivo,"%s",¶metro); 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",¶metro);fscanf (arquivo,"%s",¶metro); 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",¶metro);fscanf (arquivo,"%s",¶metro); 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",¶metro);fscanf (arquivo,"%s",¶metro); 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",¶metro);fscanf (arquivo,"%s",¶metro); 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",¶metro);fscanf (arquivo,"%s",¶metro); 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",¶metro);fscanf (arquivo,"%s",¶metro); 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",¶metro);fscanf (arquivo,"%s",¶metro); 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",¶metro);fscanf (arquivo,"%s",¶metro); 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.
top related