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
#(1)世界和客户端
################################################################################################################################################################
client = carla.Client("localhost", 2000) #两个TCP通信端口,一个是2000一个是2001
# 【作用:用于将客户端连接到运行在同一台机器上、端口号为 2000 的 CARLA 服务器】
# 【解释:客户端(client)所在的机器的IP地址/主机名为 "loaclhost" ,即client所在的这个计算机的主机(本地主机/本地服务器)的IP为 "localhost"】
client.set_timeout(10.0) #连接不上模拟器的时候,报错:RuntimeError: time-out of 10000ms while waiting for the simulator, make sure the simulator is ready and connected to localhost:2000
# 【作用:当客户端链接不上本地服务器,超过这个时间限制,报错】
# 【解释:本地服务器(IP为"loaclhost")】连接不上【carla模拟器(即客户端) -- client】
client_version = client.get_client_version()
server_version = client.get_server_version()
print("client_version = ", client_version) #输出:0.9.10
print("server_version = ", server_version) #输出:0.9.10
################################################################################################################################################################
#(2)地图
################################################################################################################################################################
world = client.get_world() #默认得到的世界地图是【Town03】
print(world.id)
client.reload_world() #在客户端更新世界地图时【可以先关闭原世界地图再创建新的世界地图】【也可以直接创建新世界地图】
# 【注:每当客户端调用load_world()或者reload_world()时,前一个世界被销毁,一个新的世界从头开始创建】
world = client.load_world("Town01")
print(world.id)
################################################################################################################################################################
#(3)天气
################################################################################################################################################################
print("天气情况 :\n", world.get_weather()) #注:get_weather()函数返回一个【类 WeatherParameters()】的实例化对象,这个对象在实例化出来world的时候由系统默认创建出来了,用户可以通过这个函数来获取world对象中的weather对象
world.set_weather(carla.WeatherParameters.WetCloudySunset) #注:【WetCloudySunset】是【类 WeatherParameters()】已经包含的【天气预设】
# 【作用:不用进行自定义了,直接使用carla预设的天气】
weather_params = carla.WeatherParameters(
precipitation=100, # 降雨强度 (0-100)
precipitation_deposits=50, # 湿度 (0-100)
wind_intensity=100, # 风力 (0-100)
sun_azimuth_angle=20, # 太阳方位角 (0-360)
sun_altitude_angle=-10, # 太阳高度角 (0-90) 当 sun_altitude_angle < 0 时,夜间模式开始,这被认为是日落,这是灯光变得特别重要的时候
fog_falloff=100 # 雾的浓度 (0-无穷)
)
world.set_weather(weather_params) #注:函数【set_weather()】的参数应该是一个【类 WeatherParameters()】的实例化对象
# 【作用:可以利用WeatherParameters()】自定义天气
################################################################################################################################################################
#(4)其他灯光
################################################################################################################################################################
#注 ;carla的【Light类】【LightManager类】【LightGroup类】【LightState类】是不包含车灯的,只管理路灯/建筑物灯光...
# 车灯的管理是在【Vehicle类】中的,是和车辆的其他属性一起进行管理的
l_manager = world.get_lightmanager() #函数【get_lightmanager()】:属于【类World】
# 作用:函数【get_lightmanager()】:【类carla.LightManager】实例可以通过【carla.World.get_lightmanager()】检索,得到建立的世界对象world里面由系统自动创建的【类carla.LightManager】的实例化对象
# 注:carla官网使用的示范是错误的,World类中没有函数get_light_manager(),而是函数get_lightmanager()
mylights = l_manager.get_all_lights() #函数【get_all_lioghts()】:属于【类carla.LightManager】
# 作用:返回包含特定组中的灯光的【列表】,默认情况下该组是None(即整个组)
print("灯光情况:\n", mylights)
print(type(mylights))
#定制1个灯
light_01 = mylights[0] #这个列表中的每个元素的类型都是【类carla.Light】的【实例化对象】
print(type(light_01)) #<class 'carla.libcarla.Light'>
light_01.turn_on()
light_01.set_intensity(100.0)
state_01 = carla.LightState(200.0, carla.Color(255, 0, 0), carla.LightGroup.Building, True) #【类carla.LightState】:这个类代表除了标识符和位置之外的所有灯光变量,它们应该是静态的
# 作用:使用此类可以在一次调用中管理灯光的【所有参数】
light_01.set_light_state(state_01) #函数【set_light_state()】
#定制一组灯 -- [这一部分的第一行程序一直报错,因为LightGroup类返回的内容同都是枚举对象,而不是可迭代对象(不含方法__iter__),而函数get_light_group()需要接受一个可迭代对象,我试了很多方法都不行,也许是carla在这一块的代码还没有完善,存疑]
# lights_02 = l_manager.get_light_group(list(carla.LightGroup.Building))
# print(type(lights_02)) #注:是list,里面装的元素都是【carla.Light】对象
# print(lenth(lights_02))
# l_manager.turn_on(my_lights) #注:对一个灯进行操作的时候,用【类carla.Light】中的方法,这些方法也只能控制一个灯
# l_manager.set_color(my_lights, carla.Color(255,0,0)) # 但是【类carla.LightManager】中的方法可以控制一组灯,所以这里要用【l_manager.~~】
# l_manager.set_intensities(lights_02, list_of_intensities)
################################################################################################################################################################
#(5)车灯
################################################################################################################################################################
#注:可以使用【类Vehicle】中的【carla.Vehicle.get_light_state()】和【carla.Vehicle.set_light_state()】方法检索和更新车辆的灯光
################################################################################################################################################################
笔记18:Carla官方文档阅读 -- 1st【World and Client】
于 2023-07-03 12:00:06 首次发布