Simulación de robot ROS (6): navegación, planificación de rutas y SLAM
El establecimiento en tiempo real de mapas ambientales y el posicionamiento se basa en un costoso lidar, pero ahora existen herramientas alternativas que pueden simular el efecto del lidar, que se considera falso.
Las herramientas alternativas son las cámaras Microsoft Kinect y Asus Xtion. Puede ver el contenido de los paquetes Depthimage_to_laserscan y kinect_2d_scanner.
Este capítulo utiliza principalmente el contenido de tres paquetes para desarrollar el diseño de navegación:
move_base usa el mensaje MoveBaseActionGoal. Eche un vistazo a la definición del mensaje:
<. p> rosmsg show MoveBaseActionGoalSe mostrará la siguiente información:
Esto parece un poco complicado, usaremos algo más simple para especificar el objetivo a continuación.
Es necesario configurar cuatro archivos antes de ejecutar move_base. Estos archivos definen los obstáculos, el radio del robot, hasta dónde se debe planificar el camino, qué tan rápido puede correr el robot, etc.
Estos cuatro archivos de configuración se pueden encontrar en la carpeta de configuración:
El nodo base de movimiento requiere un mapa de entorno para ejecutarse, pero también es posible utilizar un mapa vacío. Usaremos mapas reales más adelante. El paquete rbx1_nav contiene un mapa vacío llamado Blank_map.pgm, que se encuentra en el subdirectorio de mapas. El archivo de descripción se llama Blank_map.yaml. El archivo de inicio que inicia el nodo move_base y el mapa vacío se llama fake_move_base_blank_map.launch, que se encuentra en el subdirectorio de inicio.
Ahora veamos el archivo de inicio.
Primero, el nodo mao_server se inicia en un mapa en blanco. El archivo de descripción del mapa es el archivo .yaml.
Luego se carga el archivo fake_move_base.launch, que inicia el nodo move_base. y carga los parámetros necesarios.
Finalmente, debido a que usamos un mapa en blanco y nuestro robot simulado no tiene sensores, el robot no puede usar los datos de escaneo para el posicionamiento. Configuramos el marco de alcance del robot y el marco del mapa, o las coordenadas. sistema, haga una correspondencia estática simple, en otras palabras, suponga que el codificador del robot puede obtener datos ideales.
Entonces echemos un vistazo al archivo fake_move_base.launch:
Este inicio archivo Ejecute el nodo move_base y cinco rosparams para importar parámetros. Costmap_common_params.yaml se importa dos veces para configurar estos parámetros tanto en el espacio de nombres global_costmap como en el espacio de nombres local_costmap. Utilice el siguiente ns para especificar.
Estar en Para probar. en simulación, primero inicie el emulador ArbotiX:
Puede cambiarlo a otro robot.
Luego inicie el nodo move_base en el mapa en blanco:
Si Si aún no ha ejecutado RViz, puede iniciarlo usando el archivo de parámetros configurado:
Ahora estamos listos para usar move_base para controlar el robot en lugar de simplemente usar mensajes Twist
<. p> Para probar ahora. Primero dejamos que el robot avance 1 metro. Ahora nuestro robot está ubicado en (0,0,0) en el sistema de coordenadas /map y el sistema de coordenadas /base_link. Podemos usar cualquier sistema de coordenadas para especificar esto. movimiento.Sin embargo, el primer movimiento no permite que el robot alcance la posición exacta, y los errores posteriores deben ser comparados y eliminados por el sistema de coordenadas /base_link. Por lo tanto, será mejor que establezcamos el objetivo en /. map. El comando es el siguiente:
Para mover el robot de regreso al origen, simplemente detenga el comando anterior e ingrese las coordenadas de origen en el mismo formato, así:
Puede ver una delgada línea verde, es decir, en la planificación de ruta global, también puede ver una línea roja, que es la planificación de ruta local actualizada en tiempo real. Si desea ver estas dos líneas con mayor claridad, puede desactivar la odometría. , Objetivo en RViz
Pose y Mouse Pose, y luego vuelva a ejecutar el comando anterior
El camino verde es relativamente plano porque no hay obstáculos en el medio. también está relacionado con algunas de nuestras configuraciones de parámetros, por ejemplo, pdist_scale (0.4) y gdist_scale (0.8), y la velocidad lineal máxima (max_vel_x). Nuestra ruta local es muy diferente de nuestra ruta global planificada. más cerca de nuestra ruta planificada global, podemos usar rqt_reconfigure para aumentar el parámetro pdist_scale o reducir max_vel_x.
Abra una nueva ventana e inicie rqt_reconfigure:
Luego, abra move_base->TrajectoryPlannerROS, configure pdist_scale más grande, como 0,8, y luego establezca gdist_scale en un valor más pequeño, como 0,4. Luego vuelva a ejecutar el comando de movimiento para ver qué cambios ocurren.
Parece ser mucho mejor
>
Acabamos de iniciar RViz usando el archivo nav.rviz, de modo que podemos hacer clic directamente en el Objetivo de navegación 2D para especificar el objetivo en el mapa. No lo suelte al hacer clic, puede girar para cambiar la dirección. establezca el objetivo.
Podemos ver la información de configuración en la ventana de RViz:
Será mejor que comencemos de nuevo, cerremos todos los nodos anteriores y luego:
Luego ejecuta el comando:
Hay muchos comentarios en el programa, puedes abrirlo y echar un vistazo
Lo más poderoso de move_base es que puede evitar obstáculos mientras. Al alcanzar la posición especificada, la planificación de ruta local recalculará la ruta.
Abriremos un mapa con obstáculos y luego seguiremos usando move_base_square.py para ejecutar el robot y ver si puede evitar los obstáculos y alcanzarlos. el objetivo.
Primero abre el mapa:
Luego limpia los recursos del nodo move_base:
Este comando limpiará todos los parámetros que tiene move_base su grado de limpieza es superado solo por reiniciar roscore.
Luego ejecuta para cargar el mapa y move_base:
Luego ejecuta RViz:
La parte amarilla es. el obstáculo, y los otros colores representan una distancia de seguridad ampliada.
También puedes usar clics para establecer objetivos como antes.