Notas de estudio de ROS (7): Navegación

Directorio

8 Navegación

8.1 Marco de trabajo de navegación

8.2 base_movimiento

8.3 Mapa de costos

8.4 map_server

8.5 Posicionamiento de AMCL


8 Navegación

La navegación es una de las funciones más básicas de los robots. ROS nos proporciona un conjunto completo de soluciones de navegación, incluida la planificación de rutas global y local, mapas de costos, recuperación de comportamiento anormal y servidores de mapas. Esta función se coloca en el metapaquete ROS de la pila de navegación, que contiene paquetes para la planificación de rutas, posicionamiento, mapas y recuperación de comportamiento anormal.

Nombre del paquete

Función

amcl

Posicionamiento

fake_localization

Posicionamiento

servidor_mapa

Proporcionar un mapa

move_base

Nodo de planificación de ruta

nav_core

Clases de interfaz para la planificación de rutas, incluidas base_local_planner,

tres interfaces base_global_planner y recovery_behavior

base_local_planner

Implementé dos algoritmos de planificación local, Despliegue de trayectoria y DWA

dwa_local_planner

Algoritmo de planificación local DWA reimplementado

loro_planner

Implementado un algoritmo de planificación global más simple

navfn

Implementación de algoritmos de planificación global Dijkstra y A *

global_planner

Reimplementado algoritmos de planificación global Dijkstra y A *

clear_costmap_recovery

Darse cuenta del comportamiento de recuperación de borrar el mapa de costos

rotate_recovery

Se da cuenta del comportamiento de recuperación de la rotación.

move_slow_and_clear

Logra un comportamiento de recuperación lento

costmap_2d

Mapa de costos bidimensional

voxel_grid

Cuadrado pequeño tridimensional

robot_pose_ekf

Kalman filtrado de pose de robot

 

8.1 Marco de trabajo de navegación

Ingrese:

  • / tf: el tf proporcionado por el feed incluye map_frame, odom_frame, base_frame y un árbol tf completo entre cada junta del robot.
  • / odom: información del odómetro
  • / scan o / pointcloud: la información de entrada del sensor, la más utilizada es el radar láser (sensor_msgs / tipo LaserScan), y también tiene datos de nube de puntos (sensor_msgs / PointCloud).
  • / map: el programa SLAM puede proporcionar el mapa o el map_server puede especificar un mapa conocido.

     Los cuatro temas anteriores se deben proporcionar continuamente al sistema de navegación. El siguiente es un tema que se puede publicar en cualquier momento:

  • move_base_simple / goal: ubicación del punto objetivo.

Salida:

  • / cmd_vel: geometry_msgs / Twist type, la información de velocidad planificada para cada momento. El formato es el siguiente:

geometry_msgs / Vector3 linear

  float64 x

  float64 y

  float64 con

geometry_msgs / Vector3 angular

  float64 x

  float64 y

  float64 con

Servicio proporcionado por move_base :

  • make_plan: tipo nav_msgs / GetPlan, la solicitud es un punto objetivo y la respuesta es una trayectoria planificada, pero la trayectoria no se ejecuta.
  • clear_unknown_space: std_srvs / Tipo vacío, que permite a los usuarios borrar el mapa de áreas desconocidas.
  • clear_costmaps: std_srvs / Tipo vacío, lo que permite a los usuarios eliminar obstáculos en el mapa de costos.

8.2 base_movimiento

move_base es el nodo central en Navigation, está en una posición dominante en la tarea de navegación, y algunos otros paquetes son sus complementos.

Para ejecutar move_base, debe elegir un complemento que incluya tres complementos: base_local_planner, base_global_planner y recovery_behavior, estos tres complementos deben especificarse; de ​​lo contrario, el sistema especificará el valor predeterminado. La navegación nos proporciona muchos complementos candidatos, que se pueden seleccionar al configurar move_base.

complemento base_local_planner:

  • base_local_planner: implementa dos algoritmos de planificación local, Despliegue de trayectoria y DWA
  • dwa_local_planner: Se implementó el algoritmo de planificación local DWA, que puede verse como una versión mejorada de base_local_planner

complemento base_global_planner:

  • parrot_planner: implementa un algoritmo de planificación global más simple
  • navfn: implementado algoritmos de planificación global Dijkstra y A *
  • global_planner: algoritmos de planificación global Dijkstra y A * reimplementados, que pueden verse como una versión mejorada de navfn

Complemento recovery_behavior:

  • clear_costmap_recovery: implementa el comportamiento de recuperación de borrar el mapa de costos
  • rotate_recovery: implementa el comportamiento de recuperación de la rotación
  • move_slow_and_clear: se logra un comportamiento de recuperación lento

complemento de mapa de costos:

      El complemento se ha seleccionado de forma predeterminada. El valor predeterminado es costmap_2d, que no se puede cambiar.

El complemento se puede seleccionar en la configuración de parámetros de move_base. Debido a que hay demasiados parámetros para configurar, la configuración generalmente se escribe en un archivo yaml. Utilizamos param / move_base_params.yaml para guardar los parámetros anteriores.

8.3 Mapa de costos

El mapa en ROS es el tema / mapa. También es una imagen. Un píxel representa el área real, y el valor gris se usa para indicar la posibilidad de obstáculos. Sin embargo, en las tareas de navegación reales, no es suficiente tener un mapa. El robot debe poder agregar dinámicamente obstáculos, o eliminar obstáculos que ya no existen, y algunas veces marcar áreas peligrosas en el mapa para planificar la ruta. Proporcionar más información útil.

Debido a la necesidad de navegación, aparece un mapa de costos. El mapa de costos puede entenderse como la adición de varios mapas en la parte superior de / map, que no solo contiene la información del mapa original, sino que también agrega otra información auxiliar.

El mapa de costos tiene las siguientes características:

1) En primer lugar, hay dos mapas de costos, uno es local_costmap y otro es global_costmap, que se utilizan para el planificador de ruta local y el planificador de ruta global, respectivamente, y estos dos mapas de costos son predeterminados y solo pueden seleccionar costmap_2d como complemento.

2. Ya sea local_costmap o global_costmap, puede configurar su Capa, puede elegir múltiples niveles.  

      La capa de mapa de costos incluye lo siguiente:

  • Capa de mapa estático: capa de mapa estático, generalmente un mapa estático creado por SLAM.
  • Capa de mapa de obstáculos: capa de mapa de obstáculos, utilizada para registrar dinámicamente la información de obstáculos detectada por el sensor.
  • Capa de inflación: capa de inflación, inflar (expandir hacia afuera) en las dos capas de mapa anteriores para evitar la capa externa del robot
  • El proyectil chocará con un obstáculo.
  • Otras capas: también puede implementar el mapa de costos usted mismo en forma de complementos. Actualmente, Social Costmap
  • Complementos de código abierto como Capa y Capa de sensor de rango.

      Puede seleccionar múltiples capas para coexistir al mismo tiempo.

La configuración del mapa de costos también se guarda con yaml. Dado que el mapa de costos generalmente se divide en mapas de costas locales y globales, estamos acostumbrados a separar los dos mapas de costos.

8.4 map_server

En un escenario fijo, ya conocemos el mapa (ya sea mediante SLAM o medición), de modo que el robot pueda cargar mejor el mapa conocido directamente cada vez que se inicia, en lugar de reconstruirlo cada vez que se enciende. En este caso, debe tener un nodo para publicar / asignar para proporcionar información de la escena. map_server es un paquete de funciones de este tipo, que puede publicar mapas conocidos para la navegación y otras funciones, y también puede guardar los mapas creados por SLAM.

Para hacer que map_server publique / map, debe ingresar dos archivos:

  • Archivos de mapas, generalmente en formato pgm;
  • Archivo de descripción del mapa, generalmente en formato yaml

Con los dos archivos anteriores, puede cargar este mapa a través de instrucciones, los comandos relacionados con map_server son los siguientes:

  • rosrun map_server map_server Software_Museum.yaml carga un mapa personalizado
  • rosrun map_server map_saver -f mymap guarda el mapa actual como mymap.pgn y mymap.yaml

map_server proporcionará los siguientes temas y servicios:

  • Tema
  • / map_metadata: publicar información de descripción del mapa
  • / map: publica el mensaje de mapa bloqueado
  • Servicio
  • static_map: se utiliza para solicitar y responder al mapa estático actual.

Param: map_server tiene un parámetro que debe establecerse, que es el marco para publicar el mapa.

~ frame_id: tipo de cadena, el valor predeterminado es map. A qué marco en el tf para unir el mapa publicado suele ser el mapa.

8.5 Posicionamiento de AMCL

Adaptive Mentcarto Localization (AMCL): el posicionamiento adaptativo de Monte Carlo es un algoritmo de posicionamiento muy utilizado, que localiza mediante la comparación de obstáculos detectados con mapas conocidos.

La arquitectura de comunicación en AMCL es la siguiente:

Al igual que el marco SLAM anterior, la principal diferencia es que / map se usa como entrada, no como salida, porque el algoritmo AMCL solo es responsable del posicionamiento, independientemente de la construcción de mapas.

31 artículos originales publicados · Me gusta 3 · Visitas 2028

Supongo que te gusta

Origin blog.csdn.net/lclfans1983/article/details/105399759
Recomendado
Clasificación