Capítulo 4: Reestructuración de SimEco
4.1 Arquitectura de Simeco
SIMECO presenta una estructura modular determinada por dos módulos bien definidos: Core y UI (Interfaz de usuario). El primero es el motor del simulador y se encarga de generar la imagen de ultrasonido. Está conformado principalmente por las siguientes clases:
Clase Descripción Interfaces
TransducerElemen t
(TE)
Representa a cada uno de los rayos del transductor.
Get/Set:
● Vector de posición
● Vector de dirección
Transducer
Contenedor de los elementos del transductor. Define el número y ancho de elementos del transductor como así también el espacio entre los que son adyacentes entre si y cuales son los activos. También setea la intensidad inicial de la onda, la profundidad del rayo y el delta de muestreo.
Get/Set:
● Cantidad de TE
● Número de TE activos
● Ancho de cada TE
● Espacio entre TE adyacentes
● Longitud de apertura activa
● Ventana de TE
● Intensidad inicial
● Profundidad del rayo
● Delta de muestreo
● Intervalo random entre deltas de muestre
InputManager
Controla las entradas de teclado/joystick para mover al transductor.
Actualización de entradas por teclado o joystick. Set: ● Transducer ● Sensibilidad de traslación CTVolume Es la entidad responsable de la representación del CT. Get: ● Valor en un punto determinado Set: ● Volumen CT Simulator Es la estructura encargada de calcular una imagen simulada de ultrasonido.
Simulación del frame Get ● Imagen simulada Set: ● Transducer ● CTVolume Renderer Se encarga actualizar el contenido del frame proveniente de la simulación. ● Get: Último frame Set: ● Información de entrada ● Rango de entrada
● Ganancia aplicada a los datos de entrada
● Factor gamma aplicado a los datos de entrada
Simeco
Crea y administra los elementos necesarios para la simulación.
Set:
● Foco
● TCG
● Ganancia
SimecoAPI
Define las interfaces que los clientes de simeco pueden utilizar para interactuar con simeco.
Set:
● Foco
● TCG
● Ganancia
SimecoClient Es el nexo entre el módulo core
con el exterior.
El módulo restante se encarga de mostrar la simulación del ecógrafo y genera las distintas vistas de la interfaz de usuario. Sus clases principales son:
Clase Descripción Interfaces
SimecoThread Encargada de construir una instancia de Simeco.
Get:
● Último frame de imagen ultrasonido.
Set:
● Foco
● TCG
● Ganancia
ExcerciseNode Abstracción principal de los ejercicios de simulación.
Método de inicialización del ejercicio.
MainMenu Menú principal de la interfaz, se construyen los botones que inician los ejercicios.
Señales:
● Iniciar ejercicio
SimecoWidget Construye el panel en el cual se mostrará la imagen simulada.
Crear panel de imagen.
La figura 4.1.1 muestra una vista general del sistema y la comunicación entre los objetos dentro y fuera de los módulos.
Figura 4.1.1. Vista general de Simeco
SIMECO inicia su ejecución del lado del módulo de Interfaz construyendo un nuevo objeto del tipo ExcersiceNode por cada ejercicio disponible, mostrandolos en una lista de botones en el
menú principal del programa. Cuando un usuario presiona alguno de estos, MainMenu emite una señal de que el ejercicio ha sido iniciado, en efecto está siendo invocado el método start() de la clase
Exercise. Este método se encarga de crear una nueva instancia del objeto SimecoThread, el cual hace de nexo con el módulo de simulación debido a que hereda de SimecoClient. A su vez, dicho método ejecutará el thread recientemente creado e iniciará su propio método start(), el cual se encarga de crear una instancia de Simeco. Por otro lado Exerciserecibe también el último frame actualizado por el core de simulación, emitiendo una señal de finalización de frame con los nuevos datos para actualizar la imagen de ultrasonido. Dicha imagen es mostrada en una instancia de la clase SimecoWidget, encargada de generar la interfaz gráfica que recrea a un simulador de ultrasonido.
Una vez creado el objeto Simeco por medio de su método init(), se crean todas las instancias de las clases del core necesarias para la simulación de las imágenes de ultrasonido. Luego de la etapa de inicialización, se invoca el método run()que inicializa un loop infinito hasta el cierre del ejercicio. Éste actualizará la instancia de transducer para tener las nuevas posiciones de los elementos del transductor y generar la simulación de la nueva imagen de ultrasonido en la instancia de la clase Simulator. Por último, Renderer renderizará la imagen para que simeco emita una señal notificando que está disponible el nuevo frame a visualizar.
4.1.1 Dependencias
SIMECO reutiliza un conjunto de librerías third-party para implementar toda su funcionalidad. Dentro de ellas se encuentra:
● GLM: Es una librería matemática only header para programas de gráficos basados en en lenguaje de sombreado OpenGL. SIMECO utiliza esta librería para la representación de las posiciones y la orientación del transductor, así como también para los elementos del transductor y los volúmenes de entrada.
● VTK: Es un sistema de software libre para la realización de gráficos 3D por computadora, procesamiento de imágenes y visualización. Admite una amplia variedad de algoritmos de visualización y técnicas de modelado avanzadas. Presenta además un extenso marco de visualización de la información y un conjunto de widgets de interacción 3D. SIMECO hace uso de esta librería para cargar los volúmenes anatómicos de entrada y para visualizarlos en la interfaz de usuario.
● OpenCV: Es una librería open source que proporciona una infraestructura común para aplicaciones de visión artificial y machine learning. Fue diseñado para la eficiencia computacional y con un fuerte enfoque en aplicaciones en tiempo real. SIMECO utiliza esta librería para generar las imágenes de ultrasonido de forma eficiente.
● SFML: Es una API cuyas funcionalidades permiten al usuario crear videojuegos y programas interactivos. SIMECO aprovecha el módulo “graphics” para el control del transductor por medio del teclado y el joystick.
● QT: Es un framework multiplataforma usado para desarrollar programas que utilicen interfaz gráfica de usuario.
● GTest: Es una biblioteca para escribir casos de pruebas en el lenguaje de programación C ++.
● Inih: Es una librería pequeña y simple para analizar archivos .INI. SIEMCO utiliza archivos de configuración .INI para cargar las configuraciones del simulador que pueden ser modificadas por el usuario.
● Easylogging: Es una librería only header utilizada para el registro eficiente de logs en aplicaciones C ++. Es extremadamente potente, extensible y configurable para los requisitos del usuario.
● PSMoveAPI:Es una biblioteca de código abierto multiplataforma para acceder al controlador de movimiento Sony Motion a través de Bluetooth y USB directamente desde un PC sin la necesidad de una PS3.
● MyAHRS plus: es un AHRS de alto rendimiento y bajo costo. Los AHRS son sensores tridimensionales formados por giróscopos, acelerómetros, y magnetómetros, que proporcionan datos en los tres ejes del espacio. SIME CO tiene un traductor ficticio creado a partir de una placa MyAHRS plus y utiliza su SDK de para obtener las posiciones del transductor.
● Serial: Esta es una biblioteca multiplataforma escrita en C ++ para interactuar con puertos en serie rs-232. Simeco utiliza esta librería para leer el puerto serial donde se conecta el maniquí y luego traducir esa información en la posición del transductor.