Universidade ederalF de Minas Gerais - UFMG

11
MECHATRONICS, CONTROL, AND ROBOTICS mαcrφ@ufg

Transcript of Universidade ederalF de Minas Gerais - UFMG

MECHATRONICS,CONTROL,ANDROBOTICS

mαcrφ@uf�g

Universidade Federal de Minas Gerais - UFMG

TUTORIAL

Utilização do software V-Rep com o Matlab via Remote Api

Autor: Ana Christine de Oliveira

April 15, 2015

2 INSTALAÇÃO mαcrφ@uf�g

1 Introdução

1.1 Sobre este tutorial

Este tutorial visa apresentar as funcionalidades da plataforma de simulação de sistemas robóticos V-REP (virtualrobot experimentation platform), desenvolvido pela Coppelia Robotics, guiando o usuário na implementação de umambiente de simulação controlado externamente por uma rotina implementada no software Matlab.

1.2 O que é V-Rep?

A plataforma V-REP permite a simulação de diversos tipos de sistemas robóticos, como por exemplo, simula-ção de processos industriais automatizados, prototipagem rápida de componentes, manipulação de objetos, robôshumanoides, dentre outros.

Ele possui vários módulos de cálculos muito úteis: módulo de cinemática inversa, modelos físicos/dinâmicos,detecção de colisões, cálculo de distância mínima, módulo de planejamento de movimento, dentre outros.

Todos os objetos e modelos podem ser individualmente controlados por meio de rotinas embutidas, plug-in's, nósno ROS (Robot Operating System), como um cliente remoto com comunicação por uma API, dentre outras possibi-lidades. Estas rotinas podem ser implementadas em C/C++, Python, Java, Lua, Matlab, Octave ou Urbi. Nestetutorial, o controle dos componentes da simulação será realizado externamente por meio de uma API, utilizando oMatlab.

1.3 Controle externo utilizando o Matlab

O V-REP oferece API's remotas que permitem o controle da simulação e do simulador em si por uma aplicaçãoexterna ou, até mesmo, por um computador remoto. Esta API é composta de diversas funções que podem serchamadas por uma rotina do Matlab (além das outras linguagens citadas anteriormente).

Esta API interage com o V-REP por meio de um socket de comunicação de forma a reduzir o atraso, e de formatransparente ao usuário. As aplicações externas podem se comunicar com o V-REP de modo síncrono ou assíncrono(por padrão assíncrono), utilizando a estrutura cliente-servidor, em que o cliente é executado na aplicação externaimplementada em Matlab ou outras linguagens, e o servidor é a próprio V-REP .

A interação da API via socket pode ocorrer de duas formas: servidor operando com a API remota contínua ouservidor operando com a API remota temporária. Ambos os casos serão vistos na próxima seção, e sua con�guraçãomostrada.

2 Instalação

2.1 Requisitos básicos

O software está disponível para Windows (XP com SP3 ou superior), Linux (Ubuntu ou outras distribuições) ouMacOS (versão 10.6 ou superior).

A con�guração de hardware mínima recomendada está listada a seguir:

• Memória RAM: 512 MB;

• Capacidade de armazenamento: maior que 50 MB;

• Boa placa de vídeo (de acordo com Passmark [2013], maior que 200);

• Monitor de resolução 1024x768.

2.2 Instalando o V-Rep

O software possui uma versão gratuita para �ns educacionais (V-REP PRO EDU ), a qual pode ser baixada noendereço http://www.coppeliarobotics.com/downloads.html. Para instalar basta seguir as instruções da caixa dediálogo do arquivo de instalação.

2

2 INSTALAÇÃO mαcrφ@uf�g

2.3 Remote API: conexão cliente-servidor

Esta subseção detalha as formas de se inicializar o cliente e o servidor utilizando a Remote API.

2.3.1 Inicializando o servidor

Conforme citado anteriormente, a interação cliente-servidor por meio da API pode ocorrer de duas formas.

• Servidor operando com a API remota contínua: neste modo, quando inicializado, o plug-in da API veri�cao arquivo de con�guração "remoteApiConnections.txt" disponível no diretório raíz de instalação do V-REP,e inicializa o servidor utilizando a porta especi�cada. Quando este modo é utilizado, os serviços do servidor�cam disponíveis mesmo quando a simulação não está sendo executada, e a simulação em si pode ser controladaexternamente (iniciar, parar e pausar e simulação), utilizando as funções da API apropriadas. As seguinteslinhas devem ser adicionadas ao �nal do arquivo de con�guração citado, para disponibilizar os serviços doservidor pela porta ****, utilizando este modo.

portIndex1_port = ****

portIndex1_debug = false

portIndex1_syncSimTrigger = true

• Servidor operando com a API remota temporária: neste modo, o próprio usuário controla manualmente quandoo servidor será inicializado, o que ocorre juntamente com o início da simulação (pressionando-se "play" nosoftware). Os serviços do servidor �carão automaticamente indisponíveis assim que a simulação for �nalizada(pressionando-se "stop" no software). Para disponibilizar os serviços do servidor pela porta **** utilizandoeste modo, a seguinte linha de código deve ser introduzida em algum script dentro do software V-REP (maisdetalhes sobre scripts na seção 3).

simExtRemoteApiStart (****)

2.3.2 Inicializando o cliente

Para inicializar o cliente utilizando o Matlab, dois arquivos devem estar presentes no diretório da rotina a serexecutada: "remoteApiProto.m" e "remApi.m". Ambos são encontrados no diretório de instalação do V-REP, nosubdiretório programming/remoteApiBindings/matlab.

Além disso, é necessário também o arquivo de con�guração "remoteApi.dll" (para Windows x86 e x64), "re-moteApi.so" (para Linux x86 e x64) ou "remoteApi.dylib" (para MacOS). Eles podem ser encontrados também nodiretório de instalação do V-REP, no subdiretório programming/remoteApiBindings/lib/lib. Este arquivo pode sercopiado para o mesmo diretório onde a rotina do Matlab a ser executada encontra-se, ou, no caso do Windows,pode ser copiada uma única vez para o diretório C:\Windows\System32.

Uma vez que todos estes arquivos estejam nos devidos locais, o seguinte comando deve ser utilizado na rotinado Matlab para criar um objeto, no qual as funções da API �carão disponíveis.

vrep=remApi('remoteApi ')

Feito isto, para inicializar o cliente, utiliza-se o seguinte comando na rotina do Matlab.

clientID = vrep.simxStart('endereço IP', porta , true , true , 5000, 5)

Neste comando, o "endereço IP" corresponde ao endereço da máquina onde o servidor está sendo executado, e"porta", à porta na qual o cliente deve ser conectado (a mesma do servidor). Caso a rotina do Matlab esteja sendoexecutada na mesma máquina do V-REP, utilize o endereço IP '127.0.0.1'.

3

3 PREPARAÇÃO DE UM AMBIENTE DE SIMULAÇÃO NO V-REP mαcrφ@uf�g

3 Preparação de um ambiente de simulação no V-REP

Nesta seção um exemplo será explicado passo a passo, no qual um ambiente simples será construído no V-REP econtrolado externamente utilizando o MatLab.

Recomenda-se a leitura e/ou consulta ao Manual do Usuário do V-REP, disponibilizado pela Coppelia Robo-tics (http://www.coppeliarobotics.com/helpFiles/) antes e durante da execução deste exemplo. Para facilitar afamiliarização com o software, os componentes da tela de interface com o usuário serão detalhados na subseção aseguir.

3.1 Tela de interface com o usuário

A tela inicial do software é mostrada na Figura 1. A maior parte desta tela é tomada pela janela de visualizaçãoda cena, a qual, por padrão, possui um chão e um fundo pré-con�gurados. Como mostrado nesta �gura, esta telapode ser dividida em seis seções.

1. Objetos e componentes atuais da cena (Scene hierarchy): nesta seção todos os objetos e componentes quefazem parte da cena atual são mostrados conforme a estrutura com que esta cena foi construída. Um ícone emformato de "+" do lado esquerdo de um componente indica que este componente possui componentes �lhosassociados a ele. Para visualizá-los basta clicar sobre o ícone uma vez com o botão esquerdo. Um ícone emformato de papel do lado direito de um componente indica que aquele componente possui um script embutido.Para acessar este script basta clicar duas vezes sobre o ícone.

2. Biblioteca de objetos e componentes: nesta seção são disponibilizados diversos modelos prontos de robôse objetos, os quais podem ser utilizados para montar uma cena. É dividida em categorias, tornando suautilização bastante intuitiva.

3. Comandos de simulação: nesta seção estão dispostos os botões de comando de simulação. A primeira caixa deseleção à esquerda mostra o módulo de simulação física e dinâmica escolhida para a simulação (Bullet, ODEou Vortex ). Logo em seguida, vem a caixa de seleção que mostra a con�guração escolhida para o módulo desimulação dinâmica do sistema (Very accurate, Accurate, Fast, Very fast ou Customized). A próxima caixade seleção indica o tempo de passo da simulação, ou tempo de integração. Quanto menor este tempo, maispreciso será o resultado mostrado, porém mais lenta será a simulação. À direita das caixas de seleção existemtrês botões, que, da esquerda para a direita, servem para iniciar, pausar e nalizar a simulação. O botãoseguinte seleciona a opção de simulação em tempo real. Os dois botões subsequentes comandam a dinâmicada simulação tornando-a mais lenta e mais rápida, da esquerda para a direita. Por �m, o último botão destaseção seleciona a opção de melhoramento de threads.

4. Comandos de movimentação de objetos: nesta seção estão os botões para mover objetos da cena. Da esquerdapara a direita, o primeiro botão é para a translação de um objeto, o seguinte para a rotação. À direita domesmo está o botão para associar objetos entre si, e por m, o botão para transferir DNA entre objetos, istoé, transferir características e propriedades.

5. Comando de câmera: nesta seção encontram-se as funcionalidades que facilitam a visualização da cena. Paramodi�car a posição da câmera, basta selecionar o movimento desejado, clicar sobre a tela e, ainda segurandoo botão do mouse, movimentá-lo na direção desejada. A movimentação da câmera está diretamente ligada aoponto de aplicação do comando, o qual é demarcado por um ponto vermelho na cena, quando clica-se sobre amesma. O primeiro botão à esquerda permite a translação da câmera, o segundo, a sua rotação e o terceiropermite se afastar ou se aproximar da mesma. Os dois botões seguintes permitem abrir e fechar o angulo dacâmera e ajustar a câmera para capturar a cena completa.

6. Barra de ferramentas: nesta seção encontram-se os principais atalhos para manipular objetos, scripts, propri-edades e funções.

4

3 PREPARAÇÃO DE UM AMBIENTE DE SIMULAÇÃO NO V-REP mαcrφ@uf�g

Objetos e componentes atuais da cena

Biblioteca de objetos e componentes

Comandos de simulação

Comandos de movimentação de objetosComandos de câmera

Barra de ferramentas

Figura 1: Tela de interface com o usuário.

3.2 Passo-a-passo

A cena que será montada neste exemplo contém um robô Kuka sobre uma plataforma e uma mesa sobre a qual umobjeto a ser manipulado será colocado.

Antes de iniciar a montagem, na seção de comandos de simulação, modi�que a con�guração do módulo desimulação dinâmica do sistema para Very accurate.

Os passos seguintes ajudarão a montar a cena mencionada.

Passo 1: adicionando uma mesa à cena

Na tela inicial do V-REP vá em Model browser > Models > furniture > tables. Na janela abaixo clique e segure oobjeto customizable table e solte-o em qualquer lugar da cena vazia. Uma tela para ajustar o tamanho da mesa édisponibilizada. Ajuste o parâmetro Length para 1.00, Width para 0.75 e Height para 0.50. Selecione a mesa e, emseguida, selecione o botão Object/ item rotate. Na seção Object/ item rotation operations > Relative to: selecioneOwn frame, e modi�que a opção Around Z para 90.0, então clique sobre Rotate selection.

A Figura 2 mostra a cena esperada após o passo 1.

Passo 2: adicionando a plataforma para o robô

Vá em Model browser > Models > infrastructure > other. Na janela abaixo selecione resizable concret block. Cliquee segure sobre este objeto e solte-o em qualquer lugar da cena.

Clique sobre o bloco de concreto recém-adicionado, e em seguida, pressionando a tecla "Shift", clique sobre amesa. Com ambos os objetos selecionados, vá em Object/ item shift e pressione o botão Apply to selection *apenas*na seção Object/ item position > X-coordinate e Object/ item position > Y-coordinate . O bloco de concreto iráentão se deslocar para o centro da mesa, no chão.

Clique sobre a cena para tirar a seleção atual, e selecione apenas o bloco de concreto, clicando sobre o mesmo.Vá novamente em Object/ item shift. Em Object/ item translation & position scaling operations > Relative to:selecione a opção Own frame. Modi�que o valor de Along X para 1.0 e pressione Translate selection.

A Figura 3 mostra a cena esperada após o passo 2.

5

3 PREPARAÇÃO DE UM AMBIENTE DE SIMULAÇÃO NO V-REP mαcrφ@uf�g

Figura 2: Passo 1.

Passo 3: adicionando o robô

Vá em Model browser > Models > robots > non-mobile. Na janela abaixo selecione KUKA LBR4+, clique e seguresobre este objeto e solte-o em qualquer lugar da cena.

Clique sobre o robô, e em seguida, pressionando a tecla "Shift", clique sobre o bloco de concreto. Com ambosos objetos selecionados, vá em Object/ item shift e pressione o botão Apply to selection ao �m da seção Object/item position. O robô será deslocado para o centro do bloco de concreto.

Clique sobre a cena para tirar a seleção atual, e selecione o robô novamente, clicando sobre o mesmo. Vánovamente em Object/ item shift. Em Object/ item translation & position scaling operations > Relative to: selecionea opção Own frame. Modi�que o valor de Along Z para 0.31 e selecione Translate selection. Vá em Object/ itemrotate. Em Object/ item rotation operations > Relative to: selecione a opção Own frame. Modi�que o valor deAround Z para 90.0 e selecione Rotate selection. Assim o robô �cará em uma posição exatamente sobre o bloco.

Note que a seção Scene hierarchy se modi�ca a medida que objetos são adicionados à cena. Neste ponto, sea simulação for iniciada, um script padrão será executado, e o robô irá realizar um movimento pré-programado.Para retirar este comportamento pré-de�nido, em Scene hierarchy, dê um duplo clique no ícone em formato depapel à direita do item LBR4p, selecione todo o código e delete. Para preparar o servidor para comunicação viaAPI conforme a subseção 2.3.1, copie e cole neste script vazio a seguinte linha, para de�nir a porta 20002 paracomunicação com a API remota.

simExtRemoteApiStart (20002)

Expanda o objeto LBR4p clicando sobre o "+" à esquerda do mesmo. Clique sobre o objeto �lho LBR4p_joint1e, com a tecla "Shift" pressionada, clique também sobre LBR4p_joint2, LBR4p_joint3, LBR4p_joint4, LBR4p_joint5,LBR4p_joint6 e LBR4p_joint7. Com todos os objetos selecionados, na barra de ferramentas na lateral esquerda,

selecione a opção Scene object properties (segunda opção de cima para baixo) . Uma janela de propriedades deobjeto será aberta. Na caixa de seleção da seção Joint mode, selecione joint is in inverse kinematic mode, e marquea caixa de seleção Hybrid operation, e então clique em Apply selection duas vezes.

Neste ponto, o robô está posicionado e preparado para ser controlado externamente, porém, ainda não possuium efetuador, necessário para a manipulação. Para adicioná-lo vá em Model browser > Models > components >grippers. Clique e segure sobre o objeto Barrett Hand e solte-o em qualquer lugar da cena. Então, selecione o objetoBarrett Hand e, com a tecla "Shift" pressionada, selecione, na Scene hierarchy, o objeto LBR4p_connection. Em

seguida, selecione o botão Assemble/ Disassemble . Com isso, a garra será conectada à extremidade do robô.

6

3 PREPARAÇÃO DE UM AMBIENTE DE SIMULAÇÃO NO V-REP mαcrφ@uf�g

Figura 3: Passo 2.

A Figura 4 mostra a cena esperada após o passo 3.

Figura 4: Passo 3.

Passo 4: adicionando um copo

Vá em Model browser > Models > household . Na janela abaixo selecione cup, clique e segure sobre este objeto esolte-o em qualquer lugar da cena. Clique sobre o copo, e em seguida, pressionando a tecla "Shift", clique sobre amesa. Com ambos os objetos selecionados, vá em Object/ item shift e pressione o botão Apply to selection ao �mda seção Object/ item position. O copo será deslocado para o centro da mesa.

Clique sobre a cena para tirar a seleção atual, e selecione o copo novamente, clicando sobre o mesmo. Vánovamente em Object/ item shift. Em Object/ item translation & position scaling operations > Relative to: selecione

7

4 PREPARAÇÃO DO CONTROLE EXTERNO USANDO O MATLAB mαcrφ@uf�g

a opção Own frame. Modi�que o valor de Along X para 0.2, Along Y para −0.3 e Along Y para 0.11, e entãoselecione Translate selection.

A cena está pronta, e a mesma deve estar semelhante à mostrada na Figura 5. Salve esta cena (File > Savescene) com o nome que desejar.

Figura 5: Cena �nal.

4 Preparação do controle externo usando o Matlab

A tarefa de manipulação executada pelo controle externo consiste em pegar o copo sobre a mesa e movê-lo paraoutra posição.

O controle externo aqui detalhado pode ser resumido com o pseudo-código descrito no Algoritmo 1.

Algorithm 1 Controle externo utilizando o Matlab.1: Adiciona os paths necessários;2: Inicializa o cliente para comunica�ção com a API;3: Carrega os handles dos objetos da cena;4: Carrega o modelo do robô a ser utilizado;5: Realiza o controle cinemático para levar o efetuador ao copo;6: Fecha a garra do efetuador e segura o copo;7: Realiza o controle cinemático para levar o efetuador a outra pose;8: Abre a garra do efetuador e solta o copo.

Iremos analisar cada um destes passos separadamente.

4.1 Inicialização do cliente

A inicialização do cliente é feita conforme a subseção 2.3.2. O código Matlab abaixo mostra a implementação.

vrep = remApi('remoteApi '); %Define a API

vrep.simxFinish (-1); %Fecha possíveis comunicações já existentes

clientID = vrep.simxStart ( '127.0.0.1 ' ,20002 ,true ,true ,5000 ,5); %Define o cliente

8

4 PREPARAÇÃO DO CONTROLE EXTERNO USANDO O MATLAB mαcrφ@uf�g

%Verifica se o cliente foi criado com sucesso

if clientID ~= -1

disp('V-REP connected !');

end vrep.simxSynchronousTrigger(clientID);

%Verifica se a conexão está ativa

[connectionId ]=vrep.simxGetConnectionId(clientID);

if connectionId ==-1

disp('Server disconnected !');

return;

4.2 Carregando handles de objetos da cena

Cada objeto da cena no V-REP pode ser representado por um handle único. Ao ler ou enviar dados para esteobjeto, isso será feito no Matlab através do seu handle.

Para de�nir um handle para um objeto, no Matlab, o seguinte comando deve ser usado:

[~,handle ]=vrep.simxGetObjectHandle(clientID ,'Nome_objeto ',vrep.simx_opmode_oneshot_wait

); %Nome_objeto corresponde ao nome exato utilizado no V-REP para este objeto

Alguns handles são essenciais para este tutorial, e eles correspondem aos seguintes objetos no V-REP:

• ResizableFloor_5_25 : equivalente ao sistema de coordenadas inercial.

• LBR4p_joint1, LBR4p_joint2, LBR4p_joint3, LBR4p_joint4, LBR4p_joint5, LBR4p_joint6 e LBR4p_joint7 :correspondem às juntas do robô.

• BarrettHand e BarrettHand_attachPoint: corresponde ao efetuador, e ao ponto de associação utilizado parasegurar os objetos.

• Cup: objeto a ser manipulado.

Para cada um destes objetos, um handle com nome diferente deve ser criado e, além disso, o canal de leitura dedados deve ser aberto. Para cada tipo de dado que se deseja ler, um novo canal deve ser aberto.

A abertura de um canal é feita simplesmente utilizando os comandos comuns de leitura pela primeira vez. Asseguintes linhas de código mostram como isso pode ser feito:

vrep.simxGetObjectPosition(clientID ,handle ,-1,vrep.simx_opmode_streaming); %Abre o canal

para a leitura de posição do objeto associado a 'handle '

vrep.simxGetObjectOrientation(clientID ,handle ,-1,vrep.simx_opmode_streaming); %Abre o

canal para a leitura de orientação do objeto associado a 'handle '

vrep.simxGetJointPosition(clientID ,handle ,vrep.simx_opmode_streaming); %Abre o canal

para a leitura do valor da junta associada a 'handle '

4.3 Carregando o modelo do robô

O robô deste tutorial é o Kuka LBR4p, o qual possui 7 juntas rotativas. Utilizou-se a convenção de Denavit-Hartenberg para obter o seu modelo, e os parâmetros estão dispostos na Tabela 1.

Além disso, é necessário colocar a base do modelo na pose atual da base do robô no V-REP.Para isso, a pose da primeira junta deve ser obtida, e, a partir dela, utiliza-se o comando da biblioteca

DQ_robotics:

kuka.set_base(pose);

9

5 EXECUÇÃO DO EXEMPLO mαcrφ@uf�g

i a α d θ

1 0 π2 0.2 0

2 0 −π2 0 0

3 0 π2 0.4 0

4 0 −π2 0 0

5 0 π2 0.4 0

6 0 −π2 0 0

7 0 0 0.15 0

Tabela 1: Parâmetros de DH para o Kuka.

4.4 Controle cinemático

Para realizar o controle cinemático, a pose desejada deve ser de�nida. Como o objetivo é chegar até o copo,inicialmente, devemos ler do servidor qual é a pose atual do objeto Cup, e, em seguida fazer a modi�cação necessárianesta pose para que o manipulador alcance o copo com uma con�guração correta, e em uma posição deslocada,para não colidir com o mesmo.

Após de�nir os parâmetros do controlador cinemático, a lógica descrita no Algoritmo 2 é executada.

Algorithm 2 Contrador cinemático.1: while erro > 0 do2: Lê o estado atual das juntas;3: Calcula a pose atual do efetuador e a matriz jacobiana;4: Calcula o erro;5: Computa q̇ e q;6: Envia os valores desejados para execução no simulador.7: end while

Após alcançar o copo, a garra do efetuador é então fechada.O mesmo procedimento é realizado, de�nindo-se a pose �nal para a qual o copo deve ser levado, e, após alcançada

esta pose, a garra do efetuador deve ser aberta para que o copo seja liberado.

5 Execução do exemplo

Para executar o exemplo de um controle externo feito no Matlab, inicie a simulação no V-REP, e, em seguida,execute o Script do Matlab. A Figura 6 mostra uma captura da cena durante a execução do exemplo.

10

REFERÊNCIAS mαcrφ@uf�g

Figura 6: Captura da execução do exemplo.

Referências

Passmark. Passmark G3D Rating, 2013. URL http://www.videocardbenchmark.net/gpu_list.php. Ultimoacesso: 29/03/2015.

Coppelia Robotics. V-rep user manual. URL http://www.coppeliarobotics.com/helpFiles/. Ultimo acesso:13/04/2015.

V-REP. Download v-rep, 2013. URL http://www.coppeliarobotics.com/downloads.html. Ultimo acesso:29/03/2015.

11