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() 同时影响地面和空中视角 |