Isaac Lab 仿真录制与回放:从遥操作到 HDF5、视频导出的全流程
【免费下载链接】IsaacLabUnified framework for robot learning with multi-physics/renderer support项目地址: https://gitcode.com/GitHub_Trending/is/IsaacLab
Isaac Lab(NVIDIA 的机器人学习仿真框架)把"录数据—回放—导出"做成了成套工具:你用键盘或遥操作设备操纵机器人,过程以 HDF5 文件落盘;之后随时回放校验、转成 MP4 分享,或把相机图像和深度直接写进磁盘。这篇文章就按这个顺序把整条链路走一遍。
先定任务和遥操作设备
录和放都是按"任务名"驱动的,所以第一步是确认任务。Isaac Lab 的内置任务在source/isaaclab_tasks里注册,像Isaac-Lift-Cube-v0这种名字就是直接可用的。
操作方式上,录制脚本支持两套遥操作栈:旧的teleop_devices(键盘、空间鼠标等)和新的 IsaacTeleop(支持手部追踪、VR 头显等,走同一套环境配置)。你不传--teleop_device时,脚本会先看环境里有没有配 IsaacTeleop,没有就回退到键盘。想换设备就把这个参数改成对应名称,比如--teleop_device space_mouse。
把演示录下来
入口是scripts/tools/record_demos.py。下面这条命令以交互方式启动抓方块任务,你每操作一帧,脚本就把机器人状态、动作(以及环境里的相机帧,如果任务配了相机)写进 HDF5 文件(一种分层存储格式,适合塞时间序列数据):
./isaaclab.sh -p scripts/tools/record_demos.py --task Isaac-Lift-Cube-v0 \ --num_demos 10--num_demos 10表示录满 10 条就停,设为 0 就是无限录;输出文件默认写到./datasets/dataset.hdf5,想改位置传--dataset_file,仿真步频则用--step_hz调(默认 30 Hz)。
有个细节值得留意:脚本不是"你按停止就算成功"。只有任务的成功条件连续满足--num_success_steps步(默认 10 步),这条演示才会被标记为成功 📼 批量采集时,这个参数决定了多少失败尝试会被混进数据集,建议按任务难度调一下。
把录好的数据放回来
验证录制质量用scripts/tools/replay_demos.py。这条命令把数据集里第 0、1 两条演示加载到仿真里逐帧重放:
./isaaclab.sh -p scripts/tools/replay_demos.py --dataset_file ./datasets/dataset.hdf5 \ --select_episodes 0 1 --validate_states--select_episodes留空就是回放文件里全部演示。--validate_states会把回放出来的状态和录制时的状态逐帧比对,对不上会打印差异日志,专治"放出来怎么不一样"这类问题;再加一个--validate_success_rate,则用任务自身的成功判据给回放结果打分,能直接看出录制链路的保真度。
把 HDF5 变成 MP4
HDF5 里数据全,但发给别人不方便。scripts/tools/hdf5_to_mp4.py负责把文件里的相机帧抽出来编成 MP4,RGB、分割图、法线图都能转:
python scripts/tools/hdf5_to_mp4.py --input_file ./datasets/dataset.hdf5 \ --output_dir ./videos --demo_id 3默认导出table_cam、wrist_cam等常用键,用--input_keys挑你要的流;--demo_id只转某一条演示,输出分辨率和帧率用--video_height、--video_width、--framerate控制。
反方向也有对应工具:scripts/tools/mp4_to_hdf5.py接收一个"视觉增强版"的 MP4 目录(比如换了光照、色调的渲染结果),把这些帧替换进原 HDF5,动作和机器人状态保持不动。数据增强做 sim-to-real 时用得上,传--input_file、--videos_dir、--output_file三个参数即可。
让训练和播放也留个视频
平时跑训练或 play 时,命令末尾加--video,再配--video_length(每条视频多少步)和--video_interval(每隔多少步录一条),视频会存到该次运行输出目录下的videos文件夹里。各 RL 后端(rsl_rl、rl_games、sb3、skrl 等)都支持这三个参数,训练脚本scripts/reinforcement_learning/train.py和play.py直接透传。
要提醒一句:相机渲染是仿真里最吃性能的部分之一,开着录视频帧率会明显掉,只在需要留证或看训练进展时打开。
让相机输出落盘
要保存的不只是视频,还有持续的相机数据流(图像加深度),看scripts/tutorials/04_sensors/run_usd_camera.py:
./isaaclab.sh -p scripts/tutorials/04_sensors/run_usd_camera.py --save --enable_cameras它底层用 Omniverse Replicator 的 writer,把相机每帧产出的数据按约定格式写到磁盘,深度图还能重投影成 3D 点云,做感知训练的数据源就齐了。如果只是想把视口画面整体录成一段视频,scripts/tutorials/07_visualizers/run_video_recording.py更直接。
数据攒起来之后,下一步通常就是把它喂给学习流程:仓库里的isaaclab_mimic模块就是拿 HDF5 演示训练模仿学习策略的,你可以直接拿上面录出的文件接进去跑;也可以在自己的管线里继续用"录制—回放校验—导出"这套循环扩量。任务名一换,这条链路在任何新场景里都能原样复用。
【免费下载链接】IsaacLabUnified framework for robot learning with multi-physics/renderer support项目地址: https://gitcode.com/GitHub_Trending/is/IsaacLab
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考