CarlaAir Quick-Start Guide / 快速入门指南

欢迎使用 CarlaAir — 空地一体联合仿真平台。 本指南帮助你从零开始,10 分钟内完成首次体验。


Prerequisites / 前置条件

在开始之前,请确认以下环境已准备好:

  • Conda — 已安装 Miniconda 或 Anaconda
  • CarlaAir 二进制包 — 已下载并解压 CarlaAir 发行包
  • NVIDIA GPU — 至少 8GB 显存(Town10HD 需要约 8GB)
  • Ubuntu 系统 — 推荐 Ubuntu 20.04 / 22.04

Environment Setup / 环境配置

使用自动化脚本一键配置 Python 环境和依赖:

# 创建 conda 环境并安装所有依赖
bash env_setup/setup_env.sh

# 验证环境是否正确配置
bash env_setup/test_env.sh

setup_env.sh 会创建 carlaAir conda 环境,安装 CARLA Python API、AirSim、PyGame、OpenCV 等依赖。 test_env.sh 会检查所有依赖是否可导入。

配置完成后,激活环境:

conda activate carlaAir

Launch / 启动仿真器

./CarlaAir.sh Town10HD

等待看到 "Ready! Both servers are running." 即表示启动成功。

端口说明 / Ports: | 服务 Service | 端口 Port | 用途 Purpose | |---|---|---| | CARLA API | localhost:2000 | 地面仿真:车辆、行人、天气、传感器 | | AirSim API | localhost:41451 | 空中仿真:无人机飞行与相机 |

提示: 首次启动需要 2-5 分钟加载资源和编译着色器,请耐心等待。


First Experience / 首次体验

启动成功后,运行你的第一个 CarlaAir 脚本:

python3 examples/quick_start_showcase.py

这个脚本会自动演示 CarlaAir 的核心能力: 1. 在城市中生成一辆 Tesla,无人机起飞并锁定跟踪 2. 车辆沿道路行驶,无人机在上方自动跟随 3. 4 分屏传感器展示:RGB 画面 / 深度图 / 语义分割 / 无人机 FPV 4. 天气自动循环切换(晴天、雨天、雾天、日落等)

操作 / Controls: N 手动切换天气,ESC 退出。


Interactive Demos / 交互式示例

examples/ 目录包含 6 个经过测试的示例脚本,涵盖 CarlaAir 的各项能力:

脚本 Script 功能 Description 操作 Controls
quick_start_showcase.py 全自动演示:车辆+无人机跟踪+4分屏传感器+天气循环 N 切换天气, ESC 退出
drive_vehicle.py 键盘驾驶车辆,第三人称追踪相机 WASD 驾驶, Space 手刹, R 倒车, N 天气
walk_pedestrian.py 第一人称行人漫游,鼠标控制视角 WASD 行走, Shift 加速, Space 跳跃, Mouse 视角
switch_maps.py 自动遍历所有地图,每张地图无人机飞越展示 N 跳过当前地图, ESC 退出
sensor_gallery.py 6 格传感器展示:RGB/深度/语义/实例/LiDAR/光流 N 切换天气, ESC 退出
air_ground_sync.py 左右分屏:地面车辆+空中无人机,同一世界同步天气 N 切换天气, ESC 退出

运行方式 / Usage:

conda activate carlaAir
python3 examples/drive_vehicle.py

Recording Toolkit / 录制工具

examples_record_demo/ 目录提供了轨迹录制与回放工具,用于制作高质量演示视频:

脚本 Script 用途 Purpose
record_vehicle.py 录制车辆行驶轨迹(键盘操控 + 轨迹保存)
record_drone.py 录制无人机飞行轨迹(键盘操控 + 轨迹保存)
record_walker.py 录制行人行走轨迹
demo_director.py 读取轨迹文件,同步回放并录制高质量视频帧
trajectory_helpers.py 轨迹文件的读写工具函数

工作流 / Workflow: 1. 用 record_*.py 脚本交互录制轨迹(保存为 JSON 文件) 2. 用 demo_director.py 加载轨迹并以同步模式回放,输出帧序列 3. 用 ffmpeg 将帧序列合成视频

详见 examples_record_demo/README.md


Synchronous vs Asynchronous Mode / 同步与异步模式

CarlaAir 支持两种运行模式,不同场景下需要选择合适的模式:

Asynchronous Mode / 异步模式(默认)

适用于交互式操作:在 CarlaAir 窗口中驾驶车辆、操控无人机。

  • 仿真器按自身节奏推进,客户端随时读取最新状态
  • 帧率不固定,画面流畅但时间步不均匀
  • 适合:键盘驾驶、实时飞行、手动探索

Synchronous Mode / 同步模式

适用于数据采集、演示回放、视频录制等需要精确控制的场景。

  • 仿真器每帧等待客户端调用 world.tick() 后才推进
  • 时间步固定,帧帧一致,适合录制平滑视频

同步模式配置要求 / Configuration:

# 开启同步模式
settings = world.get_settings()
settings.synchronous_mode = True
settings.fixed_delta_seconds = 1.0 / 30  # 固定 30 FPS
world.apply_settings(settings)

# Traffic Manager 也需要同步
tm = client.get_trafficmanager(8000)
tm.set_synchronous_mode(True)

# 主循环中每帧调用
world.tick()

重要提示: 脚本退出时必须恢复异步模式,否则仿真器会冻结:

settings = world.get_settings()
settings.synchronous_mode = False
settings.fixed_delta_seconds = None
world.apply_settings(settings)

Coordinate Systems / 坐标系统

CarlaAir 中有两套坐标系统并存,编写脚本时需注意转换:

CARLA AirSim (NED)
X 向前 (East) 向前 (North)
Y 向右 向右 (East)
Z 向上为正 向下为正

关键换算: AirSim NED z = -CARLA z。例如 CARLA 中 30 米高空 = AirSim NED z = -30。

两套 API 的世界原点不同,具体换算关系详见: examples_record_demo/COORDINATE_SYSTEMS.md


Available Maps / 可用地图

CarlaAir 内置 6 张城市地图:

地图 Map 描述 Description
Town01 小镇,T 字路口为主,简单路网
Town02 小镇,住宅区风格
Town03 较大城区,环岛和隧道
Town04 高速公路 + 小镇,8 字形高架桥
Town05 多车道城市,方格路网
Town10HD 高清滨海城市(默认地图),最丰富的场景

启动时指定地图 / Launch with specific map:

./CarlaAir.sh Town03

关于 _Opt 变体: 从 CARLA 官方包中可以获取 Town01_Opt 等优化版地图。_Opt 变体使用分层加载(Level Streaming),减少显存占用,适合低配 GPU。


API Reference / API 参考

CARLA Python API (port 2000)

核心类 / Core classes: - carla.Client — 连接仿真器 - carla.World — 世界管理(天气、Actor、传感器) - carla.Actor — 车辆、行人、传感器等实体 - carla.Transform / carla.Location — 位姿与坐标

官方文档 / Official docs: https://carla.readthedocs.io/en/0.9.16/

AirSim Python API (port 41451)

核心类 / Core classes: - airsim.MultirotorClient — 无人机控制 - airsim.ImageRequest — 图像采集请求

官方文档 / Official docs: https://microsoft.github.io/AirSim/


FAQ / Troubleshooting / 常见问题

仿真器启动相关

问题 Problem 解决方案 Solution
CARLA 连接超时 首次启动需要 2-5 分钟加载资源,请耐心等待。用 ss -tlnp \| grep 2000 检查端口
AirSim 连接失败 AirSim 在 CARLA 之后启动,需额外等待。确认 ~/Documents/AirSim/settings.json 存在
GPU 显存不足 Town10HD 需约 8GB 显存。尝试更小地图(Town01)或添加 -quality-level=Low
帧率低 减少 Actor 数量,降低窗口分辨率,使用较小地图

脚本运行相关

问题 Problem 解决方案 Solution
无人机不响应指令 确保调用了 enableApiControl(True) + armDisarm(True) + takeoffAsync().join()
Walker AI Controller 崩溃 已知限制,不要对 Walker 调用 go_to_location(),仅使用静态 Walker
10+ 车辆 + 无人机崩溃 使用 try_spawn_actor() 并限制 autopilot 车辆 ≤ 8 辆
同步模式下仿真器冻结 脚本退出前必须恢复异步模式(见上方同步模式章节)
simSetCameraPose 崩溃 在 Shipping 构建中此函数会触发 C++ abort,不要调用。用无人机 yaw + 轨道飞行替代
车辆行驶异常/抽搐 使用 hybrid_physics_mode 启用混合物理模式
AirSim 客户端干扰无人机控制 使用 examples_record_demo/record_drone.py 进行无人机录制

坐标与地图相关

问题 Problem 解决方案 Solution
无人机位置和 CARLA 车辆位置对不上 两套 API 的坐标原点和 Z 轴方向不同,详见 COORDINATE_SYSTEMS.md
如何切换地图 启动时指定:./CarlaAir.sh Town03
天气变化是否影响无人机 是的,set_weather() 同时影响地面和空中视角