### C++ Vehicle Tracking and Introduction Example Source: https://docs.aimsun.com.br/UsersManual/ApiMicroExample3 This C++ code snippet demonstrates how to track vehicles, introduce them into the Aimsun Next simulation using external traffic distributions, vary their speeds with random fluctuations, and force route changes. It utilizes the Aimsun Next API functions for vehicle management and tracking. ```C++ #include "AKIProxie.h" #include "CIProxie.h" #include "ANGConProxie.h" #include "AAPI.h" #include int idVehFirst = 0; int idVehSecond = 0; int idVeh = 0; int carPosition = 0; int AAPILoad() { return 0; } int AAPIInit() { idVeh = ANGConnGetObjectIdByType( AKIConvertFromAsciiString( "car" ), AKIConvertFromAsciiString( "GKVehicle" ), false ) carPosition = AKIVehGetVehTypeInternalPosition( idVeh ) idVehFirst = AKIEnterVehTrafficOD(108, carPosition, 285, 288, True); idVehSecond = AKIEnterVehTrafficOD(108, carPosition, 285, 288, True); return 0; } int AAPISimulationReady() { return 0; } int AAPIManage(double time, double timeSta, double timeTrans, double acycle) { /* Qualquer ação de semáforo ou ITS iria aqui return 0; } int AAPIPostManage(double time, double timeSta, double timeTrans, double acycle) { spd1 = AKIVehTrackedGetInf(idVehFirst).CurrentSpeed + rand(0.5); spd2 = AKIVehTrackedGetInf(idVehSecond).CurrentSpeed + rand(0.5); AKIVehTrackedModifySpeed(idVehFirst, spd1 ); AKIVehTrackedModifySpeed(idVehSecond,spd2 ); if ( AKIVehTrackedGetInf(idVehSecond).idSection == 545) { AKIVehTrackedModifyNextSection(idVehSecond, 546); } return 0; } int AAPIFinish() { return 0; } int AAPIUnLoad() { return 0; } ``` -------------------------------- ### Initialize Aimsun BR Simulation (Python) Source: https://docs.aimsun.com.br/UsersManual/ApiMicroExample2 Provides the basic structure for Aimsun BR Python API integration. Includes essential functions like AAPILoad, AAPIInit, AAPISimulationReady, AAPIManage, AAPIPostManage, and AAPIFinish. AAPIInit retrieves vehicle information and sets initial car position. ```Python from AAPI import * carPosition = 0 def AAPILoad(): return 0 def AAPIInit(): idVeh = ANGConnGetObjectIdByType( AKIConvertFromAsciiString( "car" ), AKIConvertFromAsciiString( "GKVehicle" ), False ) carPosition = AKIVehGetVehTypeInternalPosition( idVeh ) return 0 def AAPISimulationReady(): return 0 def AAPIManage(time, timeSta, timTrans, SimStep): return 0 def AAPIPostManage(time, timeSta, timTrans, SimStep): estad = AKIEstGetParcialStatisticsSystem(timeSta, 0) if (estad.report==0): AKIPrintString(" SISTEMA") astring = " Relatório : " + str(estad.report) AKIPrintString(astring) astring = " Fluxo : " + str(estad.Flow) AKIPrintString(astring) astring = " Tempo de Viagem : " + str(estad.TTa) AKIPrintString(astring) astring = " Tempo de Atraso : " + str(estad.DTa) AKIPrintString(astring) astring = " Velocidade : " + str(estad.Sa) AKIPrintString(astring) astring = " Tempo de Parada : " + str(estad.STa) AKIPrintString(astring) astring = " NumParadas : " + str(estad.NumStops) AKIPrintString(astring) estad2 = AKIEstGetParcialStatisticsSection(1, timeSta, 9) if (estad2.report==0): AKIPrintString(" SEÇÃO") astring = " Relatório : " + str(estad2.report) AKIPrintString(astring) astring = " Fluxo : " + str(estad2.Flow) AKIPrintString(astring) astring = " Tempo de Viagem : " + str(estad2.TTa) AKIPrintString(astring) astring = " Tempo de Atraso : " + str(estad2.DTa) AKIPrintString(astring) astring = " Velocidade : " + str(estad2.Sa) AKIPrintString(astring) astring = " Tempo de Parada : " + str(estad2.STa) AKIPrintString(astring) astring = " NumParadas : " + str(estad2.NumStops) AKIPrintString(astring) astring = " LongQueueAvg : " + str(estad2.LongQueueAvg) AKIPrintString(astring) astring = " LongQueueMax : " + str(estad2.LongQueueMax) AKIPrintString(astring) estad = AKIEstGetParcialStatisticsSystem(timeSta, carPosition) if (estad.report==0): AKIPrintString(" SISTEMA CARRO ") astring = " Relatório : " + str(estad.report) AKIPrintString(astring) astring = " Fluxo : " + str(estad.Flow) AKIPrintString(astring) astring = " Tempo de Viagem : " + str(estad.TTa) AKIPrintString(astring) astring = " Tempo de Atraso : " + str(estad.DTa) AKIPrintString(astring) astring = " Velocidade : " + str(estad.Sa) AKIPrintString(astring) astring = " Tempo de Parada : " + str(estad.STa) AKIPrintString(astring) astring = " NumParadas : " + str(estad.NumStops) AKIPrintString(astring) estad2 = AKIEstGetParcialStatisticsSection(1, timeSta, carPosition) if (estad2.report==0): AKIPrintString(" SEÇÃO CARRO ") astring = " Relatório : " + str(estad2.report) AKIPrintString(astring) astring = " Fluxo : " + str(estad2.Flow) AKIPrintString(astring) astring = " Tempo de Viagem : " + str(estad2.TTa) AKIPrintString(astring) astring = " Tempo de Atraso : " + str(estad2.DTa) AKIPrintString(astring) astring = " Velocidade : " + str(estad2.Sa) AKIPrintString(astring) astring = " Tempo de Parada : " + str(estad2.STa) AKIPrintString(astring) astring = " NumParadas : " + str(estad2.NumStops) AKIPrintString(astring) astring = " LongQueueAvg : " + str(estad2.LongQueueAvg) AKIPrintString(astring) astring = " LongQueueMax : " + str(estad2.LongQueueMax) AKIPrintString(astring) return 0 def AAPIFinish(): estad = AKIEstGetGlobalStatisticsSystem(0) if (estad.report==0): AKIPrintString(" SISTEMA ") astring = " Relatório : " + str(estad.report) AKIPrintString(astring) astring = " Fluxo : " + str(estad.Flow) AKIPrintString(astring) astring = " Tempo de Viagem : " + str(estad.TTa) AKIPrintString(astring) astring = " Tempo de Atraso : " + str(estad.DTa) AKIPrintString(astring) astring = " Velocidade : " + str(estad.Sa) AKIPrintString(astring); astring = " Tempo de Parada : " + str(estad.STa) AKIPrintString(astring); astring = " NumParadas : " + str(estad.NumStops) AKIPrintString(astring) estad2 = AKIEstGetGlobalStatisticsSection(1, 0) if (estad2.report==0): AKIPrintString(" SEÇÃO ") astring = " Relatório : " + str(estad2.report) AKIPrintString(astring) astring = " Fluxo : " + str(estad2.Flow) AKIPrintString(astring) astring = " Tempo de Viagem : " + str(estad2.TTa) AKIPrintString(astring) ``` -------------------------------- ### Instalar Redistribuíveis do Microsoft Visual Studio (Windows) Source: https://docs.aimsun.com.br/UsersManual/AimsunNextInstallationGuide Instala manualmente os redistribuíveis do Microsoft Visual Studio se o instalador principal do Aimsun Next para Windows não conseguir fazê-lo automaticamente. Isso é necessário para garantir a compatibilidade e o funcionamento correto do software. ```batch VC_redist.x64.exe ``` -------------------------------- ### Get Statistical Information using Aimsun Next Micro API Source: https://docs.aimsun.com.br/UsersManual/ApiMicroExample2 This example demonstrates how to access different statistical information during and at the end of the simulation using the Aimsun Next Micro API. It is designed to show the retrieval of various data points relevant to traffic simulation analysis. ```python from amsl import Environment, Simulation # Initialize the Aimsun environment env = Environment() # Start a simulation (assuming a project is loaded) sim = Simulation(env) sim.start() # Access statistical information during simulation # Example: Get current simulation time current_time = sim.get_current_time() print(f"Current simulation time: {current_time}") # Example: Get number of vehicles in the network num_vehicles = sim.get_num_vehicles() print(f"Number of vehicles in the network: {num_vehicles}") # Run simulation until a certain point or completion sim.run_until(600) # Run for 600 seconds # Access statistical information after simulation or at specific points # Example: Get total distance traveled by all vehicles total_distance = sim.get_total_distance() print(f"Total distance traveled: {total_distance}") # Example: Get average speed of vehicles average_speed = sim.get_average_speed() print(f"Average vehicle speed: {average_speed}") # Stop the simulation sim.stop() ``` -------------------------------- ### Instalar Drivers Sentinel (Windows) Source: https://docs.aimsun.com.br/UsersManual/AimsunNextInstallationGuide Procedimento manual para instalar os drivers da Sentinel em sistemas Windows, caso não sejam instalados automaticamente com o Aimsun Next. Essencial para o gerenciamento de licenças do software. ```batch setupClean.bat ``` -------------------------------- ### Get Current Stationary Simulation Time (C++, Python) Source: https://docs.aimsun.com.br/UsersManual/ApiInformationDuringSimulation Retrieves the current simulation time in seconds from midnight. For example, 8:00:00 AM is represented as 28800 seconds. A simulator handler is required. ```C++ double AMesoGetCurrentTimeSta (void * simhandler); ``` ```Python # Python equivalent would involve calling the C++ function via a wrapper or similar mechanism. ``` -------------------------------- ### Get Initial Simulation Run Time (C++, Python) Source: https://docs.aimsun.com.br/UsersManual/ApiRunTimeInformation Retrieves the initial simulation time in seconds from midnight. This function is useful for understanding the starting point of the simulation, including any warm-up period. It returns a positive value for the initial time or a negative value in case of an error. ```C++ double AKIGetIniSimTime() ``` ```Python double AKIGetIniSimTime() ``` -------------------------------- ### Compilar MicroSDK Sample (Visual Studio) Source: https://docs.aimsun.com.br/UsersManual/MicroSDKStartersGuide Instruções para compilar o projeto de exemplo do MicroSDK no Visual Studio. Inclui a seleção entre compilação Debug e Release para diferentes fases de desenvolvimento. ```text Build : Rebuild microSDKsample ``` -------------------------------- ### Metadata Model Type and Column Structure Example Source: https://docs.aimsun.com.br/UsersManual/ScriptDataModel Illustrates the structure of the Metadata Model using 'Type' (class) and 'Column' (attribute) concepts. It shows a 'TypeA' with multiple columns and example data, demonstrating how attributes are represented. ```plaintext TypeA: ID Column1 Column2 Column3 Column4 1465 #### #### #### #### 3566 #### #### #### #### ``` -------------------------------- ### Compilar microSDK com qmake e make Source: https://docs.aimsun.com.br/UsersManual/MicroSDKStartersGuide Instruções para compilar o microSDK gerando arquivos makefiles com qmake e, em seguida, compilando e construindo as bibliotecas com make. A saída da compilação é exibida no terminal. ```Shell qmake .pro make ``` -------------------------------- ### Importar Rede CONTRAM no Aimsun Next Source: https://docs.aimsun.com.br/UsersManual/ContramImporter Instruções para importar uma rede CONTRAM para o Aimsun Next. É necessário criar um novo documento Aimsun e usar o menu Arquivo > Importar > Rede CONTRAM. O arquivo .net é um pré-requisito para outros arquivos CONTRAM. ```Aimsun Next Arquivo : Importar : Rede CONTRAM ``` -------------------------------- ### Aimsun Next Scripting for Specific Applications Source: https://docs.aimsun.com.br/UsersManual/ScriptExamples This snippet demonstrates scripting examples tailored for various simulation types in Aimsun Next, including microscopic, mesoscopic, hybrid meso-micro, and macroscopic modeling. It also includes examples for travel demand modeling and retrieving information from APA files. ```Python # Example of scripting for Microscopic Simulation (conceptual) # simulate_microscopic(scenario) # Example of scripting for Mesoscopic Simulation (conceptual) # simulate_mesoscopic(scenario) # Example of scripting for Hybrid Meso-Micro Simulation (conceptual) # simulate_hybrid(scenario) # Example of scripting for Macroscopic Modeling (conceptual) # simulate_macroscopic(scenario) # Example of Travel Demand Modeling (conceptual) # model_demand(origin_destination_data) # Example of retrieving information from APA file (conceptual) # apa_data = read_apa_file("path/to/file.apa") # print(apa_data.get_traffic_volume()) ``` -------------------------------- ### Basic Scripting Examples in Aimsun Next Source: https://docs.aimsun.com.br/UsersManual/ScriptExamples This snippet covers fundamental scripting operations in Aimsun Next, including basic scripting, creating and using objects, and managing attributes and styles. It serves as an introduction to automating tasks and customizing simulations. ```Python # Example of basic scripting in Aimsun Next # This is a placeholder for actual code examples print("Hello, Aimsun Scripting!") # Example of creating and using objects (conceptual) # section = create_section(start_node, end_node, length) # set_attribute(section, "speed_limit", 60) # Example of attributes and styles (conceptual) # set_style(section, "default_road_style") ``` -------------------------------- ### Guia de Opções de Linha de Comando para Aimsun Next Source: https://docs.aimsun.com.br/UsersManual/RunningSimulation Fornece informações sobre como iniciar uma simulação Aimsun Next usando comandos na interface gráfica do usuário ou em uma janela de console sem interface gráfica. ```text Guia de Opções de Linha de Comando para iniciar uma simulação Aimsun Next usando um comando com a interface gráfica do usuário ou em uma janela de console sem IU. ``` -------------------------------- ### Read Instantaneous Detector Presence Source: https://docs.aimsun.com.br/UsersManual/ApiDetectorMeasures Reads the instantaneous presence of a detector during the last detection cycle. Returns 0 if no vehicle passed, 1 otherwise. It can distinguish detection for different vehicle types. The first function gets the last available measure, and the second gets the measure for a specific instant. ```C++ int AKIDetGetPresenceCyclebyId (int IdDetector, int vehTypePos); int AKIDetGetPresenceInstantDetectionbyId(int IdDetector, int vehTypePos, double endtime); ``` -------------------------------- ### Importar Arquivo de Imagem no Aimsun Next Source: https://docs.aimsun.com.br/Tutorials/1_Editing/1-Exercises_Editing Passos para importar um arquivo de imagem (como ortofoto) no Aimsun Next. Inclui a navegação no menu e a confirmação da importação para visualização no modelo. ```Aimsun Next Arquivo > Importar > Arquivo de Imagem ``` -------------------------------- ### Desativar Envio de Dados de Falha Temporariamente (Aimsun Next) Source: https://docs.aimsun.com.br/UsersManual/PrivacyStatement Instruções para iniciar o Aimsun Next com um comando específico que impede o envio de dados de falha (arquivos DMP) para cada sessão. Requer a abertura de um prompt de comando e a navegação até o diretório de instalação do Aimsun Next. ```bash Aimsun Next.exe --no-sentry ``` -------------------------------- ### Calculadora de Caminho mais Curto - Aimsun Next Source: https://docs.aimsun.com.br/UsersManual/StaticShortestPathDialog A ferramenta Calculadora de Caminho mais Curto no Aimsun Next permite calcular o caminho mais curto entre um par Origem-Destino. Suporta o cálculo de um único caminho ou matrizes de skim, com opções de critério por distância, tempo ou atributo. ```Aimsun Next A ferramenta Calculadora de Caminho mais Curto está disponível no menu _Análise de Dados/Calculadora de Caminho mais Curto_. A Calculadora de Caminho mais Curto pode calcular: * _Caminho Único_ : um único caminho mais curto para um par Origem - Destino que pode ser composto por centróides ou seções da rede. * _Matrizes de Skim_ : matrizes de skim, uma com em cada célula o comprimento do caminho de menor custo entre aquele par OD, e outra com em cada célula o custo do caminho de menor custo entre aquele par OD. Para começar, a seção de origem ou o centróide deve ser selecionado, clicando nele na visualização. A seção de destino ou o centróide é escolhido clicando nele enquanto mantém a tecla _Ctrl_ pressionada. Outra opção é inserir o ID do objeto desejado diretamente na caixa de texto. O diálogo tem três opções para os critérios para calcular o caminho mais curto: por distância, por tempo e por atributo. Note que o cálculo de um Caminho mais Curto baseado em Tempo leva em conta os tempos de fluxo livre para passar por seções e nós. Se a opção de Atributo for escolhida, então o usuário deve selecionar o atributo da seção e o atributo da curva nos quais o caminho mais curto será calculado. A caixa de restrições é usada para especificar o tipo de veículo para o caminho mais curto, para que as faixas reservadas não permitidas para aquele tipo não sejam levadas em conta. Por fim, o Caminho mais Curto, se houver, é exibido na visualização na cor primária e o custo do caminho também é mostrado na janela do diálogo. ``` -------------------------------- ### Unload Function (C) Source: https://docs.aimsun.com.br/UsersManual/ApiMicroExample2 A simple C function named AAPIUnLoad that returns 0, likely indicating a successful unload operation. ```C int AAPIUnLoad() { return 0; } ``` -------------------------------- ### Exemplo: Iniciar Aimsun com Dongle e Idioma Específico Source: https://docs.aimsun.com.br/UsersManual/CommandLine Ilustra como iniciar o Aimsun Next com uma interface em espanhol e forçar o uso de um dongle específico pelo seu ID. ```bash "Aimsun Next.exe" -–dongle_id 1456274627 –-translation es ``` -------------------------------- ### Get VMS State Information - AimsunEACGetVMSState Source: https://docs.aimsun.com.br/UsersManual/ExternalAgentInterface Reads information for a VMS, indexed from 0 up to (AimsunEACVMSStatesRead() - 1). Call this after a successful AimsunEACVMSStatesRead(). The AimsunEACVMSState structure pointer should not be freed or reassigned. ```c struct AimsunEACVMSState * AimsunEACGetVMSState( int i ); ``` -------------------------------- ### Get Text Input with QInputDialog Source: https://docs.aimsun.com.br/UsersManual/ScriptInteractionAndErrors Demonstrates how to use the QInputDialog.getText method to prompt the user for text input. It shows how to capture the user's input and check if the 'OK' button was pressed before proceeding. ```Python dialog = QInputDialog.getText( None, "Geocode", "Project location:" ) if dialog[1] == True: location = str(dialog[0]) ``` -------------------------------- ### Executar Experimento de Distribuição no AimSun Source: https://docs.aimsun.com.br/UsersManual/MenuCommands Executa o experimento de distribuição configurado. Processa os dados de acordo com o modelo de distribuição definido. ```Portuguese Executar Distribuição ``` -------------------------------- ### Get Current Simulation Time (C++, Python) Source: https://docs.aimsun.com.br/UsersManual/ApiInformationDuringSimulation Retrieves the current simulation time. The output ranges from 0 to the total simulation duration, including warm-up and traffic demand time. Requires a simulator handler as input. ```C++ double AMesoGetCurrentTime (void * simhandler); ``` ```Python # Python equivalent would involve calling the C++ function via a wrapper or similar mechanism. ``` -------------------------------- ### Get Transient Time (C++, Python) Source: https://docs.aimsun.com.br/UsersManual/ApiRunTimeInformation Retrieves the duration of the simulation's warm-up period in seconds. This is important for analyzing results after the simulation has stabilized. The function returns the duration as a positive value or an error code (negative value) if it fails. ```C++ double AKIGetDurationTransTime() ``` ```Python double AKIGetDurationTransTime() ``` -------------------------------- ### Adicionar e Ativar Camada 3D no Aimsun Source: https://docs.aimsun.com.br/Tutorials/4_3D_Editing/4_3D_Editing Instruções para adicionar uma nova camada 3D na interface do Aimsun, renomeá-la e ativá-la para gerenciamento de objetos 3D. ```Aimsun 1. No painel de Camadas, clique com o botão direito em **Rede** e selecione **Nova Camada**. 2. Renomeie a nova camada como _3D_. 3. Clique com o botão direito em **_3D_** e selecione **Ativar**. ``` -------------------------------- ### Compilar DLL de Debug para Windows Source: https://docs.aimsun.com.br/UsersManual/MicroSDKStartersGuide Passos para construir a DLL de Debug para a versão Windows do Aimsun Next. Inclui a cópia de arquivos XML e DLL para o diretório de plugins. ```Shell copy "C:\\Program Files\\Aimsun\\Aimsun Next X.X\\plugins\\aimsun\\models" ``` -------------------------------- ### Get Simulation Step Time (C++, Python) Source: https://docs.aimsun.com.br/UsersManual/ApiRunTimeInformation Retrieves the duration of a single simulation step in seconds. This value is crucial for understanding the time resolution of the simulation. A positive return value indicates the step time, while a negative value signifies an error. ```C++ double AKIGetSimulationStepTime() ``` ```Python double AKIGetSimulationStepTime() ``` -------------------------------- ### Get Final Simulation Run Time (C++, Python) Source: https://docs.aimsun.com.br/UsersManual/ApiRunTimeInformation Retrieves the final simulation time in seconds from midnight. This function helps determine the end point of the simulation. It returns a positive value for the final time or a negative value if an error occurs. ```C++ double AKIGetEndSimTime() ``` ```Python double AKIGetEndSimTime() ``` -------------------------------- ### Adicionar e Configurar Câmera no Aimsun Next Source: https://docs.aimsun.com.br/Tutorials/4_3D_Editing/4_3D_Editing Guia para adicionar uma nova câmera à rede no Aimsun Next. Detalha o posicionamento, rotação, nomeação e ajuste fino da câmera usando ferramentas e atalhos de teclado para obter a visualização desejada. ```Aimsun Next 1. Clique na ferramenta Criar uma Câmera. 2. Clique na visualização 2D para posicionar a nova câmera. 3. Use a ferramenta Rotacionar para ajustar o ângulo da câmera. 4. Dê um clique duplo na câmera para abrir seu diálogo e insira um **Nome**. 5. Use as setas do teclado para mover a câmera (Shift + setas para cima/baixo para altura, Ctrl + setas para rotação). ```