logo logo
Home arrow Forums...
Tuesday, 21 May 2013
 
 
 
Conscious-Robots.com Forum  


jonymegripo
User

Gold Boarder
Posts: 48
graphgraph
Karma: 3  
Comunicación de mi silla al dashboard - 2010/01/21 18:57 Hola Raúl,quiero que mi dashboard (el mio se llama simulatedSenaSimpleDashBoard) muestre la posición de mi entidad silla (entidad sena) en todo momento los valores de x y z (actualizandose continuamente).

Para ello, en el archivo senatypes.cs, en la clase SenaState me he definido varible "es" de tipo senaEntity (es la clase que describe la forma fisica y los metodos de la entidad sena). Me he definido tambien 3 [datamember] posx, posy, phi que supuestamente me tienen que dar la posicion de mi silla en su valor x, y , z respectivamente.
código que lo representa:
Code:

   [DataMember]         public float PosX         {                        get { return es.EntityState.Pose.Position.X; }             set es.EntityState.Pose.Position.value; }         }         [DataMember]         public float PosY         {             get { return es.EntityState.Pose.Position.Y; }             set es.EntityState.Pose.Position.value; }         }         [DataMember]         public float Phi         {             get { return es.EntityState.Pose.Position.Z; }             set es.EntityState.Pose.Position.value; }         }




Pues bien quiero que estos valores se le pasen a mi dashboard.
He creado un subscritor en mi dashboarb para contactar con sena, pero no hay manera de que me muestre los valores.

No sé si me explico bien de lo que pregunto, pero para aclarar las cosas te mando el código y te digo los métodos que utilizo para esta tarea.

En el proyecto sena:
- public float PosX
- public float PosY
- public float Phi
- public IEnumerator<ITask> Comportamiento()
- public class SenaOperations : PortSet<DsspDefaultLookup, Get, EstadoTotalSena, EstadoSilla, VelocidadSena, Pidparams, Joystick, Odometry_Params, OdometryInfo, ReliableSubscribe, Subscribe, HabilitarMotores, DsspDefaultDrop>

en el proyecto simulatedSenaSimpleDashBoard:
- Arbiter.ReceiveWithIterator<Psena.EstadoTotalSena>(true, _coreNotify, EstadoSena),
- Arbiter.ReceiveWithIterator<OnConnectCoreSena>(true, _eventsPort, OnConnectCoreSenaHandler),
- void SubscribeToCoreSena()
- IEnumerator<ITask> OnConnectCoreSenaHandler(OnConnectCoreSena onConnectCoreSena)

- IEnumerator<ITask> EstadoSena(Psena.EstadoTotalSena total)
- public void ReplaceData(Psena.SenaState total)


Muchas gracias y Perdona por las molestias.
  The administrator has disabled public write access. Please, register to participate in the forum.
Raúl
Moderator

Moderator
Posts: 592
graph
Karma: 10  
Re:Comunicación de mi silla al dashboard - 2010/01/25 12:43 Hola,

Lo que no veo es cómo actualizas los valores de la posición y la orientación en tu entidad. Supongo que los coges de las propiedades de la propia entidad, como hago yo en el servicio de GPS simulado (echa un vistazo a este código, que seguro que te ayuda para lo que quieres hacer).

Una solución más elegante para lo que quieres hacer, es que hagas lo mismo que hago yo en CRUBOTS. Es decir, usar el servicio de GPS simulado. En este caso, tendrías que añadir un sensor GPS a tu silla (la entidad PioneerGPSEntity) y luego desde tu dashboard suscribirte al servicio SimulatedPioneerGPS, de igual forma que lo haces con otros sensores para representar la información correspondiente en tiempo real. Si te fijas, en el código que he subido de CRUBOTS eso mismo ya está hecho en el Cranium Dashboard para sacar la posición y orientación del robot en tiempo real.

Este es el código para crear el sensor GPS simulado:

Code:

 // Raul - Jan 2010 - Create GPS Entity private VisualEntity CreateGPSEntity() {    VisualEntity GPSent = new GPS.PioneerGPSEntity();         GPSent.State.Name "SimulatedGPSEntity";    GPSent.ServiceContract pxGPS.Contract.Identifier;                            CreateService(      pxGPS.Contract.Identifier,      Microsoft.Robotics.Simulation.Partners.CreateEntityPartner(      "http://localhost/" GPSent.State.Name)    );         return GPSent;  }



Luego sólo tienes que insertar esta entidad en tu silla.
Raúl Arrabales Moreno. conscious-robots.com/raul
  The administrator has disabled public write access. Please, register to participate in the forum.
jonymegripo
User

Gold Boarder
Posts: 48
graphgraph
Karma: 3  
Re:Comunicación de mi silla al dashboard - 2010/01/25 18:37 Hola Raúl. Eso es precisamente lo que quiero hacer.
Ya he creado un entidad gps y la he colocado como entidad hija de mi silla (para que se mueva con ella).

Ahora lo que no tengo muy claro es cómo relaciono los datos de la entidad gps con mi simpledashboard.

Te mando el código, por si con él te resulta más fácil.

UN MILLÓN DE GRACIAS!!!

Post edited by: Raúl, at: 2010/01/25 23:07
  The administrator has disabled public write access. Please, register to participate in the forum.
Raúl
Moderator

Moderator
Posts: 592
graph
Karma: 10  
Re:Comunicación de mi silla al dashboard - 2010/01/25 23:12 Además de la entidad, necesitas un servicio asociado a la misma, que es el que proporciona los datos a terceros (por ejemplo, tu dashboard).

En definitiva, tienes que tener un servicio como el GPS Simulado que te indiqué antes. Mira el código del GPS simulado para ver cómo se obtiene y se actualiza la posición de la entidad padre del sensor (en tu caso, la entidad silla).

Puedes descargar el código del servicio GPS simulado en la Zona de Descargas de MRDS 2008 R2

Saludos,
Raúl.
Raúl Arrabales Moreno. conscious-robots.com/raul
  The administrator has disabled public write access. Please, register to participate in the forum.
jonymegripo
User

Gold Boarder
Posts: 48
graphgraph
Karma: 3  
Re:Comunicación de mi silla al dashboard - 2010/02/05 20:26 Hola Raúl, tras mirar detenidamente el código del gps y el dashboard del crubot. He llegado al punto de que mi silla de ruedas esta enviando constantemente su posición (lo he comprobado a través de VPL con un simple dialog), pero mi dashboard no muestra esas coordenadas. Antes de conseguir que mi silla enviara constantemente su posición, mi dashboard mostraba la posicion inicial de mi silla, pero cuando la desplazaba, mi dashboard no mostraba la actualización de la posición. He realizado tantas modificaciones que esa acción ya no me la realiza y no consigo saber por qué.

Tras realizar varios break veo que no se me ejecuta el método encargado de escribir en mi dashboard los valores del estado de mi silla (metodo "EstadoSena" en el archivo SimulatedSenaSimpleDashboard.cs que llama al método "ReplaceData" del drivecontrol.cs).

Yo creo que el problema es de referencias entre servicios, pero he probado a borrar todas las dll del bin y crearlas de nuevo. crearme un nuevo servicio Dashbord y no consigo arreglarlo ni localizar el problema.

Te agradeceria muchisimo que me ayudaras porque es lo último que me queda para terminar mi proyecto fin de carrera. Gracias.

Nota: te adjunto el codigo de todos los servicio necesarios para la ejecucion. Si te hace falta la carpeta estore, te lo mando a tu correo porque es demasiado grande para enviarlo por aqui

Post edited by: Raúl, at: 2010/02/07 20:08
  The administrator has disabled public write access. Please, register to participate in the forum.
Raúl
Moderator

Moderator
Posts: 592
graph
Karma: 10  
Re:Comunicación de mi silla al dashboard - 2010/02/07 20:35 Por lo que dices parece que lo que es el servicio GPS simulado funciona y lo que falla es la suscripción desde el Dashboard.

Supongo que el problema viene de que te falta alguno de estos pasos:

¿Cuándo ejecutas tu dashboard puedes ver el servicio de GPS en la lista de servicios para conectarte?

Para que aparezca en la lista tienes que modificar el método ReplaceDirectoryList de DriveControl.cs:

Code:

 foreach (ServiceInfoType info in list) {   if (info.Contract == sicklrf.Contract.Identifier ||       info.Contract == drive.Contract.Identifier ||       info.Contract == arm.Contract.Identifier ||       info.Contract == pxsonar.Contract.Identifier ||       info.Contract == pxbumper.Contract.Identifier ||       info.Contract == pxPanTilt.Contract.Identifier ||       info.Contract == webcam.Contract.Identifier ||       info.Contract == pxGPS.Contract.Identifier ) }



Así controlas los servicios del directorio que quieres que aparezcan en la lista.

Luego, siguiendo el mismo esquema que con otros servicios, puedes hacer que el Dashboard se suscriba al servicio de GPS cuando se hace doble clic en la entrada correspondiente de la lista. Eso está en el método listDirectory_DoubleClick:

Code:

 else if (info.Contract == pxGPS.Contract.Identifier) {   _eventsPort.PostUnknownType(      new OnConnectGPS(thisinfo.Service)); }



Eso provoca que se lance un mensaje OnConnectGPS, que se maneja en el código principal del servicio Dashboard, en mi caso en el método OnConnectGPSHandler.

¿Tienes tú algo parecido?? Aquí es donde yo mando el mensaje de suscripción:

Code:

 _gpsPort ServiceForwarder<pxGPS.SimulatedPioneerGPSOperations>(                 onConnectGPS.Service); _gpsShutdown = new Port<Shutdown>(); pxGPS.Subscribe subscribeOp = new pxGPS.Subscribe(); subscribeOp.NotificationPort _gpsNotify; subscribeOp.NotificationShutdownPort _gpsShutdown; _gpsPort.Post(subscribeOp); yield return Arbiter.Choice(   subscribeOp.ResponsePort,   delegate(SubscribeResponseType response)   {      LogInfo("Subscribed to " onConnectGPS.Service);   },   delegate(Fault fault)   {      _gpsShutdown null;      LogError(fault);   } );



Luego, tienes que tener en cuenta que los datos actualizados del GPS vienen en las notificaciones Replace, por lo tanto en el Interleave de tu Dashboard tienes que tener algo así:

Code:

 Arbiter.ReceiveWithIteratorFromPortSet<OnConnectGPS>(    true_eventsPortOnConnectGPSHandler),     Arbiter.ReceiveFromPortSet<OnDisconnectGPS>(   true_eventsPortOnDisconnectGPSHandler), Arbiter.ReceiveWithIterator<pxGPS.Replace>(    true_gpsNotifyOnGPSReplaceHandler),



Y en el manejador de las notificaciones Replace (OnGPSReplaceHandler) es donde llamas a la ventana del Dashboard con los datos del estado actualizado del GPS para representarlo en pantalla:

Code:

 WinFormsServicePort.FormInvoke(   delegate()   {                              _driveControl.ReplaceGPSData(replace.Body);   } );



¿Lo estás haciendo así en tu código? Si en VPL ves los datos de posición actualizados también deberías poder verlos en el Dashboard, así que tiene que ser un problema de las suscripción o del manejo de las notificaciones.. Puedes poner una traza con LogInfo o similar en el manejador de las notificaciones y comprobar si efectivamente se está invocando...
Raúl Arrabales Moreno. conscious-robots.com/raul
  The administrator has disabled public write access. Please, register to participate in the forum.
jonymegripo
User

Gold Boarder
Posts: 48
graphgraph
Karma: 3  
Re:Comunicación de mi silla al dashboard - 2010/02/07 22:54 Hola Rául. ya he encontrado el fallo.

Mi proyecto no tiene incorporado la entidad GPS sino que a través de la posición de mi silla intento que se lo comunique a mi dasdboard, por este motivo el servicio gps no me aparece en la lista de servicios. Esta acción me la realiza bien (lo he comprobado con VPL)

La comunicación con el dashboard la realizo como me has explicado en estos pasos, pero en el metodo "OnGPSReplaceHandler" que escribe los valores en el dashboard le estaba pasando en vez de la operación ".replace" el estado de sena por lo que me daba el estado pero no me lo cambiaba. No sé si me explico.

Muchisimas gracias y perdona por las molestias
  The administrator has disabled public write access. Please, register to participate in the forum.
Raúl
Moderator

Moderator
Posts: 592
graph
Karma: 10  
Re:Comunicación de mi silla al dashboard - 2010/02/08 10:41 Sí, sí, entiendo, por eso no te actualizaba la posición.
Es la entidad de GPS simulado la que tiene el método CheckForStateChange y manda la notificación con el replace a los suscriptores.

Supongo que si no usas un servicio GPS simulado, simplemente puedes añadir esta funcionalidad a tu silla simulada, para que mande una actualización y listo..

Me alegro que estés terminando
Raúl Arrabales Moreno. conscious-robots.com/raul
  The administrator has disabled public write access. Please, register to participate in the forum.





Lost Password?
 Conscious Robots RSS FeedConscious Robots RSS Feed

Find us on Facebook

Follow us on TwitterFollow us on twitter
Spotlight

Machine Consciousness Bibliography Database

 

ConsScale
The Cognitive Machine Consciousness Scale

 
Last Posts in Forum
 
CR
miel continental