Post on 24-Oct-2021
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