Algoritmo para robot que empuja bloques fuera de una zona delimitada por un color

En uno de los grupos de Telegram sobre Arduino en los que participo, un compañero ha solicitado ayuda con un problema de sus estudios de mecatrónica.

Los requisitos vienen a ser los siguientes:

  • Hay un robot en una zona negra circular
  • El exterior de la zona donde está el robot es blanca
  • Dentro de la zona negra hay piezas
  • El robot debe empujar esas piezas fuera de la zona negra
  • Cuenta con dos sensores:
    • De distancia, para detectar objetos
    • De color, para saber si está en la zona negra o la zona blanca
Robot dentro de zona negra, y piezas que tiene que expulsar hacia la zona blanca

Y este es el algoritmo en pseudocódigo que me ha salido en 10 minutos:

Consta de dos partes principales:

  1. No salirse de la zona negra y volver en caso de salirse
  2. Empujar la pieza hasta sacarla de la zona negra

La parte de empujar la pieza fuera de la zona negra es la más sencilla. Hacemos una especie de escaneo girando 5º cada vez y avanzamos hasta que estemos fuera de la zona negra:

Y todo el resto del algoritmo se usa para evitar que el robot salga de la zona negra o que vuelva en caso de que se haya salido. En caso de estar dentro de la zona negra vamos a buscar una pieza y empujarla:

El resto de condiciones sirven para hacer un giro que nos permita volver a la zona segura, avanzar hasta un máximo que sería el radio del círculo y que en condiciones ideales nos dejaría en el centro, y hacer un nuevo giro en caso de que hayamos avanzado la distancia prevista pero sigamos fuera de la zona negra:

Le he pedido que me pase una captura de la implementación que haga.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.