1 / 52

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. 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

zorion
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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 alvares@graco.unb.br & luiz@graco.unb.br

  2. Introdução -Teleoperação • Algumas Vantagens do Controle Remoto - Teleoperação: • Mover objetos a distância; • Otimizar o uso de transportes, materiais e pessoas; • Atuar em ambientes perigosos; • Minimizar os custos. • Exemplos de Aplicações na Internet - TeleRobotics: • Telerobot (Un. Western Australia - http://telerobot.mech.uwa.edu.au); • Bradford Robotic Telescope Observatory; • WebRobot - RobWebLink (http://www.graco.unb.br); • Observação do tempo nos EUA.

  3. Teleoperação - Exemplo http://telerobot.mech.uwa.edu.au

  4. 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 alvares@graco.unb.br & luiz@graco.unb.br

  5. Introdução -Teleoperação • Algumas Vantagens do Controle Remoto - Teleoperação: • Mover objetos a distância; • Otimizar o uso de transportes, materiais e pessoas; • Atuar em ambientes perigosos; • Minimizar os custos. • Exemplos de Aplicações na Internet - TeleRobotics: • Telerobot (Un. Western Australia - http://telerobot.mech.uwa.edu.au); • Bradford Robotic Telescope Observatory; • WebRobot - RobWebLink (http://www.graco.unb.br); • Observação do tempo nos EUA.

  6. Teleoperação - Exemplo http://telerobot.mech.uwa.edu.au

  7. Teleoperação - Exemplo http://webrobot.graco.unb.br

  8. 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.

  9. Arquitetura do Sistema

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

  11. Projeto RobWebCam • Considerações de Projeto • Arquitetura aberta e de baixo custo; • Manipulador com 2 GDL; • Manipulador deverá suportar a câmera de vídeo (SunVideo ou QuickCam); • 90º - vertical, 180º - horizontal; • Acionamento por motores de passo.

  12. Projeto RobWebCam • Manipulador • Requisitos Funcionais e Topologias;

  13. Projeto RobWebCam • Dimensionamento da Estrutura;

  14. Projeto RobWebCam • Dimensionamento dos Motores de Passo;

  15. Projeto RobWebCam • Alimentação dos Motores • Transformador; • Fonte de Tensão; • Drive de Potência.

  16. Projeto RobWebCam

  17. Projeto RobWebCam • Sistema Operacional LINUX: • Multiusuário e multitarefa; • Arquitetura cliente/servidor; • Protocolo TCP/IP (Internet); • Servidor de câmera de vídeo já disponível; • Ter documentação de fácil acesso; • Sistema aberto e de baixo custo; • Facilidade para acessar a porta paralela e serial; • Tem uma boa variedade de compiladores e outros tipos de programas que rodam em sua plataforma do tipo PC, Sparc, Alpha, entre outras.

  18. Projeto RobWebCam • Captura de Vídeo e Imagem • Driver WebCam para Servidor WWW: Tecnologia Serverpush - Netscape; • Câmera SunVideo - Frame Grabber (http://serpens.enm.unb.br); • Câmera QuickCam - Connectix (http://omega.enm.unb.br). • Programas voltados para Internet • CGI - Common Gateway Interface (C++); • Java; • HTML e Servidor WWW.

  19. Projeto RobWebCam

  20. Programa Interfac.c • #include <fcntl.h> • #include <unistd.h> • #include <errno.h> • #include <stdio.h> • #include <time.h> • /* 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 para acesso • a porta paralela sem acesso de ROOT. */ • class Interface { private: int porta; • public: Interface (); // construtor • ~Interface (); // destrutor • void send (int n); • void waiting (int t); }; • Interface :: Interface () • // Construtor abre o acesso a porta paralela do computador • { porta = open ("/dev/lp1",O_WRONLY|O_NONBLOCK,0); • if (porta < 0) { • printf ("Porta nao disponivel!\n"); • exit (0); }} • Interface :: ~Interface () • // Destrutor que fecha o acesso a porta paralela do computador • { close (porta); } • void Interface :: send (int n) • // Envia o inteiro n para a porta paralela • { • char cbuf = (char) n; int ibuf; • if (write (porta,&cbuf,1) != 1) { • printf ("Erro na porta."); • exit (0); }} • void Interface :: waiting (int t) • // Faz uma interrupcao de t milisegundos no sistema • { usleep (t*1000); }

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

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

  23. Avaliação do Sistema • Testes de Velocidade; • Testes de Acionamento Remoto; • Na UnB; • Fora da Rede da UnB. • Otimizações; • Funcionamento por Um Ano; • Sistema em Processo de Patenteamento.

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

  25. Teleoperação - Exemplo http://webrobot.graco.unb.br

  26. 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.

  27. Arquitetura do Sistema

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

  29. Projeto RobWebCam • Considerações de Projeto • Arquitetura aberta e de baixo custo; • Manipulador com 2 GDL; • Manipulador deverá suportar a câmera de vídeo (SunVideo ou QuickCam); • 90º - vertical, 180º - horizontal; • Acionamento por motores de passo.

  30. Projeto RobWebCam • Manipulador • Requisitos Funcionais e Topologias;

  31. Projeto RobWebCam • Dimensionamento da Estrutura;

  32. Projeto RobWebCam • Dimensionamento dos Motores de Passo;

  33. Projeto RobWebCam • Alimentação dos Motores • Transformador; • Fonte de Tensão; • Drive de Potência.

  34. Projeto RobWebCam

  35. Projeto RobWebCam • Sistema Operacional LINUX: • Multiusuário e multitarefa; • Arquitetura cliente/servidor; • Protocolo TCP/IP (Internet); • Servidor de câmera de vídeo já disponível; • Ter documentação de fácil acesso; • Sistema aberto e de baixo custo; • Facilidade para acessar a porta paralela e serial; • Tem uma boa variedade de compiladores e outros tipos de programas que rodam em sua plataforma do tipo PC, Sparc, Alpha, entre outras.

  36. Projeto RobWebCam • Captura de Vídeo e Imagem • Driver WebCam para Servidor WWW: Tecnologia Serverpush - Netscape; • Câmera SunVideo - Frame Grabber (http://serpens.enm.unb.br); • Câmera QuickCam - Connectix (http://omega.enm.unb.br). • Programas voltados para Internet • CGI - Common Gateway Interface (C++); • Java; • HTML e Servidor WWW.

  37. Projeto RobWebCam

  38. Programa Interfac.c • #include <fcntl.h> • #include <unistd.h> • #include <errno.h> • #include <stdio.h> • #include <time.h> • /* 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 para acesso • a porta paralela sem acesso de ROOT. */ • class Interface { private: int porta; • public: Interface (); // construtor • ~Interface (); // destrutor • void send (int n); • void waiting (int t); }; • Interface :: Interface () • // Construtor abre o acesso a porta paralela do computador • { porta = open ("/dev/lp1",O_WRONLY|O_NONBLOCK,0); • if (porta < 0) { • printf ("Porta nao disponivel!\n"); • exit (0); }} • Interface :: ~Interface () • // Destrutor que fecha o acesso a porta paralela do computador • { close (porta); } • void Interface :: send (int n) • // Envia o inteiro n para a porta paralela • { • char cbuf = (char) n; int ibuf; • if (write (porta,&cbuf,1) != 1) { • printf ("Erro na porta."); • exit (0); }} • void Interface :: waiting (int t) • // Faz uma interrupcao de t milisegundos no sistema • { usleep (t*1000); }

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

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

More Related