Mostrando postagens com marcador Robótica. Mostrar todas as postagens
Mostrando postagens com marcador Robótica. Mostrar todas as postagens

quinta-feira, 14 de janeiro de 2016

Player/Stage no Ubuntu 15.04

Descontinuado frente a ferramentas mais novas, melhores e mais eficientes para robótica, o famoso framework Player/Stage foi sendo gradativamente abandonado e até ser relegado quase ao esquecimento.
Como esperado, qualquer software que não tem manutenção e fica sem atualizações torna-se sistematicaticamente incompatível com as novas versões das APIs e libraries de quem depende. Assim, fazê-lo funcionar em um ambiente mais atual requer um pouco de trabalho.
Este post tem o objetivo de fornecer os passos necessários para fazer essas ferramentas rodarem novamente no Ubuntu 15.04 com o OpenCV 3.0.0


OpenCV 3.0.0


Várias mudanças ocorreram desde a versão 2.4.X com a qual o Player era compatível, inclusive algumas das funções que ele usa se tornaram deprecated. Entre elas estão o cvQueryHistValue_1D e o cvCvtPixToPlane, necessários ao blobfinder do Player.
Instale o OpenCV normalmente, baixando o fonte do site e compilando-o na sua máquina.


Player piece


Com o OpenCV já instalado, podermos seguir para a instalação do Player. A última versão (3.0.2) foi disponbilizada em 2010 e pode ser baixada pelo Sourceforge.
Descompacte o arquivo e coloque-o no local padrão dos fontes no Linux
$ cd ~/Downloads
$ tar zxvf player-3.0.2.tar.gz
$ sudo mv player-3.0.2 /usr/local/src/
Crie um diretório build para organizar o processo e configure os parâmetros para a compilação
$ cd /usr/local/src/player-3.0.2
$ mkdir build
$ cd build
$ cmake ../


Corrigindo os problemas relacionados ao OpenCV


Antes de compilar, precisaremos fazer algumas modificações no código fonte para torná-lo compatível com as novas versões do OpenCV e da ZLib.
Edite o arquivo shapetracker.cc localizado em /usr/local/src/player-3.0.2/server/drivers/blobfinder/shapetracker e acrescente uma nova linha para incluir a biblioteca de compatibilidades entre as versões do OpenCV.
Logo após as linhas:
(50) #include <libplayercore/playercore.h>
(51) #include <base/imagebase.h>
(52)
(53) #include <cv.h>
Acrescente:
(54) #include <opencv2/legacy/compat.hpp>
Isso resolverá os problemas de compatibilidades com o OpenCV!


Corrigindo os problemas relacionados a ZLib


O mesmo ocorreu com a biblioteca ZLib a partir da versão 1.2.5, tornando necessário especificar o tipo de ponteiro de arquivo (casting) durante as chamadas as funções gzseek e gzgets.
Edite o arquivo readlog.cc localizado em /usr/local/src/player-3.0.2/server/drivers/shell, alteranado as linhas:
ret = gzseek(this->file,0,SEEK_SET);
por 
ret = gzseek((gzFile)this->file,0,SEEK_SET);
e também
ret = (gzgets(this->file, this->line, this->line_size) == NULL);
por
ret = (gzgets((gzFile)this->file, this->line, this->line_size) == NULL);
Feito isso, problema resolvido!


Compilando o Player


Acesse a pasta build criada anteriormente e compile:
$ cd /usr/local/src/player-3.0.2/build
$ make
Salvo qualquer problema inesperado (tal como algum problema com a libboost no meu caso :'( ou uma eventual incompativilidade de versão com o seu sistema em particular) é esperado que o player compile sem qualquer erro ... embora apareçam diversos alertas (warnings).

No meu sistema estou usando a versão 1.59.0 da Boost, compilada e instalada manualmente. Embora todos os arquivos estejam disponíveis e estejam sendo encontrados para a linkedição, parece que a configuração do cmaker do Player ignorou a necessidade de libboost_system no processo de construção dos exemplos.
Mais uma vez, precisamos acertar isso para que a compilação possa ser concluida corretamente. Deste modo, teremos que fazer a inclusão deste parâmetro manualmente, alterando o conteúdo do arquivo link.txt em vários diretórios diferentes (isto é, para cada um dos executáveis que tenham esta lib como dependência).

O processo é sempre o mesmo, ou seja, acrescentar -lboost_system ao final da linha juntamente com as demais bibliotecas que estão sendo ligadas ao executável em questão. Faça isso para o arquivo link.txt em cada uma das seguintes pastas:
/build/examples/libplayerc++/CMakeFiles/camera.dir
/build/examples/libplayerc++/CMakeFiles/clientgraphics.dir
/build/examples/libplayerc++/CMakeFiles/clientgraphics3d.dir
/build/examples/libplayerc++/CMakeFiles/example0.dir
/build/examples/libplayerc++/CMakeFiles/example1.dir
/build/examples/libplayerc++/CMakeFiles/example2.dir
/build/examples/libplayerc++/CMakeFiles/example3.dir
/build/examples/libplayerc++/CMakeFiles/example4.dir
/build/examples/libplayerc++/CMakeFiles/goto.dir
/build/examples/libplayerc++/CMakeFiles/grip.dir
/build/examples/libplayerc++/CMakeFiles/laserobstacleavoid.dir
/build/examples/libplayerc++/CMakeFiles/ptz
.dir
/build/examples/libplayerc++/CMakeFiles/
randomwalk.dir
/build/examples/libplayerc++/CMakeFiles/sonarobstacleavoid.dir
/build/examples/libplayerc++/CMakeFiles/speech_cpp_client
.dir
/build/examples/libplayerc++/CMakeFiles/speech
.dir
/build/examples/libplayerc++/CMakeFiles/wallfollow
.dir
/build/utils/playerjoy/CMakeFiles/playerjoy.dir
/build/utils/playerprint/CMakeFiles/playerprint.dir
/build/utils/playerprop/CMakeFiles/playerprop.dir


Agora é (só) terminar a compilação e instalar
$ cd /usr/local/src/player-3.0.2
$ cd build
$ make
$ sudo make install


That's it!

sábado, 7 de maio de 2011

Stage 3.2.2 no Ubuntu 11.04


É muito provável que você já tenha instalado o Player, já que esse é o primeiro passo antes de instalar o Stage. No Ubuntu 11.04, esse procedimento pode ser bastante simples já que podemos instalar o Player 3.0.2 através do apt. Entretanto se você precisar personalizar a instalação de alguma forma, poderá seguir os passos apresentados aqui.

Concluída essa primeira etapa, podemos passar a instalação do Stage propriamente dito.

Devemos começar instalando alguns pacotes que são necessários a compilação (dependências):
$ sudo apt-get install libfltk1.1-dev freeglut3-dev libglu1-mesa-dev libglut3-dev

Descompacte o pacote e mova-se para o diretório criado:
$ tar -xvf Stage-3.2.2-Source.tar.gz
$ cd Stage-3.2.2-Source


Crie um diretório para conter as informações da compilação e mova-se para ele:
$ mkdir build
$ cd build

Antes de compilar precisamos configurar os elementos do pacote, então digite:
$ cmake ..

Note que em meio as mensagens exibidas aparecerá:
-- checking for one of the modules 'websim'
  * WebSim not detected.

Don't worry. Esta mensagem não é considerada nem como de erro, nem de alerta (warning). Trata-se apenas de uma mensagem informativa. Na prática o FLTK faz todo o papel principal, tornando o WebSim coadjuvante.

Continuando, compile e instale o pacote:
$ make
$ sudo make install

Particularmente tenho o hábito de deixar os arquivos de modelo de mundo (diretório worlds) com a mesma estrutura de diretórios que a do apt, com uma pequena diferença, usar o o diretório /usr/local como base. Para isso, faça:
$ sudo cp -R ../worlds /usr/local/share/stage

Para que não seja necessário setar o valor da variável LD_LIBRARY_PATH todas as vezes que for utilizar o Stage, crie um arquivo de configuração:
$ sudo gedit /etc/ld.so.conf.d/stage.conf

... com o seguinte conteúdo:
# Stage default configuration
/usr/local/lib

Salve as alterações e recarregue o arquivo para que sejam incorporadas ao ldconfig:
$ sudo ldconfig

Pronto! Vamos testar para termos certeza de que está tudo correto:
$ stage /usr/local/share/stage/worlds/simple.world

Agora é só usar =)

Player 3.0.2 no Ubuntu 11.04


No Ubuntu 11.04 a versão do Player disponível no apt é exatamente a 3.0.2 (uhu!). Pode ser que você precise de algum driver ou recurso que não esteja disponível entre os elementos padrões da compilação (tal como, suporte a lasers Hokuyo, imu da XSens etc), então terá que compilar o pacote manualmente.

As ações e procedimentos que apresentamos a seguir tem exatamente esse objetivo. Mas antes de começar, estamos considerando que o FFmpeg, OpenCV 2.2 e o Gearbox 9.11 estão instalados e corretamente configurados.

Se você não tenha feito isto ainda, veja como pode fazê-lo aqui em um de nossos outros posts: FFmpeg + OpenCV e Gearbox

Antes de prosseguir tenha certeza de que algumas coisas estejam instaladas e tualizadas:
$ sudo apt-get update
$ sudo apt-get install build-essential cmake cmake-curses-gui

Descompacte o pacote:
$ tar -xvf player-3.0.2

Instale as dependências do Player:
$ sudo apt-get install autotools-dev freeglut3 libart-2.0-dev libtool liblodo3.0 libltdl-dev libzlcore-dev libgeos-dev libgeos-c1 swig libgnomecanvas2-dev libgtk2.0-dev libgtk2.0-cil-dev libboost-signals1.42.0 libboost-signals1.42-dev libboost-thread1.42.0 libboost-thread1.42-dev libboost1.42-dev libgsl0-dev libpqxx-dev libstatgrab-dev libstatgrab6

Crie um o diretório para versão final:
$ mkdir build
$ cd build/

Configure o pacote:
$ cmake -DLARGE_FILE_SUPPORT=ON -DBUILD_PYTHONCPP_BINDINGS=ON -DBUILD_DOCUMENTATION=ON -DENABLE_DRIVER_HOKUYO_AIST=ON -DENABLE_DRIVER_OCEANSERVER=OFF ..

Aqui as opções ON entre outras coisas são para que o Player suporte arquivos grandes, gere a documentação usando o Doxygen, além do suporte ao laser Hokuyo. Por fim, o driver OceanServer foi desabilidado pois apresenta problemas de compatibilidade de versão com o Gearbox 9.11 e não temos qualquer dispositivo que trabalhe com este tipo de servidor não tentei resolver o problema.

Agora compile e instale:
$ make
$ sudo make install

Para que não seja necessário setar o valor da variável LD_LIBRARY_PATH todas as vezes que for utilizar o Player, crie um arquivo de configuração:
$ sudo gedit /etc/ld.so.conf.d/player.conf

... com o seguinte conteúdo:
# player default configuration
/usr/local/lib

Salve as alterações e recarregue o arquivo para que sejam incorporadas ao ldconfig:
$ sudo ldconfig

Pronto! \o/

Agora vá para a pasta do usuário (ou uma outra qualquer) e faça um teste:
$ cd ~
$ player

That's all folks!