命令 0xc4: 更改车辆状态#
| ubyte | string | ubyte | <value_type> |
|---|---|---|---|
| 变量 | 车辆ID | 值的类型 | 新值 |
更改车辆的状态。因为可以更改车辆的不同值,所以需要提供的参数数量及其类型因命令而异。下表显示了可以更改的值以及必须提供的参数。 此外,还可以更改 TraCI/Change_VehicleType_State 中提到的所有值。如果这样做,车辆将获得一个新类型(名为 "typeid@vehid"),并且不再受对原始类型的进一步更改的影响。
| 变量 | 值类型 | 描述 | Python 方法 |
|---|---|---|---|
| stop (0x12) | 复合类型 (string, double, byte, double), 见下文 | 让车辆在给定的边、位置和车道上停止。车辆将停止给定的持续时间。使用相同的车道和位置重新发出停止命令可以更改持续时间。将持续时间设置为 0 可取消现有的停止。 | setStop setBusStop setContainerStop setChargingStationStop setParkingAreaStop |
| change lane (0x13) | 复合类型 (byte, double), 见下文 | 强制换道至索引给定的车道;如果成功,该车道将被选择给定的时间(以秒为单位)。 | changeLane |
| change sublane (0x15) | double (横向距离) | 强制进行给定量的横向变更(负值表示向右变更,正值表示向左)。这将覆盖任何其他换道动机,但需遵守由 laneChangeMode 配置的安全约束。 | changeSublane |
| slow down (0x14) | 复合类型 (double, double), 见下文 | 在给定的时间(以秒为单位)内,将速度平滑地更改为给定值(也可用于提高速度)。 | slowDown |
| resume (0x19) | 复合类型 (), 见下文 | 从停止状态恢复 | resume |
| change target (0x31) | string (目标边ID) | 将车辆的目标边设置为给定的边。路线将被重建。 | changeTarget |
| speed (0x40) | double (新速度) | 将车辆速度设置为给定值。速度将根据当前的速度模式进行跟随。默认情况下,车辆可能会根据跟车模型的安全规则以低于设定速度的速度行驶。当发送值为 -1 时,车辆将恢复其原始行为(使用其车辆类型的 maxSpeed 并遵循所有安全规则)。 | setSpeed |
| acceleration (0x72) | 复合类型 (double, double), 见下文 | 在给定的时间(以秒为单位)内,将加速度更改为给定值。 | setAcceleration |
| previous speed (0x3c) | double (先前速度) | 回溯性地将车辆在上一个仿真步的速度设置为给定值,并更新先前的加速度。在计算弹道位置更新时将使用此速度值。此外,其他车辆在当前步中对本车的反应将如同本车在上一步中以给定速度行驶一样。 | setPreviousSpeed |
| color (0x45) | ubyte,ubyte,ubyte,ubyte (RGBA) | 设置车辆的颜色。 | setColor |
| change route by id (0x53) | string (路线ID) | 将命名路线分配给车辆,前提是 a) 命名路线存在,并且 b) 它从车辆当前所在的边开始(1)(2)。 | setRouteID |
| change route (0x57) | stringList (要经过的边的ID) | 将边列表分配为车辆的新路线,前提是给定的第一个边是车辆当前所在的边(1)(2)。 | setRoute |
| reroute parking area (0xc2) | string (停车区ID) | 更改 parkingAreaID 中的下一个停车区,更新车辆路线,并在有乘客/集装箱在车上的情况下保持一致性。 | rerouteParkingArea |
| dispatchTaxi | stringList (预约ID) | 将给定ID的出租车调度到服务给定的预约。如果只给定一个预约,则意味着接送和下车。如果给定多个预约,则每个预约ID必须出现两次(一次用于接送,一次用于下车),并且列表编码了乘客的拼车(按接送和下车顺序)。 | dispatchTaxi |
| change edge travel time information (0x58) | 复合类型 (开始时间, 结束时间, 边ID, 值), 见下文 | 将关于边 "edgeID" 的行程时间(以秒为单位)的信息(从开始时间到结束时间有效)插入到车辆的内部边权重容器中。 | setAdaptedTraveltime |
| change edge effort information (0x59) | 复合类型 (开始时间, 结束时间, 边ID, 值), 见下文 | 将关于边 "edgeID" 的开销(从开始时间到结束时间有效)的信息插入到车辆的内部边权重容器中。 | setEffort |
| signal states (0x5b) | int | 设置信号的新状态。更多信息请参见 TraCI/Vehicle Signalling。 | setSignals |
| routing mode (0x89) | int | 设置路由模式 (0: 默认, 1: 聚合, 8: 忽略重路由器更改, 9: 聚合并忽略重路由器更改) | setRoutingMode |
| move to (0x5c) | 复合类型 (车道ID, 车道沿线位置) | 将车辆移动到当前路线上的新位置(3)。 | moveTo |
| move to XY (0xb4) | 复合类型 (边ID, 车道索引, x, y, 角度, keepRoute) (见下文) | 在正常的车辆移动发生后,将车辆移动到新位置。同时强制车辆的角度为给定值(航向角,以度为单位)。更多详情见下文 | moveToXY |
| replaceStop (0x17) | 复合类型 (边ID, 车辆ID, 下一个停止索引, 边ID, 位置, 车道索引, 持续时间, 标志, 起始位置, 截止时间, 传送) (见下文) | 用新的停止替换给定索引处的停止。如果替换停止在另一个位置,则会自动修改路线。更多详情见下文 | replaceStop |
| insertStop (0x18) | 复合类型 (边ID, 车辆ID, 下一个停止索引, 边ID, 位置, 车道索引, 持续时间, 标志, 起始位置, 截止时间, 传送) (见下文) | 在给定索引处插入停止。自动修改路线以适应新的停止。更多详情见下文 | insertStop |
| setStopParameter (0x55) | 复合类型 (下一个停止索引, 参数, 值, 自定义参数) (见下文) | 修改给定索引处停止的属性。更改位置 ('edge', 'busStop' 等) 的行为类似于 replaceRoute。如果 customParam 设置为 1,则修改用户定义的参数。更多详情见下文 | setStopParameter |
| reroute (计算新路线) 按行程时间 (0x90) | 复合类型 (<空>), 见下文 | 计算到当前目的地的最小化行程时间的新路线。网络中每条边的假设值可以通过多种方式自定义。参见 Simulation/Routing#Travel-time_values_for_routing。用找到的路线替换当前路线(2)。 | rerouteTraveltime |
| reroute (计算新路线) 按开销 (0x91) | 复合类型 (<空>), 见下文 | 使用车辆的内部和全局边开销信息计算新路线。用找到的路线替换当前路线(2)。 | rerouteEffort |
| speed mode (0xb3) | int 位集 (见下文) | 设置由 speed (0x40) 和 slowdown (0x14) 设置的值应如何处理。还允许配置在交叉口的行为。见下文。 | setSpeedMode |
| speed factor (0x5e) | double | 将车辆的速度因子设置为给定值 | setSpeedFactor |
| max speed (0x41) | double | 将车辆的最大速度设置为给定值 | setMaxSpeed |
| lane change mode (0xb6) | int 位集 (见下文) | 设置一般情况下换道以及由 TraCI 发出的换道请求如何执行。见下文。 | setLaneChangeMode |
| update bestLanes (0x6a) | 更新用于战略车道选择的内部数据结构。(例如,在修改访问权限后)。 注意: 当更改路线或移动到新边时,这会自动发生。 |
updateBestLanes | |
| add (0x85) | 复杂类型 (见下文) | 添加定义的车辆。见下文。 | add (别名 addFull) |
| add_legacy (0x80) | 复杂类型 (见下文) | 添加定义的车辆(参数较少,已过时)。见下文。 | addLegacy |
| remove (0x81) | 复杂类型 (见下文) | 移除定义的车辆。见下文。 | remove |
| length (0x44) | double | 将车辆的长度设置为给定值 | setLength |
| vehicle class (0x49) | string | 将车辆的车辆类别设置为给定值 | setVehicleClass |
| emission class (0x4a) | string | 将车辆的排放类别设置为给定值 | setEmissionClass |
| width (0x4d) | double | 将车辆的宽度设置为给定值 | setWidth |
| height (0xbc) | double | 将车辆的高度设置为给定值 | setHeight |
| min gap (0x4c) | double | 将车辆的最小车头时距设置为给定值 | setMinGap |
| shape class (0x4b) | string | 将车辆的形状类别设置为给定值 | setShapeClass |
| acceleration (0x46) | double | 将车辆期望的最大加速度设置为给定值 | setAccel |
| deceleration (0x47) | double | 将车辆期望的最大减速度设置为给定值 | setDecel |
| imperfection (0x5d) | double | 将车辆驾驶员的不完美度 (sigma) 设置为给定值 | setImperfection |
| tau (0x48) | double | 将车辆期望的车头时距时间设置为给定值。 | setTau |
| type (0x4f) | string | 为命名车辆设置类型的ID。 | setType |
| via (0xbe) | stringList | 将途径边更改为给定的边列表(用于后续的重路由调用)。 | setVia |
| max lateral speed (0xba) | double | 设置此车辆的最大横向速度(米/秒)。 | setMaxSpeedLat |
| lateral gap (0xbb) | double | 设置车辆在50km/h时的最小横向间隙(米)。 | setMinGapLat |
| lateral alignment (0xb9) | string | 设置此车辆的首选横向对齐方式。 | setLateralAlignment |
| boarding duration (0x2f) | double | 设置乘客进入/离开此车辆的登车持续时间。 | setBoardingDuration |
| impatience (0x26) | string | 设置此车辆当前的动态不耐烦度。当车辆开始行驶时,此值会重置。 | setImpatience |
| parameter (0x7e) | string, string | 为给定的字符串参数设置字符串值 | setParameter |
| action step length (0x7d) | double (新的动作步长), boolean (重置动作偏移) | 为车辆设置当前的动作步长(秒)。如果布尔值 resetActionOffset 为 true,则会立即为车辆计划一个动作步。 | setActionStepLength |
| highlight (0x6c) | 高亮规范, 见下文 | 为车辆添加高亮 | highlight |
| mass (0xc8) | double | 将车辆的质量设置为给定值 | setMass |
请注意:
- 会在新路线中搜索车辆当前所在的边的第一次出现;车辆从该点在路线中继续前进。如果车辆当前所在的边在新路线中不存在,则会生成错误。
- 只有当车辆不在交叉口内时,更改路线才有效。
- 指定的车道必须在车辆当前路线的前方。将使用下一次出现。中间的边在车辆进入和退出时都会被计数。
复合消息详情#
消息内容如下:
stop (0x12)#
| byte | integer | byte | string | byte | double | byte | byte | byte | double | byte | int | byte | double | byte | double |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 值类型 复合类型 | 项目数量 (4 到 7) | 值类型 string | 边ID | 值类型 double | 结束位置 | 值类型 byte | 车道索引 | 值类型 double | 持续时间 (秒) | 值类型 int (可选) | 停止标志: (见下文) | 值类型 double (可选) | 起始位置 | 值类型 double (可选) | 截止时间 (秒) |
停止标志是一个位集,包含以下可叠加的组件:
- 1 : 停车 (parking)
- 2 : 触发 (triggered)
- 4 : 集装箱触发 (containerTriggered)
- 8 : 公交站 (busStop) (边ID被重新用作公交站ID)
- 16 : 集装箱站 (containerStop) (边ID被重新用作集装箱站ID)
- 32 : 充电站 (chargingStation) (边ID被重新用作充电站ID)
- 64 : 停车区 (parkingArea) (边ID被重新用作停车区ID)
change lane (0x13)#
| byte | integer | byte | byte | byte | double | byte | byte |
|---|---|---|---|---|---|---|---|
| 值类型 复合类型 | 项目数量 (2 或 3) | 值类型 byte | 车道索引 | 值类型 double | 持续时间 (秒) | 值类型 byte (可选) | 相对换道的布尔值 |
请注意: 换道的持续时间是车辆尝试执行换道的时间。如果持续时间太短而无法完成所有换道,则车辆将在持续时间结束后停止换道。 车辆成功执行换道后,将在剩余的持续时间内保持在该车道上。
slow down (0x14)#
| byte | integer | byte | double | byte | double |
|---|---|---|---|---|---|
| 值类型 复合类型 | 项目数量 (始终为 2) | 值类型 double | 速度 | 值类型 double | 持续时间 (秒) |
set acceleration (0x72)#
| byte | integer | byte | double | byte | double |
|---|---|---|---|---|---|
| 值类型 复合类型 | 项目数量 (始终为 2) | 值类型 double | 加速度 | 值类型 double | 持续时间 (秒) |
open gap (0x16)#
| byte | integer | byte | double | byte | double | byte | double | byte | double | byte | double | byte | string |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 值类型 复合类型 | 项目数量 (4 或 5) | 值类型 double | 适配的时间车头时距 (秒) | 值类型 double | 适配的空间车头时距 (秒) | 值类型 double | 持续时间 (秒) | 值类型 double | 变化率 | 值类型 double | 最大减速度 | 值类型 string (可选) | 参考车辆ID |
此命令会暂时增加车辆期望的时间车头时距(跟车参数 tau),并指定要保持的最小空间车头时距。执行分为一个调整阶段,在此阶段车头时距以指定的速率逐渐改变。一旦达到期望的车头时距,它们将在指定的持续时间内保持不变。之后,它们将重置为原始值。 可以通过发送 newHeadway=duration=maxDecel=-1 来停用控制。如果在相应位置发送值 -1,则车辆的期望时间车头时距保持不变。如果为持续时间发送 -1,则设置为最大可能时间。如果为 maxDecel 发送 -1,则不应用诱导制动速率的限制。如果指定了可选的参考车辆ID,则该方法不使用当前前车作为创建间隙的参考,而是使用指定的车辆。
注意
当使用欧拉积分方法时,时间车头时距控制在低速下无法正常工作。
move to (0x5c)#
| byte | integer | byte | string | byte | double |
|---|---|---|---|---|---|
| 值类型 复合类型 | 项目数量 (始终为 2) | 值类型 string | 车道ID | 值类型 double | 车道沿线位置 |
车辆将从其所在的车道上移除,并移动到给定车道上的给定位置。不进行碰撞检查,这意味着移动车辆可能会导致碰撞或导致碰撞的情况。车辆保持其速度 - 在下一个时间步,它将位于给定位置 + 速度。请注意,该车道必须是路线的一部分,这意味着它必须是车辆路线中的任何边的一部分,或者是连接路线边的内部车道。为了克服此限制,可以在调用 moveTo 之前修改路线。
注意
这也可以用于将已加载但由于出发车道被阻挡而无法出发的车辆强制进入网络。
move to XY (0xb4)#
车辆(其前保险杠的中心)被移动到最能匹配给定 x,y 网络坐标的网络位置。
参数 edgeID 和 lane 是可选的,如果未知,可以分别设置为 "" 和 -1。它们的用途是在有多条道路重叠(例如在桥梁上)时解决歧义,或者在交叉口(内部边重叠)提供额外指导。 如果给出了 edgeID 和 lane,它们将与道路车道的 'origID' 属性进行比较(该属性可能被设置以提供到其他网络(如 OpenDRIVE)的映射),如果该属性未设置,则与实际的车道ID进行比较。
可选的 keepRoute 标志是一个位集,影响映射如下:
- bit0 (当仅设置此位时 keepRoute = 1)
- 1: 车辆映射到其现有路线中最接近的边。 如果在 100m 内未找到合适的位置,则映射失败并报错。
- 0: 车辆映射到网络中最接近的边。 如果该边不属于原始路线,则当前路线将被仅包含该边的新路线替换。 如果在 100m 内未找到合适的位置,则映射失败并报错。 当使用子车道模型时,将使用完全在车道内的最佳横向位置。否则,车辆将在最接近车道的中心行驶。
- bit1 (当仅设置此位时 keepRoute = 2)
- 1: 车辆映射到网络中的确切位置(包括确切的横向位置)。如果该位置位于道路网络之外,车辆将自行停止移动,直到通过另一个 TraCI 命令将其放回网络中。(如果 keeproute = 3,位置仍必须在车辆路线的 100m 范围内)
- 0: 车辆始终在道路上
- bit2 (当仅设置此位时 keepRoute = 4)
- 1: 映射时忽略车道权限
- 0: 车辆仅映射到允许其车辆类别的车道
角度值假定为航向度数(在 0 到 360 之间,0 在顶部,顺时针方向)。该角度用于对候选映射车道进行评分以解决歧义。映射后,车辆的角度将设置为给定值,用于绘制和所有输出。如果角度设置为特殊的 TraCI 常量 INVALID_DOUBLE_VALUE,则角度将不用于评分,车辆将采用最佳找到车道的角度。当在道路网络外映射车辆时,角度将根据先前位置和新位置计算。
注意
此函数也可以用于将已加载但由于出发车道被阻挡而无法出发的车辆强制进入网络。
注意
当将车辆映射到当前不在其路线上的边时,新路线将仅包含该边。一旦车辆到达该边的末端,它就会消失,除非在该仿真步中收到另一个 moveToXY 命令。这意味着,当调用带有导致 SUMO 执行多个步的参数的 traci.simulationStep 时,车辆可能会消失。
| byte | integer | byte | string | byte | double | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 值类型 复合类型 | 项目数量 (5 或 6) | 值类型 string | 边ID (用于解决歧义,可以是任意的) | 值类型 int | 车道索引 (用于解决歧义,可以是任意的) | 值类型 double | x 位置 (网络坐标) | 值类型 double | y 位置 (网络坐标) | 值类型 double | 角度 | 值类型 byte | keepRoute (0 - 7) |
replaceStop (0x17)#
| byte | integer | byte | string | byte | double | byte | byte | byte | double | byte | int | byte | double | byte | double | byte | int | byte | byte |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 值类型 复合类型 | 项目数量 (8 或 9) | 值类型 string | 边ID | 值类型 double | 结束位置 | 值类型 byte | 车道索引 | 值类型 double | 持续时间 (秒) | 值类型 int | 停止标志 (见 stop) | 值类型 double | 起始位置 | 值类型 double | 截止时间 (秒) | 值类型 int | 下一个停止索引 | 值类型 byte (可选) | 传送 |
用新的停止替换给定索引处的停止。如果替换停止在另一个位置,则会自动修改路线。
- 对于 edgeID,如果标志将此停止标记为在公交站、停车区、集装箱站等停止,则可以给出停止地点ID。
- 如果 edgeID 为 "",则给定索引处的停止将被移除而不替换,并且路线不会被修改。
- 如果 teleport 设置为 2,车辆将在被移除的停止部分重新路由(即从前一个停止到后续停止)。
- 如果 teleport 设置为 1,到替换停止的路线将被断开(强制传送)。
- 如果 stopIndex 为 0,则间隙将在当前边和新停止之间。
- 否则,间隙将在 nextStopIndex - 1 的停止边和新停止之间。
- 建议在使用此功能时同时设置 sumo 选项 --time-to-teleport.disconnected。
insertStop (0x18)#
| byte | integer | byte | string | byte | double | byte | byte | byte | double | byte | int | byte | double | byte | double | byte | int | byte | byte |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 值类型 复合类型 | 项目数量 (8 或 9) | 值类型 string | 边ID | 值类型 double | 结束位置 | 值类型 byte | 车道索引 | 值类型 double | 持续时间 (秒) | 值类型 int | 停止标志 (见 stop) | 值类型 double | 起始位置 | 值类型 double | 截止时间 (秒) | 值类型 int | 下一个停止索引 | 值类型 byte (可选) | 传送 |
在给定索引处插入停止。自动修改路线以适应新的停止。
- 对于 edgeID,如果标志将此停止标记为在公交站、停车区、集装箱站等停止,则可以给出停止地点ID。
- 如果 nextStopIndex 等于即将到站的停止数量,则新停止将添加到所有其他停止之后。
- 如果 teleport 设置为 1,到新停止的路线将被断开(强制传送)。
- 如果 stopIndex 为 0,则间隙将在当前边和新停止之间。
- 否则,间隙将在 nextStopIndex - 1 的停止边和新停止之间。
- 建议在使用此功能时同时设置 sumo 选项 --time-to-teleport.disconnected。
setStopParameter (0x55)#
| byte | integer | int | string | string | byte |
|---|---|---|---|---|---|
| 值类型 复合类型 项目数量 (始终为 4) | 下一个停止索引 | 参数 | 值 | 自定义参数 |
更新给定索引处的停止参数。
- nextStopIndex 必须是一个非负数,且小于剩余停止的数量。
- param 可以是停止允许的任何 XML 属性值(
index除外)。 - 如果 param 更改了位置 ('edge', 'busStop', ...),该函数的行为类似于 replaceStop。
- 如果 customParam 设置为 1,param 可以是任意字符串,该函数将设置自定义参数而不是属性。
resume (0x19)#
| byte | integer |
|---|---|
| 值类型 复合类型 | 项目数量 (始终为 0) |
change target (0x31)#
| byte | string |
|---|---|
| 值类型 string | 边ID |
change route by id (0x54)#
| byte | string |
|---|---|
| 值类型 string | 路线ID |
change route (0x57)#
| byte | int | string |
|---|---|---|
| 值类型 string list | 元素数量 | 边ID |
change edge travel time information (0x58)#
此命令可以使用 4、2 或 1 个参数发送。第一种形式,它向给定车辆的现有覆盖列表添加一个新的边信息覆盖,从开始时间到结束时间有效。第二种形式,它添加一个在整个仿真期间有效的新覆盖,替换同一边的先前覆盖。第三种形式,它移除给定边的先前覆盖,该覆盖在整个仿真期间有效。
| byte | int | byte | double | byte | double | byte | string | byte | double |
|---|---|---|---|---|---|---|---|---|---|
| 值类型 复合类型 | 元素数量 (始终=4) | 值类型 double | 开始时间 (秒) | 值类型 double | 结束时间 (秒) | 值类型 string | 边ID | 值类型 double | 行程时间值 (秒) |
| byte | int | byte | string | byte | double |
|---|---|---|---|---|---|
| 值类型 复合类型 | 元素数量 (始终=2) | 值类型 string | 边ID | 值类型 double | 行程时间值 (秒) |
| byte | int | byte | string |
|---|---|---|---|
| 值类型 复合类型 | 元素数量 (始终=1) | 值类型 string | 边ID |
change edge effort information (0x59)#
此命令可以使用 4、2 或 1 个参数发送。第一种形式,它向给定车辆的现有覆盖列表添加一个新的边信息覆盖,从开始时间到结束时间有效。第二种形式,它添加一个在整个仿真期间有效的新覆盖,替换同一边的先前覆盖。第三种形式,它移除给定边的先前覆盖,该覆盖在整个仿真期间有效。
| byte | int | byte | double | byte | double | byte | string | byte | double |
|---|---|---|---|---|---|---|---|---|---|
| 值类型 复合类型 | 元素数量 (始终=4) | 值类型 double | 开始时间 (秒) | 值类型 double | 结束时间 (秒) | 值类型 string | 边ID | 值类型 double | 开销值 (抽象) |
| byte | int | byte | string | byte | double |
|---|---|---|---|---|---|
| 值类型 复合类型 | 元素数量 (始终=2) | 值类型 string | 边ID | 值类型 double | 开销值 (抽象) |
| byte | int | byte | string |
|---|---|---|---|
| 值类型 复合类型 | 元素数量 (始终=1) | 值类型 string | 边ID |
reroute (计算新路线) 按行程时间 (0x90)#
| byte | int |
|---|---|
| 值类型 复合类型 | 元素数量 (始终=0) |
reroute (计算新路线) 按开销 (0x91)#
| byte | int |
|---|---|
| 值类型 复合类型 | 元素数量 (始终=0) |
speed mode (0xb3)#
此命令控制如何使用 setSpeed (0x40)、setAcceleration (0x72) 和 slowDown (0x14) 命令设置的速度。默认情况下,车辆只能以低于跟车模型认为安全的速度行驶,并且不能超过加速度和减速度的限制。此外,车辆在接近交叉口时遵循通行权规则,如有必要,它们会急刹车以避免闯红灯。可以使用速度模式 (0xb3) 命令控制此行为。给定的整数是一个位集(bit0 是最低有效位),包含以下字段:
- bit0: 考虑安全速度
- bit1: 考虑最大加速度
- bit2: 考虑最大减速度
- bit3: 考虑交叉口的通行权(仅适用于接近交叉口的敌对车辆)
- bit4: 急刹车以避免闯红灯
- bit5: 忽略交叉口内的通行权(仅适用于已进入交叉口的敌对车辆)。
- bit6: 忽略速度限制。
设置该位会启用检查(考虑相应值),保持 bit==zero 会禁用检查。
示例:
- 默认 (所有检查开启) -> [0 0 1 1 1 1 1] -> 速度模式 = 31
- 大多数检查关闭 (旧版) -> [0 0 0 0 0 0 0] -> 速度模式 = 0
- 所有检查关闭 -> [1 1 0 0 0 0 0] -> 速度模式 = 96
- 禁用通行权检查 -> [0 1 1 0 1 1 1] -> 速度模式 = 55
- 闯红灯 [0 0 0 0 1 1 1] = 7 (还需要 setSpeed 或 slowDown)
- 即使交叉口被占用也闯红灯 [0 1 0 0 1 1 1] = 39 (还需要 setSpeed 或 slowDown)
注意
bit5 和 bit6 具有反向语义,必须设置为 '1' 才能禁用安全功能。这实现了与 SUMO 早期版本的向后兼容性,在这些版本中,该位未定义,并且无法显式忽略交叉口内的通行权。
注意
位 3、4、5 和 6 无需调用任何其他 traci 函数即可生效。
lane change mode (0xb6)#
laneChangeModel 区分了四种换道原因:
- 战略性 (换道以继续路线)
- 协作性 (为允许他人换道而换道)
- 速度增益 (另一车道允许更快行驶)
- 靠右行驶的义务
在每个仿真步中,laneChangeModel 计算一个内部请求,以换道或保持在当前车道。
如果外部换道命令 (0x13) 与内部请求冲突,则由车辆的当前换道模式值解决。给定的整数被解释为一个位集(bit0 是最低有效位),包含以下字段:
- bit1, bit0: 00 = 不进行战略性换道;01 = 在不与 TraCI 请求冲突的情况下进行战略性换道;10 = 即使覆盖 TraCI 请求也进行战略性换道
- bit3, bit2: 00 = 不进行协作性换道;01 = 在不与 TraCI 请求冲突的情况下进行协作性换道;10 = 即使覆盖 TraCI 请求也进行协作性换道
- bit5, bit4: 00 = 不进行速度增益换道;01 = 在不与 TraCI 请求冲突的情况下进行速度增益换道;10 = 即使覆盖 TraCI 请求也进行速度增益换道
- bit7, bit6: 00 = 不进行靠右行驶换道;01 = 在不与 TraCI 请求冲突的情况下进行靠右行驶换道;10 = 即使覆盖 TraCI 请求也进行靠右行驶换道
- bit9, bit8:
- 00 = 遵循 TraCI 请求时不尊重其他驾驶员,调整速度以满足请求
- 01 = 遵循 TraCI 请求时避免立即碰撞,调整速度以满足请求
- 10 = 换道时尊重他人的速度/刹车间隙,调整速度以满足请求
- 11 = 换道时尊重他人的速度/刹车间隙,不进行速度调整
- bit11, bit10: 00 = 不进行子车道变更;01 = 在不与 TraCI 请求冲突的情况下进行子车道变更;10 = 即使覆盖 TraCI 请求也进行子车道变更
默认的换道模式是 0b011001010101 = 1621,这意味着 laneChangeModel 可以执行所有变更,除非与 TraCI 冲突。来自 TraCI 的请求会被紧急处理(通过本车和周围交通进行协作速度调整),但会充分考虑安全约束。
为了禁用所有自主变更但仍在仿真中处理安全检查,可以使用模式 256(避免碰撞)或 512(避免碰撞并强制安全间隙)中的一个。
addLegacy (已弃用) (0x80)#
| byte | int | byte | string | byte | string | byte | int | byte | double | byte | double | byte | byte |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 值类型 复合类型 | 元素数量 (始终=6) | 值类型 string | 车辆类型ID (必须存在) | 值类型 string | 路线ID (必须存在) | 值类型 integer | 出发时间 (毫秒) | 值类型 double | 出发位置 | 值类型 double | 出发速度 | 值类型 byte | 出发车道 |
注意
请注意,这些值不会以非常复杂的方式进行检查。在发送之前请确保它们是正确的。
如果设置了负的出发时间,将使用以下固定时间设置之一:
- -1: "触发"
- -2: "集装箱触发"
如果设置了负的出发速度,将使用以下固定速度设置之一:
- -2: "随机"
- -3: "最大"
如果设置了负的出发位置,将使用以下位置设置之一:
- -2: "随机"
- -3: "自由"
- -4: "基准"
- -5: "最后"
- -6: "随机自由"
请注意,将出发位置设置为 0 将导致车辆以其前部在车道起点开始(与仿真默认值不同,仿真默认值是将车辆完全放置在车道 "基准" 上)。
如果设置了负的出发车道,将使用以下车道设置:
- -2: "随机"
- -3: "自由"
- -4: "允许"
- -5: "最佳"
- -6: "第一"
如果给定空的 routeID,车辆将被放置在由单个任意边组成的路线上(具有合适的 vClass 权限)。这可用于简化远程控制车辆 (moveToXY) 的初始化。
add (别名 addFull) (0x85)#
| byte | int | byte | string | byte | string | byte | string | byte | string | byte | string | byte | string | byte | string | byte | string | byte | string | byte | string | byte | string | byte | string | byte | int | byte | int |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 值类型 复合类型 | 元素数量 (始终=14) | 值类型 string | 路线ID (必须存在) | 值类型 string | 车辆类型ID (必须存在) | 值类型 string | 出发时间 | 值类型 string | 出发车道 | 值类型 string | 出发位置 | 值类型 string | 出发速度 | 值类型 string | 到达车道 | 值类型 string | 到达位置 | 值类型 string | 到达速度 | 值类型 string | 来自 TAZ (起点区域) | 值类型 string | 前往 TAZ (终点区域) | 值类型 string | 线路 (用于公共交通) | 值类型 integer | 人员容量 | 值类型 integer | 人员数量 |
如果给定空的 routeID,车辆将被放置在由单个任意边组成的路线上(具有合适的 vClass 权限)。这可用于简化远程控制车辆 (moveToXY) 的初始化。
特殊情况#
- 如果 routeID 为 "",车辆将被插入到随机的网络边上。当打算使用 moveToXY 控制车辆(并且没有可用的路线信息)时,这可能很有用。
- 如果路线由 2 个断开的边组成,车辆将被视为
<trip>,并使用两个边之间的最快路线。
注意
请注意,这些值不会以非常复杂的方式进行检查。在发送之前请确保它们是正确的。
remove (0x81)#
| byte | byte |
|---|---|
| 值类型 byte | 原因 |
可以给出以下原因:
- 0: NOTIFICATION_TELEPORT
- 1: NOTIFICATION_PARKING
- 2: NOTIFICATION_ARRIVED
- 3: NOTIFICATION_VAPORIZED
- 4: NOTIFICATION_TELEPORT_ARRIVED
highlight (0x6c)#
| ubyte | int | ubyte | 颜色 | ubyte | double | ubyte | ubyte | ubyte | double | ubyte | ubyte |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 值类型 复合类型 | 项目数量 | 值类型 color | 颜色 | 值类型 double | 大小 (半径, 米) | 值类型 ubyte | 最大 alpha 值 | 值类型 double | 持续时间 (秒) | 值类型 ubyte | 类型ID (允许不同的高亮类别) |
highlight 方法在车辆中心添加一个指定大小和颜色的圆圈。如果给定正值,则圆圈的 alpha 值将在指定的持续时间内动画化(淡入和淡出),maxAlpha <= 0 表示没有动画的持久高亮。
设置设备和换道模型参数 (0x7e)#
车辆支持使用通用参数设置调用设置设备参数。
支持的设备参数#
- device.battery.actualBatteryCapacity (double 字面量)
- device.battery.maximumBatteryCapacity (double 字面量)
- device.battery.vehicleMass (double 字面量)
- device.rerouting.period (double 字面量, 以秒为单位设置重路由周期)
- device.rerouting.edge:EDGE_ID (double 字面量, 为所有车辆设置用于重路由的假设行程时间 (其中 EDGE_ID 是网络边的ID)。此值将在下一个更新间隔 (--device.rerouting.adaptation-interval) 被覆盖。
- device.driverstate.awareness
- device.driverstate.errorState
- device.driverstate.errorTimeScale
- device.driverstate.errorNoiseIntensity
- device.driverstate.minAwareness
- device.driverstate.initialAwareness
- device.driverstate.errorTimeScaleCoefficient
- device.driverstate.errorNoiseIntensityCoefficient
- device.driverstate.speedDifferenceErrorCoefficient
- device.driverstate.headwayErrorCoefficient
- device.driverstate.speedDifferenceChangePerceptionThreshold
- device.driverstate.headwayChangePerceptionThreshold
- device.driverstate.maximalReactionTime
- device.driverstate.originalReactionTime
- device.stationfinder.needToChargeLevel (double 字面量)
- device.stationfinder.saturatedChargeLevel (double 字面量)
- device.stationfinder.waitForCharge (double 字面量)
- device.stationfinder.repeat (double 字面量)
- device.stationfinder.radius (double 字面量)
- device.stationfinder.reserveFactor (double 字面量)
- device.toc.manualType
- device.toc.automatedType
- device.toc.responseTime
- device.toc.recoveryRate
- device.toc.initialAwareness
- device.toc.lcAbstinence
- device.toc.currentAwareness
- device.toc.mrmDecel
- device.toc.requestToC
- device.toc.requestMRM
- device.toc.awareness
- device.toc.dynamicToCThreshold
- device.toc.dynamicMRMProbability
- device.toc.mrmKeepRight
- device.toc.mrmSafeSpot
- device.toc.mrmSafeSpotDuration
- device.toc.maxPreparationAccel
- device.toc.ogNewTimeHeadway
- device.toc.ogNewSpaceHeadway
- device.toc.ogChangeRate
- device.toc.ogMaxDecel
- device.example.customValue1 (double 字面量)
- has.rerouting.device ("true"): 可用于动态启用自动重路由
注意
如果车辆没有携带相应的设备,则会返回错误。
支持的换道模型参数#
- laneChangeModel.<属性名> , (double 字面量): <属性名> 必须是车辆换道模型支持的参数之一。例如 lcStrategic)
支持的跟车模型参数#
一些跟车模型允许访问更多的车辆特定参数。
- carFollowModel.ignoreIDs
- carFollowModel.ignoreTypes
- carFollowModel.caccCommunicationsOverride (仅限 CACC)
支持的交叉口模型参数#
换道模型属性和 vTypes 之间的关系#
所有换道模型属性都从车辆的 vType 初始化,然后存储在每个车辆的独立换道模型实例中。这有重要的后果:
- 为车辆设置新的 vType 不会影响换道模型属性(车辆继续使用其独立的值)
- 更改车辆 vType 的换道模型属性不会影响该车辆(车辆继续使用其独立的值)
- 更改车辆的换道模型属性不会影响其 vType(而是更改车辆的独立值)
注意
属性 'minGapLat' 自版本 1.12.0 起也算作换道模型属性。
traci 命令和仿真步的应用顺序#
步 n:
- traci.vehicle.getPosition 和 traci.vehicle.getSpeed 显示来自步 n-1 的值
- 当调用 traci.vehicle.moveTo 时,车辆被立即放置(并且在此步中仍然移动)
- vNext(此步的速度)基于前一步的值计算(traci.vehicle.setSpeed 会覆盖此值)
- 车辆位置基于 vNext 更新(通过添加 vNext 或添加 (vPrev + vNext) / 2,具体取决于选项 --step-method.ballistic 的值)
- 给 traci.vehicle.moveToXY 的值会覆盖先前计算的位置
- GUI 更新以显示步 n 的最终状态,像 fcd-output 这样的输出也显示步 n 的此状态
步 n+1
这意味着,在步 n 给 moveToXY 的位置将在步 n 的输出中可见,而 traci.vehicle.getPosition 将始终显示前一步的值。
车辆插入#
当使用方法 add 添加车辆时,它不会立即插入网络。只有在下一次调用 simulationStep 后,仿真才会尝试插入它(当与其他交通冲突时,这可能会失败)。getIDList 的结果仅包含已插入网络的车辆,这意味着车辆不会立即被列出。可以通过在将车辆添加到仿真后调用函数 vehicle.moveTo 或 vehicle.moveToXY 来强制车辆立即插入。
