3 minute read

Nos adentramos en la decimosexta semana del blog. Los retos indicados son:

Trastear con D1

Trastear con D1

Sensores

Sensor distancia: getDistances()

¿Es posible visualizar los valores de la función?

Los métodos para visualizar los valores dados por la función son los siguientes:

dist = await myRobot.getDistances();

await myRobot.printConsole(dist);

 

await myRobot.getDistance(); + console.log en el interior de la funcion

¿Es posible la modificación de los valores otorgados por el sensor de distancia?

Su modificación es sencilla, ya que los valores se almacenan en un array. Por tanto, podemos crear un array con los valores que deseemos y se vera reflejado en otras funciones como getDistance().

¿Es posible otorgar un valor determinado al bigote central?

Existen 30 bigotes, por tanto, el bigote central es el número 14 (se inicializa en 0). Se ha logrado modificar de forma satisfactoria, ya como he dicho anteriormente se trata de un array.

Sensor cámara

Funcionamiento cámaraIR

Hemos de tener en cuenta que se trata de una cámara Aframe que sufre un procesamiento para entregar la imagen de un modo concreto.

getImageData_async() + getImageDataIR_async()

Funciones que almacenan las imagenes procedentes del robot en la variable ‘imagedata’ y esto permite obtener imagenes procedentes del robot usando la función ‘getImage()’.

Estamos interesados en la cámara infrarroja, por ello, he localizado donde se realiza el procesamiento de la imagen y considero que es en la función ‘readIR’.

Brains

Webworker

Se trata de un script JavaScript que corre de fondo, es decir, es independiente al resto de scripts y no afecta a la página principal (se puede actuar en ella sin problema).

La mayoría de los navegadores soportan webworkers, aunque es conveniente comprobarlo antes.

Una vez creado el archivo webworker se ha de llamar desde la página principal HTML. Considero que esto no ocurre Podemos recibir/enviar mensajes desde el webworker. Se han de añadir eventos listener.

¿Cómo utilizarlos?

  1. Verificar que son soportados por el browser.
  2. Se crear a partir de un archivo externo de JavaScript, donde pondremos la función que ejecutará el web worker.
  3. Se ha de crear del siguiente modo. worker = new Worker(“name.js”)
  4. Utilizar un listener para enviar y recibir mensajes del worker.
  5. Se ha de finalizar para evitar que escuche mensajes hasta el infinito. worker.terminate()

¿Cómo se enlaza brains con el resto de ficheros? Considero que únicamente se comunican con la carpeta robotAPI, ya que se trata de las comunicaciones con el cerebro del robot. He visto que la ruta se importa, pero ¿esto basta para que se ejecute el código?

Webworker aplicado a nuestro código

Hemos de tener en cuenta que nuestro browser ejecuta en primer plano Aframe, pero en segundo plano se esta ejecutando el cerebro del robot.

Componentes de la carpeta Brains

  • brains-methods.js

Fichero constituido por diversas funciones.

  1. brains.threadExists = (robotID): encargado de devolver procesos existentes.
  2. brains.isThreadRunning = (robotID): encargado de chequear si el proceso esta corriendo.
  3. brains.runWorkerBrain = (robotID, code): encargado de crear la estructura worker e inicializarlo.
  4. brains.stopWorker = (robotID): encargado de parar el proceso.
  5. brains.resumeWorker = async (robotID, code): encargado de generar un resumen y chequear si el código ha cambiado cuando se crea un nuevo proceso.
  6. brains.resetWorker = (robotID): encargado de resetear el worker cuando la simulación lo ha sido.
  7. reloadWorker(robotID): encargado de crear un nuevo proceso.
  8. startWorker(robotID, userCode): encargado de inicializar el worker.
  9. requestAdditionalFiles(): encargado de requerir archivos adicionales en caso de que el worker lo necesite.
  10. generateWorkerCode(robotID, userCode): encargado de comibar userCode y additional worker code para generar un nuevo código para el worker.
  11. addBrainIterationFunction(userCode, whileFunction)
  12. brains.removeWorker = async (robotID): encargado de finalizar la ejecución y eliminarlo.
  13. brains.showThreads = (): encargado de pintar los procesos en el debugging.
  14. brains.getThread = (robotID): encargado de otorgar el proceso del robot.

function startWorker (brains-methods)

Se trata de la única función que hace uso de la función reply (mini-proxy.js), por tanto, me resulta de interés.

Pasos que sigue:

  1. Espera a que finalicen los procesos anteriores.
  2. Diferentes acciones.
  3. Respuesta dirigida a la función reply, es decir, se introduce el mensaje (función + parámetro).
  • miniproxy-worker.js

Contiene la función reply. Encargado de manejar mensajes (función + parámetro) del worker y traducirlos a HALapi. Una vez se identifica la función se llama a la misma y se introduce el parámetro, que como ya he comentado anteriormente forma parte del mensaje.

¿Dónde llamamos a elementos procedentes de la carpeta Brains?

  1. consoleRobotAPI.js –> importado getThread + isThreadRunning desde brains-methods –> Se importa el proceso que se esta ejecutando y la confirmación de que realmente lo esta haciendo.
  2. HALRobotAPI.js –> importado getThread desde brains-methods –> Se importa el proceso que se esta ejecutando.
  3. visionRobotAPI.js –> importado isThreadRunning desde brains-methods –> Se importa la confirmación de que un proceso se esta ejecutando.

¿Nos referimos con proceso a las instrucciones que son otorgadas por el usuario a traves del editor?

La pregunta anterior es una duda.