Índice:

RGB-D SLAM com Kinect no Raspberry Pi 4 [Buster] ROS Melódico: 6 etapas
RGB-D SLAM com Kinect no Raspberry Pi 4 [Buster] ROS Melódico: 6 etapas

Vídeo: RGB-D SLAM com Kinect no Raspberry Pi 4 [Buster] ROS Melódico: 6 etapas

Vídeo: RGB-D SLAM com Kinect no Raspberry Pi 4 [Buster] ROS Melódico: 6 etapas
Vídeo: RGB-D SLAM With Kinect on Raspberry Pi 4 ROS Melodic 2024, Novembro
Anonim
Image
Image

No ano passado, escrevi um artigo sobre como construir e instalar o ROS Melodic no novo (naquela época) Raspberry Pi com Debian Buster OS. O artigo tem recebido muita atenção tanto aqui no Instructables quanto em outras plataformas. Estou muito feliz por ter ajudado tantas pessoas a instalar com êxito o ROS no Raspberry Pi. No vídeo que acompanha, também demonstrei brevemente como obter imagens de profundidade do Kinect 360. Mais tarde, várias pessoas me contataram no LinkedIn e me perguntaram como eu consegui usar o Kinect com Raspberry Pi. Fiquei meio surpreso com a pergunta, já que o processo de preparação do Kinect naquela época demorava cerca de 3 a 4 horas e não parecia extremamente complicado. Eu compartilhei meus arquivos.bash_history com todas as pessoas me perguntando sobre o problema e em abril finalmente encontrei tempo para escrever um artigo sobre como instalar drivers do Kinect e executar RGB-D SLAM com RTAB-MAP ROS. Semana de noites sem dormir depois de começar a escrever o artigo, agora entendo por que tantas pessoas me fizeram essa pergunta:)

Vou começar com uma breve explicação sobre quais abordagens funcionaram e quais não funcionaram. Em seguida, explicarei como instalar os drivers do Kinect para uso com ROS Melodic e, finalmente, como configurar sua máquina para RGB-D SLAM com RTAB-MAP ROS.

Etapa 1: O que funcionou e o que não funcionou

Existem alguns drivers disponíveis para Kinect no Raspberry Pi - dois deles são suportados pelo ROS.

Drivers OpenNI - pacote openni_camera para ROS

drivers libfreenect - pacote freenect_stack para ROS

Se você olhar seus respectivos repositórios GitHub, poderá descobrir que o driver OpenNI foi atualizado pela última vez há anos e, na prática, é EOL há muito tempo. ibfreekinect, por outro lado, está sendo atualizado em tempo hábil. O mesmo para seus respectivos pacotes ROS, freenect_stack foi lançado para ROS melódico, enquanto a última distro openni_camera listou suporte para é Fuerte…

É possível compilar e instalar o driver OpenNI e o pacote openni_camera no Raspberry Pi para ROS Melodic, embora não tenha funcionado para mim. Para fazer isso, siga este guia, as etapas 1, 2, 3, nas etapas 2 e 3, remova o sinalizador "-mfloat-abi = softfp" do arquivo Platform / Linux / Build / Common / Platform. ARM (por conselho sobre este Problema do Github). Em seguida, clone o pacote openni_camera em seu espaço de trabalho catkin e compile com catkin_make. Não funcionou para mim, o erro foi a falha na criação do gerador de profundidade. Motivo: a interface USB não é compatível!

Usar libfreenect e freenect_stack rendeu sucesso no final, mas havia alguns problemas para resolver e a solução era um pouco hacky, embora funcionando muito estável (1 hora + operação contínua).

Etapa 2: Instalação de drivers Freenect e Freenect_stack

Instalação de drivers Freenect e Freenect_stack
Instalação de drivers Freenect e Freenect_stack

Presumo que você use minha imagem ROS Melodic Desktop deste artigo. Se você deseja fazer a instalação em um ambiente diferente, por exemplo ros_comm image ou no Ubuntu para Raspberry Pi, certifique-se de ter conhecimento suficiente sobre ROS para resolver problemas que possam surgir dessa diferença.

Vamos começar compilando os drivers libfreenect a partir do código-fonte, já que a versão pré-compilada do repositório apt-get está muito desatualizada.

sudo apt-get update

sudo apt-get install libusb-1.0-0-dev

git clone

cd libfreenect

mkdir build && cd build

cmake -L..

faço

sudo make install

Esperançosamente, o processo de construção será sem intercorrências e cheio de mensagens ecológicas. Depois de instalar o driver libfreenect, a próxima coisa a fazer é instalar o pacote freenect_stack para ROS. Existem alguns outros pacotes dos quais depende, teremos que cloná-los e construir com catkin_make todos juntos. Antes de começar, certifique-se de que seu espaço de trabalho do catkin esteja configurado e fornecido corretamente!

Na pasta src do espaço de trabalho catkin:

git clone

git clone

git clone

git clone

git clone

git clone

Uau, isso foi muita clonagem.

EDIÇÃO MAIS TARDE: Como foi apontado por um dos meus leitores, o repositório vision_opencv precisa ser definido como ramo melódico. Para esse cd para src / vision_opencv e execute

git checkout melódico

Em seguida, volte para a pasta do espaço de trabalho do catkin. Para verificar se temos dependências para todos os pacotes no local, execute este comando:

instalação do rosdep --from-path src --ignore-src

Se você clonou com sucesso todos os pacotes necessários, ele solicitará o download do libfreekinect com apt-get. Responda não, uma vez que já o instalamos a partir do código-fonte.

sudo apt-get install libbullet-dev libharfbuzz-dev libgtk2.0-dev libgtk-3-dev

catkin_make -j2

Hora do chá;) ou qualquer que seja sua bebida favorita.

Após a conclusão do processo de compilação, você pode tentar iniciar a pilha do kinect e verificar se ela produz a profundidade e as imagens coloridas de maneira adequada. Eu uso o Raspberry Pi sem cabeça, então preciso executar o RVIZ no meu computador desktop.

No Raspberry Pi, faça (altere o endereço IP para o endereço IP do seu Raspberry Pi!):

exportar ROS_MASTER_URI = https://192.168.0.108: 11311

export ROS_IP = 192.168.0.108

roslaunch freenect_launch freenect.launch depth_registration: = true

Você verá a saída como na captura de tela 1. "Parando o dispositivo RGB e a descarga de fluxo de profundidade." indica que o Kinect está pronto, mas nada está inscrito em seus tópicos ainda.

Em seu computador desktop com ROS Melodic instalado, faça:

exportar ROS_MASTER_URI = https://192.168.0.108: 11311

export ROS_IP = [your-desktop-computer-ip] rviz

Agora você deve ser capaz de ver os streams de imagem RGB e Depth no RVIZ como na captura de tela 2 acima … mas não ao mesmo tempo.

Ok, aqui é onde as coisas hacky começam. Passei 3 dias tentando diferentes drivers e abordagens e nada funcionou - assim que tentasse acessar dois streams simultaneamente, o Kinect começava a expirar, como você pode ver na imagem 3. Tentei de tudo: melhor fonte de alimentação, commits mais antigos de libfreenect e freenect_stack, parando usb_autosuspend, injetando água sanitária nas portas USB (ok, não o último! não faça isso, é uma piada e não deve constituir um conselho técnico:)). Então, em um dos problemas do Github, vi o relato de uma pessoa que disse que seu Kinect era instável, até que "carregou o barramento USB" conectando um dongle WiFi. Eu tentei isto, e funcionou. Por um lado, estou feliz que funcionou. Por outro lado, alguém realmente deve consertar isso. Bem, enquanto isso (meio que) corrigimos isso, vamos passar para a próxima etapa.

Etapa 3: Instalação do RTAB MAP independente

Instalando o RTAB MAP autônomo
Instalando o RTAB MAP autônomo

Primeiro, temos um monte de dependências a serem instaladas:

Apesar de haver um pacote armhf pré-construído disponível para PCL, precisaremos compilá-lo a partir do código-fonte devido a esse problema. Consulte o repositório GitHub PCL para ver como compilá-lo a partir do código-fonte.

sudo apt-get install libvtk6-dev libvtk6-qt-dev libvtk6-java libvtk6-jni

sudo apt-get install libopencv-dev cmake libopenni2-dev libsqlite3-dev

Agora vamos clonar o repositório git do pacote independente rtab map para nossa pasta pessoal e compilá-lo. Usei a versão mais recente (0.18.0).

git clone

cd rtabmap / build

cmake..

make -j2

sudo make install

sudo ldconfig rtabmap

Agora, quando compilamos o RTAB MAP autônomo, podemos passar para a última etapa - compilar e instalar o wrapper ROS para RTAB MAP, rtabmap_ros.

Etapa 4: Instalando Rtabmap_ros

Instalando Rtabmap_ros
Instalando Rtabmap_ros

Se você chegou até aqui, provavelmente já sabe o que fazer:) Clone o repositório rtabmap_ros para a pasta src do espaço de trabalho catkin. (Execute o próximo comando de sua pasta src do espaço de trabalho catkin!)

git clone

Precisaremos desses pacotes ROS também, dos quais rtabmap_ros depende:

git clone

git clone

git clone

git clone

git clone

Antes de iniciar a compilação, você pode se certificar de que não está perdendo nenhuma dependência com o seguinte comando:

instalação do rosdep --from-path src --ignore-src

Instale mais dependências do ap-get (elas não interromperão a vinculação, mas irão gerar um erro durante a compilação)

sudo apt-get install libsdl-image1.2-dev

Em seguida, vá para a pasta do espaço de trabalho catkin e comece a compilar:

CD..

catkin_make -j2

Espero que você não tenha colocado sua bebida favorita da compilação em nenhum lugar muito longe. Depois que a compilação terminar, estamos prontos para fazer o mapeamento!

Etapa 5: Mostrar hora

Altura de começar
Altura de começar
Altura de começar
Altura de começar

Faça aquele truque hacky ao adicionar algo como WiFi ou dongle Bluetooth a uma porta USB - eu estava usando 2 portas USB 2.0, uma para Kinect e outra para dongle WiFi.

No Raspberry Pi, faça (mude o endereço IP para o endereço IP do seu Raspberry Pi!): 1º terminal:

exportar ROS_MASTER_URI = https://192.168.0.108: 11311

export ROS_IP = 192.168.0.108

roslaunch freenect_launch freenect.launch depth_registration: = true data_skip: = 2

2º terminal:

roslaunch rtabmap_ros rgbd_mapping.launch rtabmap_args: = - delete_db_on_start --Vis / MaxFeatures 500 --Mem / ImagePreDecimation 2 --Mem / ImagePostDecimation 2 --Kp / DetectorStrategy 6 --OdomF2M / MaxSizev 1000 --Odomiz / ImageDecimation 2 -: = falso

Você verá a saída como na captura de tela 1. "Parando o dispositivo RGB e a descarga de fluxo de profundidade." indica que o Kinect está pronto, mas nada está inscrito em seus tópicos ainda. No segundo terminal, você deve ver mensagens sobre a qualidade do odom. Se você mover o Kinect muito rápido, a qualidade odom irá para 0 e você precisará mover para um local anterior ou iniciar do banco de dados limpo.

Em seu computador desktop com o pacote ROS Melodic e rtab_map instalado (eu recomendo que você use o computador Ubuntu para isso, já que os pacotes pré-construídos estão disponíveis para a arquitetura amd64), faça:

exportar ROS_MASTER_URI = https://192.168.0.108: 11311

exportar ROS_IP = [seu-computador-desktop-ip]

rviz

Adicione os visores MapGraph e MapCloud ao rviz e escolha os tópicos correspondentes vindos de rtab_map. Bem, é isso, doce sabor da vitória! Vá em frente e faça um mapeamento:)

Etapa 6: Referências

Enquanto escrevia este artigo, consultei vários recursos, principalmente fóruns e questões do GitHub. Vou deixá-los aqui.

github.com/OpenKinect/libfreenect/issues/338

www.reddit.com/r/robotics/comments/8d37gy/ros_with_raspberry_pi_and_xbox_360_kinect_question/

github.com/ros-drivers/freenect_stack/issues/48

official-rtab-map-forum.67519.x6.nabble.com/RGB-D-SLAM-example-on-ROS-and-Raspberry-Pi-3-td1250.html

github.com/OpenKinect/libfreenect/issues/524

Adicione-me no LinkedIn se tiver alguma dúvida e inscreva-se no meu canal no YouTube para ser notificado sobre projetos mais interessantes envolvendo aprendizado de máquina e robótica.

Recomendado: