Skip to content

Exemplo 3 da API Micro Aimsun Next:

Exemplo de Entrada de Veículo e Rastreamento de Veículo

Este exemplo mostra como implementar o rastreamento de veículos e como introduzir veículos no sistema usando uma distribuição de entrada externa. Ele também mostra como variar a velocidade dos veículos, aqui introduzindo uma variação aleatória, e como forçar uma mudança de rota.

Versão C++

#include "AKIProxie.h"
#include "CIProxie.h"
#include "ANGConProxie.h"
#include "AAPI.h"
#include <stdio.h>

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;
}

Versão Python

from AAPI import *

idVehFirst = 0
idVehSecond = 0
carPosition = 0

def AAPILoad():
    return 0

def AAPIInit():
    global idVehFirst
    global idVehSecond 
    global carPosition

    idVeh = 8
    carPosition = AKIVehGetVehTypeInternalPosition( idVeh )

    idVehFirst = AKIEnterVehTrafficOD(108, carPosition, 285, 288, True)
    idVehSecond = AKIEnterVehTrafficOD(108, carPosition, 285, 288, True)
    return 0

def  AAPISimulationReady():
    return 0

def AAPIManage(time, timeSta, timTrans, SimStep):
    'Qualquer ação de semáforo ou ITS iria aqui
    return 0

def AAPIPostManage(time, timeSta, timTrans, SimStep):
    global idVehFirst
    global idVehSecond

    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

def AAPIFinish():
    return 0

def AAPIUnLoad():
    return 0

def AAPIEnterVehicle(idveh,idsection):
    return 0

def AAPIExitVehicle(idveh,idsection):
    return 0