📷 相机传感器#

Genesis 提供三种相机传感器后端,用于在仿真中渲染 RGB 图像。

相机传感器类型#

传感器

后端

多环境

最适用于

RasterizerCameraSensor

OpenGL

顺序

快速实时渲染

RaytracerCameraSensor

LuisaRender

仅单环境

照片级真实感图像

BatchRendererCameraSensor

Madrona GPU

并行

高吞吐量 RL 训练

基本用法#

import genesis as gs

gs.init(backend=gs.gpu)
scene = gs.Scene()
scene.add_entity(morph=gs.morphs.Plane())

# 添加相机传感器
camera = scene.add_sensor(
    gs.sensors.RasterizerCameraOptions(
        res=(512, 512),
        pos=(3.0, 0.0, 2.0),
        lookat=(0.0, 0.0, 0.5),
        fov=60.0,
    )
)

scene.build(n_envs=1)
scene.step()

# 读取渲染图像
data = camera.read()
print(data.rgb.shape)  # 单环境为 (512, 512, 3)

相机选项#

通用参数(所有后端)#

gs.sensors.RasterizerCameraOptions(
    res=(512, 512),              # (宽,高)
    pos=(3.0, 0.0, 2.0),         # 位置(世界或局部,如果连接)
    lookat=(0.0, 0.0, 0.0),      # 观察点
    up=(0.0, 0.0, 1.0),          # 上向量
    fov=60.0,                    # 垂直视场角度
    entity_idx=-1,               # 连接到的实体(-1 = 静态)
    link_idx_local=0,            # 用于连接的连杆索引
)

光线追踪器特定参数#

gs.sensors.RaytracerCameraOptions(
    model="pinhole",             # "pinhole" 或 "thinlens"
    spp=256,                     # 每像素采样数
    denoise=False,               # 应用降噪
    aperture=2.8,                # 景深(thinlens)
    focus_dist=3.0,              # 焦距(thinlens)
)

批量渲染器特定参数#

gs.sensors.BatchRendererCameraOptions(
    near=0.01,                   # 近裁剪平面
    far=100.0,                   # 远裁剪平面
    use_rasterizer=True,         # GPU 光栅化器模式
)

注意: 所有 BatchRenderer 相机必须具有相同的分辨率。

将相机连接到实体#

将相机安装在机器人的末端执行器上:

robot = scene.add_entity(morph=gs.morphs.URDF(file="robot.urdf"))

camera = scene.add_sensor(
    gs.sensors.BatchRendererCameraOptions(
        res=(640, 480),
        pos=(0.1, 0.0, 0.05),    # 相对于连杆坐标系的偏移
        lookat=(0.2, 0.0, 0.0),  # 观察方向
        entity_idx=robot.idx,    # 连接到机器人
        link_idx_local=8,        # 末端执行器连杆
    )
)

相机会自动跟随实体的运动。

多环境渲染#

scene.build(n_envs=4)

# 为每个环境设置不同的状态
sphere.set_pos([[0, 0, 1], [0.2, 0, 1], [0.4, 0, 1], [0.6, 0, 1]])
scene.step()

# 读取所有环境
data = camera.read()
print(data.rgb.shape)  # (4, H, W, 3)

# 读取特定环境
data = camera.read(envs_idx=[0, 2])
print(data.rgb.shape)  # (2, H, W, 3)

选择后端#

  • Rasterizer:默认选择,快速,适用于所有平台

  • Raytracer:需要照片级真实感时使用(需要 renderer=gs.renderers.RayTracer()

  • BatchRenderer:用于多环境 RL 训练(仅 CUDA)

# 对于光线追踪器,配置场景渲染器
scene = gs.Scene(renderer=gs.renderers.RayTracer())

# 对于批量渲染器
scene = gs.Scene(renderer=gs.renderers.BatchRenderer())