以下是基于搜索结果的 TESS NG二次开发教程 总结,涵盖环境配置、核心功能开发及进阶应用案例:
TESS NG二次开发教程(Python版)
一、环境配置
-
系统要求
- 支持系统:Ubuntu 16.04/18.04/20.04 LTS(推荐Ubuntu 18.04,自带Python 3.6)
- Python版本:Python 3.6(其他版本需手动安装)
- 依赖库:
pyside2
-
安装步骤
# 1. 解压TESSNG_Pyapi_Ubuntu到Documents目录 unzip TESSNG_Pyapi_Ubuntu.zip -d ~/Documents # 2. 赋予权限 cd ~/Documents/TESSNG_Pyapi_Ubuntu sudo chmod -R 777 . # 3. 修改启动脚本(适配Python 3.6) sudo vim RunPython.sh # 将`python main.py`改为`python3.6 main.py` # 4. 安装依赖库(Ubuntu 20.04/16.04需手动安装Python 3.6) sudo apt install python3.6 python3.6 -m pip install pyside2 # 5. 运行程序 sudo ./RunPython.sh
-
激活软件
- 启动后点击 帮助 -> 软件激活 -> 导入激活码 -> 激活。
二、基础框架搭建
from pytessng import Tessng
# 初始化TESS NG实例
tess = Tessng()
# 加载路网文件
tess.load_net("test.tess") # TESS路网文件
# 获取接口对象
netiface = tess.netInterface() # 路网操作接口
simuiface = tess.simuInterface() # 仿真控制接口
# 设置仿真参数
simuiface.setSimuAccuracy(10) # 仿真精度(毫秒)
simuiface.setSimuInterval(100) # 仿真步长(毫秒)
simuiface.setSimuTotalSteps(3600) # 总仿真步数(1小时)
三、核心功能开发
1. 信号控制优化
# 获取信号机对象
signal_controller = netiface.findSignalController(1) # ID=1
# 动态调整信号配时(示例:公交优先)
def on_step(simuStep):
current_time = simuiface.simuTime()
if 600 <= current_time < 1200: # 高峰期(10:00-20:00)
signal_controller.setPhaseDuration(2, 30) # 相位2绿灯延长30秒
return True
# 绑定仿真步进事件
simuiface.signalStep.connect(on_step)
2. 车辆生成与控制
# 添加发车点
vehicle_input = netiface.createVehicleInput(100, 50) # 路段ID=100, 车道ID=50
vehicle_input.setDispatchParameters(3600, 800) # 发车时段3600秒,流量800辆/小时
# 自定义车辆行为(示例:网联车队)
def vehicle_created(vehicle):
if vehicle.type() == "CV": # 网联车辆
vehicle.setDesiredSpeed(80) # 设置期望速度80km/h
vehicle.setFollowingMode("CACC") # 协同自适应巡航控制
# 绑定车辆创建事件
simuiface.signalVehicleCreated.connect(vehicle_created)
3. 数据采集与分析
# 获取检测器数据
detector = netiface.findDetector(1) # ID=1
print(f"流量: {detector.volume()} veh/h, 速度: {detector.speed()} km/h")
# 输出车辆轨迹(笛卡尔坐标系)
for vehicle in simuiface.allVehicles():
x, y = vehicle.pos().x(), vehicle.pos().y()
print(f"车辆ID: {vehicle.id()}, 坐标: ({x}, {-y})") # Y坐标取负以匹配OpenDrive
四、OpenDrive路网转换
-
工具安装
- 从 Github 下载转换工具包。
- 配置Python 3.6环境并安装依赖:
pip install pytessng
-
路网导入
from opendrive2tessng import OpenDriveConverter # 解析OpenDrive文件(xodr格式) converter = OpenDriveConverter(min_segment_length=1.0) # 最小分段长度1米 converter.load("highway.xodr") # 生成TESS路网 converter.convert_lanes(width_threshold=0.5) # 车道宽度阈值0.5米 tess.save_net("highway.tess") # 保存路网
-
三维可视化
- 使用Unity/Unreal引擎加载TESS NG输出的车辆轨迹数据(笛卡尔坐标)。
五、进阶应用案例
1. 智能网联车辆仿真
# 设置网联车比例
simuiface.setConnectedVehicleRatio(0.3) # 30%车辆为网联车
# 动态事件触发(示例:事故预警)
def on_collision(vehicle1, vehicle2):
if vehicle1.type() == "Truck" and vehicle2.type() == "Car":
simuiface.addAccident(vehicle1.lane(), vehicle1.position(), duration=600) # 事故持续10分钟
simuiface.signalCollision.connect(on_collision)
2. 强化学习集成
# 自动循环仿真(参数标定)
for episode in range(100):
simuiface.setSimuParameters({"max_speed": 60 + episode*0.5}) # 动态调整参数
simuiface.startSimu() # 启动仿真
delay = simuiface.avgTravelDelay() # 获取平均延误
print(f"Episode {episode}: 延误={delay}s")
六、常见问题
-
Python版本冲突
- 确保使用
python3.6
命令启动脚本,避免多版本冲突。
- 确保使用
-
路网文件路径错误
- 使用绝对路径加载文件:
import os tess.load_net(os.path.abspath("test.tess"))
- 使用绝对路径加载文件:
-
依赖库缺失
- 安装
pyside2
:python3.6 -m pip install pyside2
- 安装
七、资源参考
- 官方文档:安装包内
Example
文件夹含完整开发案例。 - Github源码:https://github.com/tess-ng/pytessng
- 交流群:通过官网加入用户群获取技术支持。
通过上述步骤,可快速实现 信号优化、车路协同、自动驾驶测试 等场景的二次开发。