跳轉到內容

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() 函式返回的交通燈執行器的當前燈光顏色。

華夏公益教科書