跳转到内容

Disim 高速公路模拟器/LUA API

来自维基教科书,开放世界开放书籍

Disim 允许用户使用 LUA 编写的脚本控制单个车辆行为和基础设施。这些脚本需要向 Disim 提供特定函数(如 此处此处 所示),但 Disim 也通过面向对象的 API 为这些脚本提供函数。

此对象描述了在模拟器中运行的车辆。它有 9 个关联函数。

function LuaCar:getPosition()

此函数返回一个数字。该数字代表车辆在其当前车道的行驶位置。如果当前路段为直线路段,该位置以米为单位;如果为圆形路段,该位置以弧度为单位。

function LuaCar:getLane()

此函数返回指向代表车辆当前车道的 LuaLane 对象的指针。

function LuaCar:getSpeed()

此函数返回一个数字,代表车辆当前速度,以米每秒 (m/s) 为单位。

function LuaCar:setSpeed(speed)

此函数设置车辆当前速度,以米每秒 (m/s) 为单位,并将加速度设置为零。

function LuaCar:setAccleration(acceleration)

此函数设置车辆当前加速度,以米每秒平方 (m/s^2) 为单位。

function LuaCar:setLaneChange(offset)

此函数设置要切换到的下一条车道。如果 offset 为负数,车辆将切换到左侧车道;如果为正数,则切换到右侧车道;否则将停留在当前车道。如果目标车道没有空间,则切换车道可能会失败。

function LuaCar:getType()

此函数根据车辆是轿车还是卡车,返回 CARTRUCK 值。

function LuaCar:getGeometry()

此函数返回 4 个数字。第一个数字代表后轴中心到前保险杠的距离,第二个代表到后保险杠的距离,第三个代表到最左侧的距离,第四个代表车辆的高度。

function LuaCar:isTracked()

如果车辆正在图形界面中被摄像头跟踪(用于调试),则此函数返回 true。否则返回 false

function LuaCar:isLeftAllowed()

此函数返回 true,如果可以合法地向左变道(此函数检查当前位置左侧的车道标记)。

function LuaCar:isRightAllowed()

此函数返回 true,如果可以合法地向右变道(此函数检查当前位置右侧的车道标记)。

function LuaCar:getDestination()

此函数返回作为 LuaLane 对象的首选目标车道。如果没有首选目标车道,则返回 nil

function LuaCar:nextTrafficLight()

此函数返回指向下一个类型等于 TRAFFICLIGHTLuaRoadActuator 的指针。

LuaInfrastructure

[编辑 | 编辑源代码]

此对象描述了基础设施,并允许访问网络中的所有传感器和执行器。它提供了 7 个函数。

function LuaInfrastructure:getName()

此函数返回当前地图的名称。

function LuaInfrastructure:getLane(name)

此函数返回指向一个名为 nameLuaLane 的指针。如果多个车道声明了相同的名称,则只返回一个车道(返回哪一个没有指定)。

function LuaInfrastructure:getLanes(name)

此函数返回指向所有名为 nameLuaLane 的指针数组。

function LuaInfrastructure:getEntryLanes()

此函数返回指向所有作为网络入口的车道,即 LuaLanes 的指针数组。

function LuaInfrastructure:getRoadSensor(name)

此函数返回指向一个名为 nameLuaRoadSensor 的指针。如果多个传感器声明了相同的名称,则只返回一个传感器(返回哪一个没有指定)。

function LuaInfrastructure:getRoadActuator(name)

此函数返回指向一个名为 nameLuaRoadActuator 的指针。如果多个执行器声明了相同的名称,则只返回一个执行器(返回哪一个没有指定)。

function LuaInfrastructure:getTimeOfDay(t)

此函数以 HH:MM 24 小时制格式返回一个字符串。它以模拟开始以来的总时间作为输入。

此对象描述了高速公路的车道。高速公路的每个路段包含给定的车道数。每个车道提供 17 个函数。

function LuaLane:getNext()

此函数返回指向代表紧随当前车道的车道的 LuaLane 对象的指针。如果没有这样的车道,则返回 nil

function LuaLane:getPrev()

此函数返回指向代表位于当前车道之前的车道的 LuaLane 对象的指针。如果没有这样的车道,则返回 nil

function LuaLane:getLeft()

此函数返回指向代表位于当前车道左侧的车道的 LuaLane 对象的指针。如果没有这样的车道,则返回 nil

function LuaLane:getRight()

此函数返回指向代表位于当前车道右侧的车道的 LuaLane 对象的指针。如果没有这样的车道,则返回 nil

function LuaLane:getMergeDirection()

如果该车道上的车辆需要在该车道结束时并入右侧车道,此函数返回 1。这意味着没有下一条车道,车辆要么需要停止,要么需要并入。如果需要并入左侧,此函数返回 -1,否则返回 0。

function LuaLane:getType()

此函数根据当前车道是入口、出口还是两者都不是,返回 ENTRYEXITNONE

function LuaLane:getGeometry()

如果当前车道是直线路段的一部分,此函数返回 STRAIGHT;如果是圆形路段的一部分,则返回 CIRCULAR

function LuaLane:getLength()

如果该车道为直线(getGeometry() == STRAIGHT),此函数返回该车道的长度,以米为单位。如果该车道不是直线,则返回值未定义。

function LuaLane:getRadius()

如果该车道为圆形(getGeometry() == CIRCULAR),此函数返回该车道的曲率半径,以米为单位。如果该车道不是圆形,则返回值未定义。

function LuaLane:getAngleSpan()

如果该车道为圆形(getGeometry() == CIRCULAR),此函数返回该车道所跨的角度,以弧度为单位。如果返回值为负,则车道向左转弯;如果为正,则向右转弯。如果该车道不是圆形,则返回值未定义。

function LuaLane:getSpeedLimit()

此函数返回该车道允许的最大速度限制,以米每秒 (m/s) 为单位。

function LuaLane:getName()

此函数返回该车道的名称。如果没有为该车道指定名称,则返回一个空字符串。

function LuaLane:getIndex()

此函数返回该车道在其路段上的索引。0 代表最左侧的车道,1 代表最左侧车道右侧的车道,以此类推。

function LuaLane:getEntryRate()

此函数返回为该车道指定的进入率,以车辆每小时 (veh/h) 为单位。

function LuaLane:setEntryRate(entryRate)

此函数设置该车道的进入率,以车辆每小时 (veh/h) 为单位。

function LuaLane:getEntrySpeed()

此函数返回为该车道指定的进入速度,以公里每小时 (km/h) 为单位。

function LuaLane:setEntrySpeed(entrySpeed)

此函数设置该车道的进入速度,以公里每小时 (km/h) 为单位。如果我们不关心车辆的进入速度,可以将其设置为负值。

function LuaLane:getVehicleCount()

此函数返回该车道上存在的车辆数量。

LuaRoadSensor

[编辑 | 编辑源代码]

此对象代表网络中的传感器。它提供了 5 个函数。

function LuaRoadSensor:getValue()

此函数返回该传感器计算的当前值。如果该传感器设置为测量流量,则返回以车辆每小时 (veh/h) 为单位的值;如果设置为测量速度,则返回以公里每小时 (km/h) 为单位的值;如果设置为测量密度,则返回以车辆每公里 (veh/km) 为单位的值。

function LuaRoadSensor:isOccupied()

如果该传感器在该时刻检测到车辆存在,则此函数返回 true。否则返回 false

function LuaRoadSensor:getVehicleCount()

如果该传感器是密度传感器(getType() == DENSITY),则此函数返回可检测区域内存在的车辆数量。否则,此函数不返回任何内容。

function LuaRoadSensor:getType()

此函数根据其计算的测量类型返回 FLOWSPEEDDENSITY

function LuaRoadSensor:getName()

此函数返回该传感器的名称。如果没有指定名称,则返回空字符串。

function LuaRoadSensor:getLane()

此函数返回指向该传感器所属的 Lane 的指针。

LuaRoadActuator

[编辑 | 编辑源代码]

此对象代表网络中的执行器。它提供了 8 个函数。

function LuaRoadActuator:getColor()

如果当前执行器是交通灯(getType() == TRAFFICLIGHT),则此函数返回 GREENRED,具体取决于此执行器的当前灯光颜色。红色表示车辆不应通过。如果此执行器不是交通灯,则此函数不执行任何操作。

function LuaRoadActuator:red()

如果当前执行器是交通灯(getType() == TRAFFICLIGHT),则此函数将交通灯的颜色设置为红色。如果此执行器不是交通灯,则此函数不执行任何操作。

function LuaRoadActuator:green()

如果当前执行器是交通灯(getType() == TRAFFICLIGHT),则此函数将交通灯的颜色设置为绿色。如果此执行器不是交通灯,则此函数不执行任何操作。

function LuaRoadActuator:setSpeedLimit(speedLimit)

如果当前执行器是可变限速器(getType() == SPEEDLIMIT),则此函数设置以公里每小时 (km/h) 为单位的限速。如果此执行器不是限速器,则此函数不执行任何操作。

function LuaRoadActuator:getType()

此函数返回 TRAFFICLIGHTSPEEDLIMIT,具体取决于当前执行器是交通灯还是可变限速标志。

function LuaRoadActuator:getName()

此函数返回此执行器的名称。如果未指定名称,则此函数返回空字符串。

function LuaRoadActuator:getLane()

此函数返回指向此执行器所在的 LuaLane 的指针。

function LuaRoadActuator:getPosition()

此函数返回此执行器在其车道上的位置(以米为单位,如果车道是直线,以弧度为单位,如果车道是圆形)。

function LuaRoadActuator:getAverageQueueLength()

如果当前执行器是交通灯(getType() == TRAFFICLIGHT),则此函数返回到达交通灯的平均排队长度(以秒为单位,一分钟聚合)。如果此执行器不是交通灯,则此函数不执行任何操作。

function LuaRoadActuator:getInstantQueueLength()

如果当前执行器是交通灯(getType() == TRAFFICLIGHT),则此函数返回到达交通灯的最新排队长度(以秒为单位,由最近经过的车辆体验到的排队持续时间)。如果此执行器不是交通灯,则此函数不执行任何操作。

function LuaRoadActuator:getVehicleCount()

如果当前执行器是交通灯(getType() == TRAFFICLIGHT),则此函数返回最新的车辆数量(通过交通灯的车辆数量)。如果此执行器不是交通灯,则此函数不执行任何操作。

附加值和全局变量

[编辑 | 编辑源代码]
LEAD        -- Index of the leading car
TRAIL       -- Trailing car
LEFT_LEAD   -- Leading car on the left lane
LEFT_TRAIL  -- Trailing car on the left lane
RIGHT_LEAD  -- Leading car on the right lane
RIGHT_TRAIL -- Trailing car on the right lane
REMOTE      -- RESERVED

这些变量表示作为参数传递给控制汽车行为的 LUA 脚本的 think 函数的邻居数组中的索引(neighbors[LEAD].car 指的是控制的汽车前面的汽车,neighbors[RIGHT_TRAIL].distance 是从受控汽车后轴中心到右侧车道上直接位于当前汽车后面的车辆后轴中心的纵向距离)。

CAR   -- The vehicle is a car
TRUCK -- The vehicle is a truck

这些变量表示由 LuaCar:getType() 函数返回的车辆类型。

ENTRY -- This lane is an entry to the highway
EXIT  -- This lane is an exit
NONE  -- This is neither an entry nor an exit

这些变量表示由 LuaLane:getType() 函数返回的车道类型。

STRAIGHT -- This lane is part of a straight segment
CIRCULAR -- This lane is part of a circular segment

这些变量表示由 LuaLane:getGeometry() 函数返回的车道几何形状。

TRAFFICLIGHT -- This actuator is a traffic light
SPEEDLIMIT   -- This actuator is a variable speed limit sign

这些变量表示由 LuaRoadActuator:getType() 函数返回的执行器类型。

DENSITY -- This sensor measures average densities
SPEED   -- This sensor measures average speeds
FLOW    -- This sensor measures average flows

这些变量表示由 LuaRoadSensor:getType() 函数返回的传感器类型。

GREEN -- The light is green
RED   -- The light is red

这些变量表示由 LuaRoadActuator:getColor() 函数返回的交通灯执行器的当前灯光颜色。

华夏公益教科书