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)
默认是异步模式,模拟运行独立于客户端
上述代码为设置同步模式,客户端控制每一帧推进