| name | carla-air |
| description | CARLA-Air 空地一体仿真技能 - 车辆+无人机联合仿真、ROS2 Humble 桥接 |
| argument-hint | carla air OR 空地仿真 OR carla无人机 OR carla-air OR air-ground |
| user-invocable | true |
CARLA-Air 空地一体仿真 Skill
统一城市驾驶 + 多旋翼飞行,在同一个 Unreal Engine 进程中实现空地具身智能仿真
基于 louiszengCN/CarlaAir
何时使用
当需要以下场景时使用此技能:
- 城市环境车辆+无人机联合仿真
- 空地传感器融合研究(LiDAR + IMU + Camera)
- ROS2 Humble 桥接车辆/无人机传感器话题
- AirSim API 风格的无人机控制
- 无需编译的 CARLA-Air 快速部署
快速开始(4步启动)
前置依赖
启动步骤
cd /path/to/CarlaAir-v0.1.7
./CarlaAir.sh
source /opt/ros/humble/setup.bash
source examples/ros2/ros2_env.sh
python3 examples/ros2/air_ground_ros_demo.py
source /opt/ros/humble/setup.bash
rviz2 -d examples/ros2/rviz/carlaair.rviz
话题列表
车辆话题(/carla/ego_vehicle/)
| 话题 | 类型 |
|---|
/carla/ego_vehicle/rgb/image | sensor_msgs/Image |
/carla/ego_vehicle/depth/image | sensor_msgs/Image |
/carla/ego_vehicle/semantic/image | sensor_msgs/Image |
/carla/ego_vehicle/lidar | sensor_msgs/PointCloud2 |
/carla/ego_vehicle/odom | nav_msgs/Odometry |
/carla/ego_vehicle/rgb/camera_info | sensor_msgs/CameraInfo |
无人机话题(/airsim/drone_1/)
| 话题 | 类型 |
|---|
/airsim/drone_1/fpv/image | sensor_msgs/Image |
/airsim/drone_1/down/image | sensor_msgs/Image |
/airsim/drone_1/imu | sensor_msgs/Imu |
/airsim/drone_1/odom | nav_msgs/Odometry |
TF 树
map
├── ego_vehicle ← CARLA 世界坐标
│ ├── ego_vehicle/rgb
│ ├── ego_vehicle/depth
│ ├── ego_vehicle/semantic
│ └── ego_vehicle/lidar
└── drone_1 ← AirSim 世界坐标(启动时与 CARLA 坐标对齐)
├── drone_1/fpv
└── drone_1/down
ROS2 桥接脚本
carla_vehicle_bridge.py — 车辆传感器桥接
python3 examples/ros2/carla_vehicle_bridge.py
发布话题:
/carla/ego_vehicle/{rgb,depth,semantic}/image
/carla/ego_vehicle/lidar
/carla/ego_vehicle/odom
/tf, /tf_static
airsim_drone_bridge.py — 无人机传感器桥接
python3 examples/ros2/airsim_drone_bridge.py
发布话题:
/airsim/drone_1/{fpv,down}/image
/airsim/drone_1/imu
/airsim/drone_1/odom
/tf, /tf_static
air_ground_ros_demo.py — 空地联合(同时启动两者)
python3 examples/ros2/air_ground_ros_demo.py
AirSim 风格无人机控制
连接无人机
import airsim
client = airsim.MultirotorClient()
client.confirmConnection()
client.enableApiControl(True)
client.armDisarm(True)
client.takeoffAsync().join()
client.moveToPositionAsync(x=10, y=0, z=-10, velocity=5).join()
client.hoverAsync().join()
client.landAsync().join()
相机控制
responses = client.simGetImages([
airsim.ImageRequest("fpv", airsim.ImageType.SCENE, False, True),
airsim.ImageRequest("down", airsim.ImageType.SCENE, False, True)
], vehicle_name="drone_1")
IMU 数据
state = client.getImuData(vehicle_name="drone_1")
RViz2 可视化配置
推荐的 RViz2 配置(固定帧 = map):
/tf → TF 显示
/tf_static → TF 显示(静态)
/airsim/drone_1/odom → Odometry 显示
/carla/ego_vehicle/odom → Odometry 显示
/carla/ego_vehicle/lidar → PointCloud2 显示
常见问题
ModuleNotFoundError: carla
source examples/ros2/ros2_env.sh
RViz 无数据显示
ros2 topic hz /carla/ego_vehicle/rgb/image
Fixed Frame 错误
RViz 中 Fixed Frame 必须设为 map。
AirSim 无人机未找到
先启动 CARLA-Air,等待 AirSim API(端口 41451)就绪后再运行桥接脚本。
与 CARLA 原生 skill 的区别
| 特性 | carla skill | carla-air skill |
|---|
| 仿真引擎 | CARLA 原生 | CARLA + AirSim 统一 |
| 无人机支持 | 有限 | AirSim API 原生 |
| 空地联合 | 需额外集成 | 原生统一坐标 |
| ROS2 桥接 | carla-ros-bridge | 轻量 Python → rclpy |
| 安装方式 | 源码/包 | 预编译可执行文件 |
| 适用场景 | 自动驾驶纯车辆 | 空地具身智能研究 |
相关资源
另见