roboticslab-uc3m / teo-follow-me

Demo: A robotic face following and arm waving application.
1 stars 1 forks source link

New follow-me with Carlos dialogue #18

Closed rsantos88 closed 7 years ago

rsantos88 commented 7 years ago

Adjunto el fichero con el diálogo que propuso Carlos en la reunión para las Demos. La demo de follow-me actualmente se encuentra adaptada en inglés, con algunas diferencias (00cdb30ce2865b88e7f07b0a012564a043884cca) Falta incluir la parte en la cual TEO indica "estás a la derecha", estás a la izquierda", "estás en el centro". ¿Sería correcto llamar a la función ttsSay desde InCvPort::onRead(Bottle& b)?

jgvictores commented 7 years ago

Pese a ser más complicado, sería más conceptualmente correcto tenerlo dentro de la máquina de estados, y mejor de cara a un futuro con una máquina de estados más sofisticado.

rsantos88 commented 7 years ago

En ese caso, se llamaría a ttSay desde una hipotética función llamada saySites en la máquina de estados. Para ello, tendríamos que recibir la información de haarDetection a través de un puerto que conectaríamos con followMeDialogManager. follow-me-app-saysites ¿ Cómo lo ves @jgvictores ?

jgvictores commented 7 years ago

Una conexión así tendría sentido (sin nombre)!

jgvictores commented 7 years ago

Estuve pensando esto... ¿No sería más bien una conexión con launchManipulation la necesaria? Para saber hacia dónde está apuntando el pan del cuello.

jgvictores commented 7 years ago

Esto es, dialogue manager envia comando peroodicamente (si el estado lo permite), y execution core comanda el movimiento en función del encoder de la cabeza.

rsantos88 commented 7 years ago

Entiendo que dialogue manager enviará un comando a través del puerto "outCmdPort" de la siguiente forma:

yarp::os::Bottle cmd;
cmd.addVocab(VOCAB_GET_POSITION);
outCmdPort->write(cmd);

Posteriormente, followMeExecutionCore deberá tener un OutGpPort.cpp y un OutGpPort.hpp (output get position port) el cual enviará por un puerto yarp el valor del encoder del cuello.

Conformame @jgvictores si esto sería correcto.

jgvictores commented 7 years ago

No, dialogue manager podría enviar un:

yarp::os::Bottle cmd;
cmd.addVocab(VOCAB_WAVE_APPROPRIATE_HAND);
outCmdPort->write(cmd);

Y en realidad la clase FollowMeExecutionCore hay que ampliarla para que además de yarp::dev::IPositionControl *iPositionControl; un yarp::dev::IEncoders *iEncoders;

rsantos88 commented 7 years ago

Ok, el código resultante quedaría de esta forma. Faltaría programar la parte que permita el movimiento de cada brazo. Me gustaría saber como podría continuar con la parte del habla y cómo obtener los valores de los encoders de la cabeza desde el state machine para llamar a la función ttSay.

Un saludo y gracias @jgvictores

jgvictores commented 7 years ago

Ok, hice fork de tu fork. Aquí corregí algo que me parecía peligroso en cuanto al uso de punteros sin inicializar, y aquí implementé asrListenWithPeriodicWave(). Si puedes probar el branch non-blocking-read de mi fork te lo agradezco. Si funciona, de ahí hago PR a tu fork, y de ahí hacemos PR de tu fork a la original (roboticslab-uc3m).

rsantos88 commented 7 years ago

Funciona todo correctamente :thumbsup:

rsantos88 commented 7 years ago

Realizados los respectivos pull request (#23) Acepta si lo ves correcto @jgvictores

jgvictores commented 7 years ago

PR #23 aceptado.

jgvictores commented 7 years ago

Ok, so, in sight of the latest follow-me-app.png... there's some work to do on the execution side. We must choose between:

  1. Merging followMeArmSwing into followMeExecutionCore
  2. Renaming followMeArmSwing->followMeArmExecution and followMeExecutionCore->followMeHeadExecution

I'd go for (2) -> less elegant, more ports, but probably easier and more maintainable.

rsantos88 commented 7 years ago

Ok. Then, we'll go for (2) method. It would be like this: follow-me-app changed names I think, we've to extend followMeArmExecution to include new movements with two arms.

jgvictores commented 7 years ago

Ok, seems good enough. I'd recommend:

rsantos88 commented 7 years ago

Ok, I renamed followMeArmSwing->followMeArmExecution and followMeExecutionCore->followMeHeadExecution in the code ( #24) and I updated the image. Do you see it right @jgvictores ?

jgvictores commented 7 years ago

Looking very very good. Thanks a lot for all this work.

I've updated my comment above regarding moving from yarp::os::Port to yarp::os::RpcClient.

rsantos88 commented 7 years ago

Second point done! Please @jgvictores , make sure that all looks good (#25) :smile:

rsantos88 commented 7 years ago

In point (3), I've changed command port to RpcServer port (826ae571d03187f16a8141e7a71adc69eff77a54) & (1d38ce6f175d564b05dac8da144c159a408e49c4) in followMeArmExecution, but in followMeHeadExecution, I don't know what ports do you want to change @jgvictores

jgvictores commented 7 years ago

I'm guessing you mean the arm execution, where we set up callbacks. So the code of "getting a callback" from: http://www.yarp.it/port_expert.html Has to start looking more like "getting replies" section of the same tutorial (when it starts speaking about callbacks).

Those are just some pointers; check out the tutorial, try to see how it corresponds to the code, and I'll get back to you.

rsantos88 commented 7 years ago

Vale, si no me equivoco lo que pretendes sería comunicar por un puerto RPC followMeDialogueManager con followMeHeadExecution de forma bidireccional. Esta comunicación se podría emplear para que followMeDialogueManager haga una petición para conocer la posición del encoder de la cabeza y followMeHeadExecution responda de forma instantánea utilizando el método descrito en "Getting replies". ¿Es correcto?

jgvictores commented 7 years ago

Correcto!

rsantos88 commented 7 years ago

Se ha añadido un nuevo VOCAB, implementando el código de la siguiente forma ¿Estaría correcto así @jgvictores ?

jgvictores commented 7 years ago

Bien, creo que de momento vale!

jgvictores commented 7 years ago

Oh, I just remembered. I think it's best not to return false on the InDialoguePortProcessor::read(ConnectionReader& connection) method. Best is to add a VOCAB_FAILED, send it, and return true.

rsantos88 commented 7 years ago

Updated with that modification

rsantos88 commented 7 years ago

Update the port names and app xml connections.(93ec46456184381c99572c8dac718f8d1350ddad) Something wrong @jgvictores ??

jgvictores commented 7 years ago

Everything looks very good. To strictly follow the current connection diagram, this and this would have to run on /manipulation, but this is actually a more practical setup, so it's good enough for me!

rsantos88 commented 7 years ago

Por el momento ya está implementado y funcionando. Cada 10 segundos, indica a través de una frase si estás a la derecha, a la izquierda o en el centro según si el encoder se posiciona en enc>10, enc<-10 o -10<enc<10 respectivamente (link) El siguiente paso sería implementar los movimientos en los brazos y ampliar más el dialogo si se quisiera con frases alternativas.

rsantos88 commented 7 years ago

Tal y como se encuentra programado ahora mismo, el robot indicaría si te encuentras a la derecha, a la izquierda o en el centro, dependiendo de la posición del encoder del cuello. Cada 10 segundos estaría repitiendo tu posición, desde el momento en que le ordenes que te siga y le digas tu nombre. El problema es que si el robot deja de detectar una cara, seguiría repitiendo "ahora estas a la derecha"... a la izquierda... etc cada 10 segundos, dependiendo de la última posición en la que haya quedado su cuello. Sería ideal que robot pudiera dejar de pronunciar estas frases en el momento en que haarDetection dejase de detectar una cara o volver a pronunciarlas en caso de que vuelva a detectar una cara. Lo dejo como sugerencia para una posible mejora futura ;)

rsantos88 commented 7 years ago

Añadido pull request #26

rsantos88 commented 7 years ago

Actualizado el gráfico a los nuevos cambios: commit (40dba08d752720700104c443b2e2a6e90c4559ff) Con todo esto, se pueden dar por concluidas las mejoras del follow-me propuestas. Cierro issue :)

jgvictores commented 7 years ago

@rsantos88 Thank you so much!! Muchas gracias por todo el curro y esfuerzo. 🥇 😄 🥇

rsantos88 commented 7 years ago

:blush: