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

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

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

Page 1: 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

[email protected] & [email protected]@graco.unb.br & [email protected]

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

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.

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

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

Page 4: 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

[email protected] & [email protected]@graco.unb.br & [email protected]

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

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.

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

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

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

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

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

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.

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

Arquitetura do Sistema

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

Internet - TCP/IP

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

TeleoperaçãoTeleoperação

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

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.

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

Projeto RobWebCam

ManipuladorManipulador Requisitos Funcionais e Topologias;

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

Projeto RobWebCam

Dimensionamento da Estrutura;

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

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)

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

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.

Page 16: DESENVOLVIMENTO DE UM MANIPULADOR COM DOIS GRAUS DE LIBERDADE CONTROLADO REMOTAMENTE VIA INTERNET
Page 17: DESENVOLVIMENTO DE UM MANIPULADOR COM DOIS GRAUS DE LIBERDADE CONTROLADO REMOTAMENTE VIA INTERNET

Projeto RobWebCam

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

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.

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

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.

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

Projeto RobWebCam

Page 21: DESENVOLVIMENTO DE UM MANIPULADOR COM DOIS GRAUS DE LIBERDADE CONTROLADO REMOTAMENTE VIA INTERNET
Page 22: DESENVOLVIMENTO DE UM MANIPULADOR COM DOIS GRAUS DE LIBERDADE CONTROLADO REMOTAMENTE VIA INTERNET

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); }

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

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) {

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

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 (); }

Page 25: DESENVOLVIMENTO DE UM MANIPULADOR COM DOIS GRAUS DE LIBERDADE CONTROLADO REMOTAMENTE VIA INTERNET
Page 26: DESENVOLVIMENTO DE UM MANIPULADOR COM DOIS GRAUS DE LIBERDADE CONTROLADO REMOTAMENTE VIA INTERNET

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

Page 27: DESENVOLVIMENTO DE UM MANIPULADOR COM DOIS GRAUS DE LIBERDADE CONTROLADO REMOTAMENTE VIA INTERNET
Page 28: DESENVOLVIMENTO DE UM MANIPULADOR COM DOIS GRAUS DE LIBERDADE CONTROLADO REMOTAMENTE VIA INTERNET

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.

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

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.

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

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

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

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.

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

Arquitetura do Sistema

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

Internet - TCP/IP

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

TeleoperaçãoTeleoperação

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

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.

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

Projeto RobWebCam

ManipuladorManipulador Requisitos Funcionais e Topologias;

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

Projeto RobWebCam

Dimensionamento da Estrutura;

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

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)

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

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.

Page 39: DESENVOLVIMENTO DE UM MANIPULADOR COM DOIS GRAUS DE LIBERDADE CONTROLADO REMOTAMENTE VIA INTERNET
Page 40: DESENVOLVIMENTO DE UM MANIPULADOR COM DOIS GRAUS DE LIBERDADE CONTROLADO REMOTAMENTE VIA INTERNET

Projeto RobWebCam

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

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.

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

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.

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

Projeto RobWebCam

Page 44: DESENVOLVIMENTO DE UM MANIPULADOR COM DOIS GRAUS DE LIBERDADE CONTROLADO REMOTAMENTE VIA INTERNET
Page 45: DESENVOLVIMENTO DE UM MANIPULADOR COM DOIS GRAUS DE LIBERDADE CONTROLADO REMOTAMENTE VIA INTERNET

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); }

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

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) {

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

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 (); }

Page 48: DESENVOLVIMENTO DE UM MANIPULADOR COM DOIS GRAUS DE LIBERDADE CONTROLADO REMOTAMENTE VIA INTERNET
Page 49: DESENVOLVIMENTO DE UM MANIPULADOR COM DOIS GRAUS DE LIBERDADE CONTROLADO REMOTAMENTE VIA INTERNET

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

Page 50: DESENVOLVIMENTO DE UM MANIPULADOR COM DOIS GRAUS DE LIBERDADE CONTROLADO REMOTAMENTE VIA INTERNET
Page 51: DESENVOLVIMENTO DE UM MANIPULADOR COM DOIS GRAUS DE LIBERDADE CONTROLADO REMOTAMENTE VIA INTERNET

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.

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

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.