diff --git a/docs/course/auto_signal_control.md b/docs/course/auto_signal_control.md index 8ab99cdf..2a809521 100644 --- a/docs/course/auto_signal_control.md +++ b/docs/course/auto_signal_control.md @@ -16,94 +16,89 @@ #### 核心实现步骤 -1. **初始化和连接Carla服务器**:获取世界对象并设置仿真参数。 - - ``` - client = carla.Client('localhost', 2000) - client.set_timeout(10.0) - world = client.get_world() - ``` - -2. **获取路口信息**:通过中心位置获取指定路口的交通信号灯信息。 - - 为了保证每次请求不会往该路口的交通灯集合中新加重复的红绿灯,先用集合存储红绿灯的唯一ID - - ``` - traffics_in_junction = set() - ``` - - ``` - def get_traffic_lights_in_junction(world, junction): - """获取路口的所有红绿灯""" - traffic_lights = world.get_actors().filter('traffic.traffic_light') - for traffic_light in traffic_lights: - if get_distance(traffic_light.get_location(), center_location[0]) <= 50: - id = traffic_light.get_opendrive_id() - traffics_in_junction.add(id) - ``` - - ``` - def get_light(all_traffic_lights): - """根据红绿灯ID列表获取对应的红绿灯对象""" - drive_list = list(traffics_in_junction) - traffic_lights = [] - for traffic_light in all_traffic_lights: - if traffic_light.get_opendrive_id() in drive_list: - traffic_lights.append(traffic_light) - return traffic_lights - ``` - -3. **计算交通流量**:检测指定范围内的车辆数量。 - - ``` - def get_vehicles_in_intersection(world, intersection_location, intersection_radius): - """获取路口范围内的车辆数量""" - vehicles = world.get_actors().filter('vehicle.*') - vehicles_in_intersection = [] - - for vehicle in vehicles: - distance = get_distance(vehicle.get_location(), intersection_location) - if distance <= intersection_radius: - vehicles_in_intersection.append(vehicle) - - return len(vehicles_in_intersection) - ``` - -4. **调整红绿灯时长**:根据交通流量动态调整红绿灯的时长。 - - ``` - if junction_flow > 15: - for traffic_light in get_light(all_traffic_lights): - traffic_light.set_green_time(GREEN_TIME + 15) - last_green_time = GREEN_TIME + 15 - elif junction_flow > 10: - for traffic_light in get_light(all_traffic_lights): - traffic_light.set_green_time(GREEN_TIME + 10) - last_green_time = GREEN_TIME + 10 - elif junction_flow > 5: - for traffic_light in get_light(all_traffic_lights): - traffic_light.set_green_time(GREEN_TIME + 5) - last_green_time = GREEN_TIME + 5 - else: - for traffic_light in get_light(all_traffic_lights): - traffic_light.set_green_time(GREEN_TIME) - last_green_time = GREEN_TIME - - ``` - -5. **返回结果**:返回当前红绿灯的状态和调整后的时长信息。 - - ``` - response_data = { - "traffic_lights": [ - {"id": traffic_ids}, - {"init_green_time": traffic_init_green_time}, - {"last_green_time": last_green_time} - ] - } - - ``` +**1.初始化和连接Carla服务器**:获取世界对象并设置仿真参数。 +``` + client = carla.Client('localhost', 2000) + client.set_timeout(10.0) + world = client.get_world() +``` +**2.获取路口信息**:通过中心位置获取指定路口的交通信号灯信息。 + +为了保证每次请求不会往该路口的交通灯集合中新加重复的红绿灯,先用集合存储红绿灯的唯一ID + +``` +traffics_in_junction = set() +``` + +``` +def get_traffic_lights_in_junction(world, junction): + """获取路口的所有红绿灯""" + traffic_lights = world.get_actors().filter('traffic.traffic_light') + for traffic_light in traffic_lights: + if get_distance(traffic_light.get_location(), center_location[0]) <= 50: + id = traffic_light.get_opendrive_id() + traffics_in_junction.add(id) +``` + +``` +def get_light(all_traffic_lights): + """根据红绿灯ID列表获取对应的红绿灯对象""" + drive_list = list(traffics_in_junction) + traffic_lights = [] + for traffic_light in all_traffic_lights: + if traffic_light.get_opendrive_id() in drive_list: + traffic_lights.append(traffic_light) + return traffic_lights +``` +**3.计算交通流量**:检测指定范围内的车辆数量。 + +``` +def get_vehicles_in_intersection(world, intersection_location, intersection_radius): + """获取路口范围内的车辆数量""" + vehicles = world.get_actors().filter('vehicle.*') + vehicles_in_intersection = [] + + for vehicle in vehicles: + distance = get_distance(vehicle.get_location(), intersection_location) + if distance <= intersection_radius: + vehicles_in_intersection.append(vehicle) + + return len(vehicles_in_intersection) +``` +**4.调整红绿灯时长**:根据交通流量动态调整红绿灯的时长。 + +``` + if junction_flow > 15: + for traffic_light in get_light(all_traffic_lights): + traffic_light.set_green_time(GREEN_TIME + 15) + last_green_time = GREEN_TIME + 15 + elif junction_flow > 10: + for traffic_light in get_light(all_traffic_lights): + traffic_light.set_green_time(GREEN_TIME + 10) + last_green_time = GREEN_TIME + 10 + elif junction_flow > 5: + for traffic_light in get_light(all_traffic_lights): + traffic_light.set_green_time(GREEN_TIME + 5) + last_green_time = GREEN_TIME + 5 + else: + for traffic_light in get_light(all_traffic_lights): + traffic_light.set_green_time(GREEN_TIME) + last_green_time = GREEN_TIME + +``` +**5.返回结果**:返回当前红绿灯的状态和调整后的时长信息。 + +``` + response_data = { + "traffic_lights": [ + {"id": traffic_ids}, + {"init_green_time": traffic_init_green_time}, + {"last_green_time": last_green_time} + ] + } + +``` #### 使用步骤 获取路口交通灯信息,可以发送一个GET请求到 `/set_traffic_light`路由,应用程序会自动根据路口的交通流量调整红绿灯的时长并返回结果。 diff --git a/docs/course/signal_control.md b/docs/course/signal_control.md index 9c78ac83..81d5fc9b 100644 --- a/docs/course/signal_control.md +++ b/docs/course/signal_control.md @@ -38,74 +38,69 @@ http://127.0.0.1:5000/set_traffic_light?traffic_id=-5&color_id=3&color_time=30 应用程序的主要功能是根据用户提供的参数设置指定红绿灯的颜色和持续时间。具体实现步骤如下: -1. 接收用户请求,并解析传入的参数。 - -2. 连接到Carla仿真服务器并获取当前世界对象。 - - ``` - client = carla.Client('localhost', 2000) - client.set_timeout(10.0) # 设置超时 - world = client.get_world() # 获取世界对象 - ``` - -3. 查找指定的红绿灯对象,输出修改前的灯光时间。 - - ``` - for traffic_light in traffic_lights: - if float(traffic_light.get_opendrive_id()) == traffic_id: - if color_id == 1: - init_time = traffic_light.get_green_time() - elif color_id == 2: - init_time = traffic_light.get_yellow_time() - elif color_id == 3: - init_time = traffic_light.get_red_time() - ``` - -4. 跳转视角到该红绿灯合适的位置。 - - ``` - lights_setting = [ - [-6, carla.Transform(carla.Location(x=-220, y=-9, z=5), carla.Rotation(yaw=180))], - [-5, carla.Transform(carla.Location(x=-260, y=35, z=5), carla.Rotation(yaw=-90))] - ] - ``` - - ``` - spectator = world.get_spectator() - for setting in lights_setting: - if setting[0] == traffic_id: - spectator.set_transform(setting[1]) - break - ``` - -5. 根据颜色ID设置红绿灯的持续时间。 - - ``` - for traffic_light in traffic_lights: - if float(traffic_light.get_opendrive_id()) == traffic_id: - if color_id == 1: - traffic_light.set_green_time(float(color_time)) - color_name = "绿色" - elif color_id == 2: - traffic_light.set_yellow_time(float(color_time)) - color_name = "黄色" - elif color_id == 3: - traffic_light.set_red_time(float(color_time)) - color_name = "红色" - - ``` - -6. 返回设置结果的JSON响应。 - - ``` - response_data = { - "id": traffic_id, - "color": color_name, - "init_time": init_time, - "last_time": color_time - } - ``` +1.接收用户请求,并解析传入的参数。 +2.连接到Carla仿真服务器并获取当前世界对象。 + +``` + client = carla.Client('localhost', 2000) + client.set_timeout(10.0) # 设置超时 + world = client.get_world() # 获取世界对象 +``` +3.查找指定的红绿灯对象,输出修改前的灯光时间。 + +``` + for traffic_light in traffic_lights: + if float(traffic_light.get_opendrive_id()) == traffic_id: + if color_id == 1: + init_time = traffic_light.get_green_time() + elif color_id == 2: + init_time = traffic_light.get_yellow_time() + elif color_id == 3: + init_time = traffic_light.get_red_time() +``` +4.跳转视角到该红绿灯合适的位置。 + +``` + lights_setting = [ + [-6, carla.Transform(carla.Location(x=-220, y=-9, z=5), carla.Rotation(yaw=180))], + [-5, carla.Transform(carla.Location(x=-260, y=35, z=5), carla.Rotation(yaw=-90))] + ] +``` + +``` + spectator = world.get_spectator() + for setting in lights_setting: + if setting[0] == traffic_id: + spectator.set_transform(setting[1]) + break +``` +5.根据颜色ID设置红绿灯的持续时间。 + +``` + for traffic_light in traffic_lights: + if float(traffic_light.get_opendrive_id()) == traffic_id: + if color_id == 1: + traffic_light.set_green_time(float(color_time)) + color_name = "绿色" + elif color_id == 2: + traffic_light.set_yellow_time(float(color_time)) + color_name = "黄色" + elif color_id == 3: + traffic_light.set_red_time(float(color_time)) + color_name = "红色" + +``` +6.返回设置结果的JSON响应。 + +``` + response_data = { + "id": traffic_id, + "color": color_name, + "init_time": init_time, + "last_time": color_time + } +``` #### 注意事项 - 在执行脚本前,请确保CARLA服务器已启动。 diff --git a/docs/tutorials.md b/docs/tutorials.md index a03dd220..97d5de9c 100644 --- a/docs/tutorials.md +++ b/docs/tutorials.md @@ -17,24 +17,24 @@ ##### 效果评价 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):支持基于路网数据的路网动态仿真,预测和分析不同仿真流量和真实流量的相似性。 +2. [路网评价](course/roadnet_evaluation.md):支持基于路网数据的路网动态仿真,[预测和分析不同仿真流量和真实流量的相似性](#predict_flow)。 ##### 课程一:交通仿真与场景建模 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),并通过仿真实验优化配时参数,以提高交通流畅度和减少交通拥堵。 +2. [车辆轨迹生成](course/navigation.md#generateTrajectory)与[模拟学生学习如何为车辆指定起点和目标位置](course/navigation.md#definePoint),[定义车辆的运动轨迹,模拟车辆的行驶过程](course/trajectory_tracking.md),并观察车辆在仿真环境中的运动行为。 +3. [红绿灯配时方案优化学生学习如何配置红绿灯的配时方案](course/signal_control.md),[并通过仿真实验优化配时参数](course/auto_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) ##### 课程二:智能交通算法与优化 -1. 交通场景感知与分析学生学习如何利用系统进行[目标检测](course/object_detection.md)、[跟踪](course/trajectory_tracking.md)和再识别,进行交通参与者的分析和统计,对交通进行态势感知,为后面的算法实现提供基础。 -2. 交通流量预测模型建立学生学习如何使用系统提供的交通数据,建立交通流量预测模型,以预测未来的交通流量情况,并评估模型的准确性和效果。 +1. 交通场景感知与分析学生学习如何利用系统进行[目标检测](course/object_detection.md)、[跟踪](course/trajectory_tracking.md)和[再识别](#redete),进行交通参与者的分析和统计,对交通进行态势感知,为后面的算法实现提供基础。 +2. [交通流量预测模型](tuto_G_traffic_prediction.md)建立学生学习如何使用系统提供的交通数据,建立交通流量预测模型,以预测未来的交通流量情况,并评估模型的准确性和效果。 3. 交通网络优化策略设计学生学习如何使用系统提供的交通网络数据,设计交通网络优化策略,通过调整[路线规划](course/motion_planning.md)、[红绿灯配时](course/signal_control.md)等参数,提升整体交通效率。 4. [智能信号控制](course/signal_control.md)算法实现学生学习如何使用系统提供的信号控制功能,实现智能信号控制算法,优化交通信号的配时方案,提高交通流畅度和减少拥堵。 -5. 交通数据可视化与分析学生学习如何使用系统提供的数据可视化工具,对交通数据进行可视化分析,探索交通流量、拥堵状况等趋势和规律。 +5. [交通数据可视化](#visualization)与分析学生学习如何使用系统提供的数据可视化工具,对交通数据进行可视化分析,探索交通流量、拥堵状况等趋势和规律。 6. 交通场景优化与仿真实验学生学习如何根据实际交通问题,进行场景优化和仿真实验,评估优化策略的效果,提出改进方案并进行验证。