当前位置: 首页 > news >正文

7.isaac sim4.2 教程-Core API-数据记录

本教程展示了如何使用 DataLogger 记录数据,并在 Omniverse Isaac Sim 中播放这些数据。通过本教程,你将能够在使用 Omniverse Isaac Sim 时记录并回放状态和动作。

1. 记录数据

按照以下步骤使用目标扩展示例记录数据:

  1. 打开示例

    • 打开 Follow Target 示例,路径为 Isaac Examples > Manipulation > Follow Target

  2. 加载世界

    • World Controls 下点击 LOAD,加载 Franka 机器人和可视化目标立方体。

  3. 选择输出目录

    • Follow Target 菜单中,选择数据保存的 json 文件的输出目录,选择 Data Logging

  4. 启动任务

    • Task Controls 下点击 START 启动任务。

  5. 开始记录数据

    • 点击 START LOGGING 开始记录数据。

  6. 移动目标立方体

    • 移动可视化目标立方体,使 Franka 使用 RMPFlowController 跟随它。

  7. 保存数据

    • 几秒钟后,点击 SAVE DATA 保存记录的数据。

  8. 创建新场景

    • 点击 File > New From Stage Template > Empty 创建一个新的空白场景。

  9. 确认数据保存

    • 记录的数据应该已经保存到 Output Directory 文本框中指定的文件中。

这样,您就完成了在 Omniverse Isaac Sim 中通过 DataLogger 记录和保存数据的过程。

1.1 代码概述

打开示例代码

  • 打开位于 ~/.local/share/ov/pkg/isaac-sim-4.2.0/extension_examples/follow_target/follow_target.py 的扩展示例代码。可以使用菜单顶部的 open-source code 按钮来查看该代码。

首先要关注的是 数据记录(logging) 功能。

    def _on_logging_event(self, val):world = self.get_world()data_logger = world.get_data_logger()# 获取世界中默认的 DataLogger 对象# 检查 数据记录器 是否已经启动。如果还没有启动,接下来会定义数据记录的方式并开始记录。if not world.get_data_logger().is_started():robot_name = self._task_params["robot_name"]["value"]target_name = self._task_params["target_name"]["value"]# 数据记录函数,它将在每个物理时间步被调用。该函数获取机器人和目标的状态信息def frame_logging_func(tasks, scene):return {"joint_positions": scene.get_object(robot_name).get_joint_positions().tolist(),"applied_joint_positions": scene.get_object(robot_name).get_applied_action().joint_positions.tolist(),"target_position": scene.get_object(target_name).get_world_pose()[0].tolist(),}# 确保每个物理时间步都会调用这个函数来记录数据。data_logger.add_data_frame_logging_func(frame_logging_func)if val:data_logger.start()else:data_logger.pause()return

现在让我们看一下怎么保存数据集:

    def _on_save_data_event(self, log_path):world = self.get_world()data_logger = world.get_data_logger()data_logger.save(log_path=log_path) # 把收集到的数据保存到指定的 json 文件中。data_logger.reset()return

2. 回放数据

类似地,我们将使用另一个在 Isaac Examples 中提供的扩展示例来回放记录的数据。

  1. 打开 Follow Target 示例,路径为 Isaac Examples > Manipulation > Replay Follow Target

  2. World Controls 下点击 LOAD,加载 Franka 机器人和可视化目标立方体。

  3. 在菜单中的 Data Replay 部分的 Data File 栏中,选择上一步录制数据时保存的 json 文件。

  4. 点击 Replay Trajectory(回放轨迹),仅回放机械臂动作并等待轨迹回放完成。

  5. 点击 Reset 重置场景。

  6. 同样,点击 Replay Scene(回放场景),回放动作和立方体的位置。

2.1 代码概述

    async def _on_replay_trajectory_event_async(self, data_file):# 从指定的 JSON 文件中加载数据记录器。self._data_logger.load(log_path=data_file)world = self.get_world()await world.play_async()# 添加物理回调函数,以便在每个物理时间步调用。# 通过这种方式,我们可以重放之前记录的机械臂运动轨迹world.add_physics_callback("replay_trajectory", self._on_replay_trajectory_step)returnasync def _on_replay_scene_event_async(self, data_file):self._data_logger.load(log_path=data_file)world = self.get_world()await world.play_async()# 场景同理world.add_physics_callback("replay_scene", self._on_replay_scene_step)returndef _on_replay_trajectory_step(self, step_size):# 在每个物理时间步中应用记录的关节位置到机械臂控制器。# 这样机械臂就会按照记录的轨迹进行运动。if self._world.current_time_step_index < self._data_logger.get_num_of_data_frames():data_frame = self._data_logger.get_data_frame(data_frame_index=self._world.current_time_step_index)self._articulation_controller.apply_action(ArticulationAction(joint_positions=data_frame.data["applied_joint_positions"]))returndef _on_replay_scene_step(self, step_size):# 不只有机械臂的关节位置需要被重放,目标的位置也需要被重放。if self._world.current_time_step_index < self._data_logger.get_num_of_data_frames():target_name = self._task_params["target_name"]["value"]data_frame = self._data_logger.get_data_frame(data_frame_index=self._world.current_time_step_index)self._articulation_controller.apply_action(ArticulationAction(joint_positions=data_frame.data["applied_joint_positions"]))self._world.scene.get_object(target_name).set_world_pose(position=np.array(data_frame.data["target_position"]))return
http://www.lryc.cn/news/590599.html

相关文章:

  • 【cobalt strike手册0x06】Sleep Mask
  • JAVA进阶 项目实战:汽车租聘系统
  • 关于squareLineStudio软件使用步骤教程(LVGL软件组件编程)
  • Linux应急Rootkit后门查杀病毒查杀软件
  • 0系统与软件工程-标准体系
  • 1软件工程概念及其基本要素-思考题
  • 基于paddleDetect的半监督目标检测实战
  • 【论文阅读】A Survey on Knowledge-Oriented Retrieval-Augmented Generation(4)
  • 基于C#开发solidworks图库中文件(SLDPRT,SLDASM,SLDDRW等)转换为HTML和PDF,提供批量和实时转换
  • 【论文阅读 | IF 2025 | COMO:用于多模态目标检测的跨 Mamba 交互与偏移引导融合】
  • 【论文阅读 | CVPR 2023 |CDDFuse:基于相关性驱动的双分支特征分解的多模态图像融合】
  • Python+Tkinter制作音频格式转换器
  • 使用token调用Spring OAuth2 Resource Server接口错误 insufficient_scope
  • Scrapy无缝集成Splash:轻量级动态渲染爬虫终极解决方案
  • Oracle 数据库常见等待事件参数详解
  • 16路串口光纤通信FPGA项目实现指南 - 第二部分(上)
  • FPGA基础 -- Verilog 访问寄存器数组的指定位示例
  • 从函数调用到进程通信:Linux下的多语言协作实践
  • 识别装甲板
  • 【Jupyter】个人开发常见命令
  • HugeGraph 【图数据库】JAVA调用SDK
  • ByteToMessageDecoder详解
  • Spring AI快速入门
  • VisualVM监控远程Linux的java进程
  • 【SpringBoot】实战-开发接口-用户-注册
  • matlab的伯德图为何从360度显示?应如何修改解决?
  • 基于大数据的网络文学推荐分析系统的设计与实现【海量书籍、自动爬虫】
  • Redis1:高并发与微服务中的键值存储利器
  • mongodb操作巨鹿
  • DHTMLX Suite 9.2 重磅发布:支持历史记录、类Excel交互、剪贴板、拖放增强等多项升级