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 = carla.Client("localhost", 2000)
client.set_timeout(5.0)
world = client.get_world()
vehicle_actor_blueprint = world.get_blueprint_library().filter("vehicle.*.*")[0]
vehicle_actor_transform = carla.Transform(carla.Location(-88.5, -65.0, 0.1), carla.Rotation(yaw=90))
vehicle_actor = world.spawn_actor(vehicle_actor_blueprint, vehicle_actor_transform)
# vehicle_actor.set_autopilot(True) # 注:设置为自动驾驶模式后,要么原地转圈,要么直线行驶直至发生碰撞【此问题未解决,存疑】
map = world.get_map()
waypoint = map.get_waypoint(vehicle_actor.get_location(), project_to_road = True)
print("\n", waypoint) # Waypoint(Transform(Location(x=-88.542267, y=-64.999878, z=-0.795428), Rotation(pitch=0.761503, yaw=89.843735, roll=0.000000)))
waypoint = map.get_waypoint(vehicle_actor.get_location(), project_to_road = False)
print("\n", waypoint) # Waypoint(Transform(Location(x=-88.542267, y=-64.999878, z=-0.795428), Rotation(pitch=0.761503, yaw=89.843735, roll=0.000000)))
#(1)Navigating through waypoints -- 通过航路点导航 -- 单纯的【瞬移】车辆的【当前位置】,并不是让车辆行驶起来
vehicle_actor.set_simulate_physics(False)
while True:
waypoint = random.choice(waypoint.next(2.0))
vehicle_actor.set_transform(waypoint.transform)
# 注:下列函数均属于【carla.Waypoint】
print("\n",waypoint.next(2.0)) # [<carla.libcarla.Waypoint object at 0x000002D750B33B10>]
print(waypoint.previous(2.0)) # [<carla.libcarla.Waypoint object at 0x000002D750B33B10>]
print(waypoint.next_until_lane_end(2.0)) # [<carla.libcarla.Waypoint object at 0x000002D750B33B10>, <carla.libcarla.Waypoint object at 0x000002D750B33A50>, <carla.libcarla.Waypoint object at 0x000002D750B33B70>, ...]
print(waypoint.previous_until_lane_start(2.0)) # [<carla.libcarla.Waypoint object at 0x000002D750B33B10>, <carla.libcarla.Waypoint object at 0x000002D750B33A50>, <carla.libcarla.Waypoint object at 0x000002D750B33B70>, ...]
print(waypoint.get_left_lane()) # Waypoint(Transform(Location(x=-85.036827, y=-63.009438, z=-0.766863), Rotation(pitch=0.839622, yaw=89.843735, roll=0.000000)))
print(waypoint.get_right_lane()) # Waypoint(Transform(Location(x=-91.536804, y=-62.991711, z=-0.766863), Rotation(pitch=0.839622, yaw=89.843735, roll=0.000000)))
#(2)Generating a map navigation -- 生成地图导航
spawn_points = map.get_spawn_points()
# 注:官方文档介绍的杂乱无章,没有具体的示例,只有常见的函数的用法
#
# 参考文章:https://zhuanlan.zhihu.com/p/367491650
注:my_test_script_10.py
关于问题:设置为自动驾驶模式后,要么原地转圈,要么直线行驶直至发生碰撞【此问题未
解决,存疑】的解决方案
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 = carla.Client("localhost", 2000)
client.set_timeout(5.0)
world = client.get_world()
vehicle_actor_blueprint = world.get_blueprint_library().filter("vehicle.*.*")[0]
vehicle_actor_transform = random.choice(world.get_map().get_spawn_points())
vehicle_actor = world.spawn_actor(vehicle_actor_blueprint, vehicle_actor_transform)
vehicle_actor.set_autopilot(True)
while True:
# Tick the server
world.tick() # 设置了自动驾驶但是【原地转圈/直行直到碰撞】的原因在这里,没有同步模拟器和服务器的计算结果
w_frame = world.get_snapshot().frame
print("World's frame: %d" % w_frame)
time.sleep(1)
原因就在于:没有加函数【world.tick()】
解释:
因为以前我没有加上函数【world.tick()】,那么在服务器端计算的车辆的控制参数和控制策略,是无法同步到carla模拟器端的,所以模拟器中车辆会一直以初始控制策略运动,因为他接收不到新的控制指令,所以会出现【一直】转圈】/【一直】直行的情况