Вены + SUMO Lane Изменение поведения - PullRequest
0 голосов
/ 05 февраля 2019

Я использую Вены (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, чтобы создать случайность, чтобы открыть достаточно промежутка для смены полосы движения, то авария не выполняется.

Любое предложение приветствуется.

С уважением.

1 Ответ

0 голосов
/ 08 февраля 2019

В соответствии с документацией TraCI для Python продолжительность - это количество времени, в течение которого транспортное средство остается на другой полосе движения, поэтому это не время, необходимое для фактического изменения полосы движения.

Если это действительноВ этом случае вы можете не увидеть изменения полосы в пользовательском интерфейсе, поскольку ваша длительность равна 0,1 с, а длина шага SUMO по умолчанию в Венах также равна 0,1 с.

Однако эта функция реализована в расширении взвода для Вен, называемом Plexe .Вот код для переулка переулка через TraCI выглядит следующим образом:

void TraCICommandInterface::Vehicle::changeLane(int lane, int duration)
{
    uint8_t commandType = TYPE_COMPOUND;
    int nParameters = 2;
    uint8_t variableId = CMD_CHANGELANE;
    TraCIBuffer buf = traci->connection.query(CMD_SET_VEHICLE_VARIABLE, TraCIBuffer() << variableId << nodeId << commandType << nParameters << static_cast<uint8_t>(TYPE_BYTE) << (uint8_t) lane << static_cast<uint8_t>(TYPE_INTEGER) << duration);
    ASSERT(buf.eof());
}
...