Localização e navegação no ROS usando o rtabmap

Boa tarde, queridos leitores. No meu último artigo, falei sobre dois algoritmos SLAM projetados para câmeras de profundidade: rtabmap e RGBD-SLAM. Depois, tentamos apenas construir um mapa da área. Neste artigo, falarei sobre as possibilidades de localização e navegação do robô usando o algoritmo rtabmap. Quem estiver interessado, por favor, sob o gato.

Localização no rtabmap com visualização no rviz


Para começar, se o mestre do ROS não estiver em execução, execute-o:

roscore 

Execute o driver da câmera:

 roslaunch freenect_launch freenect.launch depth_registration:=true 

Execute o rtabmap para criar um mapa com visualização no rviz e excluindo o mapa antigo:

 roslaunch rtabmap_ros rtabmap.launch rtabmap_args:="--delete_db_on_start" rtabmapviz:=false rviz:=true 

Quando o procedimento de construção do mapa é concluído, encerramos o programa usando Ctrl + C para salvar o mapa e reiniciar o rtabmap no modo de localização:

 roslaunch rtabmap_ros rtabmap.launch localization:=true rtabmapviz:=false rviz:=true 

imagem

Para mostrar o mapa no rviz, você precisa clicar na marca de seleção no item Download Map no visor MapCloud:

imagem

imagem

Mova a câmera para o local em que o robô está localizado no mapa em rviz. Depois disso, a transformação entre os sistemas de coordenadas / mapa → / odom será publicada.

imagem

Construção de mapa e navegação usando o rtabmap usando o Turtlebot como exemplo


A criação de mapas e a localização do robô usando o método rtabmap podem ser experimentadas no simulador de robô Turtlebot. O Rtabmap possui pacotes especiais para isso. Para informações adicionais, dou um link para a fonte do material. Primeiro, instale os pacotes necessários:

 sudo apt-get install ros-<ros_version>-turtlebot-bringup ros-<ros_version>-turtlebot-navigation ros-<ros_version>-rtabmap-ros 

Por padrão, o driver OpenNI2 é usado, especificado no arquivo 3dsensor.launch (TURTLEBOT_3D_SENSOR = asus_xtion_pro). Nas minhas experiências, usei a câmera Microsoft Kinect. Vamos instalar o driver para ele na variável TURTLEBOT_3D_SENSOR:

 echo 'export TURTLEBOT_3D_SENSOR=kinect' >> ~/.bashrc source ~/.bashrc 

Agora começaremos a construir o mapa usando pacotes especiais para o simulador Turtlebot em rtabmap_ros:

 roslaunch turtlebot_bringup minimal.launch roslaunch rtabmap_ros demo_turtlebot_mapping.launch args:="--delete_db_on_start" rgbd_odometry:=true roslaunch rtabmap_ros demo_turtlebot_rviz.launch 

Veremos na janela do rviz:



E agora com uma nuvem de pontos da câmera Kinect:

imagem

Você deve ver um mapa bidimensional, um mapa tridimensional e um pouco mais de saída de tópico necessária para a navegação. Além disso, os displays rviz padrão e os adicionais específicos para rtabmap (Mapa Local, Mapa Global, Rtabmap Cloud) são exibidos no painel de exibição à esquerda.

imagem

Vamos mover a câmera no espaço e depois de um tempo veremos:

imagem

Por padrão, o rtabmap usa o mesmo banco de dados toda vez que demo_turtlebot_rviz.launch é executado. Para excluir o mapa antigo e começar a compilar o mapa novamente (desde o início), você pode excluir manualmente o banco de dados salvo no arquivo ~ / .ros / rtabmap.db ou executar demo_turtlebot_rviz.launch com o argumento args: = "- delete_db_on_start".

Execute a construção do mapa sem excluir o banco de dados:

 roslaunch rtabmap_ros demo_turtlebot_mapping.launch 

Após a construção do mapa, o resultado será mais ou menos assim:

imagem

Localização com Turtlebot


Agora, temos um mapa que é salvo no banco de dados no arquivo ~ / .ros / rtabmap.db. Reinicie demo_turtlebot_mapping.launch no modo de localização com localização: = true:

 roslaunch rtabmap_ros demo_turtlebot_mapping.launch rgbd_odometry:=true localization:=true 

Veremos a seguinte imagem:

imagem

Mova o Kinect para o lado. O robô determinará sua nova localização assim que detectar um loop (fechamento do loop):

imagem

A detecção de loop bem-sucedida levará tempo, portanto, seja paciente.
Funciona bem rápido:



Navegação autônoma com Turtlebot


Agora que o mapa foi criado, você pode tentar a navegação offline em um mapa conhecido usando a pilha de Navegação. Para isso, basta indicar para o robô o alvo atual no mapa em rviz, em qual direção o robô deve se mover no modo offline. Todo o resto será tratado pela pilha de Navegação. Para começar, basta clicar no botão Meta de navegação 2D no rviz

imagem

e indique a meta clicando em um local arbitrário no mapa

imagem

Inclua a exibição Pose selecionando o tópico “/ move_base / current_goal” e a exibição Path selecionando o tópico “/ move_base / NavfnROS / plan”. Você deve ver o caminho planejado (linha verde no mapa) e o alvo definido, indicado por uma seta vermelha:

imagem

O pacote move_base é responsável por controlar o robô em direção ao alvo. Ele publicará comandos de movimento como geometry_msgs / Twist no tópico / mobile_base / command / velocity:

 rostopic echo /mobile_base/commands/velocity 

Informações adicionais sobre como trabalhar com a pilha de Navegação podem ser encontradas no tutorial na página oficial turtlebot_navigation. Há também um tutorial para usar o rtabmap em seu próprio robô.

Dessa forma, desta vez, conseguimos localizar o robô em um mapa construído previamente e aprendemos como definir uma meta para o robô, para que ele pudesse se mover em direção a ele offline. Desejo-lhe boa sorte nos experimentos e até breve!

Source: https://habr.com/ru/post/pt406615/


All Articles