Unreal Engine
- 官方网站:https://www.unrealengine.com/
- AirSim项目:https://github.com/microsoft/AirSim
- 物理引擎:PhysX (内置)
- 许可:免费使用(收入超过一定阈值后收取版税)
引言
Unreal Engine是Epic Games开发的大型游戏引擎,凭借其出色的视觉渲染能力,近年来被越来越多地应用于机器人仿真领域。游戏引擎级别的渲染质量使得Unreal Engine在需要逼真视觉效果的仿真场景中具有独特优势,特别是自动驾驶 (Autonomous Driving)、无人机 (UAV) 仿真以及基于视觉的机器人学习等方向。
Unreal Engine 在机器人仿真中的价值
传统机器人仿真器(如Gazebo、CoppeliaSim)虽然在物理仿真方面表现优秀,但其渲染质量与真实世界存在明显差距 (Sim-to-Real Gap)。Unreal Engine的高保真渲染 (High-Fidelity Rendering) 能够生成接近照片级别的图像,这对于以下应用至关重要:
- 训练基于视觉的深度学习模型,减少仿真到真实的迁移差距
- 生成合成数据集 (Synthetic Dataset) 用于目标检测和语义分割
- 测试自动驾驶系统的感知模块在复杂光照和天气条件下的表现
AirSim
AirSim (Aerial Informatics and Robotics Simulation) 是微软 (Microsoft) 基于Unreal Engine开发的开源机器人仿真平台,是Unreal Engine在机器人领域最具代表性的应用。AirSim支持无人机和自动驾驶车辆的仿真,主要特性包括:
- 无人机仿真:支持多旋翼无人机的飞行动力学仿真,内置PX4和ArduPilot飞控固件接口
- 车辆仿真:提供汽车动力学模型,支持自动驾驶算法的测试
- 传感器仿真:模拟RGB相机、深度相机、激光雷达 (LiDAR)、IMU、GPS、气压计 (Barometer) 等传感器
- 天气系统:支持动态天气变化,包括雨、雾、雪、风等
- Python API / C++ API:提供编程接口用于控制仿真中的车辆和无人机
AirSim虽已被微软标记为存档项目 (Archived),但其技术思路和架构对后续的Unreal Engine机器人仿真项目产生了深远影响。
高保真渲染能力
Unreal Engine的渲染管线 (Rendering Pipeline) 为机器人仿真提供了以下关键能力:
- 全局光照 (Global Illumination):Lumen系统提供实时动态全局光照,准确模拟光线在场景中的传播和反射
- 材质系统 (Material System):基于物理的渲染 (PBR, Physically Based Rendering) 材质,真实还原金属、玻璃、水面等表面特性
- 粒子效果 (Particle Effects):Niagara粒子系统可以模拟灰尘、烟雾、雨雪等环境效果
- 动态天空和光照:支持昼夜变化 (Day-Night Cycle)、动态云层和大气散射效果
传感器仿真
在Unreal Engine环境中可以实现多种传感器的高保真仿真:
- 相机 (Camera):利用引擎的渲染能力生成极其逼真的RGB图像,支持运动模糊 (Motion Blur)、景深 (Depth of Field)、镜头畸变 (Lens Distortion) 等真实相机效果
- 深度传感器 (Depth Sensor):通过渲染管线获取精确的逐像素深度数据
- 激光雷达 (LiDAR):使用光线投射 (Ray Casting) 模拟激光雷达的扫描过程
- 语义分割 (Semantic Segmentation):引擎可以为场景中的每个物体生成语义标签图
Blueprint 可视化脚本
Unreal Engine提供Blueprint可视化脚本系统 (Visual Scripting System),允许用户通过图形化节点编程实现逻辑控制,无需编写C++代码。在机器人仿真中,Blueprint可以用于:
- 定义仿真场景中物体的交互逻辑
- 配置传感器参数和数据输出
- 创建动态事件(如随机出现的行人、变化的交通信号灯)
- 控制仿真流程和数据记录
对于需要更高性能或更复杂逻辑的场景,用户可以使用C++ API直接与引擎底层交互。
自动驾驶仿真应用
Unreal Engine在自动驾驶仿真领域应用广泛,除AirSim外还有多个相关项目:
- CARLA:基于Unreal Engine构建的开源自动驾驶仿真器,由巴塞罗那计算机视觉中心 (CVC) 开发,支持丰富的城市场景和交通模拟
- 提供交通流仿真 (Traffic Simulation)、行人模拟 (Pedestrian Simulation) 和多种天气条件
- 支持传感器套件的灵活配置,生成用于感知算法训练的多模态数据
优势与局限
优势:
- 渲染质量业界领先,适合视觉相关的仿真任务
- 丰富的资产商城 (Asset Marketplace) 提供现成的三维模型和场景
- 社区庞大,开发资源丰富
- 跨平台支持
局限:
- 学习曲线陡峭,需要掌握Unreal Engine开发技能
- 物理仿真精度不如专业机器人仿真器
- 对硬件要求较高,需要较强的GPU支持
- 与ROS的集成不如Gazebo、Webots等原生支持
AirSim / Cosys-AirSim
AirSim(Aerial Informatics and Robotics Simulation)是微软研究院基于 Unreal Engine 开发的开源机器人仿真平台,专为无人机(UAV)和自动驾驶车辆设计。2023年微软停止官方维护后,社区版 Cosys-AirSim 继续活跃开发。
特点
- 物理真实感:基于 Unreal Engine 的 Chaos Physics,提供精确的飞行动力学仿真
- 传感器仿真:RGB/深度/语义分割相机、激光雷达、IMU、气压计、GPS
- 多环境支持:城市、森林、冬季等多套场景包(Environments)
- ROS 2 集成:通过 AirSim ROS2 Wrapper 桥接
Python API
import airsim
import numpy as np
# 连接到 AirSim 仿真器
client = airsim.MultirotorClient()
client.confirmConnection()
client.enableApiControl(True)
client.armDisarm(True)
# 起飞
client.takeoffAsync().join()
# 移动到指定位置(北-东-下坐标系,单位米)
client.moveToPositionAsync(10, 0, -5, velocity=5).join()
# 获取多模态传感器数据
responses = client.simGetImages([
airsim.ImageRequest("front_center", airsim.ImageType.Scene), # RGB
airsim.ImageRequest("front_center", airsim.ImageType.DepthPlanar), # 深度图
airsim.ImageRequest("front_center", airsim.ImageType.Segmentation),# 语义分割
])
# 获取激光雷达点云
lidar_data = client.getLidarData(lidar_name="LidarSensor1")
points = np.array(lidar_data.point_cloud, dtype=np.float32).reshape(-1, 3)
# 获取 IMU 数据
imu_data = client.getImuData()
print(f"角速度: {imu_data.angular_velocity}")
print(f"线加速度: {imu_data.linear_acceleration}")
# 降落并断开连接
client.landAsync().join()
client.armDisarm(False)
client.enableApiControl(False)
与 ROS 2 集成
# 安装 AirSim ROS 2 Wrapper
cd ~/ros2_ws/src
git clone https://github.com/microsoft/AirSim-ROS2-Wrapper.git
cd .. && colcon build
# 启动桥接节点
ros2 launch airsim_ros_pkgs airsim_node.launch.py
主要发布的话题:
| 话题 | 消息类型 | 内容 |
|---|---|---|
/airsim_node/drone_1/imu/imu |
sensor_msgs/Imu |
IMU 数据 |
/airsim_node/drone_1/front_center/Scene |
sensor_msgs/Image |
RGB 图像 |
/airsim_node/drone_1/lidar/LidarSensor1 |
sensor_msgs/PointCloud2 |
点云 |
/airsim_node/drone_1/odom_local_ned |
nav_msgs/Odometry |
里程计 |
rclUE:ROS 2 原生集成插件
rclUE 是专为 Unreal Engine 设计的 ROS 2 原生客户端库插件(C++),无需外部桥接即可在 UE 蓝图和 C++ 中直接使用 ROS 2 API:
// UE C++ 中直接发布 ROS 2 话题
#include "ROS2Publisher.h"
#include "Msgs/ROS2TwistMsg.h"
// 在 Actor 中创建发布者
UROS2Publisher* Publisher;
void AMyRobot::BeginPlay()
{
Publisher = NewObject<UROS2Publisher>(this);
Publisher->SetMessageType(UROS2TwistMsg::StaticClass());
Publisher->SetTopicName(TEXT("/cmd_vel"));
Publisher->Init();
}
// 发布速度命令
void AMyRobot::PublishVelocity(float LinearX, float AngularZ)
{
UROS2TwistMsg* Msg = NewObject<UROS2TwistMsg>();
Msg->SetLinearX(LinearX);
Msg->SetAngularZ(AngularZ);
Publisher->Publish(Msg);
}
高保真传感器仿真
Unreal Engine 的光线追踪(Ray Tracing)能力使其在高保真传感器仿真方面具有独特优势:
激光雷达仿真
UE 可通过光线投射(Raycast)精确模拟固态激光雷达和机械旋转激光雷达的测量原理:
- 多回波(Multiple Returns):模拟激光束穿透玻璃或植被时的多次返回
- 强度仿真(Intensity Simulation):根据材质反射率计算回波强度
- 大气效应:模拟雨、雾对激光的散射效应
相机仿真
- 镜头畸变:精确的径向和切向畸变模型
- 运动模糊:物理正确的快门速度和运动模糊效果
- HDR 与曝光:自动曝光和 HDR 渲染,接近真实相机响应曲线
- 噪声模型:Gaussian 噪声、热噪声和泊松噪声仿真
NVIDIA Omniverse 与 Isaac Sim 的对比
| 特性 | Unreal Engine + AirSim | NVIDIA Isaac Sim |
|---|---|---|
| 渲染质量 | 极高(Lumen + Nanite) | 高(RTX 光线追踪) |
| 物理引擎 | Chaos Physics | PhysX 5 |
| ROS 2 支持 | 通过 rclUE / AirSim | 原生支持 |
| GPU 并行仿真 | 有限 | 支持(Warp) |
| 主要应用 | 无人机、自动驾驶 | 工业机器人、操作任务 |
| 许可证 | 商业授权(含免费版) | 商业授权(含免费版) |
| 学习曲线 | 较陡(需 UE 知识) | 中等 |
参考资料
- Unreal Engine官方文档
- AirSim GitHub仓库
- CARLA仿真器
- Shah, S., Dey, D., Lovett, C., & Kapoor, A. (2018). AirSim: High-fidelity visual and physical simulation for autonomous vehicles. Field and Service Robotics.
- Dosovitskiy, A., Ros, G., Codevilla, F., Lopez, A., & Koltun, V. (2017). CARLA: An open urban driving simulator. Conference on Robot Learning.
- Cosys-AirSim GitHub
- rclUE GitHub
- Shah, S., et al. (2018). AirSim: High-Fidelity Visual and Physical Simulation for Autonomous Vehicles. FSR.