CarlaAir FAQ / 常见问题


连接问题 / Connection Issues

Q: CARLA Client 连接超时

A: 首次启动需要 2-5 分钟加载资源(首次可能需要约 10 分钟编译着色器)。

# 检查端口是否就绪
ss -tlnp | grep 2000

Q: AirSim 无法连接(端口 41451)

A: AirSim 服务器在 CARLA 之后启动,需要额外等待。确认 ~/Documents/AirSim/settings.json 存在。

Q: 两个 API 可以同时使用吗?

A: 是的,这正是 CarlaAir 的核心功能。CARLA API (port 2000) 和 AirSim API (port 41451) 同时运行,操控同一个世界。


同步 / 异步模式 / Sync & Async Mode

Q: 什么时候用同步模式,什么时候用异步模式?

A: - 异步模式(默认): 适合交互式操作 — 键盘驾驶车辆、手动操控无人机、实时探索 - 同步模式: 适合数据采集、演示回放、视频录制 — 需要固定时间步和帧帧一致

Q: 如何开启同步模式?

A: 需要同时配置 World 和 Traffic Manager:

settings = world.get_settings()
settings.synchronous_mode = True
settings.fixed_delta_seconds = 1.0 / 30
world.apply_settings(settings)

tm = client.get_trafficmanager(8000)
tm.set_synchronous_mode(True)

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

Q: 同步模式下仿真器冻结了

A: 脚本退出时必须恢复异步模式,否则仿真器会一直等待 world.tick() 而冻结:

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

建议在脚本中使用 try/finally 结构确保退出时始终恢复。


坐标系统 / Coordinate Systems

Q: AirSim 和 CARLA 的坐标系统有什么区别?

A: 两套 API 使用不同的坐标约定:

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

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

Q: 无人机位置和 CARLA 车辆位置对不上

A: 两套 API 的世界原点不同,不能直接用一个 API 的坐标去另一个 API 中定位。详细换算方法请参考 examples_record_demo/COORDINATE_SYSTEMS.md


车辆和行人 / Vehicles & Pedestrians

Q: 车辆行驶异常/抽搐/路径不稳

A: 使用 Traffic Manager 的 hybrid_physics_mode 可以改善远距离车辆的物理模拟稳定性:

tm = client.get_trafficmanager(8000)
tm.set_hybrid_physics_mode(True)
tm.set_hybrid_physics_radius(50.0)  # 50 米内使用完整物理

Q: Walker 使用 go_to_location() 崩溃

A: 已知限制。Walker AI Controller 在 CarlaAir 中会触发 segfault。只使用静态 Walker(不调用 go_to_location())。

Q: 多少车辆才安全?

A: - 纯 CARLA(无无人机):50+ 辆安全 - AirSim 无人机激活时:建议 ≤ 8 辆 autopilot - 使用 try_spawn_actor() 而非 spawn_actor() 避免碰撞点生成失败


无人机 / Drone

Q: 无人机不响应指令

A: 确保调用了正确的初始化序列:

client = airsim.MultirotorClient(port=41451)
client.confirmConnection()
client.enableApiControl(True)
client.armDisarm(True)
client.takeoffAsync().join()

Q: AirSim 客户端连接后干扰了无人机控制

A: 如果你在交互飞行的同时另一个脚本也连接了 AirSim,可能导致控制冲突。录制无人机轨迹时请使用专用脚本 examples_record_demo/record_drone.py,它内部处理了控制权管理。

Q: simSetCameraPose 导致崩溃

A: 在 Shipping 构建中 simSetCameraPose 会触发 C++ abort。不要调用此函数。使用无人机自身的 yaw + 轨道飞行来改变视角。


天气和地图 / Weather & Maps

Q: 如何切换地图?

A: 启动时指定地图名称:

./CarlaAir.sh Town03

可用地图:Town01, Town02, Town03, Town04, Town05, Town10HD。

Q: 天气变化会影响无人机吗?

A: 是的,天气是统一的。CARLA 的 set_weather() 会同时影响地面和空中视角(雨、雾、光照等)。


性能 / Performance

Q: 帧率太低

A: - 使用较小的地图(Town01 比 Town10HD 轻量得多) - 减少生成的 Actor 数量 - 降低窗口分辨率 - 使用 -quality-level=Low 参数

Q: GPU 显存不足

A: Town10HD 需要约 8GB 显存。尝试 Town01/Town02 等小地图,或使用 _Opt 变体地图(分层加载,减少显存占用)。