Definiendo el estado del servicio [traducción]

Introducción

Esta traducción es un pequeño fragmento del libro “Professional Microsoft Robotics Developer Studio” que he leído. Corresponde al capítulo 3 de dicho libro, Decentralized Software Services. El servicio es el bloque de construcción básico de MRDS, espero que esta pequeña traducción ayude a comprender mejor esta magnifica herramienta de Microsoft.

Traducción

El concepto de estado de servicio implica que debería contener toda la información necesaria para permitir salvar el estado, reiniciar el servicio posteriormente y cargando el estado salvado, continuar con la ejecución donde el servicio se apagó. El estado del servicio está disponible vía las operaciones Get y HttpGet. La operación Get está pensada para ser usada de manera programática, mientras que HttpGet está pensada con propósitos humanos, viendo el estado observando un navegador web.

La forma más simple, es mostrar el estado como un XML. Además, se puede iniciar el servicio sin necesidad de programar un interfaz de usuario. […]

[…]los siguientes pasos sirven para definir el estado de un servicio:

  1. Abres ServiceB en Visual Studio, dentro de éste el archivo llamado ServiceBTypes.cs.
  2. Baja el puntero hasta el estado del servicio y añade dos líneas como se puede ver aquí:

/// < summary >
/// The ServiceB State
/// < /summary >
[DataContract()]
public class ServiceBState
{
	[DataMember]
	public int Interval; 	// definido como público y
	[DataMember] // decorado con el atributo DataMember
	public int SensorValue;
}

 

Estos campos son parte del contrato del servicio y pueden ser serializados (a XML)cuando el estado es salvado o enviado en un mensaje.Si se declaran como privados serán ignorados durante la serialización.

Los puristas prefieren realizar una declaración como la siguiente:

private int _interval;

[DataMember]
public int Interval
{
	get { return _interval; }
	set { _interval = value; }
}

 

Debemos tener en cuenta que el atributo [DisplayName] únicamente puede ser aplicado a una propiedad no a un campo público.

3. Ahora el estado para el ServiceB contiene algunos campos, volvemos a ServiceB y rectificamos la función MainLoop como se muestra:

// Global flag to allow terminating the Main Loop
private bool _shutdown = false;

private IEnumerator < ITask > MainLoop()
{
	Random r = new Random();
	while (!_shutdown)
	{
		// Generate a random number from 0-100 and save it in the state
		_state.SensorValue = r.Next(100);
		Console.WriteLine(“B: “ + _state.SensorValue);
		// Wait a while
		yield return Arbiter.Receive(
			false,
			TimeoutPort(_state.Interval),
			delegate(DateTime time)
			{ }
		);
	}
}

 

Los cambios son como siguen:

  • Hemos añadido una bandera llamada _shutdown.
  • El bucle while ahora usa dicha bandera y puede finalizar.
  • Los valores aleatorios pueden almacenarse la propiedad state SensorValue.
  • El el intervalo del timer es leído desde la propiedad state Interval.

[…]

Anuncios

CNC e Impresora 3D: para construir el R2D2 debo primero hacer las máquinas que lo construyan

Introducción

En este artículo planteo como he planeado construir el R2D2 que utilizaré para mi boda, el objetivo es compartir el proceso y recibir feedback de una comunidad que no se si existe en mi cercana Sevilla (capital).

Cómo empezó todo

Empecé hace ya 3 años a hacer pruebas con Robotics Studio de concepto para tener un prototipo, además aproveché para dar charlas en la Universidad de Sevilla sobre robótica, tanto en la Facultad de Informática como en la Facultad de Ingenieros. Tras estas charlas contacté con la comunidad, por un lado con Esibot y por otro con el recién creado grupo de Robótica del Club .Net, que se creo tras una de mis charlas.

El proceso

El proceso es bastante sencillo, he diseñado el siguiente plan para ir consiguiendo crear mi R2D2 (modelo en realidad 1K-3A):

  • Redimensionar los planos para las nuevas especificaciones del dome: para quien no lo sepa el dome es la cúpula superior de R2D2, yo he utilizado una ensaladera de IKEA que tiene ese toque de aluminio. Los planos están disponibles en www.astromech.net
  • Construir la CNC según las planos disponibles en http://wiki.makerbot.com/cupcake: una máquina CNC es una máquina de control numérico por ordenador que permite realidad cortes de manera exacta en distintos materiales.
  • Construir la impresora 3D para crear las piezas más detalladas en plástico. También de la misma gente de MakerBot.
  • Crear el driver para Linux de estas dos máquinas que parece que solo funcionan con puerto paralelo y yo tengo puertos USB en el portátil.
  • Hacer todas las piezas e ir ensamblando.
  • Optimizar el sistema de servomotores y placas.
  • Reconocimiento visual.
  • Conectar a base de conocimiento.
  • WebServices.

Software

Mi intención es hace dos versiones del robot,  por un lado una basada en .Net y otra basada en Linux. Ya dispongo de dos placas para ir realizando experimentos una placa Arduino y otra Netduino. La lista de tareas son las siguientes:

  • Realizar driver para Linux USB de CNC.
  • Realizar driver para Linux de Impresora 3D.
  • Realizar versión Linux: ROS.
  • Realizar versión para .Net: Microsoft Robotics Studio.

Cosas ya hechas

Ya tengo un modelo en 3D para Robotics Studio con el que estoy realizando cálculos y pruebas.

Plazo: 1.5 años

EVENTO:Conquistando el mundo con Microsoft Robotics

Viernes 22 de Octubre, a partir de las 1830.

en

Aula G0.10

Escuela Técnica Superior de Ingeniería Informática
Av. Reina Mercedes, s/n
41012, Sevilla, España

Titulo

Conquistando el mundo con Microsoft Robotics

Descripción

La última versión de Microsoft Robotics Developer Studio por fin nos acerca un poco más al ansiado objetivo de la conquista global del mundo utilizando robots. En esta charla Bruno nos mostrará cómo podemos aprovechar esta tecnología y comenzar a programar nuestros primeros robots. Además de programación concurrente, orientación a servicios, etc.; veremos una implantación real de esta tecnología en un escenario concreto; como perseguir a tu mascota utilizando LEGO Mindstorms & Microsoft Robotics Studio, controlar un lanzamisiles USB, y todo lo que entre en la maleta.

Además Pablo nos mostrará una implementación real sobre el paso a paso necesario para crear entidades virtuales para el entorno de simulación, a partir de una entidad real, y con uno de los mejores ejemplos posibles: R2D2.

Duración

120 min + break + 45 min

Agenda

Introducción a Microsoft Robotics

Microsoft Robotics Simulation Engine

Microsoft Robotics Visual Programming Language

Microsoft Robotics Runtime

Como crear una entidad virtual partiendo de un modelo físico

Otras opciones/ demos varias

Ponentes

Bruno Capuano (MVP Visual Studio ALM)

Pablo Escribano (Coordinador CartujaDotNet)

A %d blogueros les gusta esto: