记录与回放#
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()
组件#
录制工作流程#
定义数据函数: 返回要记录的数据的可调用对象
创建 recorder: 实例化 recorder(FileWriter、Plotter 等)
添加到 scene: 向 scene 注册 recorder
开始录制: 开始数据捕获
运行仿真: 执行仿真步
停止录制: 完成并保存数据
配置#
所有 recorders 共享通用选项:
选项 |
类型 |
描述 |
|---|---|---|
|
float |
录制频率(采样/秒) |
|
bool |
在后台线程中处理数据 |