Programación de robots por comportamientos

MultiNXTA la hora de ponerse a programar un robot hay muchos métodos distintos de programación, más o menos efectivos dependiendo del robot que queramos implementar. El método de programación mediante comportamientos es un método modular en el cuál vamos creando y añadiendo distintos comportamientos (seguir una línea, esquivar un obstáculo…). Estos comportamientos son independientes unos de otros, y en un principio podríamos utilizar todos los que queramos, incluso comportamientos creados por otra gente. La programación por comportamientos se basa en que hay un árbitro que decide qué comportamiento ejecutar en cada momento, dependiendo de las mediciones que tomen los sensores, o de si ya ha terminado la ejecución de otro comportamiento.

Arbitraje:

El árbitro es el encargado de decir cuál es el comportamiento a ejecutar en cada momento. Sin embargo, para ejecutar un comportamiento es necesario finalizar previamente el anterior. Los comportamientos deben tener condiciones de salida implementadas que permitan poder darle el control al árbitro y que éste decida qué comportamiento ejecutar (Ej.: Sigue la línea hasta que encuentres un obstáculo a X cm., entonces pasa el control al árbitro, etc).

Además, los comportamientos están ordenados en un array por orden de prioridad, y tienen también determinadas condiciones de entrada (Ej.: No iniciar este comportamiento a menos que el robot esté en reposo). Por tanto, el árbitro se encargará de recorrer ese array de comportamientos, yendo uno por uno desde el que tiene mayor prioridad hasta el que menos, y escogiendo el primero cuyas condiciones de entrada se cumplan.

Un árbitro no es por lo tanto tan difícil de implementar, y se puede programar en diversos lenguajes. En RobotC un árbitro sera una función independiente, en LeJOS será una clase… Así mismo los comportamientos también son independientes unos de otros, pudiendo tener sus propias clases o funciones.

Comportamientos:

A la hora de implementar un comportamiento hay que tener en cuenta muchas cosas:

  • La primera es si va a tener condiciones de entrada y cuáles son éstas. Por ejemplo, no podemos empezar a ejecutar un comportamiento que transporte una pieza si no tenemos una pieza que transportar.
  • La segunda son las condiciones de salida de ese comportamiento, que generalmente serán cuando haya terminado su propósito, o cuando detecte algún problema (como por ejemplo un obstáculo en el camino).

Bump&Go1

También es importante la prioridad del comportamiento, ya que según queramos que nuestro comportamiento sea uno de los principales, o una alternativa a ciertos casos, debemos posicionarlo más adelante o atrás en el array de comportamientos. Cuantos más comportamientos tenga, más complejo será nuestro programa, y más cosas podremos hacer.

Implementación:

Hay varias formas de implementar este método de programación por comportamientos. LeJOS dispone para ello de una clase llama Arbitrator para poder implementar fácilmente el arbitro y los comportamientos. En cualquier caso, una forma sencilla de implementarlo podría ser la siguiente: tenemos es un array con por ejemplo los diferentes identificadores de los comportamientos que podemos elegir nosotros. El árbitro va uno por uno viendo si se cumplen las condiciones de entrada. En cuanto encuentre un método que las cumpla lo ejecuta y espera a que éste termine. Todo esto se repetirá dentro de un bucle que podría ser infinito, o tener sus propias condiciones de salida.

El Reto:

Os desafío a un reto. Teniendo en cuenta todos los programas que ya están publicados en el blog, os reto a que implementéis alguno de ellos mediante el método por comportamientos. Puede ser cualquiera, el Bump&Go, o el sigue líneas por ejemplo. Lo podéis implementar en lo que queráis (LeJOS o RobotC). A ver si os animáis un poco y colgáis algún programa.

I Want You

Podéis escribir en el foro las dudas que os vayan surgiendo, o los programas que consigáis sacar.

Comments are closed.