Kesai3931 2024-05-22 12:16 采纳率: 0%
浏览 25

auto仿真环境里面waypoint的设置问题

您好,我现在正在研究CMU的auto环境,现在有两个小问题试图理解:
1,auto仿真环境里面界面上有一个waypoint,请问如果直接调用这个而不启动far planner,这个抵达waypoint是通过local planner去实现的是吗?
2,auto仿真环境里面有一个waypoint example,这个也不需要启动far planner,请问使用这个的前提是已经建图完成能定位是吗?
谢谢您

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-05-22 12:16
    关注

    引自免费微信小程序:皆我百晓生

    在CARLA(Continual Autonomous Driving Agent)环境中,Waypoints用于指导车辆行驶。以下是针对您的两个问题的详细解答:

    1. 如果您直接使用界面中的Waypoint并跳过Far Planner,那么车辆会根据Local Planner进行导航。Local Planner通常负责短距离的路径规划和执行,它接收来自高层级路径规划器(如行为决策模块)的目标点,并确保车辆按照安全、平滑的方式到达这些目标点。在这种情况下,您可以使用add_world_waypoint()函数将Waypoint添加到世界中,然后车辆将会自动跟随这些点。以下是一个示例代码片段,展示了如何创建一个Waypoint并将其添加到世界中:
    from carla import VehicleControl, World, Transform, Location, Rotation
    
    def add_waypoint(world, location):
        wp = world.get_map().get_waypoint(location)
        if wp is not None:
            world.debug.draw_point(wp.transform.location, size=0.2, color=(255, 0, 0), life_time=3)
    
    # 获取当前世界的引用
    world = client.get_world()
    
    # 定义一个位置,例如(0, 100, 0)代表x轴方向100米的位置
    location = Location(x=0, y=100, z=0)
    
    # 添加Waypoint
    add_waypoint(world, location)
    
    1. 对于Waypoint Example,在CARLA中并没有特定的"Waypoint Example"组件,但可能指的是用户自己创建的一组Waypoints序列。如果要在不启动Far Planner的情况下使用Waypoints,确实需要先完成地图构建(Mapping),并且车辆能够正确地定位自身在地图上的位置。这通常涉及到SLAM(Simultaneous Localization and Mapping)技术,车辆通过传感器数据(如激光雷达、摄像头等)实时更新其位置和周围环境的模型。

    在实际应用中,首先需要创建Waypoint列表,然后在每帧中,使用Local Planner跟随这些Waypoints。确保车辆已定位的方法通常是通过GPS/IMU数据或者其他传感器融合算法。然而,CARLA默认并不提供完整的SLAM功能,您可能需要结合其他库(如 Hector SLAM、Cartographer 等)来实现精确的定位。一旦车辆可以定位,就可以使用类似下面的伪代码来让车辆沿着Waypoint列表行驶:

    # 假设wp_list是一个包含多个Waypoint对象的列表
    current_wp_index = 0
    target_location = wp_list[current_wp_index].transform.location
    
    while True:
        # 获取车辆当前状态
        vehicle_transform = world.get_actor(actor_id).get_transform()
        
        # 计算车辆与目标点之间的向量
        direction = target_location - vehicle_transform.location
        
        # 创建控制命令
        control = VehicleControl()
        control.steer = steer_towards(direction)
        control.throttle = throttle_towards(target_location, vehicle_transform)
        
        # 应用控制
        world.get_actor(actor_id).apply_control(control)
        
        # 更新当前WP索引,如果达到最后一个WP,则从头开始
        current_wp_index += 1
        if current_wp_index >= len(wp_list):
            current_wp_index = 0
    

    这里steer_towardsthrottle_towards是假设的辅助函数,它们分别计算出使车辆转向目标点和调整油门以保持适当速度的值。在实际实现中,这些函数可能涉及PID控制器或其他更复杂的控制策略。注意,上述代码仅作为概念展示,实际编程时需要考虑更多细节和错误处理。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月22日