Diferencia entre revisiones de «Toribio»
(No se muestran 24 ediciones intermedias del mismo usuario) | |||
Línea 1: | Línea 1: | ||
− | + | 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. | |
− | + | 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: | ||
+ | |||
+ | |||
+ | <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. | ||
− | Toribio | + | La referencia de la API de Lumen está disponible en linea [http://xopxe.github.com/Lumen/]. |
+ | |||
+ | |||
+ | == 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 [https://github.com/xopxe/Toribio/blob/master/docs/2-Configuration.md]. | ||
+ | |||
+ | * Objetos que abstraen el hardware disponible ("devices") [https://github.com/xopxe/Toribio/blob/master/docs/4-Devices.md] | ||
+ | |||
+ | * Repositorio central de tareas, devices. | ||
+ | |||
+ | |||
+ | Hay un tutorial disponible[https://github.com/xopxe/Toribio/blob/master/docs/1-Tutorial.md]. | ||
+ | |||
+ | |||
+ | |||
+ | == Estructura == | ||
+ | |||
+ | |||
+ | |||
+ | <syntaxhighlight lang="text"> | ||
+ | |||
+ | 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 | ||
+ | </syntaxhighlight> |
Revisión actual del 15: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