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()
#(3)Types of actorss
# ------------------------------------------------------------------------------------------------------------------------
# 5.行人 -- Walkers
# 注1:有配套的蓝图,可以使用函数spawn_actor()生成
# 注2:生成对象的类型是【carla.Walker】,属于类【carla.Actor】的子类
# 注3:行人的控制通过两个类实现 -- 【carla.WalkerControl】 -- 以一定的方向和速度移动行人,还允许他们跳跃
# 【carla.WalkerBoneControl】 -- 提供对3D骨架的控制
# ------------------------------------------------------------------------------------------------------------------------
# ------------------------------------------------------------------------------------------------------------------------
# 创建 -- Walker
blueprint_library = world.get_blueprint_library()
walker_blueprint = blueprint_library.filter("walker.*.*")[0]
walker_transform = carla.Transform(carla.Location(x = 100, y = 200 , z = 10), carla.Rotation(yaw = -180))
walker_actor = world.spawn_actor(walker_blueprint, walker_transform)
print("\n", walker_actor) # 输出:Actor(id=86, type=walker.pedestrian.0007)
print(type(walker_actor)) # 输出:<class 'carla.libcarla.Walker'>
# 创建 -- 对 Walker 的控制器(即:人工智能控制器)
walker_ai_blueprint = world.get_blueprint_library().find('controller.ai.walker')
walker_ai_actor = world.spawn_actor(walker_ai_blueprint, carla.Transform(), attach_to = walker_actor)
print("\n", walker_ai_actor) # 输出:Actor(id=87, type=controller.ai.walker)
print(type(walker_ai_actor)) # 输出:<class 'carla.libcarla.WalkerAIController'>
# 注意1:人工智能控制器是无形的,没有物理特性。它不会出现在现场
# 这里定义的 walker_ai_actor 其实是对步行者进行 AI 控制的类,而不是一个参与交通的 actor
# 注意2:控制器被定义为参与者,但它们与其他控制器有很大不同,它们在创建过程中需要附加到父 Actor,这是它们将控制的步行者
# 他们还需要一个特殊的蓝图(已在carla.BlueprintLibrary中定义为“controller.ai.walker”),这是一个空的蓝图,因为人工智能控制器在模拟中是不可见的,但会跟随其父控制器来指示每一步
# ------------------------------------------------------------------------------------------------------------------------
# ------------------------------------------------------------------------------------------------------------------------
# 注:每个【人工智能控制器】都需要初始化 + 目标 + 可选的速度
walker_ai_actor.start() # 函数【carla.WalkerAIController.start()】:为其父步行者启用AI控制
walker_ai_actor.go_to_location(world.get_random_location_from_navigation()) # 函数【carla.WalkerAIController.go_to_location(参数类型 carla.Location)】:设置行人将到达的目的地
walker_ai_actor.set_max_speed(1 + random.random()) # 函数【carla.WalkerAIController.set_max_speed(参数类型 float)】:设置步行者的速度(以米每秒为单位)
time.sleep(10.0) # 注:没有这一行行人就动不起来
walker_ai_actor.stop() # 函数【carla.WalkerAIController.stop()】:禁用其父步行者的 AI 控制
# ------------------------------------------------------------------------------------------------------------------------
注:my_test_script_8.py