Artigo - TecnDO/RGB-D-SLAM_JaguarV4 GitHub Wiki

DESENVOLVIMENTO

A disciplina de Sistemas Autônomos já tinha na ementa, trabalhar com o Jaguar, como já estava no planejamento do curso utilizar o robô, os alunos foram direcionados a trabalhar em outros setores da plataforma Jaguar, sensores e atuadores, dai foi estabelecido como primeiro objetivo a recuperação do funcionamento completo do Jaguar. Logo após o teste dos componentes, sensores e dispositivos de comunicação os alunos obteram sucesso de controlar o Jaguar pelos sistemas primários, tablet e joystick, a partir dessa conquista iniciamos as pesquisas e aplicações da automatização. Todos os componentes do jaguar com exceção o controlador e a placa de distribuição de energia eram produtos de mercado, então poderiam ser estudados pelo datasheet fornecido pela fabricante.

1. INSTALAÇÃO ROS

Foi adquirido alguns documentos de testes de aplicação ROS + Kinect v1, mas com datas de 3 para 5 anos, então até entender a necessidade e aplicação do projeto foi instalado 3 Sistemas Operacionais e 3 versões do ROS para finalmente chegarmos a implementação correta do sistema. O primeiro objetivo era aplicar o RGB-D SLAM (ENDRES et al., 2012a), então no site que estava hospedado o algoritimo, sinalizava que para aplicar o algorítimo era necessário trabalhar com uma distribuição ROS antiga e consequentemente com um Sistema Operacional antigo também. Enfim, por meio desse documento venho facilitar a aplicação. Utilizaremos o sistema operacional Ubuntu 16.04 (Xenial Xerus) e a distribuição ROS Kinect Kame. Segue o passo a passo para instalação e uma breve descrição da linha de comando necessária descrito em (FOUNDATION, 2007).

1.1.1 Comandos pré-instalação

user@hotstname: $ sudo sh -c ’echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main» /etc/apt/sources.list.d/ros-latest.list’

Necessario para o sistema aceitar os pacotes de instalação do servidor packages.ros.org.

user@hotstname: $ sudo apt-key adv –keyserver hk//ha.pool.sks-keyservers.net:80–recv-key-421C365BD9FF1F717815A3895523BAEEB01FA116

1.1.2 Configurando as chaves do servidor

user@hotstname: $ sudo apt-get update

Atualizar o sistema para obter uma instalação sem erros de compatibilidade.

1.1.3 Comandos para instalação do ROS Kinetic Kame

user@hotstname: $ sudo apt-get install ros-kinetic-desktop-full

Nesse comando será instalado o ROS completo com os pacotes base de ROS, rqt, rviz, bibliotecas robóticas genéricas, simuladores 2D / 3D, navegação e percepção 2D / 3D.

user@hotstname: $ apt-cache search ros-kinetic

1.1.4 Para verificação da instalação e dos pacotes instalados

user@hotstname: $ sudo rosdep init

user@hotstname: $ rosdep update

Os comandos acima servirá para poder usar o ROS, você precisará inicializar o rosdep. O rosdep permite que você instale facilmente as dependências do sistema para a origem que você deseja compilar e é necessário para executar alguns componentes principais no ROS.

user@hotstname: $ echo "source /opt/ros/kinetic/setup.bash»> /.bashrc user@hotstname: $ source /.bashrc

Configuração do ambiente ROS, vai ser adicionado a sessão bash toda vez que um novo shell for lançado.Nesse comando é realizado a interação da bash do sistema base com a bash do sistema ROS.

user@hotstname: $ sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential

Até agora foi instalado o necessário para executar os pacotes principais do ROS. Para criar e gerenciar seus próprios espaços de trabalho do ROS, existem várias ferramentas e requisitos que são distribuídos separadamente.

1.2 TRABALHANDO COM ROS

user@hotstname: $ printenv | grep ROS

Verificar e garantir qual pacote ROS está sendo usado.

user@hotstname: $ source /opt/ros/kinetic/setup.bash

Para iniciar os arquivos .sh do sistema ROS.

O usuário pode criar um ambiente de trabalho para administrar os pacotes instalados ou pode instalar os pacotes diretos na base do sistema ROS. A seguir será descrito alguns comando para iniciar o ambiente de trabalho.

user@hotstname: $ mkdir-p /catkin_ws/src

user@hotstname: $ cd /catkin_ws/src

user@hotstname: $ catkin_init_workspace

user@hotstname: $ cd /catkin_ws

user@hotstname: $ catkin_make

O comando catkin_make é uma ferramenta de conveniência para trabalhar com espaços de trabalho catkin. Executando-o pela primeira vez em sua área de trabalho, ele criará um link CMakeLists.txt na sua pasta ’src’. Além disso, se você procurar em seu diretório atual, agora você deve ter uma pasta ’build’ e ’devel’. O fornecimento de qualquer um desses arquivos irá sobrepor esse espaço de trabalho sobre o ambiente.

user@hotstname: $ source devel/setup.bash

Inicar a fonte .sh do ambiente de trabalho.

user@hotstname: $ echo $ROS_PACKAGE_PATH

Retorna:/home/youruser/catkin_ws/src:/opt/ros/kinetic/share

Para adequadar o ambiente de trabalho, sobrepondo o script de configuração.

Para instalar qualquer pacote, é necessário salvar na pasta /src do ambiente de trabalho em questão, o usuário pode ter diferentes ambientes de trabalho, e para montar os pacotes tem que entrar com o comando “$ catkin_make”, na raiz do ambiente de trabalho, “ /catkin_ws” Depois de instalado é indicado atualizar o sitema de arquivos com os comando a seguir.

user@hotstname: $ rosdep update user@hotstname: $ sudo apt-get update

Para aplicação do projeto no modo ambiente de trabalho, segue o script shell para iniciar o ROS Kinetic com RGB-D SLAM (ENDRES et al., 2012b) e os pacotes necessários no Anexo A.

Para aplicar direto da base do sitema ROS Kinetic, é necessário certifica-se que os pacotes RTAB-MAP e Open Natural Interaction (OPENNI), estão instaldo no ROS.

user@hotstname: $ rospack list

Lista todos os pacotes instalados na base do sistema ROS.

Se não estiver instalado será necessário a instalação do pacote de forma direta.

user@hotstname: $ sudo apt-get install ros-kinetic-rtabmap-ros

O RTAB-Map é lançado como binários na distribuição ROS.

user@hotstname: $ sudo apt-get install ros-kinetic-openni-launch

Driver para trabalhar com a câmera RGB do Kinect v1.

1.2.1 Execução do Algoritmo de Localização e Mapeamento

Com todas as instruções acima executadas é recomendável reiniciar o computador para executarmos os comandos de aplicação. Em seguida será necessario a inicialização de alguns pacotes para a aplicação.

user@hotstname: $ roscore

Inicialização da base de pacotes do sistema ROS.

user@hotstname: $ roslaunch openni_launch openni.launch

Inicialização do driver do Kinect v1.

user@hotstname: $ rtabmap

Inicialização do algoritimo de Localização e Mapeamento.

1.3 TRABALHANDO COM ROS NA RASPBERRY PI 3 B+

Os processos anteriores foram necessário para verificar a estalibidade do sistema e se era possível a aplicação final. A raspberry utilizada foi a pi 3 B+, versão mais atualizada e robusta nesta data. Para manter os mesmo processos de implementação, foi encontrado uma imagem para Raspberry Pi 3 (RP3) com Ubuntu 16.04 e ROS Kinetic já instalados, mas poderá ser feito com a instalação base do Ubuntu e posteriormente a instalação do ROS Kinetic. A imegem Ubuntu+ROS foi criada pelo grupo da Ubiquity Robotics, grupo de desenvolvedores e facilitadores de implementação robótica. O grupo tem alguns produtos para venda e também disponibilizam imagens de desenvolvimento de robôs, idealizados para facilitar a aplicação de projetos robóticos baseados em ROS. Para instalar a imagem é recomendado utilizar o programa Etcher, compilador flash de imagens para cartao SD e outras mídias removíveis, recomendado pelo fabricante da RP3. Logo após a inicialização do sistema será necessário fazer o login, a conta de usuário disponível é Ubuntu User e a senha de acesso é ubuntu, demonstada na figura 6.

O sistema surge como um ponto de acesso Wi-Fi. O Service Set Identifier (SSID) é ubiquityrobotXXXX, onde XXXX faz parte do endereço Media Access Control (MAC) da sua RP3. A senha do wifi é robotseverywhere. Assim será desbloqueado para ter acesso a qualquer rede.

Se desejavel retirar esse boot de inicialização,somente executar “sudo systemctl disable magni-base” para garantir que os scripts sejam desativados. Nessa imagem, já foi realizada a instalação do sistema Ubuntu+ROS para RP3. Agora iremos trabalhar com o ROS e implementar o funcionalemento com RTABMap e streaming.

1.3.1 Configurando o RP3

Teclas: Crtl + Alt + T

Abrirá o terminal Linux.

user@hotstname: $ printenv | grep ROS

Verificar e garantir qual pacote ROS está sendo usado.

user@hotstname: $ rospack list

Lista todos os pacotes instalados na base do sistema ROS.

Depois de muita pesquisa e várias tentativas, as aplicações realizadas na implemen- tação do ROS em um notebook ou comupador, não foram totalmente viáveis para o Raspberry Pi, por questões de processamento e falta de compatibilidade de alguns pacotes. Será descrito a seguir o passo a passo para configurar a RP3 como escravo do sistema ROS_MASTER e streaming dos dados solicitados. Primeiro será instalados os pacotes que permitem utilizat o sensor Kinect na RP3 e logo em seguida os passo para RP3 ficar no modo slave (referência para escravo, comumente adotado por profissionais de TI).

user@hotstname: $ sudo apt-get install ros-kinetic-freenect-launch

Driver para o funcionamento do sensor Kinect, pacote paralelo ao OpenNI, utilizado anteriormente.

user@hotstname: $ sudo apt-get install ros-kinetic-image-view

Esse pacote abre uma janela de vizualização para aplicações com câmeras de diversos tipos.

user@hotstname: $ sudo apt-get install ros-kinetic-depthimage-to-laserscan

Driver para utilizar o sensor de profundidade do Kinect.

user@hotstname: $ sudo apt-get install ros-kinetic-web-video-server

Instalação do pacote ROS para visualizar vídeo na web.

1.3.2 Configurando o ROS_MASTER

user@hotstname: $ export ROS_IP=”0.0.0.0”

Registre o IP do dispositivo no sistema ROS.

user@hotstname: $ export ROS_MASTER_URI=”http://0.0.0.0:11311”

Registrar o IP do dispositivo que ficará como master, no formato descrito.

user@hotstname: $ echo ‘export ROS_IP=”0.0.0.0”’ » ./bashrc

user@hotstname: $ echo ‘export ROS_MASTER_URI=”http://0.0.0.0:11311”’ » ./bashrc

Para salvar os endereços do ROS na base do sistema operacional.

1.3.3 Configurando RP3_Slave

user@hotstname: $ export ROS_IP=”0.0.0.1”

Registre o IP da Raspberry Pi no sistema ROS.

user@hotstname: $ export ROS_MASTER_URI=”http://0.0.0.0:11311”

Registrar o IP do dispositivo que ficará como master, na Raspberry Pi.

user@hotstname: $ echo ‘export ROS_IP=”0.0.0.0”’ » ./bashrc

user@hotstname: $ echo ‘export ROS_MASTER_URI=”http://0.0.0.0:11311”’ » ./bashrc

Para salvar os endereços do ROS na base do sistema operacional do dispositivo escravo.

user@hotstname: $ mkdir -p / kinect_ros_ws / src

Crie um ambiente de trabalho para aplicar os pacotes que farão a transmissão de dados. O “-p” é aplicado para criar diretórios pais à medida que forem necessários.

user@hotstname: $ cd /kinect_ros_ws/src user@hotstname: $ catkin_init_workspace user@hotstname: $ cd /kinect_ros_ws

user@hotstname: $ catkin_make user@hotstname: $ source devel/setup.bash

O ambiente de trabalho será ativado e receberá os aquivos de aplicação para o ROS.

user@hotstname: $ cd src

user@hotstname: $ catkin_create_pkg vidkinect std_msgs rospy roscpp user@hotstname: $ mkdir -p vidkinect / launch

user@hotstname: $ nano vidkinect / launch / vidkinect.launch

Assim será criado o pacote de aplicação ROS com parâmetros de vídeo. O arquivo vidkinect.launch terá que ser salvo com os parâmetros contidos no Anexo B.

Para obter o video da câmera, basta lançar o comando roslaunch vidkinect vidki- nect.launch e iniciar em qualquer browser com o IP do dispositivo escravo, , com o endereço da aplicação, SLAVE_IP:8080. Próximo passo é implementar o sensor de profundidade, criar o pacote no mesmo ambiente de trabalho.

user@hotstname: $ cd /kinect_ros_ws/src

user@hotstname: $ nano vidkinect / launch / laserkinect.launch

Assim será criado o pacote de aplicação ROS com parâmetros do sensor de profundidade. O arquivo laserkinect.launch terá que ser salvo com os parâmetros contidos no Anexo C.

Para realizar testes no processamento de imagens, qualidade do pacote de dados enviados, será utilizado o ambiente Rviz, visualização no ROS, com várias bibliotecas com uma quantidade considerável de tipos de câmeras com tratamento para vários tipos de imagem. Para aplicar os testes nas câmeras do Kinect, seguir as linha de comando abaixo, no ROS_MASTER.

user@hotstname: $ roscore

user@hotstname: $ roslaunch freenect_launch freenect.launch

user@hotstname: $ rviz

Para facilitar a visualização da imagem, segue um script de parâmetros em Anexo D.

user@hotstname: $ roslaunch rtabmap_ros rtabmap.launch rtabmap_args:=--delete_db_on_start"

Inicia o algorítimo SLAM, aplicado no pacote RTAB-MAP, e desabilita alguns arquivos que são irrelevantes.

Para utilizar os parâmetros disponíveis basta salvar o script em um arquivo de texto e salvar com extensão “.rviz”.

1.3.4 Configurando RP3_Slave Remote Access

Exitem várias aplicações de acesso remoto para aplicar no RP3, endereço Internet Protocol (IP), Virtual Network Computing (VNC), SSH File Transfer Protocol (SFTP), File Transfer Protocol (FTP), Web Server, entre outras opções para diferentes necessidades no projeto. Configurar a RP3 para transmitir os dados, o modo utilizado nessa aplicação foi Secure Shell (SSH), para isso temos que ativar o modo SSH na raiz do sistema do RP3.

user@hotstname: $ raspi-config

Acessar a configuração do sistema no RP3 e ativar o modo de transmissão SSH.

Para verificar se o IP escravo está na mesma rede será necessário alguns testes e algumas aplicações de comando no terminal do sistema operacional. Será utilizado um pacote open source de mapeamento de rede, o NMAP, tem serviço para descoberta de rede, auditoria de segurança e monitoramento de tempo de atividade de host ou serviço. Para instalar e direcionar o uso desse pacote no projeto,seguir as instruções abaixo.

user@hotstname: $ sudo apt-get install nmap user@hotstname: $ nmap -sn 0.0.0.0/20

            $ Starting Nmap 6.40 (http:nmap.org ) at 2018-10-23 02:43 GMT-03

            $ Nmap scan report for hpprinter (0.0.0.1)

            $ Host is up (0.00043s latency). (. . . )

            $ Host scan report for raspberrypi (0.0.0.13)

            $ Host is up (0.0152s latency).

            $ Nmap done: 256 IP addresses ( “x” host up) scanned in “y” seconds

user@hotstname: $ ssh [email protected]

Foi instalado o pacete Network Mapper (NMAP) e logo em seguida foi realizada uma varredura para identificar quais dispositivos estão conectados a mesma rede. Encontrado o dispositivo desejado, o Raspberry Pi, será identificado qual o IP iremos logar, é necessário saber qual o usuário e senha do sistema. Assim que for digitado o comando de acesso SSH, será solicitado uma confirmação de conexão e logo após digitar a senha o dispositivo estará conectado remotamente via SSH.

1.3.5 Acesso a Plataforma Jaguar V4 com Raspberry PI como Slave do processo e

MASTER na base do ROS

Para conectar a Raspberry Pi na rede da plataforma Jaguar V4, é necessário configu- rar os dados de conexão de rede sem fio, manualmente. Acessando as propriedades de redes do sistama operacional Ubuntu instalado na Raspberry Pi, configurar o IP com 192.168.0.166, logo em seguida cadastrar a máquina que terá acesso remoto na Raspberry Pi no mesmo range de IP, sem dar conflito com outros sensores e atuadores na rede do robô Jaguar.

user@hotstname: $ export ROS_IP=”192.168.0.166”

Registre o IP da Raspberry Pi no sistema ROS.

user@hotstname: $ export ROS_MASTER_URI=”http://192.168.0.166:11311”

Registrar o IP no dispositivo que ficará como SLAVE da Raspberry Pi.

Logo após da configuração de rede a máquina com acesso remoto deve iniciar o pacote RTAB-MAP e salvar os dados contidos na base do sistema.

user@hotstname: $ roslaunch rtabmap_ros rtabmap.launch rtabmap_args:=--delete_db_on_start"

Inicia o pacote RTAB-MAP com a configuração necessária para o funcionamento com o driver freenect.