El ángulo de giro se cálcula correctamente pero algo pasa en esta función que cuando le pide al robot que gire este no hace ni caso.
Además me pasa algo curioso y es que por muy pequeña que le ponga la velocidad de avance al robot simulado, cada vez que para lo hace de forma tan brusca que se inclina hacia delante de forma que el láser hace una lectura del suelo falseando las distancias reales de los objetos.
Para terminar me gustaría comentarte que me sale el siguiente mensaje en la consola de salida y no se exactamente a que se refiere porque únicamente aparece con los servicios que yo he creado y no cuando utilizo uno mío trabajando junto con uno creado por microsoft:
Prefix is already registered Category StdOut Leve Warning Time 2008-05-07t20:21:15.90625+02:00 Subject Prefix is already registered Source http://localhost:50000/resources CodeSite Boolean MoveNext()() at line:0, file
No se si es algo que podría solucionar de alguna forma o no debería darle mayor importancia.
Muchas gracias Un saludo
The administrator has disabled public write access. Please, register to participate in the
forum.
Por lo que veo la función de girar está bien. Vamos, es la misma que yo uso. Lo único que se me ocurre es que haya algún problema en la forma a la que llamas al método para girar, te pongo a continuación cómo lo hago yo por si te sirve de algo:
Code:
Arbiter.Choice(Turn(action.Angle),
delegate(DefaultUpdateResponseType sucess)
{
// El robot está girando
},
delegate(Fault failure)
{
LogError("CERA Phys: failed to turn.");
});
Lo que comentas del robot que al parar la inercia que lleva le hace levantarse de atrás y apuntar al suelo a mi también me pasa. Para solucionarlo había pensado aumentar la masa del robot para que el simulador no le haga sacudirse tanto incluso a velocidades reducidas... La verdad es que todavía no lo he probado, lo que está claro es que con el robot real eso no pasa. Puedes intentar lo que te digo: aumentar su peso y ver si así no se tambalea tanto al parar.
Sobre el error "Prefix is already registered", a mi no me ha pasado nunca. Pero creo que puede pasar porque tengas dos servicios configurados con el mismo initial state partner. ¿Te sale algo más en el output console?
He incluido el código que me has indicado cada vez que hago una llamada a la función "Turn" y el robot sigue sin girar... pero lo más curioso es que no aparece ni una sola vez el mensaje de error. Te describo el comportamiento de la simulación: el robot avanza perfectamente hasta que se encuentra un objeto de frente. Entonces sigue avanzando hacia él, primero con mayor velocidad y luego reduciéndola. A la consola siguen llegando mensajes de que el robot va a avanzar una cierta distancia pero éste no se mueve, si acaso lo hace, es una de cada 5 veces que aparece el mensaje. Finalmente se queda muy pegado al objeto pero no aparecen mensajes de error avisando de la activación de los sensores de contacto a pesar de que siguen llegando mensajes de que el robot se va a desplazar hacia delante una cierta distancia
Respecto al error "Prefix is already registered", siempre aparece cuando pongo a trabajar juntos el servicio de control con el del entorno grafico, y siempre con el texto que puse en el anterior mensaje. Pero he estado pensando en lo del Initial State Partner, que sí guardaba el estado en el servicio control pero no en el de entorno grafico. Así que lo he quitado en el primero, y me ha vuelto a salir el error "Prefix is already registered" pero esta vez con:
Code:
CodeSite void ExecuteTask(Microsoft.Ccr.Core.Itask ByRef, Microsoft.Ccr.Core.DispatcherQueue)() at line:0, file
Si sirve de algo el último mensaje que aparece es el siguiente, después no pasa nada más:
Code:
Creation Default State for ControlService
Category StdOut
Level Info
Time 2008-05-08T22:51:35.796875+02.00
Subject CreatingDefaultState for ControlService
Source http://localhost:50000/resources
CodeSite Void CreateState()() at line:167, fileC:Microsoft Robotics Studio (1.5)samplesControlServiceControlService.cs
Tienes alguna idea de que puede estar pasando, porque yo empiezo a creer que mi servicio entornografico esta gafado...
Muchísimas gracias Un saludo
Mensaje editado por: Julia, el: 2008/05/09 00:43
The administrator has disabled public write access. Please, register to participate in the
forum.
Por lo que describes del comportamiento del robot, ¿estás usando el código de ejemplo del explorador que viene con Robotics Studio? ¿O es un código de control que has escrito tú?
¿Has comprobado que efectivamente se llame a la función Turn (poniedo un traza o depurando con el Visual Studio? Piensa que quizás el problema está en otra parte del código y nunca se llega a ejecutar la función. Si tienes trazas en las llamadas a DriveDistance o SetDriveSpeed análogamente puedes ponerlas en las llamadas a Turn.
Lo del "Creation Default State for ControlService" tiene pinta que debería pasar sólo la primera vez, cuando todavía no existe el fichero de estado y se crea un estado por defecto. Pero si llamas a saveState:
Code:
// Save the default state to disk
SaveState(_state);
cuando creas el estado por defecto, la próxima vez que ejecutes el servicio no debería aplicar el estado por defecto, si no cargar el fichero de estado que has especificado. ¿Has comprobado que el fichero se cree adecuadamente?Raúl Arrabales Moreno. conscious-robots.com/raul
The administrator has disabled public write access. Please, register to participate in the
forum.
La creación del fichero con el estado inicial se hace perfectamente, lo que pasa es te mande el último mensaje que me sale cuando se ejectuta el programa por primera vez, porque cuando se ejecuta una segunda vez el último mensaje que sale en Output es:
Code:
Service uri:
Category Console
Leve Info
Time 2008-05-05T23:32:35.421875+02.00
2008-05-07t20:21:15.90625+02:00
Subject Service uri.
Source http://localhost:50000/controlService
CodeSite Void Start()() at line:0, file
y no creía que con esto pudieses deducir mucho de lo que le está pasando a la simulación.
Respecto al movimiento del robot lo hago basándome en el explorer creado por Trevor Taylor, trabajando sobre un servicio que yo cree y al que le ido añadiendo las distintas partes para que funcione como el primero. He estado buscando información en internet sobre el error "Prefix is already registered" y lo que he encontrado ha sido esto:
http://msdn.microsoft.com/en-us/library/ms164918(VS.80).aspx
pero no entiendo que hacer para depurar mi sistema y corregir el error. También he estado buscando lo de "Boolean MoveNext()" (me salió en uno de los primeros errores) que es un método para desplazar el enumerador al siguiente término de la colección, devuelve true si avanzó con éxito y false si llegó al final. El caso es que todos estos fallos también me salen si utilizo el explorer de Trevor directamente con mi servicio entornografico e incluso con cualquier simulación de microsoft. No entiendo que esta pasando, si me pudieses indicar alguna forma para intentar depurarlo y encontrar el momento en el que falla el programa te lo agradecería.
Un saludo
PD:Adjunto un txt con dos partes de las trazas durante la simulación por si sirven de ayuda