Comportamiento del sistema ========================== Diseño ------ El proyecto está compuesto por nodos de ROS 2 organizados en tres divisiones principales: stage, things y utils, que en conjunto incluyen un total de cuatro nodos. * Stage: Esta división contiene tres nodos principales: adjuster, gate y platform. Estos nodos gestionan las etapas de apertura y cierre, coordinando las operaciones relacionadas con estas tareas. * Things: En esta división se encuentra un único nodo que permite la comunicación remota con la caja y tenga conexión con el dron. Este nodo establece y mantiene la conexión con ThingsBoard. * Utils: Se trata de una carpeta que agrupa archivos de código reutilizables, diseñados para ser utilizados por los diferentes nodos del proyecto. Comportamiento de la caja ------------------------- El comportamiento de la caja está conformado por tres etapas principales; ajustes, plataforma y compuertas. * Comandos: * "box open" * "box close" Box Open ^^^^^^^^ El orden de cómo se empezará a abrir la caja es primero se abren las compuertas, teniendolas abiertas se empezará a subir la plataforma y después se abrirán los ajustes. * Casos al momento de abrir las compuertas: * Si están completamente cerradas las compuertas: * La compuerta izquierda hará un delay de espera determinado en el generator.py (openDelay), y después de esa espera empezará a abrir. En este mismo caso la compuerta derecha empezará a abrir luego luego sin delay, cuando haya pasado el tiempo de openDelay se parara, esperará el mismo tiempo de delay, y empezará a abrir de nuevo. * Resumen: Lo que se hace es que la compuerta derecha abra por ejemplo 2 segundos (El tiempo se pone en el generator.py), en ese tiempo la compuerta izquierda se quedará esperando, pasando ese tiempo empezará a abrir la izquierda y la derecha la esperara, cuando las dos se alineen a los 2 segundos de movimiento, las dos empezaran a abrir parejo. * Si las compuertas no están completamente cerradas: * Simplemente las compuertas se abren parejo hasta tocar switch. * Caso de error: Se determina una variable open_max_time en generator.py, si las compuertas tardan más de ese tiempo al abrir se paran los motores de las compuertas y se manda error en esta etapa. * Casos al momento de abrir la plataforma: * En esta etapa lo primero antes de subir (abrir) la plataforma se evalúa el estado de las compuertas, para que se pueda intentar subir la plataforma se tiene que asegurar que las compuertas están abiertas, en caso contrario no se abrirá la plataforma pero se quedará esperando a que reciba confirmación o hasta que reciba otro comando. * Las compuertas si están abiertas: * Si se confirma que las compuertas están abiertas empezará a subir la plataforma hasta tocar con switch. * Caso de error: Se determina una variable open_max_time en generator.py, si la plataforma se tarda más de ese tiempo al abrir se para el motor y se manda error en esta etapa. * Casos al momento de abrir los ajustes: * En esta etapa lo primero antes de abrir los ajustes se evalúa el estado de la plataforma, para que se pueda intentar abrir los ajustes se tiene que asegurar que la plataforma está abierta, en caso contrario no se abrirán los ajustes pero se quedarán esperando a que reciba confirmación o hasta que reciba otro comando. * La plataforma está abierta: * Si se confirma que la plataforma está abierta empezarán a abrir ambos ajustes (lateral y frontal) al mismo tiempo hasta hacer contacto con su switch de apertura. * Caso de error: Se determina una variable open_max_time en generator.py, si los ajustes se tardan más tiempo en abrir se paran los motores, se manda error en esa etapa. Box Close ^^^^^^^^^ El orden de cómo se empezará a cerrar la caja es cerrar los ajustes, despues se bajara (cerrará) la plataforma y al final las compuertas se cerraran. * Casos al momento de cerrar los ajustes: * El ajuste lateral tendrá un delay de espera determinado en el generator.py y después de ese tiempo empezará a cerrar hasta tocar con su switch de cerrado. * El ajuste frontal empezará a cerrar inmediatamente y parará cuando toque su switch de cerrado. * Caso de error: Se determina una variable close_max_time en generator.py, si alguno de los ajustes se tardan más tiempo en abrir se paran los motores, se manda error en esa etapa. * Casos al momento de cerrar la plataforma: * En esta etapa lo primero antes de bajar (cerrar) la plataforma se evalúa el estado de los ajustes, para que se pueda intentar bajar la plataforma se tiene que asegurar que los ajustes estén cerrados, en caso contrario no se cerrará la plataforma pero se quedará esperando a que reciba confirmación o hasta que reciba otro comando. * Los ajustes están cerrados: La plataforma empieza a bajar hasta tocar con el switch de cerrado. * Caso de error: Se determina una variable close_max_time en generator.py, si la plataforma se tarda más de ese tiempo al cerrar se para el motor y se manda error en esta etapa. * Casos al momento de cerrar las compuertas: * Las compuertas empezaran a cerrar solo en el caso de que tengan la confirmación de que la plataforma esté cerrada, en el caso contrario se quedarán esperando la confirmación o hasta que llegue un nuevo comando. * La plataforma está cerrada: * La compuerta derecha hará un delay de espera del tiempo determinado en el generator.py por closeDelay, después de esa espera empezará a cerrar hasta tocar switch de cerrado. * La compuerta izquierda cerrará directamente hasta tocar con el switch cerrado. * Caso de error: Se determina una variable close_max_time en generator.py, si alguna de las compuertas se tarda más de ese tiempo al cerrar se para el motor y se manda error en esta etapa.