Skip to content

follow-wall-k-bots created by GitHub Classroom

Notifications You must be signed in to change notification settings

lu164/follow-wall-k-bots

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Open in Visual Studio Code

GitHub Action Status

Follow_Wall

Introducción

En esta práctica realizaremos un algoritmo basado en seguir la pared, para ello utilizamos el sensor láser y los LifeCycle nodes de ROS2.

Extracción valores del láser

Para saber donde están los obstáculos, en este caso la pared, usamos el láser. Como procesado, extraemos la medida mínima en un cono de amplitud de 10º centrado en tres regiones: la frontal (0), la izquierda (pi/2) y la derecha (-pi/2). Finalmente, las tres medidas se guardan en un vector.

Control de Movimiento

Aprovechando las características de los LifeCycle Nodes y sus estados y transiciones, usamos la transición on_configure() para ver si el robot tiene algún obstáculo cercano a izquierda o derecha y comenzar siguiendo ese lado del robot directamente. Si no hay nada cerca, se elige un lado del robot para seguir la pared al azar.

FollowWallNode::on_configure() {
  // Esperar por medidas del láser
  while (laser_regions.size() == 0) {continue;}
  
  // Elegir un lado a seguir
  if (laser_regions[A] < distance) {side = LEFT;}
  else if (laser_regions[C] < distance) {side = RIGHT;}
  else {
    if (rand() % 2 == 0) {side = LEFT;}
    else {side = RIGHT;}
  }
}

Una vez se ha realizado la configuración, se espera a que el nodo sea activado para comenzar a mover el robot. Si se desease cambiar la configuración de qué lado sigue el robot, basta con volver a ejecutar la transición on_configure().

[Video de reconfiguración]

Cuando se active el nodo se realizará el siguiente proceso de comprobación. Una vez hecho, en función del estado seleccionado se seleccionarán velocidades lineales y angulares correspondientes a cada estado:

En el caso de que se aleje al robot de la pared, este comenzará a girar hacía el lado que estaba siguiendo. Se ha contemplado que si ha entrado en dicho estado, un número concreto de iteraciones, el robot deje de hacer este movimiento y vuelva a buscar la pared avanzando hacia una dirección hasta volver a encontrarla.

[Video de alejar de pared]

Video DEMO

[Demo] [Demo Kobuki Real]

About

follow-wall-k-bots created by GitHub Classroom

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 88.7%
  • CMake 11.3%