http://robologs.net/2016/02/29/tutorial-de-arduino-y-blender/
Tutorial de Arduino y Blender
Nota: es recomendable tener unos conocimientos básicos de como funciona la interfaz de Blender para seguir bien el tutorial.
Animaciones, edición de video, videojuegos, realidad virtual… lo que más me gusta de Blender es que permite hacer de todo. Para los que no conozcáis Blender, se trata de una suite de creación 3D con la que se puede hacer modelaje, rigging, VFX, composición e incluso videojuegos. Los usuarios más avanzados pueden crear scripts en Python para
Hoy voy a enseñaros una parte de Blender de la que pocas veces se habla: la posibilidad de recibir datos a través del puerto de serie. Usaremos esta característica para recibir datos de una placa Arduino y mover un objeto en Blender.
Así que poned buena música y empezamos.
1- Instalar Blender
La última versión de Blender puede bajarse desde la página de descargas de blender.org. En el momento de redactar este tutorial, la versión que tengo es la 2.76. Descargad Blender, descomprimid el archivo y recordad cuál es su directorio.Un par de apuntes para los que estéis en Linux: os recomiendo que no os bajéis la versión de Blender que hay en los repositoros de vuestra distribución. A mi no me ha dejado utilizar la librería pySerial, mientras la versión que he descargado de blender.org no me ha dado problemas.
Por otra parte, en Linux hay que ejecutar Blender en modo superusuario para poder utilizar el puerto de serie. Para hacerlo, abrid la Terminal dentro de la carpeta donde tengáis Blender y escribid:
sudo ./blender
2- pySerial y Blender
Blender lleva por defecto muchas librerías que podemos aprovechar para nuestros proyectos. Pero la librería pySerial no está, y habrá que instalarla. Por suerte, Blender es muy configurable y podemos hacerlo sin problema.Lo primero es descargar la librería pySerial desde aquí y descomprimir el .tar.gz . Dentro de la carpeta que aparece después de la extracción, hay otra carpeta llamada “serial”. Hay que copiarla dentro de la carpeta de Blender->2.76->python->lib->python3.4
Este es mi path al directorio donde hay que copiar la carpeta “serial”:
Ahora, ¿cómo puede uno estar seguro de haber seguido bien todos los pasos? Abrid Blender. Arriba, en la barra de información hay un menú desplegable con distintas configuraciones para la pantalla. Pulsad la que pone Scripting.
La configuración del espacio de trabajo cambiará a esta:
La parte de abajo (esa ventana negra con el texto azul) es la consola de Python de Blender. Funciona como una consola de Python normal, sólo que en vez de utilizar las librerías Python del sistema usa las de Blender.
Si tecleáis “import serial” en la consola y no da ningún error, es que la librería pySerial se ha instalado bien.
Pero si aparece algún mensaje de error, tendréis que revisar todos los pasos hechos hasta ahora.
3- Código de Arduino
El ejemplo más sencillo que se me ocurre es mover un cubo de Blender con Arduino.Este programa envía por serial el mensaje 0.1 para que el cubo avance, y -0.1 para que retroceda.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| void setup() { Serial.begin(9600); } void loop() { for ( int i = 0; i < 100; i++) { Serial.print( "&0.1" ); Serial.print( "\n" ); delay(10); } for ( int i = 0; i < 100; i++) { Serial.print( "&-0.1" ); Serial.print( "\n" ); delay(10); } } |
4- Código de Blender
Vamos a colocar un script python al cubo que viene por defecto en la escena, para que se mueva según lo que llegue por serial.Primero habrá que cambiar la configuración del espacio de trabajo a Game Logic. Id al desplegable de la barra de información y seleccionad la opción “Game Logic“.
La configuración de la pantalla cambiará a esta:
También cambiad el motor de Blender Render a Blender Game:
La ventana gris de arriba a la derecha es un editor de texto. Aquí es dónde vamos a programar el script en python para leer el puerto serial. Como no quiero que perdáis la vista, colocad el cursor sobre el editor de texto y pulsad Ctrl+Flecha Arriba para hacer grande la ventana.
Cread un nuevo script pulsando el botón “New” que hay en la barra de abajo, y cambiadle el nombre a “main.py”. Ahora copiad el script de abajo en el editor. ¡Eh, pero no tan rápido! Antes cambiad el “/dev/ttyUSB0” de la línea 6 por la dirección de vuestra placa Arduino.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| import serial #Comunicacion Serial import bge #Funciones propias de blender #Abrimos el puerto serial ser = serial.Serial( "/dev/ttyUSB0" , 9600 ) #Guardamos el controlador que esta ejecutando este script cont = bge.logic.getCurrentController() #Buscamos el propietario del controlador (el cubo) obj = cont.owner a = ser.readline() #Leer hasta el final de linea \n a = a.decode( "ascii" ) #Decodificar la linea if a[ 0 ] = = "&" and len (a) > = 4 : a = a[ 1 :] #Eliminamos el detector de errores a = a[: - 1 ] #Eliminamos el final de linea obj.applyMovement([ float (a), 0 , 0 ], False ) #Movemos el cubo ser.close() |
Cuando tengáis copiado el código habrá que asignarlo al cubo. Pulsad Ctrl+Flecha abajo para volver el editor de texto a su tamaño original.
Con el cubo seleccionado con el botón derecho, Id a la ventana de Game Logic Editor y añadid un sensor de tipo always. Activad el TRUE level triggering y poned Skip a 0.
Después, hay que añadir un controlador de tipo “python”. Cambiad el nombre del script a main.py:
Por último, hay que juntar el Sensor Always con el Controlador Python. Para hacerlo, pulsad el círculo negro que hay a la derecha del sensor con el Botón Izquierdo del ratón y arrastrad hasta el anillo que hay a su derecha.
5- Probar el “juego”
Con Arduino conectado a través de USB a vuestro ordenador, si situáis el cursor encima de la escena 3D (dónde está el cubo) y pulsáis la tecla “P”, veréis como el Cubo se mueve de un lado a otro.Espero que este tutorial os haya servido. Si tenéis dificultades en algún paso, podéis escribirme un comentario y os echaré una mano. ¡Hasta la próxima!
Buenas tardes, no puedo ver las imágenes y si quiero dirigirme a la fuente (http://robologs.net/2016/02/29/tutorial-de-arduino-y-blender/) me pide nombre de usuario y contraseña. Agradecería me compartiese la documentación. Saludos, Eduardo.
ResponderEliminar