1 minute read

En la semana 5, la tarea asignada fue realizar una aplicación sencilla Sigue-Personas o “Follow Person” en ROS 2 para el robot Turtlebot 2 tanto en real como en simulado.

La tarea me sirvio para practicar con Behavior Trees, Darknet Ros y la cámara astra.

DARKNET ROS Es un paquete de ROS que nos permite detectar objetos en imágenes de cámara. Para la Detección usa YOLO versión 4. Tiene soporte para Ros Noetic, y Ros 2 Foxy.

El paquete para ROS 2 Foxy que usé lo encontraréis en este enlace

YOLO (You Only Look Once) Es un sistema de código abierto para detección de objetos en tiempo real, el cual hace uso de una única red neuronal convolucional para detectar objetos en imágenes.

Para la cámara astra use ROS Bridge de ROS1 a ROS2, ya que para la distribución Foxy no encontré soporte. Este es el enlace. Recomiendo consultar la semana 4 para saber usar ROS Bridge.

En Groot, me diseñe el siguiente Arbol de Comportamiento:

Posteriormente, definí los métodos tick() y halt() de las clases SearchAction Y FollowAction

Para detectar las personas, usaba los bounding boxes y elegía aquellos que yolo detectara como “person”. Una vez que eran encontrados, calculaba su centroide y me quedaba con aquel que tuviera su centroide más cercano al centroide seleccionado de la iteración anterior. De esta manera, el robot conseguía no perder a su objetivo. Además, discreticé las imágenes de la cámara en columnas para que dependiendo de donde cayera el centroide elegido, las velocidades angulares fueran distintas.

Para permitir que mi aplicación funcionara tanto en real como en simulado de manera robusta y sencilla, diseñé un fichero params.yaml que me permitiera cambiar de topics fácilmente, ya que el kobuki real usa “/commands/velocity” para la velocidad y el kobuki simulado “/cmd_vel”

/**:
  ros__parameters:
    velocity_topic: "/commands/velocity" #"/cmd_vel"
    darknet_bounding_boxes_topic: "/darknet_ros/bounding_boxes"
    behavior_tree_file: "/behavior_tree/follow_person.xml"

El resultado fue el siguiente: