Toribio

De Proyecto Butiá
Saltar a: navegación, buscar

Toribio[1] es un entorno de desarrollo de aplicaciones de robótica para plataformas embebidas. Toribio está construido alrededor de Lumen[2], un despachador para programación concurrente cooperativa para Lua.

Es completamente portable, dependiendo únicamente (y opcionalmente) de una instancia de la librería nixio o luasocket para proveer soporte de red y acceso asincrónico a archivos. Se ejecuta sobre Lua 5.1, 5.2 o LuaJIT, sin modificaciones.


Lumen

Programar en Toribio (y por lo tanto Lumen) consiste en escribir tareas que emiten y reciben señales. Una señal es el mecanismo básico de intercambio de información y sincronización entre tareas. Una señal consiste en un evento y parámetros de tipos arbitrarios. Para esperar una señal se especifica el/los eventos de interes, y opcionalmente una o varias tareas emisoras. Las esperas pueden tener un timeout asociado.


Un ejemplo de dos tareas, donde una emite una señal periódicamente, y otra lo consume:


    local sched=require 'sched'

    -- task emits signals
    local emitter_task = sched.run(function()
        for i = 1, 10 do
            sched.signal('an_event', i)
            sched.sleep(1)
        end
    end)

    -- task receives signals
    sched.run(function()
        local waitd = {emitter=emitter_task, events={'an_event'}}
        while true do
            local _, _, data = sched.wait(waitd)
            print (data)
        end
    end)

    sched.go()


Además Lumen provee varias utilidades, tales como una tarea que implementa una consola remota, un servidor de sockets y acceso asincrónico a archivos, mecanismos de concurrencia tales como pipes y demarcación de zonas críticas, etc.

La referencia de la API de Lumen está disponible en linea [3].


Toribio

Toribio provee un entorno que simplifica el desarrollo y despliegue de aplicaciones robóticas. Entre los servicios que provee están:

  • Un sistema centralizado de configuración [4].
  • Objetos que abstraen el hardware disponible ("devices") [5]
  • Repositorio central de tareas, devices.


Hay un tutorial disponible[6].


Estructura

                   POSIX            lua library          Lumen tasks
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx
 
                                                                 |---- drivers (lua)
                                                                 |
          fd ---------------- nixio ------------ toribio ------------- drivers (lua)
                               (C)             (lua+Lumen)       |
                                                    |            |---- drivers (lua)
                                                    |
                                                    |
                                                    |---------------butialo, other apps.
                                                    |                                                    
                                                    |---------------bobot-server-----------------userapps
                                                                       (lua)
 
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx
                                                           Lumen task                socket