Relatórios do segundo Meetup do ROS sobre navegação por robôs


Em 30 de novembro de 2019, foi realizado o 2º ROS Russian MeetUp, organizado pelo Laboratório de Robótica Sberbank, que reuniu mais de 200 desenvolvedores de ROS. Neste artigo, fizemos uma seleção das apresentações mais interessantes deste MeetUp sobre navegação por robôs.

Em breve, em 18 de abril, o próximo ROS MeetUp será realizado, ainda mais ambicioso e interessante! O coronavírus não permite que nos encontremos pessoalmente, mas nada nos impede de nos reunir para uma conferência on-line! Convidamos todos os colegas a participar on-line como ouvintes e palestrantes. Os detalhes da transmissão serão enviados aos participantes registrados, a inscrição está aberta, link aqui , a participação é gratuita. Lembramos que você pode encontrar desenvolvedores de ROS com ideias semelhantes na Rússia, descobrir as últimas notícias de ROS em nossa comunidade de ROS Rússia no canal de telegrama . publicamos o anúncio completo do programa e parte dos relatórios do passado MeetUp e hoje compartilharemos mais três relatórios interessantes.

Então vamos!

“Localização do robô usando marcadores ARUCO”


Autor do relatório: Alexey Budyakov



Slides da apresentação

Este relatório examina detalhadamente um dos componentes importantes do subsistema de navegação - localização por marcadores.

A introdução destaca os princípios e conceitos básicos dos métodos de visão computacional que permitem aos robôs móveis navegar por marcadores fiduciários: imagens especiais projetadas para serem reconhecidas como pontos de referência. Eles geralmente têm alto contraste por conta própria e contra qualquer possível fundo, otimizados para reconhecimento ao digitalizar em ângulo e com pouca luz. Como marcadores, você pode usar logotipos primitivos (por exemplo, "damas" a bordo da aeronave), sistemas de codificação de dados prontos (DataMatrix, QR); no entanto, na robótica, são utilizados sistemas de marcadores especialmente desenvolvidos, na maioria das vezes na forma de imagens em preto e branco. Um deles é o ArUco, que permite criar marcadores de pixel com vários valores de granularidade (de 4 * 4 a 7 * 7) e, diferentemente do código QR,O reconhecimento, que leva várias dezenas de milissegundos, permite encontrar e detectar um marcador com custos computacionais mínimos. O relatório examinou a maneira de detectar um marcador em uma imagem para calcular a posição de um robô em relação a um marcador e considerou as vantagens de usar o módulo de reconhecimento de marcador ArUcoaruco_marker , parte da popular biblioteca OpenCV de métodos de visão computacional. Tentamos criar o relatório de forma que ele desse uma compreensão geral do processo de navegação de marcadores sem aprofundar a matemática, além de links para métodos de bibliotecas populares que implementam um ou outro método usado na navegação.

“Visão geral do planejador de estradas programadas com banda elástica”


Autor do relatório: Ivan Kornev



Slides da apresentação

O objetivo do relatório não era apenas informar sobre o princípio do agendador local TimedElasticBand, mas também compará-lo com outro agendador ROS popular - DynamicWindowApproach, pois faz parte da pilha de navegação MoveBase e é definido como agendador padrão na pilha de navegação do turtlebot3. É com esse planejador que os novatos, em regra, ficam sabendo primeiro.

Conteúdo do relatório:

  1. Uma breve visão geral da pilha de navegação do MoveBase, explicando como funciona. Será útil para quem ainda não teve relações com este pacote, mas deseja entendê-lo ou entender qual o papel que o agendador local desempenha nele.
  2. Dynamic Window Approach ( — DWA). DWA, . . , , . , . , DWA ROS , . - .
  3. TimedElasticBand ( — TEB). . :

    — , ( )
    — , ( , 0 255, , ROS Costmap) 255 ( 255 ) . , , . , , . . TEB , .
  4. . DWA TEB , ROS Wiki.


“Eurobot: ”


: ,



Slides da apresentação Os

vice-campeões da Rússia, a equipe setUp , apoiada pelo Laboratório de Robótica Sberbank, falam sobre seu próprio sistema de navegação. O processo de desenvolvimento é descrito em um grande artigo .

“Os robôs viajam em um campo plano e a maioria dos obstáculos é conhecida com antecedência, no entanto, oponentes insidiosos podem tentar roubar recursos (e às vezes queremos comer algumas dúzias de pontos extras), enquanto queremos chegar ao ponto desejado o mais rápido possível, sem bater nos obstáculos. De uma câmera externa em campo, obtemos dados sobre a posição do inimigo e sabemos onde ele está agora. No entanto, não basta conhecer sua posição - é preciso poder usar essas informações.

Hoje, tentaremos dirigir do ponto A ao ponto B sem precisar seguir a cauda de um gato que adormeceu no chão. Em particular, explicaremos como construímos uma rota e controlamos a velocidade do robô, além de como executar tudo em nosso computador. ”

imagem

Tentando sobreviver com um pouco de sangue


Ao resolver esse problema, você pode pegar um material pronto, escrito por profissionais, para que não haja tormento e invenção da próxima “bicicleta”. Usamos uma plataforma omni-wheel, portanto, embora tenha havido uma tentativa de usar uma plaina local pronta da ROS, por várias razões, achamos isso pouco promissor.

Das vantagens da pilha padrão, é possível destacar a disponibilidade da documentação e a capacidade de encontrar informações nos fóruns. Você pode ler mais no site oficial com a documentação .

É importante mencionar que os pacotes ROS são mais frequentemente testados em plataformas de duas rodas. Otimizamos a montagem do sistema para omnicholes (um robô chamado holonômico: a qualquer momento ele pode se mover em qualquer direção) aumentando o ângulo de rotação disponível ao se mover até 360 graus. Pareceu-nos que este era um truque sujo, mas outras opções não eram universais. O planejador padrão acabou sendo muito pesado e tinha muitos parâmetros dos quais nunca precisaríamos

Planejador global


A primeira coisa que decidimos refinar dos pacotes de navegação foi criar nosso __global planner__ com base no algoritmo theta *. Em resumo, este é um A * modificado . Como sempre, um mapa conhecido é dividido em uma grade de elementos (nós) de maneira raster; o agendador pesquisa constantemente o nó pai, que pode ser acessado diretamente, ou seja, no caminho para o qual não há obstáculos. Isso permite criar caminhos convenientes e suavizá-los. Além disso, eles são transferidos para o planejador local.

imagem
Comparação de A * e teta *

Planejador local


O planejador local trabalha pelo método de descida gradiente em um campo potencial. O caminho do planejador global é usado como entrada . Além disso, no planejador local, existem serviços internos para escolher o modo de construção do caminho. Dois modos de operação estão disponíveis: o modo de pontos de deslocamento ao longo do gradiente, usando várias passagens no mapa, bem como o modo de deslocamento, no qual o incremento é calculado diretamente em duas coordenadas, e o ponto se move para a borda da zona segura.

Como resultado, decidimos usar a descida do gradiente em um campo potencial com base no caminho do planejador global'e. Acabou sendo um algoritmo leve e relativamente simples que nos satisfez completamente com a qualidade do caminho recebido, o tempo de trabalho e a quantidade de RAM consumida (na região de 100-150 mb), que é várias vezes menor do que o obtido nas primeiras iterações de desenvolvimento com pacotes padrão.

imagem
Exemplo de deslocamento do caminho do planejador local

Regulador de trajectória


O último, mas não menos importante, elemento da pilha de navegação é o regulador de trajetória . Ele é responsável por converter o caminho do planejador local para o caminho e fornece os valores instantâneos de velocidade para a etapa atual. A primeira iteração no caminho para a nova “trajetória” foi o algoritmo para substituir o vetor para o qual o robô está se movendo. Foi atribuído como a soma de vetores para os próximos três nós com diferentes coeficientes. A segunda iteração foi escrever o filtro empurrão mínima, através da construção de um polinómio de grau a 5, onde os x e y coordenadas dependem do tempo de chegada para cada ponto.

imagem
A figura mostra um gráfico de uma das coordenadas versus o tempo, bem como a velocidade ao longo dessa coordenada

Se você estiver interessado em desenvolver robôs, módulos robóticos ou componentes de software, se quiser mostrar seus desenvolvimentos ou apenas conversar com pessoas afins, seja bem-vindo ao nosso próximo ROS Meetup on-line, em 18 de abril !

Autores do artigo: Albert Efimov, Alexey Burkov, Alexander Bogoslovsky, Oleg Urzhumtsev

All Articles