Hace un tiempo que quería hacer unas pruebas y hoy le llegó el día:

https://youtu.be/VJwai755PEk

Para algunos comandos del mBot he creado Bloques que por ahora se encargan de simular al robot.

Luego, mediante una variable, controlaré si se va a simular o si se va a controlar al mBot.
Por ahora no está dicha variable y no se están generando los comandos al mBot.

En estas primeras pruebas quería ver si era viable/posible simular aunque sea precariamente al mBot. Las primeras pruebas me dejaron bastante conforme

Hay un tema de escalas, métrica etc que todavía hay que trabajar mucho...

esta es la versión de un siguelineas y un evasor de obstáculos cuya ejecución se muestra en los videos.

5bfb5f67b24b4.png

5bfb5f7dee67d.png

Durante la ejecución de los programas activo la visibilidad del objeto utiizado para UltraSonido.

En el escenario: negro/blanco para el sensor de siguelineas y Rojo para el de ultrasonidos.

En la medida que muevo el mBot, recalculo la ubicacion de dos objetos siguelinea y si están sobre blanco o no se recalcula el valor reportado 0..3 del sensor. El sensor de ultrasonido me costo bastante mas... pero la idea es ubicarlo, orientarlo y moverlo de a tramos hasta interceptar algo rojo, luego si la distancia es mas o menos... tanteo con mejor resolucion.. por eso, se ve que la linea negra avanza rapido hasta el rojo y en algunos casos retrocede a menor velocidad...

bueno, espero poder probar mas a fondo esta nueva idea y ya subiré el código cuando lo tenga en un formato mas presentable smile

saludos

Juan

Hace un tiempo que quería hacer unas pruebas y hoy le llegó el día: https://youtu.be/VJwai755PEk Para algunos comandos del mBot he creado Bloques que por ahora se encargan de simular al robot. Luego, mediante una variable, controlaré si se va a simular o si se va a controlar al mBot. Por ahora no está dicha variable y no se están generando los comandos al mBot. En estas primeras pruebas quería ver si era viable/posible simular aunque sea precariamente al mBot. Las primeras pruebas me dejaron bastante conforme Hay un tema de escalas, métrica etc que todavía hay que trabajar mucho... esta es la versión de un siguelineas y un evasor de obstáculos cuya ejecución se muestra en los videos. ![5bfb5f67b24b4.png](serve/attachment&path=5bfb5f67b24b4.png) ![5bfb5f7dee67d.png](serve/attachment&path=5bfb5f7dee67d.png) Durante la ejecución de los programas activo la visibilidad del objeto utiizado para UltraSonido. En el escenario: negro/blanco para el sensor de siguelineas y Rojo para el de ultrasonidos. En la medida que muevo el mBot, recalculo la ubicacion de dos objetos siguelinea y si están sobre blanco o no se recalcula el valor reportado 0..3 del sensor. El sensor de ultrasonido me costo bastante mas... pero la idea es ubicarlo, orientarlo y moverlo de a tramos hasta interceptar algo rojo, luego si la distancia es mas o menos... tanteo con mejor resolucion.. por eso, se ve que la linea negra avanza rapido hasta el rojo y en algunos casos retrocede a menor velocidad... bueno, espero poder probar mas a fondo esta nueva idea y ya subiré el código cuando lo tenga en un formato mas presentable :) saludos Juan

Juan

He reescrito algunas partes y calibrado un poco algunas cositas...

Ahora, hay una variable Simulacion que puede valer 1 o 0 y es basculada mediante la tecla S

Si simulacion está en 1, el script se simula en el escenario, si simulacion está en 0, entonces se envian comandos al mBot, que naturalmente debe estar conectado a mBlock.

He implementado los bloques:
avanzar, retroceder, girar derecha, girar izquierda, fijar motor1, fijar motor2, sigue-lineas y ultra-sonido

como los bloques de mBlock no pueden devolver un valor, hay que usar el bloque y este fija la variable correspondiente, las cuales luego pueden ser utilizadas en el script. Dichas variables se muestran en el escenario.

aqui les dejo el enlace de descarga del proyecto:
cada proyecto incluye el código del simulador y en particular el codigo de un siguelineas con un escenario que tiene una pista:

https://drive.google.com/open?id=1JfbiMu9T5XV75DsdS-43jo7YDdkZAYQJ

y el otro proyecto incluye una serie de obstaculos y el códgio para evadir obstaculos (además del código del simulador)

https://drive.google.com/open?id=1NDeEDjAbnBfCch_35t50HQBgG7lJcQbs

espero sus comentarios

saludos

Juan

He reescrito algunas partes y calibrado un poco algunas cositas... Ahora, hay una variable Simulacion que puede valer 1 o 0 y es basculada mediante la tecla S Si simulacion está en 1, el script se simula en el escenario, si simulacion está en 0, entonces se envian comandos al mBot, que naturalmente debe estar conectado a mBlock. He implementado los bloques: avanzar, retroceder, girar derecha, girar izquierda, fijar motor1, fijar motor2, sigue-lineas y ultra-sonido como los bloques de mBlock no pueden devolver un valor, hay que usar el bloque y este fija la variable correspondiente, las cuales luego pueden ser utilizadas en el script. Dichas variables se muestran en el escenario. aqui les dejo el enlace de descarga del proyecto: cada proyecto incluye el código del simulador y en particular el codigo de un siguelineas con un escenario que tiene una pista: https://drive.google.com/open?id=1JfbiMu9T5XV75DsdS-43jo7YDdkZAYQJ y el otro proyecto incluye una serie de obstaculos y el códgio para evadir obstaculos (además del código del simulador) https://drive.google.com/open?id=1NDeEDjAbnBfCch_35t50HQBgG7lJcQbs espero sus comentarios saludos Juan

Juan

editado 27 Nov '18 a las 1:23 am

Lo nuevo:

Se puede reposicionar el sensor de ultrasonido: hacia adelante, a la derecha y a la izquierda.
Se puede reposicionar el sensor de siguelineas: hacia abajo o hacia adelante.

Se redimensionaron las cosas para:

1 punto del escenario corresponde a 0.25 cm
Por tanto el escenario de 480x360 puntos equivale a un área de 120cm x 90cm
mBot ocupa 69x52 puntos de pantalla: 17x13cm
A velocidad 100 se desplaza 18cm
A velocidad 255 realiza un giro de 360 grados en 1 segundo

Algo que posiblemente no he aclarado demasiado y creo que es lo mas importante, es el hecho de que se puede pasar de Simulación a controlar el mBot real, ya que los Bloques que he implementado y que simulan al mBot, invocan los comandos del mBot si no estamo en modo Simulación. En el código del objeto mBot, si pulsamos la tecla "s", pasamos de simulación a no simulación: en este modo, avanzar, retroceder etc ejecutan los comandos del robot. De esta manera, si estamos conectados al mBot, podemos simular en el escenario y pasar a probar el código en el mBot, todo desde dentro de mBlock.

En el siguiente video se muestra el comportamiento del simulador en un laberinto, siguiendo una línea y evadiendo obstáculos.

<iframe width="800" height="400" src="//www.youtube.com/embed/unOYhJySAPk" frameborder="0" allowfullscreen=""></iframe>

El proyecto .sb2 se puede descargar de:

https://drive.google.com/open?id=1l0XXNdlliDvMkU7PsZGTD9SS6btS4-sx

Suerte

Juan

Lo nuevo: Se puede reposicionar el sensor de ultrasonido: hacia adelante, a la derecha y a la izquierda. Se puede reposicionar el sensor de siguelineas: hacia abajo o hacia adelante. Se redimensionaron las cosas para: 1 punto del escenario corresponde a 0.25 cm Por tanto el escenario de 480x360 puntos equivale a un área de 120cm x 90cm mBot ocupa 69x52 puntos de pantalla: 17x13cm A velocidad 100 se desplaza 18cm A velocidad 255 realiza un giro de 360 grados en 1 segundo Algo que posiblemente no he aclarado demasiado y creo que es lo mas importante, es el hecho de que se puede pasar de Simulación a controlar el mBot real, ya que los Bloques que he implementado y que simulan al mBot, invocan los comandos del mBot si no estamo en modo Simulación. En el código del objeto mBot, si pulsamos la tecla "s", pasamos de simulación a no simulación: en este modo, avanzar, retroceder etc ejecutan los comandos del robot. De esta manera, si estamos conectados al mBot, podemos simular en el escenario y pasar a probar el código en el mBot, todo desde dentro de mBlock. En el siguiente video se muestra el comportamiento del simulador en un laberinto, siguiendo una línea y evadiendo obstáculos. https://youtu.be/unOYhJySAPk El proyecto .sb2 se puede descargar de: https://drive.google.com/open?id=1l0XXNdlliDvMkU7PsZGTD9SS6btS4-sx Suerte Juan

Juan

editado 29 Nov '18 a las 2:36 am

Mi intención era lograr 50 pasos de simulación por segundo, pero no he podido.

mBlock parece tener un ritmo propio y es del orden de los 30 o 31 vueltas por segundo.

Este número me coincide bastante con los no mas de 32 paquetes por segundo que envía mBlock en una conexión serie por cable al mBot... aunque no se si están relacionados.

En un "por siempre" si ponemos un condicional para entrar cada tanto tiempo, si estos tiempos son del orden de los segundos o décimas de segundo, funciona bastante bien.

Pero si queremos entrar luego de transcurrido 20 milisegundos: 0.02 segundos.
La comparación Cronómetro>CronómetroAnterior+0.02 o Cronómetro>CronómetroAnterior+0
son equivalentes y da verdad unas 31 veces por segundo.

Por distintos motivos he decidido utilizar una escala de tamaños de 1 cm = 4 puntos,
principalmente para tener un mBot lo suficientemente grande pero no demasiado y que quede un área de trabajo razonable: 120 cm por 90 cm.

mBot recorre unos 18 cm en un segundo a velocidad 100.
En esta escala equivale a 72 puntos (18*4) por segundo.
Como la simulación se efectua a unos 31 ciclos por segundo, entonces en 31 ciclos a velocidad 100 debo recorrer 72 puntos: 2.3 puntos por ciclo.
Si la velocidad fuera 1, debería recorrer 0.023 puntos y por eso la escala de velocidad (una de las variables que incializo) quedó en ese valor.

Es importante, tener en cuenta que si en nuestra máquina no se logra ese tiempo de ejecución, esta escala debería corregirse.

La última versión que estoy manejando corrije o mejora varias cosas:
En utilizo bipartición para calcular la distancia, asi todas las mediciones tienen la misma precisión, sin importar la distancia y en 9 aproximasiones obtengo la medición.

El siguelineas lo he implementado diferente, ya que antes el siguelineas izquierdo y el derecho eran movidos y evaluados por hilos independientes al del mBot, razón por la cual, su ubicación y por lo tanto evaluación del color del piso podía no ser contemporanea a la del otro siguelineas y/o mBot.. lo cual lleva a que, diferentes corridas podrian devolver diferentes valores...

Asi que ahora los sensores son disfraces del propio mBot y están siempre bien ubicados relativos a al mismo.

Tal cual está el simulador ahora, puede utilizarce de distintas maneras:

5c0afe6529020.png

A la izquierda:
Crear un hilo que Inicie el simulador y en un "por siempre" se encargue de evaluar siguelineas, ultrasonido y realizar un paso de simulación y en otro hilo escribir el programa.

A la derecha:
Escribir un programa que tenga en cuenta iniciar el simulador, consultar siguelineas y/o ultrasonido según sea necesario, invocar la ejecución de un paso de simulacion.
Si se necesita realizar una espera, en vez de utilizar el bloque "esperar" de la paleta de control, se debe utilizar el bloque "esperar" del simulador que se encarga de invocar la ejecución de pasos de simulación durante la espera.

Las variables utilizadas por el simulador todas comienzan con "sim":

5c0e5b71a05fb.png

Los bloques definidos son:

5c0b00678d741.png

Todos los bloques tienen en cuenta la variable simActivo. Si tiene el valor 1, se simula y anima al objeto mBot en el escenario. Si dicha variable tiene el valor 0, se invocan los bloques el mBot, de esta manera podemos utlizando el mismo código simular o controlar el robot.

Estos son algunos de los bloques creados:

5c0b00d52e46d.png

Mi intención era lograr 50 pasos de simulación por segundo, pero no he podido. mBlock parece tener un ritmo propio y es del orden de los 30 o 31 vueltas por segundo. Este número me coincide bastante con los no mas de 32 paquetes por segundo que envía mBlock en una conexión serie por cable al mBot... aunque no se si están relacionados. En un "por siempre" si ponemos un condicional para entrar cada tanto tiempo, si estos tiempos son del orden de los segundos o décimas de segundo, funciona bastante bien. Pero si queremos entrar luego de transcurrido 20 milisegundos: 0.02 segundos. La comparación Cronómetro>CronómetroAnterior+0.02 o Cronómetro>CronómetroAnterior+0 son equivalentes y da verdad unas 31 veces por segundo. Por distintos motivos he decidido utilizar una escala de tamaños de 1 cm = 4 puntos, principalmente para tener un mBot lo suficientemente grande pero no demasiado y que quede un área de trabajo razonable: 120 cm por 90 cm. mBot recorre unos 18 cm en un segundo a velocidad 100. En esta escala equivale a 72 puntos (18*4) por segundo. Como la simulación se efectua a unos 31 ciclos por segundo, entonces en 31 ciclos a velocidad 100 debo recorrer 72 puntos: 2.3 puntos por ciclo. Si la velocidad fuera 1, debería recorrer 0.023 puntos y por eso la escala de velocidad (una de las variables que incializo) quedó en ese valor. Es importante, tener en cuenta que si en nuestra máquina no se logra ese tiempo de ejecución, esta escala debería corregirse. La última versión que estoy manejando corrije o mejora varias cosas: En utilizo bipartición para calcular la distancia, asi todas las mediciones tienen la misma precisión, sin importar la distancia y en 9 aproximasiones obtengo la medición. El siguelineas lo he implementado diferente, ya que antes el siguelineas izquierdo y el derecho eran movidos y evaluados por hilos independientes al del mBot, razón por la cual, su ubicación y por lo tanto evaluación del color del piso podía no ser contemporanea a la del otro siguelineas y/o mBot.. lo cual lleva a que, diferentes corridas podrian devolver diferentes valores... Asi que ahora los sensores son disfraces del propio mBot y están siempre bien ubicados relativos a al mismo. Tal cual está el simulador ahora, puede utilizarce de distintas maneras: ![5c0afe6529020.png](serve/attachment&path=5c0afe6529020.png) A la izquierda: Crear un hilo que Inicie el simulador y en un "por siempre" se encargue de evaluar siguelineas, ultrasonido y realizar un paso de simulación y en otro hilo escribir el programa. A la derecha: Escribir un programa que tenga en cuenta iniciar el simulador, consultar siguelineas y/o ultrasonido según sea necesario, invocar la ejecución de un paso de simulacion. Si se necesita realizar una espera, en vez de utilizar el bloque "esperar" de la paleta de control, se debe utilizar el bloque "esperar" del simulador que se encarga de invocar la ejecución de pasos de simulación durante la espera. Las variables utilizadas por el simulador todas comienzan con "sim": ![5c0e5b71a05fb.png](serve/attachment&path=5c0e5b71a05fb.png) Los bloques definidos son: ![5c0b00678d741.png](serve/attachment&path=5c0b00678d741.png) Todos los bloques tienen en cuenta la variable simActivo. Si tiene el valor 1, se simula y anima al objeto mBot en el escenario. Si dicha variable tiene el valor 0, se invocan los bloques el mBot, de esta manera podemos utlizando el mismo código simular o controlar el robot. Estos son algunos de los bloques creados: ![5c0b00d52e46d.png](serve/attachment&path=5c0b00d52e46d.png)

Juan

editado 10 Dec '18 a las 12:26 pm

La idea del simulador es muy simple:

En función de la velocidad de los motores hay que calcular la trayectoria del robot.

Lo ideal sería poder calcular en cada instante de tiempo (un infinitésimo) pero en la realidad generalmente es suficiente con poder hacer el cálculo unas cuantas veces por segundo.

Cuantas mas veces por segundo, el movimiento visualizado va a ser mas suave y agradable a la vista. En cine se utlizan 24 cuadros por segundo. Otras frecuencias normalmente utilizadas para que sean agradables a la vista son 25 y 30 cuadros por segundo. Una cosa es que sea agradable a la vista y otra que sea matemáticamente exacto.

Como se trata de un simulador, no va a ser exactamente igual, pero si, bastante parecido.

En el post anterior, indiqué que yo pretendía llegar a 50 pasos de simulación por segundo.. pero mBlock parece tener su base de tiempos en el orden de los 30/31 pasos por segundo. No he podido ir más rápido que eso.

mBot no tiene las medidas que tiene por casualidad, la distancias entre las ruedas son dos veces su diámetro, y con estas medidas las ecuaciones que predicen su movimiento quedan muy simples:


Giro = vM1 - vM2

Desplazamiento = (vM1 + vM2)/2

Para ser más correcto deberían estar multiplicadas por dt (delta tiempo).

Como estas ecuaciones se calculan 30/31 veces por segundo nuestro dt es de aproximadamente 0.032 segundos.

vM1 y vM2 son las velocidades de los motores 1 y 2 (izquierdo y derecho respectivamente)

Un paso de simulación es realmente muy simple:

5c0e5fb238c3d.png

Arbitrariamente, decidí que los obstáculos son de color Rojo, tanto para el sensor de ultrasonido como para el robot físico. Así, luego de calcular cuanto hay que mover el robot y cuanto hay que girarlo, si luego de este movimiento, el robot está tocando Rojo, deshago el movimiento.

Como consecuencia de esto, no vemos que el robot se mueva. Entonces, si en su trayectoria hay un elemento de color Rojo, se detiene, como si hubiera colisionado.

Si se desea, en vez de deshacer el movimiento, se podría aplicar alguna regla de física 2D para por ejemplo intentar simular el comportamiento de forma mas realista... pero, cualquier intento de realizar esto va a llevar a un código mas complejo y mi intención es mantener la simulación lo mas simple posible: KISS (keep it super simple smile.

El paso de simulación que estoy utilizando, incluye contadores de pasos por segundo y llamados a la rutina de simulación, lo cual hace que aparente ser mas complejo:

5c0e5ffd749ef.png

Pero es idéntico al primero.

Con los bloques básicos del post anterior y este código ya tenemos lo fundamental del simulador en lo que a movimientos respecta.

Antes de invocar constantemente esté código hay que hacer una inicialización simple:

5c0e60b938122.png

Por comodidad, he agregado funcionalidad a algunas teclas:

5c0e60e114079.png

Movimiento:

flechas
arriba/abajo: avanzar/retroceder a velocidad 60
izquierda/derecha: girar a izquierda/derecha a velocidad 60
espacio: detener motores
teclas numéricas 1 y 2: fijan velocidad en un solo motor, razón por la cual el robot en vez de girar sobre su centro de eje, va a girar apoyado sobre la rueda de velocidad 0.

Tecal r: reposicionar el objeto mBot a las coordenadas 0,0 de pantalla (centro) y en dirección 0 (apuntando hacia arriba)

Tecla s: bascular la variable simActivo
Como he indicado, practicamente todos los bloques implementados tienen en cuenta si el simulador está o no activo. En caso de estarlo, se simula el movimiento y los sensores de siguelineas y ultrasonido, si el simulador no está activo, entonces, se envían los comandos al robot equivalentes.

Esto permitiría, simular y luego pulsando la tecla s, pasar a controlar al robot sin realizar ningún cambio en el programa.

Para finalizar esta breve descripción, si realizáramos el siguiente bucle:

Deberíamos poder mover el robot y ver el valor reportado por el siguelineas y el sensor de ultrasonido:

5c0e638cc3324.png

Los siguentes bloques son auxiliares: simReposicionar (invocado al pulsar la tecla r) y simEsperar, que debería utilizarce en vez del bloque esperar (naranja) de la paleta de control. Este bloque, realiza una espera, basada en el cronómetro y se encarga de continuar invocando los pasos de simulación mientras se espera:

5c0e64e28b200.png

Por ejemplo, para ralizar ciertos movimientos simples como avanzar, esperar, girar esperar etc, para que el simulador ralice su tarea, hay que utilizar simEsperar:

5c0e65d416747.png

La descripción de la implementación de los sensores queda para un post próximo...

Juan Ignacio

La idea del simulador es muy simple: ```` En función de la velocidad de los motores hay que calcular la trayectoria del robot. ```` Lo ideal sería poder calcular en cada instante de tiempo (un infinitésimo) pero en la realidad generalmente es suficiente con poder hacer el cálculo unas cuantas veces por segundo. Cuantas mas veces por segundo, el movimiento visualizado va a ser mas suave y agradable a la vista. En cine se utlizan 24 cuadros por segundo. Otras frecuencias normalmente utilizadas para que sean agradables a la vista son 25 y 30 cuadros por segundo. Una cosa es que sea agradable a la vista y otra que sea matemáticamente exacto. Como se trata de un simulador, no va a ser exactamente igual, pero si, bastante parecido. En el post anterior, indiqué que yo pretendía llegar a 50 pasos de simulación por segundo.. pero mBlock parece tener su base de tiempos en el orden de los 30/31 pasos por segundo. No he podido ir más rápido que eso. mBot no tiene las medidas que tiene por casualidad, la distancias entre las ruedas son dos veces su diámetro, y con estas medidas las ecuaciones que predicen su movimiento quedan muy simples: ```` Giro = vM1 - vM2 Desplazamiento = (vM1 + vM2)/2 ```` Para ser más correcto deberían estar multiplicadas por dt (delta tiempo). Como estas ecuaciones se calculan 30/31 veces por segundo nuestro dt es de aproximadamente 0.032 segundos. vM1 y vM2 son las velocidades de los motores 1 y 2 (izquierdo y derecho respectivamente) Un paso de simulación es realmente muy simple: ![5c0e5fb238c3d.png](serve/attachment&path=5c0e5fb238c3d.png) Arbitrariamente, decidí que los obstáculos son de color Rojo, tanto para el sensor de ultrasonido como para el robot físico. Así, luego de calcular cuanto hay que mover el robot y cuanto hay que girarlo, si luego de este movimiento, el robot está tocando Rojo, deshago el movimiento. Como consecuencia de esto, no vemos que el robot se mueva. Entonces, si en su trayectoria hay un elemento de color Rojo, se detiene, como si hubiera colisionado. Si se desea, en vez de deshacer el movimiento, se podría aplicar alguna regla de física 2D para por ejemplo intentar simular el comportamiento de forma mas realista... pero, cualquier intento de realizar esto va a llevar a un código mas complejo y mi intención es mantener la simulación lo mas simple posible: KISS (keep it super simple :). El paso de simulación que estoy utilizando, incluye contadores de pasos por segundo y llamados a la rutina de simulación, lo cual hace que aparente ser mas complejo: ![5c0e5ffd749ef.png](serve/attachment&path=5c0e5ffd749ef.png) Pero es idéntico al primero. Con los bloques básicos del post anterior y este código ya tenemos lo fundamental del simulador en lo que a movimientos respecta. Antes de invocar constantemente esté código hay que hacer una inicialización simple: ![5c0e60b938122.png](serve/attachment&path=5c0e60b938122.png) Por comodidad, he agregado funcionalidad a algunas teclas: ![5c0e60e114079.png](serve/attachment&path=5c0e60e114079.png) **Movimiento**: flechas **arriba/abajo**: avanzar/retroceder a velocidad 60 **izquierda/derecha**: girar a izquierda/derecha a velocidad 60 **espacio**: detener motores **teclas numéricas 1 y 2**: fijan velocidad en un solo motor, razón por la cual el robot en vez de girar sobre su centro de eje, va a girar apoyado sobre la rueda de velocidad 0. **Tecal r**: reposicionar el objeto mBot a las coordenadas 0,0 de pantalla (centro) y en dirección 0 (apuntando hacia arriba) **Tecla s**: bascular la variable simActivo Como he indicado, practicamente todos los bloques implementados tienen en cuenta si el simulador está o no activo. En caso de estarlo, se simula el movimiento y los sensores de siguelineas y ultrasonido, si el simulador no está activo, entonces, se envían los comandos al robot equivalentes. Esto permitiría, simular y luego pulsando la tecla s, pasar a controlar al robot sin realizar ningún cambio en el programa. Para finalizar esta breve descripción, si realizáramos el siguiente bucle: Deberíamos poder mover el robot y ver el valor reportado por el siguelineas y el sensor de ultrasonido: ![5c0e638cc3324.png](serve/attachment&path=5c0e638cc3324.png) Los siguentes bloques son auxiliares: simReposicionar (invocado al pulsar la tecla r) y simEsperar, que debería utilizarce en vez del bloque esperar (naranja) de la paleta de control. Este bloque, realiza una espera, basada en el cronómetro y se encarga de continuar invocando los pasos de simulación mientras se espera: ![5c0e64e28b200.png](serve/attachment&path=5c0e64e28b200.png) Por ejemplo, para ralizar ciertos movimientos simples como avanzar, esperar, girar esperar etc, para que el simulador ralice su tarea, hay que utilizar simEsperar: ![5c0e65d416747.png](serve/attachment&path=5c0e65d416747.png) La descripción de la implementación de los sensores queda para un post próximo... Juan Ignacio

Juan

editado 10 Dec '18 a las 1:19 pm

Simplemente un nuevo video, mostrando una simulacion 2D con este simulador y luego, conectados vía puerto serie con mi simulador mBot 3D.

<iframe width="800" height="400" src="//www.youtube.com/embed/tv-JgiHJQro" frameborder="0" allowfullscreen=""></iframe>

Juan

Simplemente un nuevo video, mostrando una simulacion 2D con este simulador y luego, conectados vía puerto serie con mi simulador mBot 3D. https://youtu.be/tv-JgiHJQro Juan

Juan

Les dejo un nuevo video, en estos momentos, puedo ubicar dos mBots y simularlos simulatáneamente:

<iframe width="800" height="400" src="//www.youtube.com/embed/4u9ACQLIMMw" frameborder="0" allowfullscreen=""></iframe>

enlace del proyecto en el que ya se encuentran dos mBots en un laberinto y los códigos de salida del laberinto asociados a cada uno:
https://drive.google.com/open?id=1_hHvHkTTw7cSNK4dCYebu5p8wfuhKLVq

enlace del proyecto en el que ya se encuentran dos mBots en una pista, con el código de siguelíneas asociado a cada uno:
https://drive.google.com/open?id=12DyJKsjh4rSRdDlU2Q2TIr5N18_T-ibK

El sensor de siguelíneas solo detecta negro o distinto de negro, no trabaja por rangos de oscuro/claro
El sensor de ultrasonido detecta distancias a objetos rojos o azules. Azul, ya que el cuerpo de los mBots es azul y asi puede detetar otro mBot, rojo simplemente porque se me ocurrió usar ese color para los obstáculos.

Cada punto del escenario es 1/4 de cm, por tanto el escenario que tiene 480 puntos por 360 puntos equivale a 120cm por 90cm. El mBot que tiene unos 17 por 12 cm mantiene dicha escala.

Durante la ejecución y para que las distancias y giros sean similares al mBot real, el bucle principal del simulador debe realizarce entre 30 y 31 veces por segundo.
Es a la velocidad que mBlock ejecuta los diferentes hilos cuando manejamos mas de un bucle por objeto.
He verificado que eso es asi, utilizando variables para contar los pasos por segundo, en esta versión, he quitado dichas variables para hacer menos complejo el código.

Juan

Les dejo un nuevo video, en estos momentos, puedo ubicar dos mBots y simularlos simulatáneamente: https://youtu.be/4u9ACQLIMMw enlace del proyecto en el que ya se encuentran dos mBots en un laberinto y los códigos de salida del laberinto asociados a cada uno: https://drive.google.com/open?id=1_hHvHkTTw7cSNK4dCYebu5p8wfuhKLVq enlace del proyecto en el que ya se encuentran dos mBots en una pista, con el código de siguelíneas asociado a cada uno: https://drive.google.com/open?id=12DyJKsjh4rSRdDlU2Q2TIr5N18_T-ibK El sensor de siguelíneas solo detecta negro o distinto de negro, no trabaja por rangos de oscuro/claro El sensor de ultrasonido detecta distancias a objetos rojos o azules. Azul, ya que el cuerpo de los mBots es azul y asi puede detetar otro mBot, rojo simplemente porque se me ocurrió usar ese color para los obstáculos. Cada punto del escenario es 1/4 de cm, por tanto el escenario que tiene 480 puntos por 360 puntos equivale a 120cm por 90cm. El mBot que tiene unos 17 por 12 cm mantiene dicha escala. Durante la ejecución y para que las distancias y giros sean similares al mBot real, el bucle principal del simulador debe realizarce entre 30 y 31 veces por segundo. Es a la velocidad que mBlock ejecuta los diferentes hilos cuando manejamos mas de un bucle por objeto. He verificado que eso es asi, utilizando variables para contar los pasos por segundo, en esta versión, he quitado dichas variables para hacer menos complejo el código. Juan

Juan

Agrego un enlace a una "guía de uso" en la que se explica un poco como utilizar este simulador con algunos ejemplos.
Espero les sea de utilidad.

https://drive.google.com/open?id=1XmxHprKv25NH984fJLXccbAw-cRGssng

saludos

Juan

Agrego un enlace a una "guía de uso" en la que se explica un poco como utilizar este simulador con algunos ejemplos. Espero les sea de utilidad. https://drive.google.com/open?id=1XmxHprKv25NH984fJLXccbAw-cRGssng saludos Juan

Juan

3.36k
vistas
7
respuestas
1
seguidores
vista previa (en vivo)
introduzca al menos un 10 caracteres
Advertencia: Mencionaste a %MENTIONS%, pero ellos no pueden ver el mensaje y no serán notificados
Guardando...
Guardado
Todos los posteos de este tema serán borrados ?
Borrador pendiente ... Click para continuar editando
Descartar borrador