向TraCICommandInterface添加函数

时间:2019-01-09 13:35:06

标签: omnet++ veins sumo

我想知道是否可以通过向TraCICommandInterface添加函数来访问加速参数。 我已经看到速度值是从Move.h文件中获取的。 如果可能,我想访问TraCI计算的加速度,只是为了获得它,而不是对其进行设置。 有人有什么建议吗?谢谢

2 个答案:

答案 0 :(得分:1)

TraCI API(自SUMO 1.1.0起)支持通过命令0xa4(获取车辆变量),变量0x72(加速度)according to the SUMO Wiki来获取车辆在上一个步骤中执行的加速度。 / p>

从Veins 5 alpha 1开始,您只需修改您的Veins本地副本的TraCICommandInterface类,即可使用此方法。您的方法可能看起来与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;进行了修改,则可以在{ {1}}。

答案 1 :(得分:1)

我想提供有关如何找出加速问题的解决方案。 我正在使用SUMO 0.30.0,静脉4.7.1,Omnet ++ 5.4.1。

我正在仔细地查看TraCIMobility类。逐行阅读,我发现加速度是经过计算的!所以我将其保存到变量中,创建了一个公共方法来获取它,然后尝试打印每辆车的结果,结果表明它等于SUMO!因此,无需通过TraCICommandInterface使用任何调用,我就能获得可靠的加速度值。

对于没有很多经验的人,我添加以下内容: 在TraCIMobility类结束之前在TraCIMobility.h中进行操作:

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

在TraCIMobility.cc中,在计算了co2emission变量之后,我添加了这一行:

m_acceleration = acceleration;

通过这种方式,我可以在TraCIDemo11p.cc中为每辆车使用正确的加速度,而不必在每次收到消息时都进行计算。