Enriquecer las simulaciones de Aimsun Next con la interfaz de programación avanzada (API)

Nota técnica nº 65

Por Dimitris Triantafyllos

Diciembre de 2021

¿Qué es la API de Aimsun Next?

La API de Aimsun Next es una colección de funciones, en Python o C++, que te permiten leer información y realizar acciones durante una simulación mesoscópica, microscópica o híbrida mesoscópica-microscópica. Con la API, puedes hacer cambios mientras la simulación se está ejecutando, mientras que con el scripting, tienes que hacer cualquier cambio antes de que empiece la simulación.

También puedes utilizar la API para conectar una aplicación externa a la simulación. Internamente, dentro de Aimsun Next, la API puede comunicarse con el motor de simulación, y externamente, con la aplicación externa.

¿Dónde utilizar la API de Aimsun Next?

La aplicación más habitual de la API de Aimsun Next es emular los Sistemas Inteligentes de Transporte (ITS), los Sistemas Avanzados de Asistencia al Conductor (ADAS) y las aplicaciones de los Vehículos Conectados (VC): por ejemplo, implementar algoritmos personalizados de prioridad de señales de tránsito y de control adaptativo del tráfico; aplicar la gestión del tráfico sobre la marcha; controlar los parámetros de comportamiento de la conducción del vehículo, etc. La funcionalidad que proporciona la API depende del motor de simulación:

Tanto en las simulaciones mesoscópicas como en las microscópicas, puedes:

  1. Lee las estadísticas de salida,
  2. Lee el estado de las señales de tráfico,
  3. Cambia el estado de las señales de tráfico.

En una simulación microscópica (o en el área microscópica de una simulación híbrida meso-micro), puedes:

  1. Lee los datos del detector,
  2. Lee el estado de los vehículos individuales (origen, destino, parámetros de comportamiento, trayectoria actual, posición, velocidad, aceleración, etc.),
  3. Introduce nuevos vehículos,
  4. Toma el control de los vehículos (fija la posición y la velocidad, cambia su destino o su trayectoria),
  5. Activa las acciones de gestión del tráfico.

En una simulación mesoscópica, puedes:

  1. Lee el estado de los vehículos individuales (origen, destino, tramo o giro actual, hora de entrada, hora de salida)
  2. Introduce nuevos vehículos.

Ejemplo: implementar una aplicación de Vehículo Conectado controlando los vehículos a través de la API

En el siguiente ejemplo utilizaremos la API para controlar la velocidad y el carril de los vehículos que se acercan a una incorporación. Esto representa una implementación muy sencilla (probablemente simplista) de una aplicación de fusión cooperativa para vehículos conectados.

Paso 1: Establecemos el seguimiento de todos los vehículos que entran en la sección aguas arriba de la confluencia para poder modificar su velocidad y el carril de destino cuando sea necesario. Esto se consigue llamando a la función

				
					int AKIVehSetAsTracked(int aidVeh)
				
			

en la llamada de retorno de AAPIEnterVehicleSection

Paso 2: En cada paso de la simulación obtenemos el número de vehículos en los tramos seleccionados mediante la siguiente función:

				
					int AKIVehStateGetNbVehiclesSection(int aidSec, bool considerAllSegments)
				
			

Paso 3: A continuación, leemos el estado de esos vehículos utilizando

				
					int AKIVehStateGetVehicleInfSection(int aidSec, int indexveh)
				
			

Paso 4: A continuación, modificamos la velocidad de los vehículos aguas arriba de la fusión con

				
					int AKIVehTrackedModifySpeed(int aidVeh, double newSpeed)
				
			

Ten en cuenta que esta función sólo te permite establecer una velocidad inferior a la calculada por el modelo de seguimiento del coche. Si no quieres estar limitado por la velocidad de seguimiento del coche, puedes utilizar en su lugar la siguiente función:

				
					int AKIVehTrackedForceSpeed (int aidVeh, double newSpeed)
				
			

Paso 5: En la sección de la fusión, establecemos el carril más a la izquierda como carril objetivo llamando a

				
					AKIVehTrackedModifyLane (int aidVeh, int nextLane)
				
			

Paso 6: Cuando los vehículos abandonan la sección de la fusión, volvemos a poner los vehículos como no rastreados llamando a

				
					int AKIVehSetAsNoTracked(int aidVeh)
				
			

en elAAPIExitVehicleSection callback

Ejecutar el ejemplo de la API

  1. Descarga los archivos de ejemplo que aparecen a continuación y asegúrate de que todos los archivos se encuentran en el mismo directorio:
 
  1. Copia-pega el archivo py de Aimsun_Next_installation_folder/programming/Aimsun Next API/python/private/Micro OR Meso/AAPI.py en el mismo directorio donde el controlling-vehicles.py se almacena el archivo.
 

Nota: Recuerda que el archivo Aimsun AAPI debe ser coherente con la versión de Aimsun que se esté utilizando. Puedes recuperarlo aquí:

Aimsun_Next_installation_folder/programming/Aimsun Next API/python/private/Micro/AAPI.py

 
  1. Procedimiento:
    1. Inicia Aimsun y luego abre el archivo controlling-vehicles.ang proporcionado
    2. Ejecuta la Replicación. Consulta la ventana de registro para obtener información detallada sobre el funcionamiento del CACC

La extensión de la interfaz de programación de aplicaciones (API) de Aimsun Next puede implementarse mediante un script de Python. Este script de Python es un archivo ASCII (con extensión: “.py“), que puede editarse en cualquier editor de texto. Este script de Python se proporciona con el software Aimsun Next en la carpeta Aimsun_Next_installation_folder (haz clic con el botón derecho del ratón en el acceso directo de Aimsun Next > Selecciona “Abrir ubicación del archivo”).

  1. Copia-pega el archivo py de Aimsun_Next_installation_folder/programming/Aimsun Next API/python/samples/Micro OR Meso/sample.py en el directorio de trabajo (se recomienda colocarlo en el mismo directorio que el archivo ANG para que Aimsun Next pueda reconocer automáticamente las rutas relativas si se mueve a un directorio diferente.
  2. Copia-pega el archivo py de Aimsun_Next_installation_folder/programming/Aimsun Next API/python/private/Micro OR Meso/AAPI.py en el mismo directorio donde se encuentra el archivo sample.py.
  3. Puedes guardar el archivo de script de Python (py) con el nombre que prefieras. Guarda el archivo sample.py como archivo de reserva por si necesitas codificar otra API.
  4. Abre el archivo de script de Python renombrado. En la parte superior, se importa el módulo AAPI para permitir la interpretación de la función de C++ a Python. Este módulo funciona como interfaz entre el script de Python y Aimsun Next (intérprete con código y bibliotecas de Python). El módulo API de Aimsun Next Microscopic tiene siete funciones de alto nivel que se comunican entre el módulo API y el modelo de simulación: AAPILoad(), AAPIInit(), AAPISimulationReady(), AAPIManage(…), AAPIPostManage(…), AAPIFinish(), AAPIUnLoad(). También tiene ocho funciones adicionales que se llaman cuando se producen determinados eventos: AAPIEnterVehicle(…), AAPIExitVehicle(…), AAPIEnterVehicleSection(…), AAPIExitVehicleSection(…), AAPIPreRouteChoiceCalculation(…), AAPIVehicleStartParking(…), AAPIEnterPedestrian(…), AAPIExitPedestrian(…). Para más información sobre la API mesoscópica Aimsun Next, visita: Aimsun Next Manual > Aimsun Next API > Architecture > Simulation Management.
  5. Encuentra una lista completa de funciones documentadas en el Manual Aimsun Next para gestionar los planes de control, para aplicar cambios en las simulaciones microscópicas o mesoscópicas. Accede al Aimsun Next Manual > Aimsun Next API > Manage Control Plans/Microscopic Simulation/Mesoscopic Simulation. También encontrarás una instrucción paso a paso de cómo construir una API, así como explorar los ejemplos de API.
  6. Comienza a codificar –
  7. Para probar el estado de la codificación, carga la API en el Aimsun A continuación, abre un Escenario Dinámico
  8. Accede a la pestaña APIs de Aimsun Next
  9. Añade la py en las APIs de Aimsun Next y selecciónala.
  10. Pulsa OK y luego haz clic con el botón derecho del ratón en el Replication > Run Animated Simulation (for microscopic simulation). Ahora observa los mensajes impresos de tu código en la ventana de registro (para activar la ventana de registro, ve a Main Menu > Window > Windows > Log (o).

Licencia: Ten en cuenta que necesitas una licencia API para ejecutar este ejemplo. Para más información, contacta con info@aimsun.com

  • ¿Tienes alguna pregunta? Ponte en contacto.

    ¡Estamos aquí para ayudarte!

  • ¿Tienes alguna pregunta? Ponte en contacto.

    ¡Estamos aquí para ayudarte!

SHARE