ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

CARLA 0.9.16核心概念详解:世界/地图/车辆/传感器入门指南

CARLA 0.9.16核心概念详解:世界/地图/车辆/传感器入门指南 一、CARLA是什么架构Client-Server模式首先要搞懂CARLA的工作模式它是客户端-服务器Client-Server架构。简单理解就是CarlaUE4.exe 服务器端负责渲染画面、跑物理引擎你的Python脚本 客户端负责发指令生成车辆、控制传感器、获取数据两者通过TCP端口2000通信。这就是为什么每次跑脚本前都要先打开CarlaUE4.exe——你得先把服务器启动起来客户端才能连上。个人经验很多新手报错time-out90%都是因为没开CarlaUE4.exe或者端口被占了。二、四大核心概念World / Map / Actor / BlueprintCARLA的所有操作本质上都是围绕这四个对象展开的。我用一个类比帮你理解CARLA概念现实世界类比通俗解释World整个游戏世界你所在的整个仿真环境所有东西都在里面Map地图具体用哪张地图比如Town04、Town06Actor演员/物体世界里所有看得见摸得着的东西——车、人、红绿灯、传感器Blueprint模板/图纸Actor的图纸告诉你这个物体长什么样、有什么属性2.1 Client连接CARLA的入口Client是你和CARLA服务器打交道的第一个对象。所有操作都从它开始import carla 连接到本地的CARLA服务器 client carla.Client(localhost, 2000) client.set_timeout(10.0) # 设置10秒超时就这两行代码你就和CARLA建立了通信。后面所有操作都是通过client来的。2.2 World整个仿真世界World代表当前的仿真世界。你可以把它理解成游戏里的整个地图所有物体。# 获取世界对象 world client.get_world() 获取当前地图名称 map_name world.get_map().name print(f当前地图{map_name})World能干什么生成车辆、行人spawn_actor获取所有Actorget_actors设置天气weather切换地图load_map2.3 BlueprintActor的图纸Blueprint是模板。CARLA里有几百种Blueprint——不同型号的车、不同类型的传感器、不同款式的行人。你要生成一辆车首先得从Blueprint库里找到这辆车的图纸# 获取Blueprint库 blueprint_library world.get_blueprint_library() 找到所有车辆类型的蓝图 vehicle_blueprints blueprint_library.filter(vehicle.*) 选第一辆车随便选一辆 vehicle_bp vehicle_blueprints[0] print(f选中的车辆{vehicle_bp.id})踩坑提醒filter(vehicle.*)返回的是一个列表不是单个对象。新手经常忘了取[0]直接拿去生成结果报错。2.4 Actor世界里的每个物体Actor就是演员——世界里所有的东西都是Actor。车是Actor人是Actor红绿灯是Actor摄像头也是Actor。# 从蓝图生成一辆车放到指定位置 transform carla.Transform() # 默认位置原点 vehicle world.spawn_actor(vehicle_bp, transform) 现在vehicle就是一个Actor对象了你可以控制它 print(f车辆ID{vehicle.id}) print(f车辆类型{vehicle.type_id})关键点生成Actor之后CARLA会在场景里渲染出来。你可以通过代码控制它的行为——加速、刹车、转向、开关传感器。三、第一个Hello World生成一辆自动驾驶的车光说概念太抽象直接上代码。下面这个脚本做三件事连接CARLA在地图上随机位置生成一辆车打开自动驾驶模式让它自己开import carla import random import time def main(): # 第一步连接CARLA服务器 client carla.Client(localhost, 2000) client.set_timeout(10.0) print(✅ 成功连接到CARLA服务器) # 第二步获取世界和蓝图库 world client.get_world() blueprint_library world.get_blueprint_library() 筛选所有车辆蓝图 vehicle_blueprints blueprint_library.filter(vehicle.*) print(f找到 {len(vehicle_blueprints)} 种车辆) 第三步随机选一辆车随机位置生成 随机选一辆车 vehicle_bp random.choice(vehicle_blueprints) 随机选一个生成位置地图上的出生点 spawn_points world.get_map().get_spawn_points() spawn_point random.choice(spawn_points) 生成车辆 vehicle world.spawn_actor(vehicle_bp, spawn_point) print(f✅ 成功生成车辆{vehicle.type_id}) 第四步开启自动驾驶 vehicle.set_autopilot(True) print(✅ 自动驾驶已开启车辆开始行驶) 第五步保持运行按CtrlC退出 try: while True: # 每秒钟打印一次车辆位置 transform vehicle.get_transform() location transform.location print(f车辆位置x{location.x:.1f}, y{location.y:.1f}, z{location.z:.1f}) # 暂停1秒 time.sleep(1) except KeyboardInterrupt: print(\n 正在清理...) finally: # 销毁车辆释放资源 vehicle.destroy() print(✅ 车辆已销毁仿真结束) if name main: main()四、运行效果说明按下面的步骤运行先打开CarlaUE4.exe等它加载完打开另一个终端运行上面的脚本python hello_carla.py正常输出应该是这样✅ 成功连接到CARLA服务器 找到 80 种车辆 ✅ 成功生成车辆vehicle.tesla.model3 ✅ 自动驾驶已开启车辆开始行驶 车辆位置x125.3, y-5.2, z0.0 车辆位置x128.7, y-5.3, z0.0 车辆位置x132.1, y-5.4, z0.0 ...同时你在CARLA画面里应该能看到一辆车从出生点开始沿着道路自己开遇到红绿灯会停遇到拐弯会自己转。个人经验如果车生成了但不动90%是因为没开自动驾驶或者地图里没有交通灯/导航线。换Town04或Town05这种路网成熟的地图试试。五、常见报错与解决方案报错1RuntimeError: time-out of 10000ms while waiting for the simulator原因CARLA服务器没启动或者端口不对。解决确认CarlaUE4.exe已经打开检查端口2000是不是被占了如果换了端口Python连接时也要改client carla.Client(localhost, 3000) # 改成你启动的端口报错2AttributeError: NoneType object has no attribute id原因车辆生成失败spawn_actor返回了None。解决生成位置被别的东西占了比如别的车换个生成位置试试先把之前的车都销毁# 销毁所有车辆 for actor in world.get_actors().filter(vehicle.*): actor.destroy()报错3车辆生成了但不动原因没开自动驾驶或者地图里没有导航线。解决确认调用了vehicle.set_autopilot(True)换个地图Town04或Town05路网最完整检查是不是开了同步模式导致的报错4No module named carla原因Python API没装对或者conda环境不对。解决确认你在正确的conda环境里重新安装egg包easy_install carla-0.9.16-py3.7-win-amd64.egg六、本章小结今天讲了CARLA最核心的四个概念Client你和CARLA通信的入口World整个仿真世界Blueprint物体的模板/图纸Actor世界里具体的物体车、人、传感器理解了这四个你就理解了CARLA 80%的API。后面所有的传感器、交通管理、场景设计都是围绕这四个对象展开的。 相关阅读上一篇 参考资料CARLA官方文档https://carla.readthedocs.io/CARLA Core Conceptshttps://carla.readthedocs.io/en/latest/core_concepts/CARLA Python APIhttps://carla.readthedocs.io/en/latest/python_api/
返回列表