diff --git a/docs/course/congestion_sim.md b/docs/course/congestion_sim.md new file mode 100644 index 00000000..2c4f1d61 --- /dev/null +++ b/docs/course/congestion_sim.md @@ -0,0 +1,44 @@ +# 交通拥堵模拟 + +`generate_traffic.py` 是一个用于模拟交通的脚本。通过多次运行该脚本,可以模拟和分析不同交通流量下的交通拥堵情况,并进行数据统计和优化评估。 + +## 功能介绍 + +1. **交通拥堵模拟**:通过多次运行脚本生成大量车辆,模拟不同场景下的交通流量变化。 +2. **[统计分析](traffic_indicators.md)**:对多次模拟过程中的拥堵情况进行数据采集和统计分析。 +3. **效果评估**:评估不同交通优化措施对缓解交通拥堵的影响。 + +# generate_traffic.py 使用说明文档 + +## 概述 + +`generate_traffic.py` 是一个用于模拟交通拥堵的脚本。通过多次运行该脚本,可以模拟和分析不同交通流量下的交通拥堵情况,并进行数据统计和优化评估。 + +## 功能介绍 + +1. **交通拥堵模拟**:通过多次运行脚本生成大量车辆,模拟不同场景下的交通流量变化。 +2. **统计分析**:对多次模拟过程中的拥堵情况进行数据采集和统计分析。 +3. **效果评估**:评估不同交通优化措施对缓解交通拥堵的影响。 + +## 使用方法 + +### 依赖环境 + +在运行 `generate_traffic.py` 之前,请确保安装了以下依赖包: + +- `CARLA`仿真环境的搭建。 +- Carla,Numpy等依赖包的安装。 + +### 脚本运行 + +使用以下命令运行脚本: + +``` +python generate_traffic.py +``` + +## 多次运行模拟交通拥堵 + +为了模拟不同交通流量下的拥堵情况,可以多次运行 [**generate_traffic.py**](../../src/examples/generate_traffic.py) 脚本。 + +使用[**traffic_indicators.py**](../../src/course/traffic%20indicators.py)脚本对路口交通流量、路口车均延误、路口饱和、排队长度四种路口真实性评价指标分析。 \ No newline at end of file diff --git a/docs/course/microscopic_Intersection_demo.md b/docs/course/microscopic_Intersection_demo.md index fd88edb4..b50d8307 100644 --- a/docs/course/microscopic_Intersection_demo.md +++ b/docs/course/microscopic_Intersection_demo.md @@ -7,15 +7,15 @@ - #### **环境要求** - Python 3.6 及以上版本 - + - CARLA 仿真环境 - + - 安装必要的Python库: - - - **[spectator.py](https://github.com/OpenHUTB/carla_doc/blob/master/src/course/spectator/spectator.py)** - - - [**湖工商场景**](https://pan.baidu.com/s/15T1hGoWJ70tVmsTX7-zcSw?pwd=hutb )**(WindowsNoEditor)**,并运行**[generate_traffic.py](https://github.com/OpenHUTB/carla_doc/blob/master/src/examples/generate_traffic.py)** - + + - **[spectator.py](../../src/course/spectator/spectator.py)** + + - [**湖工商场景**](https://pan.baidu.com/s/15T1hGoWJ70tVmsTX7-zcSw?pwd=hutb )**(WindowsNoEditor)**,并运行**[generate_traffic.py](../../src/examples/generate_traffic.py)** + - 安装必要的python库 ``` diff --git a/docs/course/multi-view_ camera.md b/docs/course/multi-view_camera.md similarity index 97% rename from docs/course/multi-view_ camera.md rename to docs/course/multi-view_camera.md index 3820b859..64a90f1f 100644 --- a/docs/course/multi-view_ camera.md +++ b/docs/course/multi-view_camera.md @@ -9,7 +9,7 @@ - Python 3.6 及以上版本 - CARLA 仿真环境 - 安装必要的Python库: - - [**camera.py**](https://github.com/OpenHUTB/carla_doc/blob/master/src/course/camera.py) + - [**camera.py**](../../src/course/camera.py) - [**湖工商场景**](https://pan.baidu.com/s/15T1hGoWJ70tVmsTX7-zcSw?pwd=hutb )**(WindowsNoEditor)** ``` diff --git a/docs/course/navigation.md b/docs/course/navigation.md index 5fb5042e..34fccefe 100644 --- a/docs/course/navigation.md +++ b/docs/course/navigation.md @@ -2,17 +2,15 @@ ​ 车辆运动支持定义车辆运动起点和目标位置,为每辆车指定随机速度值,使其沿轨迹移动时不会发生碰撞或模拟碰撞,看到车辆沿指定轨迹行驶以到达其目标位置。 -​ 本示例设计了一个 [**automatic_control_revised.py**](https://github.com/OpenHUTB/carla_doc/blob/master/src/course/navigation/automatic_control_revised.py) 脚本进行实现 +​ 本示例设计了一个 [**automatic_control_revised.py**](../../src/course/navigation/automatic_control_revised.py) 脚本进行实现 ![](../img/traffic_course_img/4.gif) -**注意** 需要将 [**agents**](https://github.com/OpenHUTB/carla_doc/tree/master/src/carla_agent) 文件夹位置添加到代码环境变量中,或者复制该文件夹使其与本示例脚本同级。 +**注意** 需要将 [**agents**](../../src/carla_agent) 文件夹位置添加到代码环境变量中,或者复制该文件夹使其与本示例脚本同级。 [**湖工商场景**](https://pan.baidu.com/s/15T1hGoWJ70tVmsTX7-zcSw?pwd=hutb )**(WindowsNoEditor)** - - -​ 自定义一些生成位置的起始点坐标 +​ 自定义一些生成位置的起始点坐标 ```python diming = { @@ -80,7 +78,7 @@ vehicle = world.spawn_actor(ego_vehicle_bp, spawn_point) world.tick() ``` -​ 生成终点,给起点和终点生成一个车辆运行轨迹,定义初始速度 +​ 生成终点,给起点和终点生成一个车辆运行轨迹,定义初始速度 ```python # 设置初始速度 @@ -175,4 +173,6 @@ while True: vehicle.apply_control(control) ``` +###### 轨迹生成 + ![](../img/traffic_course_img/5.png) \ No newline at end of file diff --git a/docs/course/object_detection.md b/docs/course/object_detection.md index 874f1a57..91c7ef79 100644 --- a/docs/course/object_detection.md +++ b/docs/course/object_detection.md @@ -1,8 +1,8 @@ # 基于Carla仿真环境的目标检测 -​ [**object_dection.py**](https://github.com/OpenHUTB/carla_doc/blob/master/src/course/object_detection/object_detection.py) 脚本主要是在 **Carla** 中使用 **YOLOv3** 检测车辆。[相关链接](https://openhutb.github.io/carla_doc/algorithms/perception/) +​ [**object_dection.py**](../../src/course/object_detection/object_detection.py) 脚本主要是在 **Carla** 中使用 **YOLOv3** 检测车辆。[相关链接](../algorithms/perception.md) -​ [**湖工商场景**](https://pan.baidu.com/s/15T1hGoWJ70tVmsTX7-zcSw?pwd=hutb )**(WindowsNoEditor)**,并运行**[generate_traffic.py](https://github.com/OpenHUTB/carla_doc/blob/master/src/examples/generate_traffic.py)** +​ [**湖工商场景**](https://pan.baidu.com/s/15T1hGoWJ70tVmsTX7-zcSw?pwd=hutb )**(WindowsNoEditor)**,并运行**[generate_traffic.py](../../src/examples/generate_traffic.py)** ![](../img/traffic_course_img/3.gif) diff --git a/docs/course/regional_macro.md b/docs/course/regional_macro.md new file mode 100644 index 00000000..b5a2db17 --- /dev/null +++ b/docs/course/regional_macro.md @@ -0,0 +1,36 @@ +# 区域宏观 + +​ 此示例支持联合虚拟引擎仿真模拟实验,得到 **3D** 宏观区域场景演示。 + +## 环境依赖 + +- [**roadrunner**](https://pan.baidu.com/s/15T1hGoWJ70tVmsTX7-zcSw?pwd=hutb ) + +- **carla编辑器** [**配置教程**](https://zhuanlan.zhihu.com/p/552983835) + + +## 场景设计 + +​ 针对大区域的场景设计,支持从 **[openstreet](https://www.openstreetmap.org/)** 官网导出路网文件作为模版,然后导入到 **roadrunner** 中进行道路修改。 + +​ ![](../img/traffic_course_img/roadnet.png) + +## 导入到虚幻引擎 + +​ 本示例使用的为 **carla** 插件作为渲染引擎,进行建筑、树、山等的设计。 + +​ ![](../img/traffic_course_img/regional_macro.png) + +​ + +## 导出可执行程序进行仿真模拟实验 + +​ 运行下述exe程序作为服务端,采用python脚本与其通信。 + +![](../img/traffic_course_img/execu.png) + +## 宏观地图 + +​ 将地图调整到全局俯视位置。 + +![](../img/traffic_course_img/regional_macro.gif) \ No newline at end of file diff --git a/docs/course/roadnet_evaluation.md b/docs/course/roadnet_evaluation.md new file mode 100644 index 00000000..9eec77ad --- /dev/null +++ b/docs/course/roadnet_evaluation.md @@ -0,0 +1,94 @@ +# 路网评价 + +#### **介绍** + +[该代码](../../src/course/roadnet_evaluation.py)用于评估CARLA仿真环境中的路网质量。评估的指标包括路网覆盖率、路口数量、交通灯数量和道路平均宽度。评估结果可以帮助了解仿真环境中的道路网络结构和配置。 + +#### **环境配置** + +要运行该代码,需要以下软件和库: + +- [CARLA仿真器](https://pan.baidu.com/s/15T1hGoWJ70tVmsTX7-zcSw?pwd=hutb) +- Python 3.x +- `carla` Python API +- `geopandas`库 +- `shapely`库 + +安装所需库的命令: + +``` +pip install carla==0.9.15 +pip install geopandas shapely +``` + +#### **功能结构** + +该功能包含以下主要部分: + +1. **计算路网覆盖率** +2. **计算路口数量** +3. **计算交通灯数量** +4. **计算道路平均宽度** + +##### 计算路网覆盖率 + +将道路几何信息转换为GeoPandas数据框,并计算道路覆盖的总长度和感兴趣区域的总面积,最后计算覆盖率。 + +``` +def road_coverage(world): + road_geometries = get_road_geometries(world) + road_lines = [LineString(road_geometries)] + road_gdf = gpd.GeoDataFrame(geometry=road_lines) + area_of_interest = Polygon([(-500, -500), (-500, 500), (500, 500), (500, -500)]) + area_gdf = gpd.GeoDataFrame(geometry=[area_of_interest]) + total_road_length = road_gdf.length.sum() + total_area = area_gdf.area.sum() + coverage_ratio = total_road_length / total_area + return coverage_ratio +``` + +##### 计算路口数量 + +通过遍历所有路点,找到位于路口的路点并获取唯一的路口ID。 + +``` +def intersection_num(world): + carla_map = world.get_map() + waypoints = carla_map.generate_waypoints(distance=2.0) + junction_ids = set() + for waypoint in waypoints: + if waypoint.is_junction: + junction = waypoint.get_junction() + junction_ids.add(junction.id) + return len(junction_ids) +``` + +##### 计算交通灯数量 + +它通过获取所有交通灯的演员对象并计数来实现。 + +``` +def traffic_num(world): + traffic_lights = world.get_actors().filter('traffic.traffic_light') + return len(traffic_lights) +``` + +##### 计算道路平均宽度 + +它遍历所有路点,累计车道宽度并计算平均值。 + +``` +def road_width(world): + carla_map = world.get_map() + waypoints = carla_map.generate_waypoints(2.0) + total_width = 0.0 + lane_count = 0 + for waypoint in waypoints: + total_width += waypoint.lane_width + lane_count += 1 + if lane_count > 0: + average_width = total_width / lane_count + return average_width + else: + return 0 +``` \ No newline at end of file diff --git a/docs/course/scenario.md b/docs/course/scenario.md index 2517c143..60b8cafd 100644 --- a/docs/course/scenario.md +++ b/docs/course/scenario.md @@ -6,11 +6,11 @@ ## RoadRunner简介 -​ RoadRunner是一个交互式编辑器,可以让您设计3D场景来仿真和测试自动驾驶系统。它可以用来创建道路布局和伴随的opdrive和几何信息。[在这里了解更多关于RoadRunner的信息](https://github.com/OpenHUTB/carla_doc/blob/master/docs/rr_home)。 +​ RoadRunner是一个交互式编辑器,可以让您设计3D场景来仿真和测试自动驾驶系统。它可以用来创建道路布局和伴随的opdrive和几何信息。 -​ RoadRunner是MATLAB校园许可的一部分,因此许多大学可以提供无限制的学术访问。[检查](https://github.com/OpenHUTB/carla_doc/blob/master/docs/rr_eligibility)一下你的大学是否有访问权限。如果有任何关于可访问性的问题或麻烦,请联系[automated-driving@mathworks.com](mailto:automated-driving@mathworks.com)。[还有一个试用版](https://github.com/OpenHUTB/carla_doc/blob/master/docs/[rr_trial_version)。 +​ RoadRunner是MATLAB校园许可的一部分,因此许多大学可以提供无限制的学术访问。检查一下你的大学是否有访问权限。如果有任何关于可访问性的问题或麻烦,请联系[automated-driving@mathworks.com](mailto:automated-driving@mathworks.com)。 -​ 参加 Carla 排行榜的每个人都可以获得RoadRunner的许可证。[点击这里了解更多信息](https://github.com/OpenHUTB/carla_doc/blob/master/docs/rr_leaderboard)。 +​ 参加 Carla 排行榜的每个人都可以获得RoadRunner的许可证。 ​ **[RoadRunner R2022b 安装包](https://pan.baidu.com/s/1n2fJvWff4pbtMe97GOqtvQ?pwd=hutb)**,如下图所示,解压后直接运行里面的exe程序。 @@ -18,7 +18,7 @@ ------ -## RoadRunner基本使用 +## RoadRunner基本使用 RoadRunner界面分为Scene Editing和Scenario Editing,下图所示为roadrunner软件的Scene Editing(静态路网编辑)基本功能界面: @@ -38,13 +38,13 @@ RoadRunner界面分为Scene Editing和Scenario Editing,下图所示为roadrunn ------ -### 使用公开道路地图生成道路网络 +### 使用公开道路地图生成道路网络 ​ **[OpenStreetMap](https://www.openstreetmap.org/)**是一个开放、可编辑的地图项目,由全球志愿者贡献数据,其数据包括道路、建筑物、地理特征、交通设施等地理信息。使用者可以搜索相应的道路信息,选择导出**osm**路网文件。 ![](../img/traffic_course_img/3.png) -**还可以进行对该网站的编辑修改**:**[OpenStreetMap地图编辑](https://openhutb.github.io/carla_doc/adv_edit_openstreetmap/)** +**还可以进行对该网站的编辑修改**:**[OpenStreetMap地图编辑](../../adv_edit_openstreetmap/)** @@ -58,7 +58,7 @@ RoadRunner界面分为Scene Editing和Scenario Editing,下图所示为roadrunn ## 在RoadRunner进行车辆模拟仿真 -​ **Scenario Editing**为动态路网编辑,可以添加/删除车辆,进行车辆速度设置、轨迹的可视化规划等, 并支持编辑器内播放,用于可视化场景并连接到其他场景 用于协同仿真的模拟器。右上角的下拉栏可进行动/静编辑切换。相关学习链接可参考:**[Scenario]([设计和模拟场景 - MATLAB 和 Simulink - MathWorks 中国](https://ww2.mathworks.cn/help/roadrunner-scenario/design-and-simulate-scenarios.html))** +​ **Scenario Editing**为动态路网编辑,可以添加/删除车辆,进行车辆速度设置、轨迹的可视化规划等, 并支持编辑器内播放,用于可视化场景并连接到其他场景 用于协同仿真的模拟器。右上角的下拉栏可进行动/静编辑切换。 ------ @@ -66,4 +66,4 @@ RoadRunner界面分为Scene Editing和Scenario Editing,下图所示为roadrunn 参考链接:**[联合仿真](https://zhuanlan.zhihu.com/p/552983835)** -[RoadRunner导出大地图教程](https://openhutb.github.io/carla_doc/tuto_M_generate_map/) \ No newline at end of file +[RoadRunner导出大地图教程](../..//tuto_M_generate_map/) \ No newline at end of file diff --git a/docs/course/traffic_indicators.md b/docs/course/traffic_indicators.md index 9f5922c7..4d41367c 100644 --- a/docs/course/traffic_indicators.md +++ b/docs/course/traffic_indicators.md @@ -1,8 +1,8 @@ # 路口评价指标分析计算(HutbCarlaCity) -​ 为支持 [**湖工商场景**](https://pan.baidu.com/s/15T1hGoWJ70tVmsTX7-zcSw?pwd=hutb ) **(WindowsNoEditor)** 高保正的十字路口三维建模,设计 **[traffic_indicators.py](https://github.com/OpenHUTB/carla_doc/blob/master/src/course/traffic%20indicators.py)** 脚本对路口交通流量、路口车均延误、路口饱和、排队长度四种路口真实性评价指标分析。 +​ 为支持 [**湖工商场景**](https://pan.baidu.com/s/15T1hGoWJ70tVmsTX7-zcSw?pwd=hutb ) **(WindowsNoEditor)** 高保正的十字路口三维建模,设计 **[traffic_indicators.py](../../src/course/traffic%20indicators.py)** 脚本对路口交通流量、路口车均延误、路口饱和、排队长度四种路口真实性评价指标分析。 -**首先需要对场景中添加车辆,运行[generate_traffic.py](https://github.com/OpenHUTB/carla_doc/blob/master/src/examples/generate_traffic.py)脚本,生成足够的车辆** +**首先需要对场景中添加车辆,运行[generate_traffic.py](../../src/examples/generate_traffic.py)脚本,生成足够的车辆** @@ -57,7 +57,7 @@ SATURATION = 32 # 路口最大容量 DWELL_TIME = 50 # 50秒后认为车辆已离开路口 ``` -### 路口交通流量函数get_traffic_flow() +### 路口交通流量函数get_traffic_flow() ```python def get_traffic_flow(world, junction, traffic_flows, i, counted_vehicles): @@ -86,7 +86,7 @@ def get_traffic_flow(world, junction, traffic_flows, i, counted_vehicles): del counted_vehicles[vehicle_id] ``` -### 路口饱和度函数saturation() +### 路口饱和度函数saturation() 采用**路口实际车流量/路口道路最大所承载车流量** 计算 **路口饱和度** @@ -120,7 +120,7 @@ def saturation(world,junctions,counted_vehicles): return ave_saturation ``` -### 排队长度函数queue_lengths() +### 排队长度函数queue_lengths() 采用 **路口实际车流量*平均车辆长度** 计算 **排队长度** @@ -151,7 +151,7 @@ def queue_lengths(world,junctions,counted_vehicles): return queue_length ``` -### 车均延误函数ave_delay() +### 车均延误函数ave_delay() 采用以下计算公式进行计算:![](../img/traffic_course_img/4.png) diff --git a/docs/course/trajectory_tracking.md b/docs/course/trajectory_tracking.md index 94ed313b..5d9a0849 100644 --- a/docs/course/trajectory_tracking.md +++ b/docs/course/trajectory_tracking.md @@ -1,8 +1,8 @@ # 轨迹跟踪 Drive.py -​ 本示例使用 **Carla** 模拟器来执行轨迹跟踪任务, [**Drive.py**](https://github.com/OpenHUTB/carla_doc/blob/master/src/course/trajectory_tracking/Drive.py) 主要功能包括连接CARLA服务器、设置模拟环境、生成车辆、读取和处理路径点数据、控制车辆运动、记录和保存仿真结果下面对于主要函数进行介绍。 +​ 本示例使用 **Carla** 模拟器来执行轨迹跟踪任务, [**Drive.py**](../../src/course/trajectory_tracking/Drive.py) 主要功能包括连接CARLA服务器、设置模拟环境、生成车辆、读取和处理路径点数据、控制车辆运动、记录和保存仿真结果下面对于主要函数进行介绍。 - 基于 [**湖工商场景**](https://pan.baidu.com/s/15T1hGoWJ70tVmsTX7-zcSw?pwd=hutb )**(WindowsNoEditor)**,首先需要运行[generate_traffic.py](https://github.com/OpenHUTB/carla_doc/blob/master/src/examples/generate_traffic.py) + 基于 [**湖工商场景**](https://pan.baidu.com/s/15T1hGoWJ70tVmsTX7-zcSw?pwd=hutb )**(WindowsNoEditor)**,首先需要运行[generate_traffic.py](../../src/examples/generate_traffic.py) ## 定义CARLA设置 @@ -43,7 +43,6 @@ def make_carla_settings(): # Add other weather conditions as needed return settings, weather - ``` diff --git a/docs/img/traffic_course_img/execu.png b/docs/img/traffic_course_img/execu.png new file mode 100644 index 00000000..6ee6db60 Binary files /dev/null and b/docs/img/traffic_course_img/execu.png differ diff --git a/docs/img/traffic_course_img/regional_macro.gif b/docs/img/traffic_course_img/regional_macro.gif new file mode 100644 index 00000000..9d3d6698 Binary files /dev/null and b/docs/img/traffic_course_img/regional_macro.gif differ diff --git a/docs/img/traffic_course_img/regional_macro.png b/docs/img/traffic_course_img/regional_macro.png new file mode 100644 index 00000000..40bc9a7b Binary files /dev/null and b/docs/img/traffic_course_img/regional_macro.png differ diff --git a/docs/img/traffic_course_img/roadnet.png b/docs/img/traffic_course_img/roadnet.png new file mode 100644 index 00000000..52c51890 Binary files /dev/null and b/docs/img/traffic_course_img/roadnet.png differ diff --git a/docs/tutorials.md b/docs/tutorials.md index 152783b5..97d82a84 100644 --- a/docs/tutorials.md +++ b/docs/tutorials.md @@ -2,29 +2,40 @@ 在这里您将找到大量教程,帮助您了解如何使用 Carla 的众多功能。 + ## 一般 ### 交通仿真系统 -[**目标检测**](course/object_detection.md) — 通过传感器数据来实时识别Carla环境中的物体和车辆。 - -[**轨迹跟踪**](course/trajectory_tracking.md) — 利用控制算法使车辆沿预定路线准确行驶。 +本系统基于开源虚幻引擎框架,构建全道路场景仿真和智能交通系统仿真系统,满足我国特定交通路况多样化需求,为智慧交通算法的教学与应用提供的数据底座。 -[**交通指标计算**](course/traffic_indicators.md) — 路口交通流量、路口车均延误、路口饱和、排队长度等多种路口真实性评价指标分析。 +- [交通数据导入和编辑支持从公开道路地图导入或创建生成道路网络](course/scenario.md#generateMapByOpenMap),支持添加车辆到道路网络并定义其轨迹以合成驾驶场景,[支持定义车道数量和车道长宽度,支持自定义道路编辑](course/scenario.md#sceneEding)。 +- [车辆运动支持定义车辆运动起点和目标位置](course/navigation.md#definePoint),[为每辆车指定随机速度值](course/navigation.md#definePoint),[生成车辆轨迹](course/navigation.md#generateTrajectory)。支持自定义车辆的速度,使其沿轨迹移动时不会发生碰撞或模拟碰撞。支持车辆运动模拟和显示自动生成的轨迹场景,可以看到车辆沿指定轨迹行驶以到达其目标位置。 +- 联合仿真支持联合虚拟引擎仿真模拟实验,不仅可以看到[区域宏观](course/regional_macro.md),还可以看到[路口微观](course/microscopic_Intersection_demo.md),支持 3D 动画演示运动场景。[支持配置单个或多个摄像头,进行车辆的检测](course/multi-view_camera.md)。[支持计算红绿灯的配时方案,并进行红绿灯的设置](course/signal_control.md)。[支持测试车辆按地图选点进行移动,看到红灯停、绿灯行,以及避让等功能](course/locate_moving.md)。支持加入更多的车辆进行交通拥堵的模拟,统计优化前和优化后的结果。 -[**车辆导航**](course/navigation.md) — 自定义车辆速度,从指定起点运动到目标位置,并生成轨迹。 +##### 效果评价 -[**多摄像头配置**](course/multi-view_%20camera.md)— 支持配置单个或多个摄像头,进行车辆的检测。 +1. [路口评价](course/traffic_indicators.md):支持高保正的十字路口三维建模,建模[路口交通流量](course/traffic_indicators.md#trafficFlow)、[路口车均延误](course/traffic_indicators.md#aveDelay)、[路口饱和](course/traffic_indicators.md#saturation)、[排队长度](course/traffic_indicators.md#queueLength)等多种路口真实性评价指标分析。 +2. [路网评价](course/roadnet_evaluation.md):支持基于路网数据的路网动态仿真,预测和分析不同仿真流量和真实流量的相似性。 -[**路口微观**](course/microscopic_Intersection_demo.md) — 切换视角观察不同路口的交通状况。 +##### 课程一:交通仿真与场景建模 -[**车辆选点移动**](course/locate_moving.md) — 点击地图任意可生成车辆位置生成车辆并移动。 +1. [道路网络导入与编辑学生学习如何使用系统导入公开道路地图或创建生成道路网络](course/scenario.md#generateMapByOpenMap),以及[编辑道路属性和车道信息,构建具体的交通场景](course/scenario.md#sceneEding)。 +2. [车辆轨迹生成](course/navigation.md#generateTrajectory)与[模拟学生学习如何为车辆指定起点和目标位置](course/navigation.md#definePoint),[定义车辆的运动轨迹,模拟车辆的行驶过程](course/trajectory_tracking),并观察车辆在仿真环境中的运动行为。 +3. [红绿灯配时方案优化学生学习如何配置红绿灯的配时方案](course/signal_control.md),并通过仿真实验优化配时参数,以提高交通流畅度和减少交通拥堵。 +4. [交通拥堵模拟与统计分析学生学习如何模拟交通拥堵场景](course/congestion_sim.md),加入更多的车辆进行仿真,进行拥堵情况的统计分析,并评估优化措施的效果。 +5. 路口交通流量评估学生学习如何使用系统提供的路口评价指标,分析[路口交通流量](course/traffic_indicators.md#trafficFlow)、[车均延误](course/traffic_indicators.md#aveDelay)、[饱和度](course/traffic_indicators.md#saturation)、[排队长度](course/traffic_indicators.md#queueLength)等指标,评估路口交通状况。 +6. [场景建模与可视化展示学生学习如何使用系统提供的场景建模工具,进行交通场景的建模和可视化展示,以及设计交互式演示界面,呈现仿真结果和实验效果。](adv_digital_twin.md) -[**路径规划**](course/motion_planning.md) — 利用路径规划算法控制车辆避开障碍物,找到安全可行路线的方法。 +##### 课程二:智能交通算法与优化 -[**RoadRunner道路场景建模**](course/scenario.md) — 设计用于模拟和测试自动驾驶系统的 3D 场景,创建要导入 Carla 的大地图。 +1. 交通场景感知与分析学生学习如何利用系统进行[目标检测](course/object_detection.md)、[跟踪](course/trajectory_tracking.md)和再识别,进行交通参与者的分析和统计,对交通进行态势感知,为后面的算法实现提供基础。 +2. 交通流量预测模型建立学生学习如何使用系统提供的交通数据,建立交通流量预测模型,以预测未来的交通流量情况,并评估模型的准确性和效果。 +3. 交通网络优化策略设计学生学习如何使用系统提供的交通网络数据,设计交通网络优化策略,通过调整[路线规划](course/motion_planning.md)、[红绿灯配时](course/signal_control.md)等参数,提升整体交通效率。 +4. [智能信号控制](course/signal_control.md)算法实现学生学习如何使用系统提供的信号控制功能,实现智能信号控制算法,优化交通信号的配时方案,提高交通流畅度和减少拥堵。 +5. 交通数据可视化与分析学生学习如何使用系统提供的数据可视化工具,对交通数据进行可视化分析,探索交通流量、拥堵状况等趋势和规律。 +6. 交通场景优化与仿真实验学生学习如何根据实际交通问题,进行场景优化和仿真实验,评估优化策略的效果,提出改进方案并进行验证。 -[**智能信号控制**](course/signal_control.md) — 优化交通信号的配时方案,提高交通流畅度和减少拥堵。 ### Carla 特点 diff --git a/src/course/roadnet_evaluation.py b/src/course/roadnet_evaluation.py new file mode 100644 index 00000000..0e4830ba --- /dev/null +++ b/src/course/roadnet_evaluation.py @@ -0,0 +1,109 @@ +""" + 路网评价 +""" + +import carla +import geopandas as gpd +from shapely.geometry import LineString, Polygon + + +def get_road_geometries(world): + road_geometries = [] + for waypoint in world.get_map().generate_waypoints(2.0): + transform = waypoint.transform + location = transform.location + road_geometries.append((location.x, location.y)) + return road_geometries + + +# 计算路网覆盖率 +def road_coverage(world): + # 获取道路几何信息 + road_geometries = get_road_geometries(world) + + # 创建GeoPandas GeoDataFrame + road_lines = [LineString(road_geometries)] + road_gdf = gpd.GeoDataFrame(geometry=road_lines) + + # 假设感兴趣区域为一个矩形(可以根据实际情况调整) + area_of_interest = Polygon([(-500, -500), (-500, 500), (500, 500), (500, -500)]) + area_gdf = gpd.GeoDataFrame(geometry=[area_of_interest]) + + # 计算道路覆盖的总长度(或总面积,如果道路宽度已知) + total_road_length = road_gdf.length.sum() + + # 计算感兴趣区域的总面积 + total_area = area_gdf.area.sum() + + # 计算路网覆盖率 + coverage_ratio = total_road_length / total_area + return coverage_ratio + + +# 计算路口数量 +def intersection_num(world): + carla_map = world.get_map() + + # 获取所有路点 + waypoints = carla_map.generate_waypoints(distance=2.0) + + # 存储路口唯一ID,保证每个路口只计算一次 + junction_ids = set() + for waypoint in waypoints: + if waypoint.is_junction: + junction = waypoint.get_junction() + junction_ids.add(junction.id) + return len(junction_ids) + + +# 计算交通灯总数 +def traffic_num(world): + # 获取所有红绿灯 + traffic_lights = world.get_actors().filter('traffic.traffic_light') + return len(traffic_lights) + + +# 计算道路平均宽度 +def road_width(world): + carla_map = world.get_map() + # 获取道路几何信息 + waypoints = carla_map.generate_waypoints(2.0) + total_width = 0.0 + lane_count = 0 + + for waypoint in waypoints: + transform = waypoint.transform + location = transform.location + + total_width += waypoint.lane_width + lane_count += 1 + + # 计算平均值 + if lane_count > 0: + average_width = total_width / lane_count + return average_width + else: + return 0 + + +def main(): + # 连接到CARLA仿真服务器 + client = carla.Client('localhost', 2000) + client.set_timeout(10.0) + world = client.get_world() + + # 路网覆盖率 + coverage_ratio = road_coverage(world) + print(f"路网覆盖率: {coverage_ratio:.2%}") + + # 路口个数 + junction_num = intersection_num(world) + print(f"路口个数: {junction_num}") + + # 交通灯数量 + traffic = traffic_num(world) + print(f"交通灯个数: {traffic}") + + # 道路平均宽度 + ave_width = road_width(world) + print(f"道路平均宽度: {ave_width:.2f}") \ No newline at end of file