Raúl
Moderator
 Moderator
| Posts: 591 |  | Karma: 10
|
Re:Dudas con el Pioneer 3DX real y simulado - 2010/07/13 17:23
Hola, creo que he entendido bien la pregunta y la respuesta tiene un poco de trampa
El tema es que en teoría lo ideal es usar siempre contratos genéricos. De hecho aquí radica (en teoría) una de las grandes ventajas de usar RDS.
La clave de usar contratos genéricos es que hacen tu código independiente del hardware que finalmente uses. Pero claro, la realidad siempre es un poco más cruda.
En un mundo ideal tendrías por ejemplo los contratos genéricos de Drive y Laser. Podrías escribir un servicio para navegar un robot en función de las medidas del láser que podría compilarse sin conocer aún qué hardware se va a usar (sólo sabrías que necesitas un drive y un láser). Es decir, en tiempo de compilación no se sabe qué robot vas a controlar: un Lego, un P3DX o un robot simulado.
Para que en tiempo de ejecución tu programa llegue a funcionar correctamente es necesario que cuentes con servicios concretos de Drive y Laser para el robot que vas a controlar en tiempo de ejecución. Esto es: si tienes un Lego NXT, en tu manifest harás referencia a los servicios Drive y Laser de Lego NXT (mal ejemplo porque Lego no tiene Laser, pero bueno, es sólo para ilustrar la idea).
Si no tienes a mano un robot real y quieres probar tu servicio de contro, pues necesitas implementaciones de los servicios Drive y Laser para el simulador, es decir, unos servicios que simulen los motores y un laser en el mundo virtual. Estos podrían ser los que comentas que estás usando.
¿Dónde está el problema entonces? Pues que no siempre los servicios concretos (que implementan contratos genéricos) tienen todas las operaciones implementadas o las implementan como era de esperar...
En definitiva, siendo prácticos y en línea con lo que comentas, no te queda más remedio que ir probando que efectivamente las operaciones que usas del contrato genérico estén bien implementadas en el servicio concreto que se comunica con el robot real. Porque si no, te puedes encontrar con la sorpresa de que algo que funciona bien en el simulador no funciona igual en el mundo real.
Por ejemplo, a mi me ha pasado lo siguiente: una misma llamada al contrato genérico de Drive para girar -50 grados, en el simulador gira a la izquierda y en el robot real gira a la derecha... No debería ser así, pero el problema viene de que no se ha definido claramente la semántica de las operaciones genéricas desde el principio...
Raúl Arrabales Moreno. conscious-robots.com/raul |