笔记7:Carla官方文档阅读 -- 3rd【Maps and Navigation】/【(2)Navigation in CARLA】

该代码示例展示了在CARLA仿真环境中如何使用PythonAPI控制自动驾驶车辆。通过设置航路点瞬移车辆位置,以及启用车辆的自动驾驶模式,探讨了车辆原地转圈或直行至碰撞的问题,指出问题关键在于缺少`world.tick()`以同步服务器和模拟器的计算结果。
摘要由CSDN通过智能技术生成
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模拟器端的,所以模拟器中车辆会一直以初始控制策略运动,因为他接收不到新的控制指令,所以会出现【一直】转圈】/【一直】直行的情况

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值