Sumo,TraCI:使用 tc.VAR_ROUTE 和 tc.VAR_FOLLOWER 的订阅失败。我可以为车辆使用哪些订阅变量?

Sumo, TraCI: Subscription with tc.VAR_ROUTE and tc.VAR_FOLLOWER fails. Which subscription variables can I use for vehicles?

我想在我的模拟中订阅车辆。但是,我发现很难理解我可以为此使用哪些变量,因为 documentation 不包含此信息。

        traci.vehicle.subscribe(veh_id, [
            tc.VAR_SPEED,
            tc.VAR_ACCELERATION,
            tc.VAR_EMERGENCY_DECEL,
            # tc.VAR_ROUTE,
            tc.VAR_POSITION,
            # tc.VAR_FOLLOWER,
            tc.VAR_NEXT_TLS
        ])

问题是,tc.VAR_ROUTE 在终端中导致此错误:

traci.exceptions.TraCIException: Could not add subscription. Get Vehicle Variable: unsupported variable 0x57 specified

tc.VAR_FOLLOWER 在 SUMO 中导致此错误:

Error: Storage::readChar(): invalid position
Quitting (on error).

这是为什么?我也不太明白如何了解更多关于不同常量的信息。例如,我可以使用哪些订阅车辆? 当我查看 traci/constants.py 下的文件时,有不同类型的变量。

例如这里:

#  position (2D) (get: vehicle, poi, inductionloop, lane area detector; set: poi)
VAR_POSITION = 0x42 

这是什么意思,我知道我可以 get 订阅这些常量的订阅结果,但我怎么可能 set 它们?

我的主要问题是,是否有人可以解释这些常量的结构以及我可以使用哪些常量来订阅车辆。

你是对的,这没有很好的记录。我加了票:https://github.com/eclipse/sumo/issues/8579

你的直接问题的答案是文档的值检索部分中列出的所有内容(这应该等同于在常量文件注释中有一个“get”)应该是“可订阅的”。

VAR_ROUTE 不是,因为它仅用于使用边缘列表设置路由但没有等效的 getter。例如,您只能订阅路线 ID。 VAR_FOLLOWER 在订阅时又需要一个参数,因此您需要将其作为附加参数提供。不幸的是,如何做到这一点取决于您的 SUMO 版本。

对于 SUMO 1.9 及更高版本,调用如下所示:

traci.vehicle.subscribe(vehID, (tc.VAR_FOLLOWER,), begin, end, {tc.VAR_FOLLOWER: ("d", dist)})