Я использую Вены (4.7) и SUMO (0.32) для моделирования поведения смены полосы движения в сценарии аварии.Я успешно создал аварию, используя приведенную ниже конфигурацию .ini:
#Accident vehciles and details
*.node[0].veinsmobility.accidentCount = 1
*.node[0].veinsmobility.accidentStart = 80s
*.node[0].veinsmobility.accidentDuration = 100s
, в которой Автомобиль-0 начинает останавливаться около 85 с.Теперь я хочу направить подключенные автомобили на определенную полосу движения (laneIndex) с помощью команды traci:
traciVehicle->changeLane(laneIndex, 0.1);
void TraCICommandInterface::Vehicle::changeLane(uint8_t laneIndex, int32_t duration) {
uint8_t variableId = CMD_CHANGELANE;
uint8_t variableType = TYPE_COMPOUND;
int32_t count = 2;
uint8_t laneIndexT = TYPE_BYTE;
uint8_t timeT = TYPE_INTEGER;
int32_t time = duration*1000; //seconds to milliseconds
uint8_t durationT = TYPE_INTEGER;
TraCIBuffer buf = connection->query(CMD_SET_VEHICLE_VARIABLE, TraCIBuffer() << variableId << nodeId << variableType << count << laneIndexT << laneIndex << durationT << duration );
ASSERT(buf.eof());
}
Однако машины не меняют полосу движения.Я знаю, что SUMO моделирует случай, не связанный с аварией, поэтому, если транспортное средство на целевой полосе движения или приближается, смена полосы движения не производится.У вас есть идеи, как я могу обойти это поведение?Более того, если я использую команду замедления traci, чтобы создать случайность, чтобы открыть достаточно промежутка для смены полосы движения, то авария не выполняется.
Любое предложение приветствуется.
С уважением.