记录与回放#

Genesis 提供灵活的记录系统用于捕获仿真数据。这支持数据日志记录、可视化、视频生成和仿真结果分析。

概览#

记录系统包括:

  • Recorder: 处理仿真数据的基类

  • RecorderManager: 协调多个 recorders

  • FileWriters: 将数据导出到文件(CSV、NPZ、Video)

  • Plotters: 数据的实时可视化

快速开始#

录制视频#

import genesis as gs

gs.init()
scene = gs.Scene()
scene.add_entity(gs.morphs.Plane())
scene.add_entity(gs.morphs.Box(pos=(0, 0, 1)))
scene.build()

# 开始录制
scene.start_recording()

for i in range(200):
    scene.step()
    scene.visualizer.update()

# 停止并保存
scene.stop_recording(save_to="simulation.mp4")

录制自定义数据#

# 定义要记录的数据
def get_robot_state():
    return {
        "position": robot.get_pos(),
        "velocity": robot.get_vel(),
        "joint_positions": robot.get_qpos(),
    }

# 使用 recorder 选项开始录制
scene.start_recording(
    data_func=get_robot_state,
    rec_options=gs.recorders.NPZFile(
        filepath="robot_data.npz",
        hz=100,  # 录制频率
    ),
)

for i in range(1000):
    scene.step()
scene.stop_recording()

实时绘图#

# 实时绘制 joint 位置
scene.start_recording(
    data_func=lambda: robot.get_qpos(),
    rec_options=gs.recorders.MPLLinePlot(
        title="Joint Positions",
    ),
)

for i in range(1000):
    scene.step()
scene.stop_recording()

组件#

录制工作流程#

  1. 定义数据函数: 返回要记录的数据的可调用对象

  2. 创建 recorder: 实例化 recorder(FileWriter、Plotter 等)

  3. 添加到 scene: 向 scene 注册 recorder

  4. 开始录制: 开始数据捕获

  5. 运行仿真: 执行仿真步

  6. 停止录制: 完成并保存数据

配置#

所有 recorders 共享通用选项:

选项

类型

描述

hz

float

录制频率(采样/秒)

async_mode

bool

在后台线程中处理数据

另请参阅#