A grandes rasgos, una ciudad inteligente tiene como objetivo conseguir una “ciudad del futuro” incrementando la calidad de vida de sus habitantes mediante la mejora de los servicios públicos, la sostenibilidad y la eficiencia utilizando las tecnologías de información y comunicación. Por ejemplo el ahorro de recursos (cada vez más escasos) o conseguir una mejor gestión de los servicios públicos.

Con el proyecto Citisim se pretende, a través de sensores, integrar servicios independientes en uno solo. Se trata de implementar un servicio que permita al mismo tiempo controlar los elementos que intervienen en la circulación de la ciudad, recoger información sobre la temperatura en algunas zonas, monitorización del paso por lugares determinados u otros aspectos que sean de interés.

Trabajo en desarrollo

A continuación describiremos los avances del proyecto hasta el momento: representación 3D de la ciudad, la importación de objetos en esa ciudad y la renderización del modelo 3D generado.

Visualización

En primer lugar representamos de forma automática la ciudad sobre la que realizar la monitorización o simulación. Para ello utilizaremos los archivos OSM de OpenStreetMap,  que nos proporcionarán los datos necesarios para la representación, y Blender, software de diseño 3D de código abierto para visualizar los edificios, carreteras y elementos (farolas, semáforos u otros) de dicha ciudad.

La aplicación desarrollada permite, hasta el momento, generar la ciudad a partir de un archivo OSM descargado previamente de la web en la que ya habremos seleccionado el área a representar. Este archivo contiene las coordenadas de los nodos que componen los elementos de la ciudad (o de nuestro fragmento de ciudad) y, mediante etiquetas, la especificación del tipo de nodo indicando el objeto al que pertenecen: carreteras, caminos o edificios, compuestos por un conjunto de nodos; o farolas y semáforos, por ejemplo, formados por un único nodo. La aplicación procesa el archivo OSM y representa en Blender los nodos que contiene, pasando las coordenadas geográficas a datos que pueda entender este software para posicionar cada objeto correctamente en la escena.

La construcción de la ciudad y el posicionamiento de objetos son posibles gracias al plugin  io_import_scene_osm.py de Vladimir Elistratov. Este plugin importa edificios y vías de OpenStreetMap: Import OpenStreetMap (.osm)

Adición de Objetos

Además de mostrar en Blender la ciudad, entendiendo que ésta está formada por vías y los edificios, lo que se pretende es dar la posibilidad al usuario de llevar a cabo monitorizaciones y simulaciones representando otros objetos. La forma en la que montaremos la escena dependerá de cuál sea nuestro objetivo: trabajar en un escenario real o ficticio.

  • Escenario real. OpenStreetMap nos da todo lo que necesitamos para construir la ciudad sobre la que trabajar, pero también puede proporcionarnos información sobre otros elementos de la misma que no sean los edificios y las vías: la situación de pasos de cebra, semáforos, farolas o incluso postes de luz. Además de determinar las coordenadas geográficas de dichos elementos OpenStreetMap da la posibilidad de indicar otras muchas características.
    En nuestro caso (al menos hasta el momento) representamos en la escena los semáforos que hay en un área determinada gracias a que, mediante etiquetas, podemos saber el tipo de objeto y su orientación (0º = norte).

    Blender y etiquetas

    A la izquierda edición de las etiquetas con iD (editor del navegador). A la derecha área en Blender en la que se han importado “semáforos” (representados aquí por una flecha para que se vea más claramente su orientación).

  • Escenario ficticio. En vez de importar en la escena objetos que se encuentren en OpenStreetMap, como en el caso anterior, una vez que el usuario haya indicado la información necesaria (posición y orientación, por ejemplo, en el caso del semáforo) y sea almacenada serán esos objetos (que no existen en realidad) los que se representen en la escena.

Renderizado de imágenes

Al ejecutar el programa, además de generar la ciudad e importar objetos en ella, se renderiza una imagen de toda la escena. La cámara que toma esa imagen es colocada en una posición a partir de la cual se ve un fragmento de la escena. La ciudad es escalada y posicionada de tal forma que entre en el rango de visión de la cámara para salir completa en la imagen.

Renderizado

Renderizado del casco antiguo de la ciudad de Toledo.

Trabajo en curso

Para poder llevar a cabo monitorizaciones o simulaciones, además de la representación de la ciudad y de los objetos que vamos a utilizar para trabajar con eventos, necesitaremos:

ASPECTOS GRÁFICOS.

  • Desarrollar un sistema que importe las vías en la escena como plano, es decir, un sólido con un grosor determinado (en función del tipo de vía y de si tiene una o dos direcciones de la circulación) en vez de las líneas que dibuja el plugin io_import_scene_osm.py.
  • Corregir el posicionamiento de los semáforos (que en este momento, al formar parte de las vías, se importan sobre la ellas) e importarlos en la escena en una posición u otra, dependiendo del grosor de la vía.
  • Añadir a la escena colores, fondos o redondear bordes para hacer que la visualización sea más atractiva.

ASPECTOS TÉCNICOS

  • Desarrollo del software para el funcionamiento de los sensores y dispositivos.
  • Desarrollo del middleware para la comunicación (eventos) que se realizará entre sensores, dispositivos y Blender.