笔记12:Carla官方文档阅读 -- 2nd【Actors and Blueprints】/【(3)Types of Actors】/【3)Traffic signs / Traffic l】

本文介绍了OpenDRIVE文件在Carla自动驾驶仿真环境中的作用,它用于描述道路网络和交通场景,包含道路拓扑、几何信息、交通标志和信号灯等。在Carla中,交通标志如停止线和信号灯作为actor存在,但不能通过蓝图创建,而是依据OpenDRIVE文件自动生成。交通灯的状态可以通过API进行设置和控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import sys
try:
    sys.path.append('D:\work_software\Carla\Carla_0.9.10\CARLA_0.9.10\WindowsNoEditor\PythonAPI\carla\dist\carla-0.9.10-py3.7-win-amd64.egg')
except IndexError:
    pass


import carla
import random
import time

# 创建 client
client = carla.Client("localhost", 2000)
client.set_timeout(5.0)
# 创建 world
world = client.get_world()
# 创建 vehicle actor
blueprint_library = world.get_blueprint_library()
vehicle_blueprint = random.choice(blueprint_library.filter("vehicle.*.*"))
vehicle_transform = carla.Transform(carla.Location(x = 100, y = 200 , z = 10), carla.Rotation(yaw = -180))
vehicle_actor = world.spawn_actor(vehicle_blueprint, vehicle_transform)
# 设置 vehicle actor 为自动驾驶模式
vehicle_actor.set_autopilot()




#(3)Types of actorss
# ------------------------------------------------------------------------------------------------------------------------
# 3.交通标志和交通灯 -- Traffic signs / Traffic lights
#
#
#       (1)
#       ======================================================================================================================================================
#       注1 -- 1.解释什么是【OpenDRIVE】文件:       【OpenDRIVE】是一种开放的文件格式,用于描述道路网络和交通场景,并被广泛应用于自动驾驶领域
#              2.【OpenDRIVE】文件的作用:           【OpenDRIVE】文件包含了【道路拓扑结构】、【车道几何信息】、【路标】、【交通信号灯】、【交通流量】...相关数据,这些信息被用于在自动驾驶仿真环境中构建真实世界的道路网络,并模拟车辆在其中行驶的场景
#              3.【OpenDRIVE】文件在carla中的作用:   在Carla中【OpenDRIVE】文件被用作【道路地图】的【输入】,Carla的仿真引擎会解析OpenDRIVE文件,创建道路网格,通过读取OpenDRIVE文件,Carla能够准确地还原真实道路的拓扑结构和特征,从而提供高度真实的自动驾驶仿真环境
#                                                    总而言之Carla中的【OpenDRIVE文件】是用于【描述】【道路网络】和【交通场景】的文件,用于构建自动驾驶仿真环境,并为仿真中的车辆行驶提供准确的道路信息
#       ======================================================================================================================================================
#
#
#       (2)
#       ======================================================================================================================================================
#       注2 -- Carla模拟器中,只有【道路停止线】【道路让行线】【交通信号灯】是作为【actor】存在的   --   eg:【类 carla.TrafficLight】继承于【类 Carla.TrafficSign】继承于【类 carla.Actor】
#                            其他的在【文件 OpenDRIVE】中提及的道路标志,都不能作为【actor】存在,而是以【类 carla.Landmark】的实例化对象的方式存在,即想访问这些道路标志,就要通过【类 carla.Landmark】中的API进行访问
#       补充:类【carla.Landmark】作用:定义影响道路的任何类型的交通地标或标志的类,此类可以检索在OpenDRIVE中定义的地标的所有信息,并提供有关其影响哪些车道以及何时影响的信息
#       ======================================================================================================================================================
#
#
#       (3)
#       ======================================================================================================================================================
#       注3 -- 虽然只【道路停止线】【道路让行线】【交通信号灯】是作为【actor】存在的,但是【蓝图库中并不提供他们的蓝图】,也就是说我们【无法】【人为创建】这三种道路标志,而只能通过【文件 OpenDRIVE】自动生成
#       补充:停止线、让行线和交通信号灯等道路标识并不是基于蓝图创建的,而是根据OpenDRIVE文件中的信息在仿真环境中自动生成的,具体而言,当Carla解析OpenDRIVE文件并创建道路网格时,它会根据文件中的道路属性和几何信息生成相应的道路标识,如停止线和让行线,同样,交通信号灯的位置和状态也会根据OpenDRIVE文件中的交通信号灯信息自动设置
#             因此,由于这些道路标识和交通信号灯是根据OpenDRIVE文件动态生成的,而不是通过蓝图创建的,所以无法在蓝图库中找到它们,并且无法直接通过蓝图进行生成和控制。它们的生成和行为是由Carla的仿真引擎自动管理的
#       ======================================================================================================================================================
#
#
#       (4)
#       ======================================================================================================================================================
#       注4 -- 交通标志是如何影响车辆的:通过类【carla.BoundingBox】来影响处在他的影响范围内的车辆
#       补充:类【carla.BoundingBox】作用:用来得到目前场景中任意【actor】/【道路标志】/【其他元素】的边界框(或几何形状),【类 carla.DebugHelper】或【类 carla.Client】可以使用这些边界框来绘制其形状来进行调试
#       ======================================================================================================================================================




# 示例:获得影响车辆的交通灯
if vehicle_actor.is_at_traffic_light():                         # 函数【carla.Vehicle.is_at_traffic_light()】  -- 作用:判断有没有和交通灯acator的边界框(Bounding Box)【相交】
    traffic_light = vehicle_actor.get_traffic_light()           # 函数【carla.Vehicle.get_traffic_light()  】  -- 作用:返回和车辆【相交】的交通灯边界框所属的actor,返回值类型为【carla.TrafficLight】
    print("\n", traffic_light)
    print(type(traffic_light))




#       (5)
#       ======================================================================================================================================================
#       注5 -- 每个交通灯(即每个 pole)都有自己的ID   ---  指每个路灯杆子
#              每个交汇处(即每个 group)也有自己的ID  ---  指某个路口的一组交通灯
#       注6 -- 同一组中的红绿灯遵循一个周期
#
#       注7 -- 交通灯的状态可以用API设置                 ---  即每个交通灯的颜色可以通过API设定
#              交通灯的每个状态持续的秒数也可以用API设置  ---  即每个颜色持续的时间可以通过API指定
#       补充:通过类【carla.TrafficLight】 + 类【carla.TrafficLightState】实现 注7 中的功能
#       ======================================================================================================================================================




# 示例:将一个交通灯由绿改为红色
    if traffic_light.get_state() == carla.TrafficLightState.Red:        # 函数【carla.TrafficLight.get_state()】   +   属性【carla.TrafficLightState.Red】
        print("\n", carla.TrafficLightState.Red)
        print(type(carla.TrafficLightState.Red))                        # 应该是属于类型【carla.TrafficLightState】

        traffic_light.set_state(carla.TrafficLightState.Green)          # 函数【carla.TrafficLight.set_state(参数类型 -- carla.TrafficLightState)】
        traffic_light.set_green_time(4.0)                               # 函数【carla.TrafficLight.set_green_time()】




# 参考示例1 -- 改变交通灯状态:References / Code recipes / Traffic Light Recipe
# https://carla.readthedocs.io/en/0.9.10/ref_code_recipes/#traffic-light-recipe




# 参考示例2 -- 改变交通灯actor的边界框大小:References / Code recipes / Debug Bounding Box Recipe
# https://carla.readthedocs.io/en/0.9.10/ref_code_recipes/#debug-bounding-box-recipe

注:my_test_script_6.py

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值