Carla基础

一、启动 CARLA
./CarlaUE4.sh -opengl  # Linux
CarlaUE4.exe           # Windows

windows下双击.exe启动carla,必须在运行相关.py文件之前执行该步
二、Python API 配置

pip install carla  # 确保 carla egg 与 CarlaUE4 版本一致

 

 

在配置好的conda环境中安装carla的 python api,如Carla版本为0.9.15,则完整代码如下

pip install carla == 0.9.15 # 确保 carla egg 与 CarlaUE4 版本一致

三、Python API 基本用法

import carla

client = carla.Client('localhost', 2000) #连接carla,默认端口2000
client.set_timeout(10.0) #连接延迟,如果超过10s则报错,电脑较卡可以设定20、60秒等
world = client.get_world() #获取当前carla的世界对象
blueprint_library = world.get_blueprint_library() #获取蓝图

3.1生成车辆

vehicle_bp = blueprint_library.filter('model3')[0] # 获取车辆对象除model3外还有其他模型,可自行挑选
spawn_point = world.get_map().get_spawn_points()[0] # 获取车辆出生点,也可自己设置自定义出生点,前提是不与其他actor位置冲突
vehicle = world.spawn_actor(vehicle_bp, spawn_point) # 生成车辆

3.2设置控制

from carla import VehicleControl
control = VehicleControl(throttle=0.5, steer=0.0) #throttle为油门[0,1]取值,steer为方向盘角度取值为[-1,1]其中-1为向左打死,还有brake参数,也是[0,1]
vehicle.apply_control(control) #实施控制

 

3.3添加传感器

camera_bp = blueprint_library.find('sensor.camera.rgb') #该传感器为rgb摄像头,carla中传感器很多可以去官方文件查看
camera_bp.set_attribute('image_size_x', '800') # rgb摄像头的画面长宽
camera_bp.set_attribute('image_size_y', '600') # 同上
camera_transform = carla.Transform(carla.Location(x=1.5, z=2.4)) #rgb摄像头放置在车辆中的位置
camera = world.spawn_actor(camera_bp, camera_transform, attach_to=vehicle) #将传感器和车辆进行绑定

# 回调函数,这里就是保存每帧传感器获取的画面
def image_callback(image):
    image.save_to_disk('output/%06d.png' % image.frame)
# 启动传感器监听,简而言之当你有数据时,就调用这个函数
camera.listen(image_callback)

 

3.4天气(如有需要)

weather = carla.WeatherParameters.ClearNoon #预设天气,雪、雨、雾等目前都支持,如有其他需求,可以设置天气对象详细参数
world.set_weather(weather) # 设置天气

 

四、demo1(自动驾驶)

# autopilot_demo.py
import carla
import time
import random

def main():
    client = carla.Client("localhost", 2000)
    client.set_timeout(10.0)

    world = client.get_world()

    # 获取蓝图库,选择一辆车
    blueprint_library = world.get_blueprint_library()
    vehicle_bp = random.choice(blueprint_library.filter("vehicle.tesla.model3"))

    # 获取一个随机出生点
    spawn_point = random.choice(world.get_map().get_spawn_points())
    
    # 生成车辆
    vehicle = world.spawn_actor(vehicle_bp, spawn_point)

    # 启用自动驾驶模式
    vehicle.set_autopilot(True)  # 默认端口会连接 traffic manager

    print("Vehicle is running in autopilot mode. Press Ctrl+C to exit.")
    
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        print("Destroying vehicle...")
    finally:
        vehicle.destroy()

if __name__ == '__main__':
    main()

五、demo2(非自动驾驶)

# manual_control_demo.py
import carla
import time
import random

def main():
    client = carla.Client("localhost", 2000)
    client.set_timeout(10.0)

    world = client.get_world()

    blueprint_library = world.get_blueprint_library()
    vehicle_bp = random.choice(blueprint_library.filter("vehicle.audi.tt"))

    spawn_point = random.choice(world.get_map().get_spawn_points())
    vehicle = world.spawn_actor(vehicle_bp, spawn_point)

    # 禁用自动驾驶
    vehicle.set_autopilot(False)

    print("Vehicle running with custom control. Press Ctrl+C to stop.")

    try:
        for i in range(200):
            control = carla.VehicleControl()

            # 油门设置
            control.throttle = 0.5

            # 简单模拟方向盘变化
            if i < 50:
                control.steer = 0.2   # 向右打方向
            elif i < 100:
                control.steer = -0.2  # 向左打方向
            else:
                control.steer = 0.0   # 直行

            vehicle.apply_control(control)
            time.sleep(0.05)  # 模拟 20Hz 控制频率
    except KeyboardInterrupt:
        print("Interrupted.")
    finally:
        print("Destroying vehicle...")
        vehicle.destroy()

if __name__ == '__main__':
    main()

六、other

 

world = client.load_world('Town05') #默认是Town10(0.9.15),可以根据自己需要更换
map = world.get_map()
waypoints = map.generate_waypoints(2.0)

 

settings = world.get_settings()
settings.synchronous_mode = True
settings.fixed_delta_seconds = 0.05
world.apply_settings(settings)

默认是异步模式,模拟运行独立于客户端

上述代码为设置同步模式,客户端控制每一帧推进

 

posted @ 2025-07-03 20:35  徐柿子  阅读(101)  评论(0)    收藏  举报