Добавить функцию в TraCICommandInterface - PullRequest
0 голосов
/ 09 января 2019

Хотелось бы узнать, есть ли возможность получить доступ к параметру ускорения, добавив функцию в TraCICommandInterface. Я видел, что значение скорости взято из файла Move.h. Я хотел бы получить доступ к ускорению, вычисленному TraCI, если это возможно, просто чтобы получить его, а не для его установки. У кого-нибудь есть предложение? Спасибо

Ответы [ 2 ]

0 голосов
/ 12 марта 2019

Я хотел бы дать решение о том, как я выясняю проблему ускорения. Я использую SUMO 0.30.0, Veins 4.7.1, Omnet ++ 5.4.1.

Я присматривался к классу TraCIMobility. Читая построчно, я обнаружил, что ускорение было вычислено! Поэтому я сохранил его в переменную, я создал метод pubblic, чтобы получить его, и я попытался напечатать результаты для каждого транспортного средства, выяснилось, что он равен SUMO! Таким образом, без использования какого-либо вызова через TraCICommandInterface я могу получить надежное значение для ускорения.

Для людей без большого опыта я добавляю это: в TraCIMobility.h до окончания класса TraCIMobility:

    protected:
        double m_acceleration = 0;
    public:
        double getAcceleration() { return m_acceleration;}

В TraCIMobility.cc после вычисления переменной co2emission я добавляю эту строку:

m_acceleration = acceleration;

Таким образом, я могу использовать в TraCIDemo11p.cc правильное ускорение для каждого транспортного средства, не вычисляя его при каждом получении сообщения.

0 голосов
/ 09 января 2019

Получение ускорения, выполненного транспортным средством на последнем временном шаге, поддерживается API-интерфейсом TraCI (начиная с SUMO 1.1.0) с помощью команды 0xa4 (Получить переменную транспортного средства), переменная 0x72 (ускорение) в соответствии с SUMO Wiki .

Начиная с версии Veins 5 alpha 1, вы просто изменили бы класс TraCICommandInterface вашей локальной копии Veins, чтобы иметь метод для этого. Ваш метод, скорее всего, будет очень похож на функцию TraCICommandInterface :: Vehicle :: getMaxSpeed ​​.

Вот пример кода, который работает для вен 5a1 и SUMO 1.0.1. В src/veins/modules/mobility/traci/TraCICommandInterface.cc добавить:

double TraCICommandInterface::Vehicle::getAcceleration()
{
    return traci->genericGetDouble(CMD_GET_VEHICLE_VARIABLE, nodeId, VAR_ACCELERATION, RESPONSE_GET_VEHICLE_VARIABLE);
}

Если вы также измените TraCICommandInterface.h с соответствующей декларацией double getAcceleration(); и src/veins/modules/mobility/traci/TraCIConstants.h с константой, такой как const uint8_t VAR_ACCELERATION = 0x72;, вы можете запросить ускорение как traciVehicle->getAcceleration() в TraCIDemo11p.cc.

...