Diferencia entre revisiones de «Toribio»

De Proyecto Butiá
Saltar a: navegación, buscar
m (USB4ALL:)
 
(No se muestran 12 ediciones intermedias del mismo usuario)
Línea 1: Línea 1:
== Bobot: ==
+
Toribio[https://github.com/xopxe/Toribio] es un entorno de desarrollo de aplicaciones de robótica para plataformas embebidas. Toribio está construido alrededor de Lumen[https://github.com/xopxe/Lumen], un despachador para programación concurrente cooperativa para Lua.
  
Resumen de componentes en bobot, y formas de comuniaciones
+
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.
  
<syntaxhighlight lang="text">
 
  
 +
== Lumen ==
  
        OS              .so library              lua modules                lua module
 
  xxxxxxxxxxxxxxxxx      xxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxxxx  xxxxxxxxxxxxxxxxxxxxxx
 
  
 +
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.
  
serial -----------serialcomm---------comms_serial---|
 
            #        (C)                (lua)      |                        |---- drivers (lua)
 
          libusb0.1                                |                        |
 
                                                    |------------bobot------------- drivers (lua)
 
          stdio                                    |            (lua)        |
 
            #                                      |              |          |---- drivers (lua)
 
usb---------------libusb--------------comms_usb-----|              |
 
              (C+liblua.h)              (lua)                    |
 
                                                                  |
 
                                                                  |---------------butialo, other apps.
 
                                                                  |
 
                                                                  |---------------bobot-server-----------------userapps
 
                                                                                        (lua)
 
  
 +
Un ejemplo de dos tareas, donde una emite una señal periódicamente, y otra lo consume:
  
                                                                    xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx
 
                                                                          lua module                socket
 
  
 +
<syntaxhighlight lang="lua">
 +
    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()
 
</syntaxhighlight>
 
</syntaxhighlight>
  
  
 +
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 [http://xopxe.github.com/Lumen/].
  
  
 
== Toribio ==
 
== Toribio ==
<syntaxhighlight lang="text">
 
  
                    OS                fd (PIPE)            lua+Lumen
 
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx
 
  
                                                                |---- drivers (lua)
+
Toribio provee un entorno que simplifica el desarrollo y despliegue de aplicaciones robóticas. Entre los servicios que provee están:
                                                                |
+
 
usb, serial, hid? ---------- bridge ------------ toribio ------------- drivers (lua)
+
* Un sistema centralizado de configuración [https://github.com/xopxe/Toribio/blob/master/docs/2-Configuration.md].
                      #      (C)            (lua+Lumen)      |
+
 
                      #                            |            |---- drivers (lua)
+
* Objetos que abstraen el hardware disponible ("devices") [https://github.com/xopxe/Toribio/blob/master/docs/4-Devices.md]
              (stdio, libusb1, ...?)              |
+
 
                                                    |
+
* Repositorio central de tareas, devices.
                                                    |---------------butialo, other apps.
+
 
                                                    |                                                   
+
 
                                                    |---------------bobot-server-----------------userapps
+
Hay un tutorial disponible[https://github.com/xopxe/Toribio/blob/master/docs/1-Tutorial.md].
                                                                      (lua)
+
 
 +
 
 +
 
 +
== Estructura ==
 +
 
  
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx
 
                                                            lua Lumen                socket
 
</syntaxhighlight>
 
  
Propuesta actual...
 
 
<syntaxhighlight lang="text">
 
<syntaxhighlight lang="text">
  
 
                   POSIX            lua library          Lumen tasks
 
                   POSIX            lua library          Lumen tasks
 
               xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx
 
               xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx
 
+
 
                                                                 |---- drivers (lua)
 
                                                                 |---- drivers (lua)
 
                                                                 |
 
                                                                 |
Línea 72: Línea 78:
 
                                                     |---------------bobot-server-----------------userapps
 
                                                     |---------------bobot-server-----------------userapps
 
                                                                       (lua)
 
                                                                       (lua)
 
+
 
                                                       xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx
 
                                                       xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx
 
                                                           Lumen task                socket
 
                                                           Lumen task                socket
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
== USB4ALL: ==
 
 
Se proponen algunos cambios a la plataforma usb4all. Las ideas principales detras de estos cambios son;
 
 
* convertir a usb4all en un protocolo ''stateless''. Actualmente, las comunicaciones son de la forma solicitud/respuesta. La respuesta solo se puede interpretar manteniendo el estado de la solicitud originante. Para convertirlo en ''stateless'', hay que agregar información a las respuestas de forma de poder interpretarlo completamente sin tener que recordar las comunicaciones anteriores.
 
 
* Fácil de portar impementaciones de usb4all clásico. Las implementaciones alternativas deben seguir funcionando con solo agregar infomracion extra a los paquetes. La lógica original debe seguir siendo valida.
 
 
* Esto abre las puertas a comunicaciones asincrónicas desde la placa al host.
 
 
Puntualmente, los cambios son:
 
 
 
'''Paquete de respuesta de open'''
 
Agregar nombre de modulo, etc.
 
 
OPEN(8bits) | INEP(8bits)  | OUTEP(8bits)  | MODULE(8bytes) | HANDLER(8bits)
 
 
 
'''Paquete de respuesta de close'''
 
Agregar handler.
 
 
CLOSE(8bits) | HANDLER(8bits) | STATUS(8bits)
 
 
 
'''Respuesta de consulta de un modulo'''
 
 
GET_USER_MODULES_LINE (8bits)  |  LINE(8bits)  |  MODULE(8bytes)
 

Revisión actual del 14:37 31 oct 2012

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