日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python文件路径过滤器_SUMO入门(八) - 从Python引入TraCI接口

發布時間:2025/3/15 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python文件路径过滤器_SUMO入门(八) - 从Python引入TraCI接口 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SUMO入門(八) - 從Python引入TraCI接口

TraCI

TraCI/Interfacing TraCI from Python

TraCI命令分為13個部分,它們對應于各個模塊: gui,lane,poi,simulation,trafficlight,vehicletype,edge,inductionloop,junction,multientryexit,polygon,route,person,vehicle

有關函數的詳細列表,請參閱 pydoc generated documentation。命令的源代碼可以在eclipse/sumo找到

1 在腳本中引入TraCI

要使用該庫,/tools 目錄必須位于python加載路徑上。 通常如下:

import os, sys

if 'SUMO_HOME' in os.environ:

tools = os.path.join(os.environ['SUMO_HOME'], 'tools')

sys.path.append(tools)

else:

sys.exit("please declare environment variable 'SUMO_HOME'")

這假定在運行腳本之前設置了環境變量SUMO_HOME。 或者,您可以直接在行中聲明 sumo/tools 的路徑

sys.path.append(os.path.join('c:', os.sep, 'whatever', 'path', 'to', 'sumo', 'tools'))

2 第一步

通常,從Python接入SUMO非常容易(以下示例是 tutorial / traci_tls 的修改)

首先,編寫命令行以啟動 SUMO 或 SUMO-GUI:

(省略在0.28.0版本之前需要的遠程端口選項 --remote-port)

sumoBinary = "/path/to/sumo-gui"

sumoCmd = [sumoBinary, "-c", "yourConfiguration.sumocfg"]

然后開始仿真并使用腳本連接到它:

import traci

traci.start(sumoCmd)

step = 0

while step < 1000:

traci.simulationStep()

if traci.inductionloop.getLastStepVehicleNumber("0") > 0:

traci.trafficlight.setRedYellowGreenState("0", "GrGr")

step += 1

traci.close()

連接到仿真后,可以發出各種命令并執行仿真步驟,直到您想要關閉連接。 默認情況下,close命令將一直等到sumo過程真正完成,你可以通過調用來禁用它:

traci.close(False)

3 Subscriptions 訂閱

Subscriptions 可以被視為用于 檢索變量的批處理模式。 您可以在每個時間步之后自動檢索感興趣的值,而不是一遍又一遍地請求相同的變量。 TraCI訂閱基于每個模塊進行處理。 也就是說,您可以在每個時間步之后向模塊詢問所有當前訂閱的結果。 為了訂閱變量,您需要知道它們的變量 id,可以在 traci/constants.py 文件中進行查找。

import traci

import traci.constants as tc

traci.start(["sumo", "-c", "my.sumocfg"])

traci.vehicle.subscribe(vehID, (tc.VAR_ROAD_ID, tc.VAR_LANEPOSITION))

print(traci.vehicle.getSubscriptionResults(vehID))

for step in range(3):

print("step", step)

traci.simulationStep()

print(traci.vehicle.getSubscriptionResults(vehID))

traci.close()

檢索到的值始終是上一個時間步的值,無法檢索較舊的值。

3.1 上下文訂閱

上下文訂閱的工作方式與訂閱類似,因為它們會在每個仿真停止自動檢索變量列表。 但是,這樣做是通過設置引用對象和范圍,然后在引用對象的范圍內檢索給定類型的所有對象的變量。

TraCI上下文訂閱是基于每個模塊處理的。 也就是說,您可以在每個時間步之后向模塊詢問所有當前訂閱的結果。 為了訂閱變量,你需要檢索要檢索對象的域id,以及可以在 traci/constants.py 文件中查找的變量id。 域ID的格式始終為 CMD_GET_ _VARIABLE。 以下代碼檢索交叉點范圍(42m)內的所有車輛速度和等待時間(隱式檢索車輛ID)。

import traci

import traci.constants as tc

traci.start(["sumo", "-c", "my.sumocfg"])

traci.junction.subscribeContext(junctionID, tc.CMD_GET_VEHICLE_VARIABLE, 42, [tc.VAR_SPEED, tc.VAR_WAITING_TIME])

print(traci.junction.getContextSubscriptionResults(junctionID))

for step in range(3):

print("step", step)

traci.simulationStep()

print(traci.junction.getContextSubscriptionResults(junctionID))

traci.close()

檢索到的值始終是上一個時間步的值,無法檢索較舊的值。

3.2 上下文訂閱過濾器

對于車輛到車輛的上下文訂閱(即,上下文訂閱,其參考對象是車輛并且其請求的上下文對象也是車輛),可以請求在服務器側已經應用的附加過濾器。 一般過程是通過對 addSubscriptionFilter() 的成功調用,在調用 subscribeContext() 之后直接為請求的上下文訂閱配備過濾器,例如在下面的代碼片段中:

traci.vehicle.subscribeContext("ego", tc.CMD_GET_VEHICLE_VARIABLE, 0.0, [tc.VAR_SPEED])

traci.vehicle.addSubscriptionFilterLanes(lanes, noOpposite=True, downstreamDist=100, upstreamDist=50)

第一行請求具有ID “ego” 的參考車輛附近的車輛速度的上下文訂閱。上下文訂閱的范圍(指通常訂閱機制的徑向上下文區域)可以設置為等于0.0。

可以使用以下過濾器類型:

Lanes:返回相對于參考車輛指定的車道上的周圍車輛

CFManeuver:返回參考車輛車道的領導者和追隨者

LCManeuver:返回參考車輛車道和相鄰車道的領導者和追隨者

Turn:沿著車輛路線返回即將到來的交叉路口的沖突車輛

VType:僅返回指定vType的車輛

VClass:僅返回指定vClasses的車輛

有關詳細規范,請參閱 pydoc文檔。

4 添加StepListener

每次調用 traci.simulationStep() 時都需要調用一個函數,為了讓它自動發生(總是在每次調用simulationStep() 之后)可以添加一個StepListener對象 'listener’(更確切地說是traci.StepListener的子類的一個實例)

class ExampleListener(traci.StepListener):

def step(self, t=0):

# do something at every simulaton step

print("ExampleListener called at time %s ms." % t)

# indicate that the step listener should stay active in the next step

return True

listener = ExampleListener()

traci.addStepListener(listener)

警告:在一個traci客戶端控制多個SUMO實例的情況下,不能使用TraCI StepListener。

5 從同一個TraCI腳本控制并行仿真

TraCI python庫可用于通過單個腳本同時控制多個仿真。 函數 traci.start() 有一個可選的label參數,允許您使用不同的仿真實例和標簽多次調用它。 然后可以使用函數 traci.switch() 切換到任何初始化標簽:

traci.start(["sumo", "-c", "sim1.sumocfg"], label="sim1")

traci.start(["sumo", "-c", "sim2.sumocfg"], label="sim2")

traci.switch("sim1")

traci.simulationStep() # run 1 step for sim1

traci.switch("sim2")

traci.simulationStep() # run 1 step for sim2

如果您更喜歡面向對象的方法,也可以使用連接對象與仿真進行通信。 它們具有與靜態traci相同的接口調用,但您仍需要手動啟動仿真:

traci.start(["sumo", "-c", "sim1.sumocfg"], label="sim1")

traci.start(["sumo", "-c", "sim2.sumocfg"], label="sim2")

conn1 = traci.getConnection("sim1")

conn2 = traci.getConnection("sim2")

conn1.simulationStep() # run 1 step for sim1

conn2.simulationStep() # run 1 step for sim2

6 嵌入式Python

作為一個實驗性功能,還可以直接將SUMO與python連接,并在SUMO中執行腳本。 語法完全相同,只是你省去了對init和close的調用,你需要使用選項 –python-script 啟動sumo。 此功能被視為已棄用,將由libsumo替換。 但它目前不適用于sumo的GUI版本。

由于該功能尚未經過良好測試,因此建議您需要在構建SUMO時顯式啟用嵌入式python。 為此,請按照以下說明操作:

6.1 Linux

– 安裝python devel包文件

– 使用–with-python選項調用configure

– 像往常一樣make && make install

6.2 Windows

– 確保安裝了python并且在你的PATH中

– 調用tools \ build \ pythonPropsMSVC.py來生成或修改build \ msvc10 \ config.props文件

– 像往常一樣構建Win32發行版

– 來自PCbuild目錄副本

python27_d.dll到Python目錄(類似于C:\ Python27)

python27_d.lib,python27_d.pdb,python27_d.exp到libs目錄(C:\ Python27 \ libs)

每個* _d.pyd到DLL的目錄(C:\ Python27 \ DLLs)

– 通過編輯build \ msvc10 \ Win32.props啟用python調試版本

– 現在,您可以為SUMO執行Win32 Debug構建

7 用法示例

運行仿真直到所有車輛到達

while traci.simulation.getMinExpectedNumber() > 0:

traci.simulationStep()

動態添加行程(不完整路徑)

定義包含起始邊和目標邊的路線:

traci.route.add("trip", ["startEdge", "endEdge"])

然后添加具有該路線的車輛:

traci.vehicle.add("newVeh", "trip", typeID="reroutingType")

這將導致車輛根據出發時網絡中的估計行程時間計算從startEdge到endEdge的新路線。

坐標轉換

x, y = traci.vehicle.getPosition(vehID)

lon, lat = traci.simulation.convertGeo(x, y)

x2, y2 = traci.simulation.convertGeo(lon, lat, fromGeo=True)

edgeID, lanePosition, laneIndex = traci.simulation.convertRoad(x3, y3)

edgeID, lanePosition, laneIndex = traci.simulation.convertRoad(lon2, lat2, True)

注意:使用TraCI時,有一些常見的任務沒有被traci庫覆蓋,例如分析道路網絡、解析仿真輸出。

對于此功能,建議使用 Tools / Sumolib

總結

以上是生活随笔為你收集整理的python文件路径过滤器_SUMO入门(八) - 从Python引入TraCI接口的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。